王文杰 8 months ago
parent 5faa1a9812
commit 88c5d558de

@ -97,17 +97,10 @@
},
/* */
"mp-weixin" : {
<<<<<<< HEAD
"appid" : "wx630bc4f43990c80c",
"setting" : {
"minified" : true,
"urlCheck" : true,
=======
"appid" : "wxf82bcc798891a29d",
"setting" : {
"minified" : true,
"urlCheck" : false,
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
"es6" : true,
"postcss" : true
},
@ -119,13 +112,7 @@
"desc" : "你的位置信息将用于小程序位置接口的效果展示"
}
},
<<<<<<< HEAD
"requiredPrivateInfos" : [ "getLocation" ],
=======
"requiredPrivateInfos": [
"getLocation"
],
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
"uniStatistics" : {
"enable" : true
}

@ -12,30 +12,31 @@
}
},
"pages": [
//pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/login/login",
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "登录"
"navigationStyle": "custom",
"navigationBarTextStyle": "white",
"navigationBarTitleText": "首页"
}
},
//pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"path": "pages/serviceSite/serviceSite",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle": "custom"
"navigationBarTitleText": "服务站列表"
}
},
{
"path": "pages/orerdList/orerdList",
"path": "pages/siteDetail/siteDetail",
"style": {
"navigationBarTitleText": "订单列表"
"navigationBarTitleText": "服务站详情"
}
},
{
"path": "pages/orderDetail/orderDetail",
"path": "pages/booking/booking",
"style": {
"navigationBarTitleText": "订单详情"
"navigationBarTitleText": "一键预约"
}
},
{
@ -45,16 +46,21 @@
}
},
{
"path": "pages/newsList/newsList",
"path": "pages/orerdList/orerdList",
"style": {
"navigationBarTitleText": "消息列表",
"navigationStyle": "custom"
"navigationBarTitleText": "订单列表"
}
},
{
"path": "pages/orderAuto/orderAuto",
"path": "pages/cart/cart",
"style": {
"navigationBarTitleText": "自动接单"
"navigationBarTitleText": "购物车"
}
},
{
"path": "pages/cart/cart2",
"style": {
"navigationBarTitleText": "购物车"
}
},
{
@ -65,12 +71,12 @@
"navigationBarTitleText": "我的"
}
},
// {
// "path": "pages/login/login",
// "style": {
// "navigationBarTitleText": "登录"
// }
// },
{
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/login/protocal",
"style": {
@ -91,21 +97,39 @@
}
],
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#3775F6",
"backgroundColor": "#3775F6"
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
// TabBar
"tabBar": {
"color": "#999A9F",
"selectedColor": "#3775F6",
"color": "#333",
"selectedColor": "#27ba9b",
"backgroundColor": "#fff",
"borderStyle": "white",
"list": [
{
"text": "订单",
"text": "首页",
"pagePath": "pages/index/index",
"iconPath": "static/tabs/home_default.png",
"selectedIconPath": "static/tabs/home_selected.png"
},
{
"text": "服务站",
"pagePath": "pages/serviceSite/serviceSite",
"iconPath": "static/tabs/category_default.png",
"selectedIconPath": "static/tabs/category_selected.png"
},
{
"text": "一键预约",
"pagePath": "pages/booking/booking",
"iconPath": "static/tabs/cart_default.png",
"selectedIconPath": "static/tabs/cart_selected.png"
},
{
"text": "订单",
"pagePath": "pages/orerdList/orerdList",
"iconPath": "static/tabs/cart_default.png",
"selectedIconPath": "static/tabs/cart_selected.png"
},
@ -119,31 +143,6 @@
},
//
"subPackages": [
{
//
"root": "payment",
//
"pages": [
{
"path": "detail/detail",
"style": {
"navigationBarTitleText": "结算详情"
}
},
{
"path": "success/success",
"style": {
"navigationBarTitleText": "结算成功"
}
},
{
"path": "fail/fail",
"style": {
"navigationBarTitleText": "结算失败"
}
}
]
},
{
//
"root": "pagesMember",
@ -189,7 +188,8 @@
{
"path": "detail/detail",
"style": {
"navigationBarTitleText": "订单详情"
"navigationBarTitleText": "订单详情",
"navigationStyle": "custom"
}
},
{

@ -0,0 +1,36 @@
<script setup lang="ts">
import type { CategoryItem } from '@/types/home'
// props
defineProps<{
list: CategoryItem[]
}>()
</script>
<template>
<view class="category">
<view class="module-title"> 预约上门回收 </view>
<view class="cont">
<navigator
class="category-item"
hover-class="none"
url="/pages/index/index"
v-for="item in list"
:key="item.id"
>
<view class="left">
<view class="title">{{ item.name }}</view>
<view class="desc">{{ item.desc }}</view>
</view>
<view class="right">
<image class="icon" :src="item.icon"></image>
</view>
</navigator>
</view>
</view>
</template>
<style lang="scss">
@import '../styles/category.scss';
</style>

@ -1,412 +0,0 @@
<script setup lang="ts">
import { OrderState } from '@/services/constants'
import { orderStateList } from '@/services/constants'
import { putMemberOrderReceiptByIdAPI } from '@/services/order'
import { deleteMemberOrderAPI } from '@/services/order'
import { getListOrderAPI } from '@/services/order'
import { getPayMockAPI, getPayWxPayMiniPayAPI } from '@/services/pay'
import type { OrderItem } from '@/types/order'
import type { OrderListParams } from '@/types/order'
import { onMounted, ref, reactive, watch } from 'vue'
import { useMemberStore } from '@/stores'
import { formatDate } from '@/utils/index'
//
const { safeAreaInsets } = uni.getSystemInfoSync()
// porps
const props = defineProps<{
statusId: String
}>()
const memberStore = useMemberStore()
const userInfo = memberStore.profile?.userInfo
//
const queryParams: Required<OrderListParams> = {
currentPage: 1,
pageSize: 10,
staffId: userInfo.id,
orderStafstatusId: props.statusId,
}
interface order {
id: string
timeupSecond: number
unAccept: boolean
locationNum: string
loction: string
people: string
state: string
time: string
}
let orderList: any[] = reactive([])
//
const isLoading = ref(false)
const getMemberOrderData = async () => {
// 退
if (isLoading.value) return
// 退
if (isFinish.value === true) {
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
}
//
isLoading.value = true
//
const res = await getListOrderAPI(queryParams)
//
isLoading.value = false
res.data.list.forEach(e => {
e.time = e.appointmentTimeStart + ' - ' + e.appointmentTimeEnd?.substring(11)
})
//
orderList.push(...res.data.list)
//
if (queryParams.currentPage < res.data.pages) {
//
queryParams.currentPage++
} else {
//
isFinish.value = true
}
}
onMounted(() => {
getSettingInfo()
// getMemberOrderData()
})
const handleTimeup = async (item: Object) => {
console.log(item, orderList)
// const order = orderList.value.find((v) => v.id === item.id)
// order!.unAccept = true
// console.log(orderList)
// await updateOrderAPI({ ids: [id] })
}
const onOrderPay = (item: Object) => {
uni.navigateTo({ url: '/payment/detail/detail' })
}
//
const onOrderConfirm = (item: Object) => {
emit('orderAccept', item)
}
//
const isFinish = ref(false)
//
const isTriggered = ref(false)
//
const onRefresherrefresh = async () => {
//
isTriggered.value = true
//
queryParams.currentPage = 1
orderList.value = []
isFinish.value = false
//
await getMemberOrderData()
//
isTriggered.value = false
}
const emit = defineEmits('orderAccept')
// -
const getSettingInfo = () => {
uni.getSetting({
success(res) {
if (res.authSetting['scope.userLocation']) {
getLocationInfo()
} else {
getAuthorizeInfo()
}
},
})
}
// -
const getLocationInfo = () => {
uni.getLocation({
type: 'gcj02',
// isHighAccuracy: true,
// highAccuracyExpireTime: 5000,
success(res) {
console.log(res)
const longitude = res.longitude
const latitude = res.latitude
getMemberOrderData()
},
fail(err) {
uni.showModal({
content: '检测到您没打开获取定位功能权限,是否去设置打开?',
confirmText: '确认',
cancelText: '取消',
success: function (res) {
if (res.confirm) {
uni.openSetting({
success() {
getLocationInfo()
},
})
}
}
})
},
})
}
const getAuthorizeInfo = () => {
uni.authorize({
scope: 'scope.userLocation',
success(res) {
getLocationInfo()
},
fail(err) {
uni.showModal({
content: '检测到您没打开获取定位功能权限,是否去设置打开?',
confirmText: '确认',
cancelText: '取消',
success: function (res) {
if (res.confirm) {
uni.openSetting({
success() {
getLocationInfo()
},
})
} else {
getAuthorizeInfo()
}
}
})
},
})
}
</script>
<template>
<scroll-view
enable-back-to-top
scroll-y
class="orders"
refresher-enabled
:refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh"
@scrolltolower="getMemberOrderData"
>
<view class="card" v-for="item in orderList" :key="item.id">
<!-- 订单信息 -->
<view class="hd">
<text class="locationNum">距离{{ item.locationNum }}</text>
</view>
<!-- 商品信息点击商品跳转到订单详情不是商品详情 -->
<navigator
class="order"
:url="`/pages/orderDetail/orderDetail?id=${item.id}&state=${item.state}`"
hover-class="none"
>
<view class="meta">
<view class="loction">
<image class="img" src="/static/images/loction_home.png" mode="aspectFit" />
<view class="text ellipsis">{{ item.recycleAddress }}</view>
</view>
<view class="time ellipsis">
<image class="img" src="/static/images/time_home.png" mode="aspectFit" />
<view class="text">上门时间起止{{ item.time }}</view>
</view>
<view class="people ellipsis">
<image class="img" src="/static/images/iphone_home.png" mode="aspectFit" />
<view class="text">{{ item.clientName }} <text class="iphone">{{ item.clientMobile }}</text></view>
</view>
</view>
</navigator>
<!-- 订单操作按钮 -->
<view class="action" v-if="props.statusId == '520192817293693253'">
<view class="left">
<text class="label">剩余接单时间</text>
<uni-countdown
:show-day="false"
:minute="30"
:second="0"
color="#E30000"
@timeup="handleTimeup(item)"
/>
</view>
<view :class="[item.unAccept ? 'disabled' : '', 'button']" @tap="onOrderConfirm(item)"
>接单</view
>
</view>
<view class="action" v-else>
<view class="left">
<text class="label">剩余接单时间</text>
<uni-countdown
:show-day="false"
:minute="30"
:second="0"
color="#E30000"
@timeup="handleTimeup(item)"
/>
</view>
<view :class="[item.unAccept ? 'disabled' : '', 'button']" @tap="onOrderPay(item)"
>结算</view
>
</view>
</view>
<view class="loading-text" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }">
{{ isFinish ? '没有更多数据~' : '正在加载...' }}
</view>
</scroll-view>
</template>
<style lang="scss">
//
.orders {
position: relative;
.card {
min-height: 100rpx;
padding: 20rpx;
margin: 20rpx 20rpx 0;
border-radius: 10rpx;
background-color: #fff;
&:last-child {
padding-bottom: 40rpx;
}
}
.hd {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
color: #999;
.locationNum {
color: #3d3d3d;
font-size: 32rpx;
font-weight: 500;
flex: 1;
}
}
.order {
display: flex;
margin-bottom: 20rpx;
border-top: 2rpx solid #f2f2f2;
border-bottom: 2rpx solid #f2f2f2;
margin: 20rpx 0;
.meta {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
.loction {
margin-top: 20rpx;
display: flex;
align-items: center;
.img {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
}
.text {
font-size: 32rpx;
color: #3d3d3d;
}
}
.time {
display: flex;
align-items: center;
margin: 20rpx 0;
.img {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
}
.text {
font-size: 32rpx;
color: #3d3d3d;
}
}
.people {
display: flex;
align-items: center;
margin-bottom: 20rpx;
.img {
width: 36rpx;
height: 36rpx;
margin-right: 26rpx;
}
.text {
font-size: 32rpx;
color: #3d3d3d;
.iphone {
color: #3775f6;
margin-left: 10rpx;
}
}
}
}
}
.action {
display: flex;
justify-content: space-between;
align-items: center;
.left {
display: flex;
.label {
align-items: center;
color: #3d3d3d;
font-size: 32rpx;
}
}
.button {
width: 180rpx;
height: 60rpx;
display: flex;
justify-content: center;
align-items: center;
margin-left: 20rpx;
border-radius: 60rpx;
border: 1rpx solid #ccc;
font-size: 26rpx;
background: linear-gradient(171deg, #51b6ff -5%, #3775f6 129%);
color: #fff;
&.disabled {
border: none;
background: none;
background-color: #f1f1f1;
color: #c3b4b4;
}
}
}
.loading-text {
text-align: center;
font-size: 28rpx;
color: #666;
padding: 20rpx 0;
}
}
</style>

@ -0,0 +1,44 @@
<script setup lang="ts">
// const handlePhone = () => {
// uni.makePhoneCall({
// phoneNumber: '400-123-000', //
// })
// }
const handleToto = () => {
uni.navigateTo({ url: '/pages/siteDetail/siteDetail' })
}
</script>
<template>
<view class="neighborhood-site" @tap="handleToto">
<view class="module-title">附近回收站</view>
<view class="module-cont">
<image
class="left"
src="https://img.36krcdn.com/20200410/v2_41365a0f26a244fdab8e3f5be081ed2b_img_000"
/>
<view class="md">
<view class="name"> <span class="zuijin"> 最近 </span>上海市松江区佘山镇 </view>
<view class="time">营业时间09-18:00</view>
<view class="loction">上海市松江区新松江路92弄开元地中海园区</view>
</view>
<view class="right">
<view class="num">1.03km</view>
<image
class="img"
src="https://img.36krcdn.com/20200410/v2_41365a0f26a244fdab8e3f5be081ed2b_img_000"
/>
</view>
</view>
<view class="md-tag"
><span class="tag-before">回收品类</span>旧衣·纸品·金属·家电·塑料·玻璃</view
>
<view class="foot-desc">
<view class="item">特色服务上门服务家电维修</view>
<view class="item">优惠活动预约回收立享双倍积分</view>
</view>
</view>
</template>
<style lang="scss" scoped>
@import '../styles/neighborhoodSite.scss';
</style>

@ -0,0 +1,376 @@
<template name="skeleton">
<view class="sk-container">
<view class="viewport viewport">
<view is="pages/index/components/CustomNavbar">
<view
class="navbar CustomNavbar--navbar data-v-ff0d84a2 CustomNavbar--data-v-ff0d84a2"
style="padding-top: 30px"
>
<view class="logo CustomNavbar--logo data-v-ff0d84a2 CustomNavbar--data-v-ff0d84a2">
<image
class="logo-image CustomNavbar--logo-image data-v-ff0d84a2 CustomNavbar--data-v-ff0d84a2 sk-image"
></image>
</view>
<view class="search CustomNavbar--search data-v-ff0d84a2 CustomNavbar--data-v-ff0d84a2">
<text
class="icon-search CustomNavbar--icon-search data-v-ff0d84a2 CustomNavbar--data-v-ff0d84a2 sk-transparent sk-text-14-2857-875 sk-text sk-pseudo sk-pseudo-circle"
>搜索商品</text
>
<text
class="icon-scan CustomNavbar--icon-scan data-v-ff0d84a2 CustomNavbar--data-v-ff0d84a2 sk-pseudo sk-pseudo-circle"
></text>
</view>
</view>
</view>
<scroll-view
enable-back-to-top="true"
refresher-enabled="true"
scroll-y="true"
class="scroll-view scroll-view"
>
<view is="components/XtxSwiper">
<view class="carousel XtxSwiper--carousel">
<swiper circular="true" interval="3000" current="0" autoplay="false">
<swiper-item
style="
position: absolute;
width: 100%;
height: 100%;
transform: translate(0%, 0px) translateZ(0px);
"
>
<navigator class="navigator XtxSwiper--navigator" hover-class="none">
<image class="image XtxSwiper--image sk-image" mode="aspectFill"></image>
</navigator>
</swiper-item>
</swiper>
<view class="indicator XtxSwiper--indicator">
<text class="dot XtxSwiper--dot active XtxSwiper--active"></text>
<text class="dot XtxSwiper--dot"></text>
<text class="dot XtxSwiper--dot"></text>
<text class="dot XtxSwiper--dot"></text>
<text class="dot XtxSwiper--dot"></text>
</view>
</view>
</view>
<view is="pages/index/components/CategoryPanel">
<view class="category CategoryPanel--category">
<view
class="module-title CategoryPanel--module-title sk-transparent sk-text-14-2857-989 sk-text"
>
预约上门回收
</view>
<view class="cont CategoryPanel--cont">
<navigator class="category-item CategoryPanel--category-item" hover-class="none">
<view class="left CategoryPanel--left">
<view
class="title CategoryPanel--title sk-transparent sk-text-14-2857-831 sk-text"
>旧衣服</view
>
<view class="desc CategoryPanel--desc sk-transparent sk-text-14-2857-227 sk-text"
>旧衣服回收不浪费</view
>
</view>
<view class="right CategoryPanel--right">
<image class="icon CategoryPanel--icon sk-image"></image>
</view>
</navigator>
<navigator class="category-item CategoryPanel--category-item" hover-class="none">
<view class="left CategoryPanel--left">
<view
class="title CategoryPanel--title sk-transparent sk-text-14-2857-147 sk-text"
>家用电器</view
>
<view class="desc CategoryPanel--desc sk-transparent sk-text-14-2857-444 sk-text"
>旧衣服回收不浪费</view
>
</view>
<view class="right CategoryPanel--right">
<image class="icon CategoryPanel--icon sk-image"></image>
</view>
</navigator>
<navigator class="category-item CategoryPanel--category-item" hover-class="none">
<view class="left CategoryPanel--left">
<view
class="title CategoryPanel--title sk-transparent sk-text-14-2857-139 sk-text"
>废纸废书</view
>
<view class="desc CategoryPanel--desc sk-transparent sk-text-14-2857-520 sk-text"
>旧衣服回收不浪费</view
>
</view>
<view class="right CategoryPanel--right">
<image class="icon CategoryPanel--icon sk-image"></image>
</view>
</navigator>
<navigator class="category-item CategoryPanel--category-item" hover-class="none">
<view class="left CategoryPanel--left">
<view
class="title CategoryPanel--title sk-transparent sk-text-14-2857-471 sk-text"
>废金属</view
>
<view class="desc CategoryPanel--desc sk-transparent sk-text-14-2857-372 sk-text"
>旧衣服回收不浪费</view
>
</view>
<view class="right CategoryPanel--right">
<image class="icon CategoryPanel--icon sk-image"></image>
</view>
</navigator>
<navigator class="category-item CategoryPanel--category-item" hover-class="none">
<view class="left CategoryPanel--left">
<view
class="title CategoryPanel--title sk-transparent sk-text-14-2857-575 sk-text"
>废玻璃</view
>
<view class="desc CategoryPanel--desc sk-transparent sk-text-14-2857-572 sk-text"
>旧衣服回收不浪费</view
>
</view>
<view class="right CategoryPanel--right">
<image class="icon CategoryPanel--icon sk-image"></image>
</view>
</navigator>
<navigator class="category-item CategoryPanel--category-item" hover-class="none">
<view class="left CategoryPanel--left">
<view
class="title CategoryPanel--title sk-transparent sk-text-14-2857-961 sk-text"
>废塑料</view
>
<view class="desc CategoryPanel--desc sk-transparent sk-text-14-2857-400 sk-text"
>旧衣服回收不浪费</view
>
</view>
<view class="right CategoryPanel--right">
<image class="icon CategoryPanel--icon sk-image"></image>
</view>
</navigator>
</view>
</view>
</view>
<view is="pages/index/components/PhoneContact">
<view
class="phone-contact PhoneContact--phone-contact data-v-47ea6ab4 PhoneContact--data-v-47ea6ab4"
>
<view
class="module-title PhoneContact--module-title data-v-47ea6ab4 PhoneContact--data-v-47ea6ab4 sk-transparent sk-text-14-2857-52 sk-text"
>电话预约回收</view
>
<view
class="module-action PhoneContact--module-action data-v-47ea6ab4 PhoneContact--data-v-47ea6ab4 sk-transparent sk-text-14-2857-16 sk-text"
>400-123-000</view
>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<style lang="scss">
/* #ifdef H5 || APP-PLUS */
/* 修复 H5 端骨架屏样式异常 */
/* 原因H5 端样式自动开启 scoped 隔离,导致骨架屏的基础样式被隔离 */
@import '../styles/category.scss';
@import '../styles/hot.scss';
@import '@/components/styles/XtxSwiper.scss';
/* #endif */
.sk-transparent {
color: transparent !important;
}
.sk-text-14-2857-875 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 38.0435rpx;
position: relative !important;
}
.sk-text {
background-origin: content-box !important;
background-clip: content-box !important;
background-color: transparent !important;
color: transparent !important;
background-repeat: repeat-y !important;
}
.sk-text-14-2857-989 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 40.5797rpx;
position: relative !important;
}
.sk-text-14-2857-831 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 35.5072rpx;
position: relative !important;
}
.sk-text-14-2857-227 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 32.971rpx;
position: relative !important;
}
.sk-text-14-2857-147 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 35.5072rpx;
position: relative !important;
}
.sk-text-14-2857-444 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 32.971rpx;
position: relative !important;
}
.sk-text-14-2857-139 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 35.5072rpx;
position: relative !important;
}
.sk-text-14-2857-520 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 32.971rpx;
position: relative !important;
}
.sk-text-14-2857-471 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 35.5072rpx;
position: relative !important;
}
.sk-text-14-2857-372 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 32.971rpx;
position: relative !important;
}
.sk-text-14-2857-575 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 35.5072rpx;
position: relative !important;
}
.sk-text-14-2857-572 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 32.971rpx;
position: relative !important;
}
.sk-text-14-2857-961 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 35.5072rpx;
position: relative !important;
}
.sk-text-14-2857-400 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 32.971rpx;
position: relative !important;
}
.sk-text-14-2857-52 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 40.5797rpx;
position: relative !important;
}
.sk-text-14-2857-16 {
background-image: linear-gradient(
transparent 14.2857%,
#eeeeee 0%,
#eeeeee 85.7143%,
transparent 0%
) !important;
background-size: 100% 43.1159rpx;
position: relative !important;
}
.sk-image {
background: #efefef !important;
}
.sk-pseudo::before,
.sk-pseudo::after {
background: #efefef !important;
background-image: none !important;
color: transparent !important;
border-color: transparent !important;
}
.sk-pseudo-rect::before,
.sk-pseudo-rect::after {
border-radius: 0 !important;
}
.sk-pseudo-circle::before,
.sk-pseudo-circle::after {
border-radius: 50% !important;
}
.sk-container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-color: transparent;
}
</style>

@ -0,0 +1,17 @@
<script setup lang="ts">
const handlePhone = () => {
uni.makePhoneCall({
phoneNumber: '400-123-000', //
})
}
</script>
<template>
<view class="phone-contact">
<view class="module-title">电话预约回收</view>
<view class="module-action" @tap="handlePhone">400-123-000</view>
</view>
</template>
<style lang="scss" scoped>
@import '../styles/phoneContact.scss';
</style>

@ -1,5 +1,4 @@
<script setup lang="ts">
<<<<<<< HEAD
import { getHomeCategoryAPI } from '@/services/home'
import type { BannerItem, CategoryItem, HotItem } from '@/types/home'
import { onLoad } from '@dcloudio/uni-app'
@ -156,70 +155,10 @@ const getSettingInfo = () => {
}
},
})
=======
import { ref } from 'vue'
import { useMemberStore } from '@/stores'
import DataList from './components/DataList.vue'
import { onReady } from '@dcloudio/uni-app'
//
const orderAcceptPopup = ref<UniHelper.UniPopupInstance>()
const memberStore = useMemberStore()
// tabs
const orderTabs = ref([
{ orderState: 0, title: '待接单', isRender: false, statusId: '520192817293693253' },
{ orderState: 1, title: '进行中', isRender: false, statusId: '520192993311854917' },
])
//
const activeIndex = ref(orderTabs.value.findIndex((v) => v.orderState === 0))
orderTabs.value[activeIndex.value].isRender = true
//
// //
// onReady(() => {
// debugger
// if (memberStore.profile?.token) {
// getSettingInfo()
// } else {
// }
// })
const datetimesingle = ref('')
const activeId = ref('')
const handleOrderAccept = (item: any) => {
activeId.value = item.id
datetimesingle.value = item.time
orderAcceptPopup?.value?.open()
}
const changeTime = (e) => {
console.log('change事件:', e)
}
const handleAccept = () => {
const url = `/pages/orderDetail/orderDetail?state=${props.state}&id=${activeId.value}`
uni.navigateTo({ url })
}
const handleLogin = () => {
const url = `/pages/login/login`
uni.navigateTo({ url })
}
const handleIndexChange = (index: any) => {
orderTabs.value.forEach(e => {
e.isRender = false
})
activeIndex.value = index
orderTabs.value[index].isRender = true
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
}
</script>
<template>
<view class="viewport">
<<<<<<< HEAD
<!-- 自定义导航栏 -->
<CustomNavbar />
<!-- 滚动容器 -->
@ -241,57 +180,6 @@ const handleIndexChange = (index: any) => {
<NeighborhoodSite />
</template>
</scroll-view>
=======
<template v-if="memberStore.profile?.token">
<view class="cont">
<view class="tabs">
<text
class="item"
:class="{ active: activeIndex == index }"
v-for="(item, index) in orderTabs"
:key="item.title"
@click="handleIndexChange(index)"
>{{ item.title }}
</text>
<!-- 游标 -->
<view class="cursor" :style="{ left: activeIndex ? '65%' : '14%' }"></view>
</view>
<!-- 滑动容器 -->
<swiper class="swiper" :current="activeIndex" @change="activeIndex = $event.detail.current">
<!-- 滑动项 -->
<swiper-item v-for="item in orderTabs" :key="item.title">
<!-- 订单列表 -->
<DataList v-if="item.isRender" :status-id="item.statusId" @orderAccept="handleOrderAccept" />
</swiper-item>
</swiper>
<uni-popup ref="orderAcceptPopup" type="center" background-color="#fff">
<view class="popup-root">
<view class="title">请确保上门时间有效</view>
<view class="description">
<view class="tips">1请和客户确认如下上门时间</view>
<view class="date">
<uni-datetime-picker type="datetime" v-model="datetimesingle" @change="changeTime" />
</view>
</view>
<view class="footer">
<view class="button" @tap="orderAcceptPopup?.close?.()"></view>
<view class="button primary" @tap="handleAccept"></view>
</view>
</view>
</uni-popup>
</view>
</template>
<view class="noLogin" v-else>
<image
class="img"
src="@/static/images/warn_home.png"
mode="scaleToFill"
/>
<view class="title">未登录</view>
<view class="desc">您目前还未登录账号无法加载任何信息请先去登录账号</view>
<view class="button" @click="handleLogin"></view>
</view>
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
</view>
</template>

@ -0,0 +1,49 @@
/* 前台类目 */
.category {
padding: 32rpx 20rpx;
margin: 16rpx;
background-color: #fff;
border-radius: 4rpx;
.module-title {
font-size: 30rpx;
color: #0D0D26;
padding-bottom: 20rpx;
border-bottom: 2rpx solid #F2F2F2;
}
.cont {
// margin: 20rpx 0 0;
padding: 10rpx 0;
display: flex;
justify-content: center;
flex-wrap: wrap;
min-height: 328rpx;
.category-item {
width: 46%;
border-radius: 16rpx;
margin: 8rpx;
padding: 16rpx 0;
display: flex;
justify-content: center; // flex-direction: row;
align-items: center;
box-sizing: border-box;
background: #FCF4FB;
.left {
.title {
font-size: 26rpx;
color: #666;
}
.desc {
font-size: 24rpx;
color: #7BAFBD;
}
}
.right {
.icon {
width: 100rpx;
height: 100rpx;
}
}
}
}
}

@ -0,0 +1,82 @@
.neighborhood-site {
padding: 32rpx 20rpx;
margin: 16rpx;
background-color: #fff;
border-radius: 4rpx;
.module-title {
font-size: 30rpx;
color: #0D0D26;
padding-bottom: 20rpx;
border-bottom: 2rpx solid #F2F2F2;
}
.module-cont {
padding: 20rpx 0;
display: flex;
flex-direction: row;
.left {
width: 140rpx;
height: 140rpx;
border-radius: 12rpx;
}
.md {
flex: 1;
margin: 0 10rpx;
font-size: 24rpx;
color: #0D0D26;
.name {
font-size: 30rpx;
.zuijin {
font-size: 24rpx;
color: #FF7D00;
background: #FFF7E8;
padding: 4rpx 4rpx;
margin-right: 6rpx;
border-radius: 4rpx;
}
}
.time {
color: #95969D;
margin: 8rpx 0;
}
.loction {
color: #0D0D26;
}
}
.right {
.num {
font-size: 28rpx;
color: #95969D
}
.img {
width: 72rpx;
height: 72rpx;
margin-top: 20rpx;
border-radius: 10rpx;
}
}
}
.md-tag {
background: #E8FFFB;
color: #0FC6C2;
margin: 10rpx 0;
font-weight: 400;
font-size: 24rpx;
padding: 6rpx 0rpx;
.tag-before {
background: #0FC6C2;
color: #fff;
font-size: 24rpx;
font-weight: 500;
padding: 4rpx 8rpx;
border-radius: 4rpx;
margin-right: 10rpx;
}
}
.foot-desc {
.item {
font-size: 24rpx;
color: #95969D;
margin: 10rpx 0;
}
}
}

@ -0,0 +1,26 @@
/* 热门推荐 */
.phone-contact {
padding: 32rpx 20rpx;
margin: 16rpx;
background-color: #fff;
border-radius: 4rpx;
.module-title {
font-size: 30rpx;
color: #0D0D26;
padding-bottom: 20rpx;
border-bottom: 2rpx solid #F2F2F2;
}
.module-action {
width: 486rpx;
margin: 40rpx auto 0;
border-radius: 50px;
background: #5386E4;
color: #fff;
display: flex;
font-size: 32rpx;
justify-content: center;
align-items: center;
padding: 20rpx 100rpx;
}
}

@ -18,7 +18,6 @@ const onGetphonenumber: UniHelper.ButtonOnGetphonenumber = async (ev) => {
const { encryptedData, iv } = ev.detail
if (encryptedData) {
<<<<<<< HEAD
const params = {
code,
encryptedData,
@ -31,20 +30,12 @@ const onGetphonenumber: UniHelper.ButtonOnGetphonenumber = async (ev) => {
uni.showToast({ icon: 'none', title: '请授权手机号' })
}
}
// #endif
//
const onGetphonenumberSimple = async () => {
await checkedAgreePrivacy()
const res = await postLoginWxMinSimpleAPI('13123456789')
loginSuccess(res.result)
=======
const res = await postLoginWxMinAPI({ code, encryptedData, iv })
loginSuccess(res.data)
} else {
uni.showToast({ icon: 'none', title: '请授权手机号' })
}
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
}
const loginSuccess = (profile: LoginResult) => {
@ -56,21 +47,13 @@ const loginSuccess = (profile: LoginResult) => {
setTimeout(() => {
//
uni.switchTab({ url: '/pages/index/index' })
<<<<<<< HEAD
// uni.navigateBack()
=======
uni.navigateBack()
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
}, 500)
}
//
const isAgreePrivacy = ref(true)
<<<<<<< HEAD
const isAgreePrivacyShakeY = ref(true)
=======
const isAgreePrivacyShakeY = ref(false)
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
const checkedAgreePrivacy = async () => {
if (!isAgreePrivacy.value) {
uni.showToast({
@ -89,12 +72,6 @@ const checkedAgreePrivacy = async () => {
const onOpenPrivacyContract = () => {
//
wx.openPrivacyContract({})
<<<<<<< HEAD
// #endif
=======
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
}
</script>
<template>
@ -116,20 +93,6 @@ const onOpenPrivacyContract = () => {
手机号快捷登录
</button>
</view>
<<<<<<< HEAD
<!-- #endif -->
<!-- <view class="extra">
<view class="caption">
<text>其他登录方式</text>
</view>
<view class="options">
<button @tap="onGetphonenumberSimple">
<text class="icon icon-phone">模拟快捷登录</text>
</button>
</view>
</view> -->
=======
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
<view class="tips" :class="{ animate__shakeY: isAgreePrivacyShakeY }">
<label class="label" @tap="isAgreePrivacy = !isAgreePrivacy">
<radio class="radio" color="#3775F6" :checked="isAgreePrivacy" />

@ -127,12 +127,7 @@ page {
.viewport {
height: 100%;
background-repeat: no-repeat;
<<<<<<< HEAD
background-image: url('http://174.137.59.38/static/bg.png');
=======
background-image: url('http://174.137.59.38/static/bg.png');
// background-color: #3775F6;
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
background-size: 100% auto;
}

@ -1,16 +1,5 @@
/*
* @Author:
* @Date: 2024-01-04 12:54:56
* @LastEditors:
<<<<<<< HEAD
* @LastEditTime: 2024-03-02 10:18:56
* @FilePath: /app-nx-personal/src/services/login.ts
=======
* @LastEditTime: 2024-02-20 09:33:04
* @FilePath: /app-nx-recycle/src/services/login.ts
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import type { LoginResult } from '@/types/member'
import { http } from '@/utils/http'
@ -26,11 +15,7 @@ type LoginWxMinParams = {
export const postLoginWxMinAPI = (data: LoginWxMinParams) => {
return http<LoginResult>({
method: 'POST',
<<<<<<< HEAD
url: '/common/shlogin',
=======
url: '/scm/wx/hsyGetPhone',
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
data,
})
}

@ -1,16 +1,4 @@
/*
* @Author:
* @Date: 2024-01-04 12:54:56
* @LastEditors:
<<<<<<< HEAD
* @LastEditTime: 2024-03-02 09:21:48
* @FilePath: /app-nx-personal/src/types/member.d.ts
=======
* @LastEditTime: 2024-02-22 10:29:50
* @FilePath: /app-nx-recycle/src/types/member.d.ts
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
/** 通用的用户信息 */
type BaseProfile = {
/** 用户ID */
@ -25,19 +13,12 @@ type BaseProfile = {
/** 小程序登录 登录用户信息 */
export type LoginResult = BaseProfile & {
<<<<<<< HEAD
id: string
phone: string
/** 登录凭证 */
token: string
userType: number
username: string
=======
/** 登录凭证 */
token: string,
/** 用户信息 */
userInfo: Object
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
}
/** 个人信息 用户详情信息 */

@ -1,17 +1,4 @@
/*
* @Author:
* @Date: 2024-01-04 12:54:56
<<<<<<< HEAD
* @LastEditors:
* @LastEditTime: 2024-03-02 09:44:54
* @FilePath: /app-nx-personal/src/utils/http.ts
=======
* @LastEditors:
* @LastEditTime: 2024-02-23 10:49:25
* @FilePath: /app-nx-recycle/src/utils/http.ts
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
/**
* :
* request
@ -25,12 +12,7 @@
*/
import { useMemberStore } from '@/stores'
<<<<<<< HEAD
const baseURL = 'http://192.168.0.166:8808/api'
=======
const baseURL = 'http://222.71.165.187:3333/api'
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
// 添加拦截器
const httpInterceptor = {

@ -7,11 +7,7 @@
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { defineConfig } from 'vite'
<<<<<<< HEAD
// import { viteMockServe } from "vite-plugin-mock";
=======
import { viteMockServe } from 'vite-plugin-mock'
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
import uni from '@dcloudio/vite-plugin-uni'
// https://vitejs.dev/config/
@ -22,14 +18,8 @@ export default defineConfig({
},
plugins: [
uni(),
<<<<<<< HEAD
// viteMockServe({
// supportTs: true,
// })
=======
viteMockServe({
supportTs: true,
}),
>>>>>>> b43f705aac2540e8c44120068fa0efd8a2e163f1
],
})

Loading…
Cancel
Save