This commit is contained in:
qiaojiale 2025-05-08 11:02:58 +08:00
commit 3a7aeb5b0a
110 changed files with 6255 additions and 787 deletions

View File

@ -29,4 +29,9 @@
height: 20rpx;
background: #F9F9F9;
}
page{
font-size: 28rpx;
padding-bottom: 120rpx;
}
</style>

5
api/area.js Normal file
View File

@ -0,0 +1,5 @@
export const apiArr = {
city: '/citys/s/list', // 获取省份列表
area: '/citys/c/list', // 获取城市列表
business: '/citys/x/list', // 获取区县列表
}

11
api/communityService.js Normal file
View File

@ -0,0 +1,11 @@
export const apiArr = {
getCateList: '/wechat/appoints/get-cate-list', // 获取同城服务分类列表
serverInfo: '/wechat/appoints/get-one', // 获取同城服务详情
getAllList: '/wechat/appoints/get-all-list', // 跟据不同的id 查分类
getHotCate: '/wechat/appoints/get-hot-cate', //获取热门上门服务
submitServer: '/wechat/appoint-orders/now', // 预约服务
createServerOrder: '/wechat/appoint-orders/create', // 创建上门服务订单
getCurrentShopMsg: '/wechat/water/device/shop-info', // 获取商家支付信息
getShopList: '/wechat/get-shop-list', // 获取商家列表
getGoodsDesc: "/wechat/shop/shop_info", //商家详情
}

20
api/user.js Normal file
View File

@ -0,0 +1,20 @@
export const apiArr = {
getAllList:' /wechat/appoints/get-all-list', // 上门服务商品列表
revoke: '/wechat/appoint-orders/revoke', // 取消订单
getOne: '/wechat/appoint-orders/get-one', // 订单详情
create: '/wechat/appoint-orders/create', // 订单提交
getOrdersAllList: '/wechat/appoint-orders/get-all-list', // 查询这个登录人的所有订单
signCycle: '/wechat/sign/sign-cycle', // 签到周期详情
signList: '/wechat/sign/sign-list', // 获取签到记录列表
sign: '/wechat/sign/sign', // 积分签到
signIntegral: '/wechat/sign/integral', // 查询账户积分
signInfo: '/wechat/sign/info', // 获取签到详情
addr: '/wechat/mpusers/addr', // 获取地址信息
setAddr: '/wechat/mpusers/set-addr',// 修改地址接口
avatar: '/wechat/mpusers/avatar', // 上传头像
modifyPass: '/wechat/mpusers/modify-pass', // 修改登录密码
payPass: '/wechat/mpusers/pay-pass', // 设置支付密码
couponList: '/wechat/discuss/list', // 获取优惠券列表
getUserCommunity:"/wechat/community/owner/mylist",//获取用户社区信息
createQrcode: '/wechat/water/device/qr-code', //获取小程序码
};

View File

@ -0,0 +1,11 @@
.popup_title {
display: flex;
margin: 20rpx 30rpx 0;
justify-content: space-between;
}
.popup_label {
color: #999;
}
.color_blue {
color: #576b95;
}

View File

@ -0,0 +1,158 @@
<template>
<view>
<u-popup
:show="show"
closeOnClickOverlay
round="20rpx"
@close="onClose"
>
<view>
<view class="popup_title">
<view class="popup_label" @click="onClose">取消</view>
<view class="popup_label color_blue" @click="onOk">确认</view>
</view>
<!-- indicator-style="height: 50px;" style="width: 100%; height: 500rpx;" -->
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 400rpx;" :value="value" @change="bindChange">
<picker-view-column>
<view v-for="(item, index) in provList" :key="index" style="line-height: 50px; text-align: center;">{{item.name}}</view>
</picker-view-column>
<picker-view-column>
<view v-for="(item, index) in defaultCity" :key="index" style="line-height: 50px; text-align: center;">{{item.name}}</view>
</picker-view-column>
<picker-view-column>
<view v-for="(item, index) in defaultDist" :key="index" style="line-height: 50px; text-align: center;">{{item.business_name}}</view>
</picker-view-column>
</picker-view>
</view>
</u-popup>
</view>
</template>
<script>
import {
apiArr
} from '../../api/area';
import { request } from '../../utils';
export default {
props: {
show: {
type: Boolean,
default: false,
required: true,
}
},
data() {
return {
provList: [], //
cityList: [], //
distList: [], //
defaultCity: [], //
defaultDist: [], // /
confirmProv: {}, //
confirmCity: {}, //
confirmDist: {}, // /
}
},
methods: {
//
async getProvList () {
const res = await request(apiArr.city, 'POST', {}, { silent: false });
return res;
},
//
async getCityList () {
const res = await request(apiArr.area, 'POST', {}, { silent: false });
return res;
},
// /
async getDistList () {
const res = await request(apiArr.business, 'POST', {}, { silent: false });
return res;
},
async init() {
uni.showLoading({
title: '加载中',
mask: true
});
try {
const [provRes, cityRes, distRes] = await Promise.all([
this.getProvList(),
this.getCityList(),
this.getDistList(),
])
uni.hideLoading();
//
let defaultCity = cityRes.rows.filter((item) => {
return item.city_id === provRes.rows[0].city_id
});
let defaultDist = distRes.rows.filter((item) => {
return item.area_id === cityRes.rows[0].area_id
});
this.provList = provRes?.rows; //
this.cityList = cityRes?.rows; //
this.distList = distRes?.rows; //
this.defaultCity = defaultCity; //
this.defaultDist = defaultDist; // /
this.confirmProv = provRes.rows[0];
this.confirmCity = defaultCity[0];
this.confirmDist = defaultDist[0];
} catch (error) {
uni.hideLoading();
console.log('获取省市区信息异常', error);
}
},
//
bindChange (e) {
console.log('[1231331], e', e);
const {value } = e.detail;
const {provList, cityList, distList} = this;
// /
let newCrty = cityList.filter((item) => item.city_id === provList[value[0]].city_id);
let newDist = distList.filter((item) => item.area_id === newCrty[value[1]].area_id);
this.defaultCity = newCrty;
this.defaultDist = newDist;
//
this.confirmProv = provList[value[0]];
this.confirmCity = newCrty[value[1]];
this.confirmDist = newDist[value[2]];
},
//
onClose() {
this.$emit('close');
},
//
onOk() {
const { confirmProv, confirmCity, confirmDist } = this;
this.$emit('selectArea', {confirmProv, confirmCity, confirmDist});
},
},
mounted() {
this.init();
},
}
</script>
<style>
@import url('./areaPopup.css');
</style>

89
components/nav/nav.css Normal file
View File

@ -0,0 +1,89 @@
.foot-fixed {
position: fixed;
bottom: -1px;
left: 0;
right: 0;
z-index: 999;
width: 100%;
background: #ffffff;
border-top: 1px solid #E8E8E8;
box-shadow: 0 0 3px rgba(0,0,0,0.1);
}
.foot-fixed .foot-item {
padding: 0;
}
.foot-fixed .foot-item {
position: relative;
}
.foot-fixed .foot-item {
width: 20%;
float: left;
text-align: center;
color: #777;
padding: 5px 0 10px;
}
a {
color: #666;
text-decoration: none;
}
a {
background: transparent;
}
.foot-fixed .foot-item .foot-icon {
width: 24px;
height: 26px;
margin: 0 auto;
}
.foot-fixed .foot-item .foot-label {
margin: 5px 0;
}
.foot-fixed .foot-item .foot-label {
height: 15px;
line-height: 15px;
font-size: 12px;
}
.foot-fixed .foot-item span {
display: block;
width: 100%;
text-align: center;
}
/* 自定义导航栏 */
.nav-box {
box-sizing: border-box;
width: 100%;
/* position: relative; */
/* position: fixed; */
z-index: 2;
}
.nav-box .nav-bar {
display: flex;
align-items: center;
}
.nav-box .nav-bar .nav-bar-left,
.nav-box .nav-bar .nav-bar-right {
padding: 0 20rpx;
min-width: 36rpx;
}
.nav-box .nav-bar .nav-bar-left van-icon {
vertical-align: sub;
color: #333333;
}
.nav-box .nav-bar .nav-bar-title {
flex: 1;
text-align: center;
font-size: 32rpx;
letter-spacing: 2rpx;
color: #333333;
}
.nav-box .nav-bar-title {
color: red;
}

View File

@ -1,20 +1,97 @@
<template>
<view>123
<view class="foot-fixed">
<view v-for="(item, index) in navList" :key='index'>
<view id="navIndex" :style="{width:foot_width}" @click="jump" :data-idx="index" :data-url="item.url"
class="foot-item">
<image class="foot-icon" :src="item.photo" mode=""></image>
<text class="foot-label" id="navIndexLabel">{{item.nav_name}}</text>
</view>
</view>
</view>
</template>
<script>
export default {
name:"tes",
name: "nav",
data() {
return {
navList: [],
foot_width: '20%',
};
},
methods: {
getFootnav() {
let _that = this;
uni.request({
url: 'https://zhsq.hshuishang.com/Miniapi/Index/footer_nav_list',
method: 'post',
header: {
'Content-type': 'application/x-www-form-urlencoded'
},
data: {},
dataType: 'json',
success: (result) => {
result.data[0].url = "/pages/index/index"
result.data[1].url = "/pages/device/device"
result.data[2].nav_name = "手机通行"
result.data[2].url = "/pages/phoneGo/phoneGo"
result.data[3].url = `packages/community/index/index`
result.data[4].url = "/pages/user/index"
result.data.splice(1, 2);
let footWidth = (100 / result.data.length).toFixed(2) + '%';
this.navList = result.data;
this.foot_width = footWidth;
},
});
},
//
NotOpen() {
uni.showModal({
title: '提示',
content: '此功能暂未开通!',
showCancel: false,
complete: (res) => {
if (res.cancel) {
}
}
})
},
jump(e) {
const ctoken = uni.getStorageSync('ctoken');
const authen = ['/pages/index/index', '/pages/user/index'];
// ctoken tab访
if (authen.includes(e.currentTarget.dataset.url)) {
uni.redirectTo({
url: e.currentTarget.dataset.url,
})
return
}
if (!ctoken) {
uni.redirectTo({
url: '/pages/login/login',
})
return;
}
uni.redirectTo({
url: e.currentTarget.dataset.url,
})
},
},
mounted() {
this.getFootnav();
}
}
</script>
<style>
@import url("./nav.css");
</style>

View File

@ -16,8 +16,8 @@
</template>
<script>
import { onLoad } from 'uview-ui/libs/mixin/mixin';
import { apiArr } from '../../api/community';
import { apiArr } from '../../api/community';
export default {
data() {
return {

View File

@ -102,7 +102,7 @@
this.chooseClick(e);
return;
}
NavgateTo(`/community/communityDetail/index?title=${item.name}&id=${item.community_id}`, { isLogin: false })
NavgateTo(`/packages/community/communityDetail/index?title=${item.name}&id=${item.community_id}`, { isLogin: false })
},
//

View File

@ -0,0 +1,272 @@
/**
* 本模块封装了AndroidiOS的应用权限判断打开应用权限设置界面以及位置系统服务是否开启
*/
var isIos
// #ifdef APP-PLUS
isIos = (plus.os.name == "iOS")
// #endif
// 判断推送权限是否开启
function judgeIosPermissionPush() {
var result = false;
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
var enabledTypes = 0;
if (app.currentUserNotificationSettings) {
var settings = app.currentUserNotificationSettings();
enabledTypes = settings.plusGetAttribute("types");
console.log("enabledTypes1:" + enabledTypes);
if (enabledTypes == 0) {
console.log("推送权限没有开启");
} else {
result = true;
console.log("已经开启推送功能!")
}
plus.ios.deleteObject(settings);
} else {
enabledTypes = app.enabledRemoteNotificationTypes();
if (enabledTypes == 0) {
console.log("推送权限没有开启!");
} else {
result = true;
console.log("已经开启推送功能!")
}
console.log("enabledTypes2:" + enabledTypes);
}
plus.ios.deleteObject(app);
plus.ios.deleteObject(UIApplication);
return result;
}
// 判断定位权限是否开启
function judgeIosPermissionLocation() {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var status = cllocationManger.authorizationStatus();
result = (status != 2)
console.log("定位权限开启:" + result);
// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
/* var enable = cllocationManger.locationServicesEnabled();
var status = cllocationManger.authorizationStatus();
console.log("enable:" + enable);
console.log("status:" + status);
if (enable && status != 2) {
result = true;
console.log("手机定位服务已开启且已授予定位权限");
} else {
console.log("手机系统的定位没有打开或未给予定位权限");
} */
plus.ios.deleteObject(cllocationManger);
return result;
}
// 判断麦克风权限是否开启
function judgeIosPermissionRecord() {
var result = false;
var avaudiosession = plus.ios.import("AVAudioSession");
var avaudio = avaudiosession.sharedInstance();
var permissionStatus = avaudio.recordPermission();
console.log("permissionStatus:" + permissionStatus);
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
console.log("麦克风权限没有开启");
} else {
result = true;
console.log("麦克风权限已经开启");
}
plus.ios.deleteObject(avaudiosession);
return result;
}
// 判断相机权限是否开启
function judgeIosPermissionCamera() {
var result = false;
var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相机权限已经开启");
} else {
console.log("相机权限没有开启");
}
plus.ios.deleteObject(AVCaptureDevice);
return result;
}
// 判断相册权限是否开启
function judgeIosPermissionPhotoLibrary() {
var result = false;
var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
var authStatus = PHPhotoLibrary.authorizationStatus();
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相册权限已经开启");
} else {
console.log("相册权限没有开启");
}
plus.ios.deleteObject(PHPhotoLibrary);
return result;
}
// 判断通讯录权限是否开启
function judgeIosPermissionContact() {
var result = false;
var CNContactStore = plus.ios.import("CNContactStore");
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
if (cnAuthStatus == 3) {
result = true;
console.log("通讯录权限已经开启");
} else {
console.log("通讯录权限没有开启");
}
plus.ios.deleteObject(CNContactStore);
return result;
}
// 判断日历权限是否开启
function judgeIosPermissionCalendar() {
var result = false;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
if (ekAuthStatus == 3) {
result = true;
console.log("日历权限已经开启");
} else {
console.log("日历权限没有开启");
}
plus.ios.deleteObject(EKEventStore);
return result;
}
// 判断备忘录权限是否开启
function judgeIosPermissionMemo() {
var result = false;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
if (ekAuthStatus == 3) {
result = true;
console.log("备忘录权限已经开启");
} else {
console.log("备忘录权限没有开启");
}
plus.ios.deleteObject(EKEventStore);
return result;
}
// Android权限查询
function requestAndroidPermission(permissionID) {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
function(resultObj) {
var result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
var grantedPermission = resultObj.granted[i];
console.log('已获取的权限:' + grantedPermission);
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
resolve(result);
// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
// if (result != 1) {
// gotoAppPermissionSetting()
// }
},
function(error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
}
// 使用一个方法,根据参数判断权限
function judgeIosPermission(permissionID) {
if (permissionID == "location") {
return judgeIosPermissionLocation()
} else if (permissionID == "camera") {
return judgeIosPermissionCamera()
} else if (permissionID == "photoLibrary") {
return judgeIosPermissionPhotoLibrary()
} else if (permissionID == "record") {
return judgeIosPermissionRecord()
} else if (permissionID == "push") {
return judgeIosPermissionPush()
} else if (permissionID == "contact") {
return judgeIosPermissionContact()
} else if (permissionID == "calendar") {
return judgeIosPermissionCalendar()
} else if (permissionID == "memo") {
return judgeIosPermissionMemo()
}
return false;
}
// 跳转到**应用**的权限页面
function gotoAppPermissionSetting() {
if (isIos) {
var UIApplication = plus.ios.import("UIApplication");
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import("NSURL");
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString("app-settings:");
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
} else {
// console.log(plus.device.vendor);
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
}
}
// 检查系统的设备服务是否开启
// var checkSystemEnableLocation = async function () {
function checkSystemEnableLocation() {
if (isIos) {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var result = cllocationManger.locationServicesEnabled();
console.log("系统定位开启:" + result);
plus.ios.deleteObject(cllocationManger);
return result;
} else {
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass("android.location.LocationManager");
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
console.log("系统定位开启:" + result);
return result
}
}
module.exports = {
judgeIosPermission: judgeIosPermission,
requestAndroidPermission: requestAndroidPermission,
checkSystemEnableLocation: checkSystemEnableLocation,
gotoAppPermissionSetting: gotoAppPermissionSetting
}

View File

@ -57,7 +57,7 @@
},
"oauth" : {
"weixin" : {
"appid" : "wx48c8154de6cc8b36",
"appid" : "wxb4018c78fa143450",
"UniversalLinks" : ""
}
}

View File

@ -27,8 +27,8 @@
</template>
<script>
import { request, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {

View File

@ -62,8 +62,8 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request, picUrl, NavgateTo } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {
@ -82,7 +82,6 @@
typeName:"",// 访
room_id:"",
show:false,
columns:[
[
{text:"业主",type:1},
@ -101,10 +100,10 @@
const { type } = e.currentTarget.dataset;
if(type == '1'){
NavgateTo(`/community/chooseMsg/index?type=${type}&id=${this.communityId}`, {isLogin: false});
NavgateTo(`/packages/community/chooseMsg/index?type=${type}&id=${this.communityId}`, {isLogin: false});
}else{
if(this.FacId){
NavgateTo(`/community/chooseMsg/index?type=${type}&id=${this.communityId}&FacId=${this.FacId}`, {isLogin: false});
NavgateTo(`/packages/community/chooseMsg/index?type=${type}&id=${this.communityId}&FacId=${this.FacId}`, {isLogin: false});
}else{
uni.showToast({

View File

@ -23,8 +23,8 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {

View File

@ -57,8 +57,8 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request, picUrl, NavgateTo } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data () {
@ -68,7 +68,7 @@
navList: [
{
pic: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community/_assets/Group_345.png',
url: '/community/applyOwer/index',
url: '/packages/community/applyOwer/index',
desc: '申请业主'
},
{
@ -165,8 +165,8 @@
}
console.log('newInfo', newInfo);
let navList = this.navList
navList[0].url = `/community/applyOwer/index?id=${Number(id)}&title=${res.name}`;
navList[1].url = `/community/mycar/index?id=${Number(id)}&title=${res.name}`;
navList[0].url = `/packages/community/applyOwer/index?id=${Number(id)}&title=${res.name}`;
navList[1].url = `/packages/community/mycar/index?id=${Number(id)}&title=${res.name}`;
this.info = newInfo;
this.navList = navList;
@ -195,7 +195,7 @@
//
headerTipsClick() {
NavgateTo(`/community/notice/index?id=${this.id}&title=${this.pageTitle}`, { isLogin: false })
NavgateTo(`/packages/community/notice/index?id=${this.id}&title=${this.pageTitle}`, { isLogin: false })
},
// item
@ -209,11 +209,11 @@
},
repair(){
NavgateTo(`/community/oneRepair/index`, {isLogin: false })
NavgateTo(`/packages/community/oneRepair/index`, {isLogin: false })
},
ReparirList(){
NavgateTo(`/community/repairList/index?id=${this.id}&title=${this.info.name}`, {isLogin: false })
NavgateTo(`/packages/community/repairList/index?id=${this.id}&title=${this.info.name}`, {isLogin: false })
},

View File

@ -5,8 +5,8 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {

View File

@ -24,8 +24,8 @@
</template>
<script>
import { request, picUrl, uniqueByField } from '../../utils';
import { apiArr } from '../../api/community';
import { request, picUrl, uniqueByField } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {
@ -63,9 +63,6 @@
if(options?.types == 2){
this.init(options?.type || '');
}else{
// this.init(options?.type || '');
// return
// // init
this.getUserCommunity()
}
},

View File

@ -31,8 +31,8 @@
</template>
<script>
import { request, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request, NavgateTo } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {
@ -108,7 +108,7 @@
},
addCar(){
NavgateTo(`/community/addCar/index?title=${this.title}&id=${this.id}`, {isLogin: false})
NavgateTo(`/packages/community/addCar/index?title=${this.title}&id=${this.id}`, {isLogin: false})
},

View File

@ -25,8 +25,8 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request, NavgateTo } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
@ -65,7 +65,7 @@
headerNoticeClick(event) {
console.log('12313', event);
const { item } = event.currentTarget.dataset;
NavgateTo(`/community/desc/desc?id=${item.news_id}&title=${item.title}`, {isLogin: false})
NavgateTo(`/packages/community/desc/desc?id=${item.news_id}&title=${item.title}`, {isLogin: false})
},
},

View File

@ -122,10 +122,10 @@
NavgateTo,
upload,
isPhone,
} from '../../utils';
} from '../../../utils';
import {
apiArr
} from '../../api/community';
} from '../../../api/community';
export default {
data() {
return {
@ -176,18 +176,18 @@
},
methods: {
chooseCom(){
NavgateTo(`/community/index/index?joinType=3`, { isLogin: false })
NavgateTo(`/packages/community/index/index?joinType=3`, { isLogin: false })
},
chooseFac(e){
console.log('eeee', e);
const { type } = e.currentTarget.dataset;
if(type == '1'){
NavgateTo(`/community/chooseMsg/index?type=${type}&id=${this.CommunityInfo.id}`, { isLogin: false });
NavgateTo(`/packages/community/chooseMsg/index?type=${type}&id=${this.CommunityInfo.id}`, { isLogin: false });
}else{
console.log(this.FacId);
if(this.FacId){
NavgateTo(`/community/chooseMsg/index?type=${type}&id=${this.CommunityInfo.id}&FacId=${this.FacId}`, { isLogin: false });
NavgateTo(`/packages/community/chooseMsg/index?type=${type}&id=${this.CommunityInfo.id}&FacId=${this.FacId}`, { isLogin: false });
}else{
uni.showToast({
title: '请先选择楼宇号',

View File

@ -0,0 +1,74 @@
.search {
display: flex;
align-items: center;
background: #F9F9F9;
padding: 30rpx 0;
}
.sear_icon {
width: 30rpx;
height: 30rpx;
}
.searchIpt {
width: 710rpx;
height: 54rpx;
background: #FFFFFF;
border-radius: 100rpx 100rpx 100rpx 100rpx;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24rpx;
}
.searchIpt input {
flex: 1;
}
.OwnerItem {
padding: 30rpx 20rpx;
border-bottom: 1rpx solid #E6E6E6;
}
.Name {
font-weight: 400;
font-size: 36rpx;
color: #000000;
margin-bottom: 12rpx;
}
.rows {
display: flex;
align-items: center;
font-weight: 400;
font-size: 26rpx;
color: #999999;
margin-bottom: 16rpx;
}
.rows_tit {
min-width: 4em;
margin-right: 30rpx;
}
.rows_con {
color: #222222;
}
.time {
color: #999999;
}
.state1 {
color: #D5AC66;
}
.state2 {
color: #07c160;
}
.state3 {
color: red;
}

View File

@ -0,0 +1,118 @@
<template>
<view class="box">
<view class="search">
<view class="searchIpt">
<input type="text" placeholder="社区名称/业主姓名/业主手机" placeholder-style="color: #999999;font-size: 24rpx;"
:value="search" @input="search" />
<image class="sear_icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/dervice/deriveSearch.png"
mode="" />
</view>
</view>
<view class="OwnerItem" v-for="(item, index ) in list" :key="index">
<view class="Name">{{item.name}}</view>
<view class="rows">
<view class="rows_tit">申请手机</view>
<view class="rows_con">{{item.mobile}}</view>
</view>
<view class="rows">
<view class="rows_tit">入住小区</view>
<view class="rows_con">{{item.community.name}}</view>
</view>
<view class="rows">
<view class="rows_tit">申请类型</view>
<view class="rows_con" v-if="item.type == 1">业主</view>
<view class="rows_con" v-if="item.type == 2">家属</view>
<view class="rows_con" v-if="item.type == 3">租客</view>
<view class="rows_con" v-if="item.type == 4">访客</view>
</view>
<view class="rows">
<view class="rows_tit">楼宇号</view>
<view class="rows_con">{{item.facility.name}}</view>
</view>
<view class="rows">
<view class="rows_tit">房屋号</view>
<view class="rows_con">{{item.room.name}}</view>
</view>
<view class="rows">
<view class="rows_tit">创建时间</view>
<view class="rows_con time">2025-03-24 15:20</view>
</view>
<view class="rows">
<view class="rows_tit">申请状态</view>
<view class="rows_con state1" v-if="item.audit === 1">待审核</view>
<view class="rows_con state2" v-if="item.audit === 2">已通过</view>
<view class="rows_con state3" v-if="item.audit === 3">未通过</view>
</view>
</view>
</view>
</template>
<script>
import { request } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {
search: "",
page_num: 1,
page_size: 10,
list: [],
flag: false,
}
},
methods: {
search(e) {
console.log('1231313', e);
this.search = e.detail.value;
this.list = [];
this.page_num = 1;
this.flag = false;
this.init();
},
async init() {
const { page_num, page_size, list, search } = this;
let param = {
page_num,
page_size,
};
if (search !== '') {
param = {
page_num,
page_size,
name: search,
};
}
const res = await request(apiArr.ownerList, 'POST', param);
let flag = false
if (res.rows.length == page_size) {
flag = true
} else {
flag = false
}
this.list = list.concat(res.rows || []);
this.page_num = page_num + 1;
this.flag = flag;
},
},
onLoad() {
uni.setNavigationBarTitle({
title: '我的申请',
});
this.init();
},
onReachBottom() {
if(this.flag){
this.init()
}
},
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -34,10 +34,10 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { request, picUrl } from '../../../utils';
import {
apiArr
} from '../../api/community';
} from '../../../api/community';
export default {
data() {
return {

View File

@ -45,8 +45,8 @@
</template>
<script>
import { request, picUrl, NavgateTo } from '../../utils';
import { apiArr } from '../../api/community';
import { request, NavgateTo } from '../../../utils';
import { apiArr } from '../../../api/community';
export default {
data() {
return {
@ -82,11 +82,11 @@
},
headerRepairClick(e){
NavgateTo(`/community/oneRepair/index`, { isLogin: false })
NavgateTo(`/packages/community/oneRepair/index`, { isLogin: false })
},
headerRepairDetailClick(e){
const { id } = e.currentTarget.dataset
NavgateTo(`/community/repairDetail/index?id=${id}&title=${this.title}`, { isLogin: false })
NavgateTo(`/packages/community/repairDetail/index?id=${id}&title=${this.title}`, { isLogin: false })
},
changeTab(e){

View File

@ -0,0 +1,336 @@
image {
width: 100%;
height: 100%;
}
.swiper {
width: 710rpx;
height: 300rpx;
margin: 0 auto;
margin-top: 30rpx;
}
.swiper .swiper {
width: 100%;
height: 100%;
}
.swiper image {
width: 100%;
height: 100%;
}
.tabList {
display: flex;
flex-wrap: wrap;
margin-top: 40rpx;
}
.tabItem {
display: flex;
width: 20%;
align-items: center;
flex-direction: column;
margin-bottom: 46rpx;
}
.tabImg {
height: 54rpx;
}
.tabName {
font-weight: 400;
font-size: 26rpx;
color: #222222;
}
.tit {
font-weight: bold;
font-size: 32rpx;
color: #222222;
margin-left: 20rpx;
padding-top: 30rpx;
}
.serviceTag {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 20rpx;
box-sizing: border-box;
margin-top: 30rpx;
padding-bottom: 30rpx;
}
.serviceTagItem {
width: 345rpx;
height: 150rpx;
background: linear-gradient(148deg, #FFF4EA 0%, #FFE1C5 100%);
border-radius: 30rpx 30rpx 30rpx 30rpx;
box-sizing: border-box;
padding-left: 28rpx;
padding-top: 37rpx;
position: relative;
margin-bottom: 20rpx;
}
.item2 {
background: linear-gradient(167deg, #FFF3F3 0%, #FFD5D5 100%);
}
.item3 {
background: linear-gradient(145deg, #FFFDF5 0%, #FFF7D0 100%);
}
.item4 {
background: linear-gradient(143deg, #F8F8F8 0%, #EAEAEA 100%);
}
.serviceTagItem_name {
font-weight: bold;
font-size: 28rpx;
color: #000000;
}
.serviceTagItem_img1 {
width: 158rpx;
height: 131rpx;
position: absolute;
bottom: 0rpx;
right: 4rpx;
}
.serviceTagItem_img2 {
width: 154rpx;
height: 130.6rpx;
position: absolute;
bottom: 0rpx;
right: 0rpx;
}
.serviceTagItem_img3 {
height: 140rpx;
width: 178rpx;
position: absolute;
bottom: 0rpx;
right: 0rpx;
}
.serviceTagItem_img4 {
width: 204rpx;
height: 68rpx;
position: absolute;
bottom: 10rpx;
right: 0rpx;
}
.tabs {
display: flex;
align-items: center;
margin-left: 20rpx;
padding-top: 30rpx;
}
.tabs .tab {
font-weight: 400;
font-size: 28rpx;
color: #555555;
margin-right: 70rpx;
}
.tabs .active {
font-weight: bold;
font-size: 32rpx;
position: relative;
}
.tabs .active::after {
content: '';
width: 127rpx;
height: 10rpx;
background: #FF512A;
position: absolute;
left: 50%;
bottom: -10rpx;
transform: translateX(-50%);
}
.tabs .active::before {
width: 127rpx;
height: 10rpx;
filter: blur(6.599999904632568rpx);
background: #FF5D73;
position: absolute;
left: 50%;
bottom: -10rpx;
transform: translateX(-50%);
}
.list {
margin-top: 36rpx;
}
.item_tit {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 20rpx;
margin-bottom: 32rpx;
margin-top: 30rpx;
}
.item_tit_left {
font-weight: bold;
font-size: 28rpx;
color: #000000;
}
.item_tit_right {
font-weight: 400;
font-size: 24rpx;
color: #D5AC66;
display: flex;
align-items: center;
}
.item_tit_right image {
width: 12rpx;
height: 22rpx;
margin-left: 8rpx;
}
.scrollView {
display: flex;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
width: 100%;
}
.item_goodsItem {
display: inline-block;
width: 223rpx;
margin-right: 10rpx;
}
.item_goodsItem_tit {
width: 100%;
height: 161rpx;
}
.item_goodsItem_name {
font-weight: 400;
font-size: 26rpx;
color: #222222;
margin-top: 20rpx;
margin-left: 10rpx;
}
.item_goodsItem_msg {
font-weight: 400;
font-size: 22rpx;
color: #FF512A;
display: flex;
align-items: flex-end;
margin-top: 6rpx;
margin-left: 13rpx;
}
.item_goodsItem_msg view {
font-weight: 500;
font-size: 36rpx;
}
.item_goodsItem_msg text {
font-size: 22rpx;
color: #FF512A;
}
.item_goodsList {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20rpx;
}
.list_item {
padding-bottom: 32rpx;
border-bottom: 1rpx solid #E6E6E6;
}
.no_border {
border-bottom: none;
}
.merchantList {
margin: 0 20rpx;
margin-top: 30rpx;
}
.merchantItem {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx 0;
border-bottom: 1rpx solid #E6E6E6;
box-sizing: border-box;
}
.merchantItem_right {
font-weight: 400;
font-size: 26rpx;
color: #FFFFFF;
width: 150rpx;
height: 50rpx;
background: #D5AC66;
border-radius: 100rpx 100rpx 100rpx 100rpx;
display: flex;
align-items: center;
justify-content: center;
}
.merchantItem_left {
display: flex;
align-items: center;
}
.merchantItem_left_img {
width: 180rpx;
height: 180rpx;
border-radius: 20rpx;
overflow: hidden;
margin-right: 20rpx;
}
.merchantItem_left_msg_tit {
font-weight: 400;
font-size: 32rpx;
color: #000000;
}
.merchantItem_left_msg_add {
font-weight: 400;
font-size: 24rpx;
color: #999999;
margin-top: 14rpx;
}
.merchantItem_left_msg_msg {
font-weight: 400;
font-size: 22rpx;
color: #FF512A;
background: #FFF0ED;
padding: 2rpx;
margin-top: 16rpx;
}
.merchantItem_left_msg_tag {
font-weight: 400;
font-size: 24rpx;
color: #999999;
margin-top: 18rpx;
}

View File

@ -0,0 +1,337 @@
<template>
<view class="headlth">
<view class="swiper">
<swiper>
<swiper-item>
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_img.png" mode="" />
</swiper-item>
</swiper>
</view>
<view class="tabList">
<view class="tabItem" v-for="(item, index ) in cateList" :key="index" @click="jump(item.cate_id)">
<view class="tabImg">
<image :src="item.photo" mode="heightFix" />
</view>
<view class="tabName">
{{item.cate_name}}
</view>
</view>
</view>
<view class="gray"></view>
<view class="tit">
热门服务
</view>
<view class="serviceTag">
<view class="serviceTagItem" @click="jump">
<view class="serviceTagItem_name">家政保洁</view>
<view class="serviceTagItem_img1">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot1.png" mode="widthFix" />
</view>
</view>
<view class="serviceTagItem item2" @click="jump">
<view class="serviceTagItem_name">专业保姆</view>
<view class="serviceTagItem_img2">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot2.png" mode="widthFix" />
</view>
</view>
<view class="serviceTagItem item3" @click="jump">
<view class="serviceTagItem_name">家电维修</view>
<view class="serviceTagItem_img3">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot3.png" mode="widthFix" />
</view>
</view>
<view class="serviceTagItem item4" @click="jump">
<view class="serviceTagItem_name">搬家拉货</view>
<view class="serviceTagItem_img4">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot4.png" mode="widthFix" />
</view>
</view>
</view>
<view class="gray"></view>
<view class="tabs">
<view :class="['tab', tabIndex == '0' ? 'active' : '']" @click="changeTab" data-tab="0">服务列表</view>
<view :class="['tab', tabIndex == '1' ? 'active' : '']" @click="changeTab" data-tab="1">商户列表</view>
</view>
<view class="list" v-if="tabIndex == 0">
<view :class="['list_item', index === serverList.length - 1 && 'no_border']" v-for="(item, index) in serverList" :key="index">
<view class="item_tit">
<view class="item_tit_left">{{item.cate_name}}</view>
<view class="item_tit_right" @click="jump(item.cate_id)">
更多
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view>
</view>
<view class="item_goodsList">
<scroll-view scroll-x="true" class="scrollView">
<view class="item_goodsItem" v-for="(items, index) in item.appoints" :key="index" @click.stop="headerItemClick" :data-id="items.appoint_id">
<view class="item_goodsItem_tit">
<image :src="items.photo" mode="aspectFill" />
</view>
<view class="item_goodsItem_name">{{items.title}}</view>
<view class="item_goodsItem_msg">
<view>{{items.price}}</view>
<text>/{{items.unit}}</text>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
<view class="merchantList" v-if="tabIndex == 1">
<view class="merchantItem" v-for="(item, index) in goodsList" :key="index" @click="headerShopClick(item.shop_id)">
<view class="merchantItem_left">
<view class="merchantItem_left_img">
<image :src="item.photo" mode="widthFix" />
</view>
<view class="merchantItem_left_msg">
<view class="merchantItem_left_msg_tit">{{item.shop_name}}</view>
<view class="merchantItem_left_msg_add">{{item.addr}}</view>
<view class="merchantItem_left_msg_msg">中国领先的高科技医疗设备研...</view>
<view class="merchantItem_left_msg_tag">{{item.tags}}</view>
</view>
</view>
<view class="merchantItem_right" @click.stop="call(item.tel)">
电话询价
</view>
</view>
</view>
<nav-footer />
</view>
</template>
<script>
import { NavgateTo, picUrl, request } from '../../../utils/index';
import { apiArr } from '../../../api/communityService';
export default {
data() {
return {
tabList:[{
name:"服务中心",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon1.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"家政保洁",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon2.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"衣物洗护",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon3.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"家电维修",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon4.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"跑腿服务",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon5.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"养车用车",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon6.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"保姆月嫂",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon7.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"家电清洗",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon8.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"搬家拉货",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon9.png',
url:"../ServiceMore/ServiceMore",
},
{
name:"家装维修",
img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon10.png',
url:"../ServiceMore/ServiceMore",
},
],
tabIndex:"0",
page_num:1,
page_size:10,
flag:false,
flag2:false,
serverList:[],//
cateList:[],
flag:false,
HotCate:'',
goodsList:[],//
}
},
methods: {
async getCateList() {
const res = await request(apiArr.getCateList, 'POST', {
page_num: this.page_num,
page_size: this.page_size,
area: uni.getStorageSync('city')
})
let flag = false
console.log(res, 'res');
if (res.rows && res.rows.length == this.page_size) {
flag = true
} else {
flag = false
}
res.rows && res.rows.forEach(item => {
item.photo = item.photo ? picUrl + item.photo : '';
item.appoints.forEach(items => {
items.photo = picUrl + items.photo
})
})
console.log(res, 'reresss');
this.serverList = this.serverList.concat(res.rows || []);
this.cateList = res.rows || [];
this.flag = flag;
this.page_num = this.page_num + 1;
},
// 使
async getHotCate(){
const res = await request(apiArr.getHotCate, 'POST', {});
console.log('getHotCategetHotCate', res);
this.HotCate = res;
},
//
async getAllList(){
const res = await request(apiArr.getAllList, 'POST', {
cate_id: 0,
page_num: 1,
page_size: 50,
area: uni.getStorageSync('city')
})
let flag = false
if(res.rows && res.rows.length == this.page_size){
flag = true
}else{
flag = false
}
if(res.rows){
res.rows.forEach(item=>{
item.photo = picUrl + item.photo
})
}
this.tabList = res.rows;
this.flag = flag;
this.page_num = this.page_num + 1;
},
//
async getShopList(){
const res = await request(apiArr.getShopList, 'POST', {
page_num: this.page_num,
page_size: this.page_size
});
if(res?.list){
let flag2 = false
if(res.list.length == this.page_size){
flag2 = true
}else{
flag2 = false
}
res.list.forEach(item=>{
item.photo = picUrl + item.photo
});
this.goodsList = this.goodsList.concat(res.list || []);
this.flag2 = flag2;
this.page_num = this.page_num + 1;
}
},
jump(id){
NavgateTo(`/packages/communityService/serviceMore/index?id=${id}`, { isLogin: false });
},
// tab
changeTab(e){
const { tab } = e.currentTarget.dataset;
this.tabIndex = tab;
this.page_num = 1;
this.flag = false;
this.flag2 = false;
this.serverList = [];
this.goodsList = [];
if(tab == 0){
this.getCateList()
}else{
this.getShopList()
}
},
headerItemClick(e) {
const { id } = e.currentTarget.dataset;
NavgateTo(`/packages/communityService/reservation/index?id=${id}`, {isLogin: false });
},
headerShopClick(id){
NavgateTo(`/packages/communityService/shopDetail/index?id=${id}`, { isLogin: false });
},
call(e){
console.log('11111', e);
uni.makePhoneCall({
phoneNumber: e,
fail(err) {
console.log('取消拨打', err)
}
})
},
},
onLoad() {
this.getCateList(); //
this.getAllList(); //
this.getHotCate(); //
this.getShopList(); //
},
onReachBottom() {
if(this.tabIndex == 0){
if(this.flag){
this.getCateList()
}
}else{
if(this.flag2){
this.getShopList()
}
}
},
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,110 @@
image {
width: 100%;
height: 100%;
}
.box {
padding-bottom: 160rpx;
}
.reservation_img {
width: 750rpx;
height: 502rpx;
overflow: hidden;
}
.reservation_img image {
width: 100%;
height: 100%;
}
.Tit {
font-weight: 400;
font-size: 40rpx;
color: #000000;
margin-left: 20rpx;
margin-top: 40rpx;
}
.money {
display: flex;
font-weight: 400;
font-size: 36rpx;
color: #FF512A;
align-items: center;
margin-top: 20rpx;
margin-left: 20rpx;
margin-bottom: 10rpx;
}
.money view {
font-size: 60rpx;
margin-top: -19rpx;
}
.money text {
font-size: 24rpx;
}
.row {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 40rpx;
padding-top: 30rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx solid #E6E6E6;
}
.row_tit {
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.row_con {
font-weight: 400;
font-size: 24rpx;
color: #222222;
}
.none {
border: none;
}
.gray {
margin-top: 14rpx;
}
.Tit2 {
font-weight: bold;
font-size: 32rpx;
color: #222222;
margin-left: 20rpx;
margin-top: 30rpx;
}
.server {
margin: 0 40rpx;
margin-top: 30rpx;
font-weight: 400;
font-size: 24rpx;
color: #222222;
}
.btn {
font-weight: 400;
font-size: 36rpx;
color: #FFFFFF;
width: 650rpx;
height: 80rpx;
background: #FF512A;
border-radius: 100rpx 100rpx 100rpx 100rpx;
display: flex;
align-items: center;
justify-content: center;
position: fixed;
left: 50rpx;
right: 50rpx;
bottom: 50rpx;
}

View File

@ -0,0 +1,115 @@
<template>
<view class="box">
<view class="reservation_img">
<image :src="info.photo" mode="" />
</view>
<view class="Tit">{{info.title}}</view>
<view class="money">
<view>{{info.price}}</view>
<text>/ {{info.unit}}</text>
</view>
<view class="row">
<view class="row_tit">服务类别</view>
<view class="row_con">{{info.type_name}}</view>
</view>
<view class="row">
<view class="row_tit">营业时间</view>
<view class="row_con">{{info.biz_time}}</view>
</view>
<view class="row none">
<view class="row_tit">联系人</view>
<view class="row_con">{{info.user_name}}</view>
</view>
<view class="gray"></view>
<view class="Tit2">商家信息</view>
<view class="row">
<view class="row_tit">提供商家</view>
<view class="row_con">{{info.shop_name}}</view>
</view>
<view class="row">
<view class="row_tit">联系电话</view>
<view class="row_con" @click="call">{{info.user_mobile}}</view>
</view>
<view class="row none">
<view class="row_tit">商家地址</view>
<view class="row_con">{{info.shop_addr}}</view>
</view>
<view class="gray"></view>
<view class="Tit2">服务详情</view>
<view class="server">
{{info.intro}}
</view>
<view class="btn" @click="reservation">
立即预约
</view>
</view>
</template>
<script>
import {
apiArr
} from '../../../api/communityService';
import {
NavgateTo,
picUrl,
request
} from '../../../utils';
export default {
data() {
return {
id: "",
info: "",
}
},
methods: {
async init(id) {
const res = await request(apiArr.serverInfo, 'POST', {
appoint_id: Number(id)
});
const newRes = {
...res,
photo: picUrl + res.photo,
}
uni.setNavigationBarTitle({
title: res.title,
})
this.info = newRes;
},
//
call() {
let that = this
uni.makePhoneCall({
phoneNumber: this.info.user_mobile,
fail(err) {
console.log('取消拨打', err)
}
})
},
reservation() {
NavgateTo(`/packages/communityService/reservationApply/index?id=${this.id}`, {isLogin: false });
},
},
onLoad(options) {
this.id = options.id;
this.init(options.id);
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,172 @@
image {
width: 100%;
height: 100%;
}
.tit {
font-weight: bold;
font-size: 28rpx;
color: #222222;
margin-left: 20rpx;
margin-top: 30rpx;
margin-bottom: 10rpx;
}
.row {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 50rpx;
height: 90rpx;
border-bottom: 1rpx solid #E6E6E6;
}
.row_tit {
display: flex;
align-items: center;
font-weight: 400;
font-size: 26rpx;
color: #999999;
}
.row_tit image {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
.row_con {
text-align: right;
flex: 1;
display: flex;
align-items: flex-end;
justify-content: flex-end;
}
.row_con image {
height: 26rpx;
width: 14rpx;
margin-left: 20rpx;
}
.none {
border-bottom: none;
}
.row_tit2 {
width: 100%;
display: flex;
align-items: center;
}
.row_tit2 image {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
.row_tit2 input {
flex: 1;
}
.doorToDoor {
display: flex;
align-items: center;
margin-left: 54rpx;
margin-right: 54rpx;
justify-content: space-between;
padding: 30rpx 0;
}
.doorToDoor_tit {
font-weight: 400;
font-size: 26rpx;
color: #222222;
}
.doorToDoor_con {
display: flex;
align-items: center;
}
.selectItem {
display: flex;
font-weight: 400;
font-size: 26rpx;
color: #222222;
margin-left: 40rpx;
}
.cir {
width: 30rpx;
height: 30rpx;
border-radius: 50%;
border: 1rpx solid #555555;
margin-right: 16rpx;
}
.active {
background-color: #ff512a;
border: none;
}
.agree {
display: flex;
align-items: center;
margin-left: 54rpx;
padding: 30rpx 0;
font-weight: 400;
font-size: 26rpx;
color: #FF512A;
}
.btn {
font-weight: 400;
font-size: 36rpx;
color: #FFFFFF;
width: 650rpx;
height: 80rpx;
background: #FF512A;
border-radius: 100rpx 100rpx 100rpx 100rpx;
margin: 0 auto;
margin-top: 30rpx;
display: flex;
align-items: center;
justify-content: center;
}
.popBox {
height: 60vh;
width: 80vw;
padding: 30rpx;
position: relative;
top: 0;
left: 0;
overflow: hidden;
overflow-y: auto;
padding-bottom: 100rpx;
}
.tit2 {
font-weight: bold;
font-size: 28rpx;
color: #222222;
text-align: center;
margin-bottom: 20rpx;
}
.know {
width: 400rpx;
height: 60rpx;
border-radius: 20rpx;
background-color: #FF512A;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 32rpx;
position: absolute;
left: 50%;
bottom: 20rpx;
transform: translateX(-50%);
}

View File

@ -0,0 +1,392 @@
<template>
<view class="container">
<view class="box">
<view class="tit">请填写预约信息</view>
<view class="row none" v-if="isreal == 1">
<view class="row_tit">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon1.png" mode="" />
请选择上门时间
</view>
<view class="row_con" @click="changeShow">
{{time}}
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view>
</view>
<view class="row none" v-if="isreal == 2">
<view class="row_tit">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon2.png" mode="" />
请选择服务时间
</view>
<view class="row_con" @click="changeShow2">
{{serTime}}
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view>
</view>
<view class="gray"></view>
<view class="row">
<view class="row_tit">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon3.png" mode="" />
联系人姓名
</view>
<view class="row_con">
<input
type="text"
placeholder="请填写联系人姓名"
placeholder-style="font-size: 26rpx;color: #999999;"
:value="name"
data-name='name'
@input="headerInputClick"
/>
</view>
</view>
<view class="row">
<view class="row_tit">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon4.png" mode="" />
联系人电话
</view>
<view class="row_con">
<input
type="number"
maxlength="11"
placeholder="请填写联系人电话"
placeholder-style="font-size: 26rpx;color: #999999;"
:value="phone"
data-name='phone'
@input="headerInputClick"
/>
</view>
</view>
<view class="row">
<view class="row_tit">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon5.png" mode="" />
请选择服务地址
</view>
<view class="row_con" @click="changeArea">
{{citys}}
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view>
</view>
<view class="row none">
<view class="row_tit">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon5.png" mode="" />
详细地址
</view>
<view class="row_con">
<input
type="text"
placeholder="请填写详细地址"
placeholder-style="font-size: 26rpx;color: #999999;"
:value="add"
data-name='add'
@input="headerInputClick"
/>
</view>
</view>
<view class="gray"></view>
<view class="doorToDoor">
<view class="doorToDoor_tit">是否上门服务</view>
<view class="selectItem" @click="changeCir(1)">
<view :class="['cir', isreal == 1 ? 'active' : '']"></view>
</view>
<view class="selectItem" @click="changeCir(2)">
<view :class="['cir', isreal == 2 ? 'active' : '']"></view>
</view>
</view>
<view class="gray"></view>
<view class="row none">
<view class="row_tit2">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon6.png" mode="" />
<input
type="text"
placeholder="给商家捎句话"
placeholder-style="font-size: 26rpx;color: #999999;"
:value="msg"
data-name='msg'
@input="headerInputClick"
/>
</view>
</view>
<view class="gray"></view>
<view class="agree">
<view :class="['cir', agree ? 'active' : '']" @click="changeAgree"></view>
<view @click="changeShow3">
我已阅读并同意服务合同中的内容
</view>
</view>
<view class="btn" @click="submit">提交申请 </view>
</view>
<u-datetime-picker
:show="show"
mode="datetime"
:closeOnClickOverlay="true"
:minDate="minDate"
:formatter="formatter"
@confirm="onInput"
@cancel="onClose"
@close="onClose"
/>
<areaPopup :show="show2" @selectArea='headerAreaClick' @close='onClose' />
<u-popup :show="show3" mode="center" @close="onClose" round="20rpx" closeOnClickOverlay>
<view class="pop_body">
<view class="popBox">
<view class="tit2">服务声明</view>
乙方指定的家政服务人员须遵守以下行为准则
1遵守国家各项法律法规和社会公德执行公民道德建设实施纲要自尊自强爱岗敬业遵守企业各项规章制度维护经营者和甲方的合法权益
2遵守职业道德尊重甲方生活习俗主动适应甲方视甲方如亲人不虐待所照看的老残人员不泄露甲方隐私不参与甲方家庭及邻里的矛盾纠纷不传闲话以免激化矛盾不向甲方借钱或索要财物在离开甲方家庭时要主动打开自己的包裹让其检查以示尊重
3遵守合同条款不无故违约不无故要求换户或不辞而别如与甲方发生矛盾出现甲方侵犯家政服务人员合法权益或变更服务地址服务工种等无论何种原因家政服务人员均应先行告知经营者不要擅自处理
4努力学习服务技能完成经营者和甲方安排的工作任务对不会使用的器具未经经营者指导和甲方允许不要使用未经甲方同意不使用其通讯工具和电脑等设备
5保证自身和甲方的安全不要与异性成青年人同居一室不带亲朋好友在甲方家中停留或食宿不擅自外出或夜不归宿如有特殊情况不能按时返回要征得甲方同意要注意防火防盗
 第九条 服务人员仪态仪表   乙方指定的家政服务人员须遵守以下仪态仪表要求   1讲究个人卫生着装整洁大方不能过于随意不穿紧身衣裤或过于暴露的服装   2佩戴饰物要适当不浓妆艳抹不留长指甲和涂指甲油
3言谈举止大方得体与甲方交流时要正视对方不要左顾右盼不能双臂交叉或双手插在兜里
</view>
<view class="know" @click="onClose">我已知晓</view>
</view>
</u-popup>
</view>
</template>
<script>
import {
apiArr
} from '../../../api/communityService';
import {
request,
isPhone
} from '../../../utils';
export default {
data() {
return {
time: "", //
serTime: "", //
name: "", //
phone: "", //
citys: "", //
add: "", //
isreal: 1, //
msg: "", //
id: "",
agree: false, //
type: "1", //1 2
info: "",
GoodsMsg: "", //
orderMsg: "",
show: false,
show2: false,
show3: false,
minDate: new Date().getTime(),
formatter(type, value) {
if (type === 'year') {
return `${value}`;
}
if (type === 'month') {
return `${value}`;
}
if (type === 'day') {
return `${value}`;
}
return value;
},
}
},
methods: {
async init(id) {
const res = await request(apiArr.serverInfo, 'POST', {
appoint_id: Number(id)
});
this.info = res;
uni.setNavigationBarTitle({
title: res.title
})
},
changeShow() {
this.show = !this.show;
this.type = 1;
},
//
changeShow2() {
this.show = !this.show;
this.type = 2;
},
//
onClose(){
this.show = false;
this.show2 = false;
this.show3 = false;
},
//
onInput(event){
const date = new Date(event.value); // Date
const year = date.getFullYear(); //
const month = date.getMonth() + 1; // 0 +1
const day = date.getDate(); //
const hours =date.getHours()
const minutes = date.getMinutes();
const time = `${year}-${month}-${day} ${hours}:${minutes}`;
console.log('time', time, 'type', this.type);
this.show = false;
if(this.type == 1){
this.time = time;
}else{
this.serTime = time;
}
},
// input
headerInputClick(e) {
console.log('eeee', e)
const { name } = e.currentTarget.dataset;
const { value } = e.detail;
this[name] = value;
},
//
changeArea(){
this.show2 = true;
},
headerAreaClick(data) {
console.log('接受参数值', data);
this.citys = `${data.confirmProv.name}${data.confirmCity.area_name}${data.confirmDist.business_name}`;
this.show2 = false;
},
changeCir(e){
this.isreal = e
},
//
changeShow3(){
this.show3 = true
},
//
changeAgree(){
this.agree = !this.agree;
},
async submit() {
console.log('他啥都', this);
if(this.isreal == '1'){
if(!this.time){
uni.showToast({
title: '请选择上门时间',
icon:"none"
})
return
}
}else{
if(!this.serTime){
uni.showToast({
title: '请选择服务时间',
icon:"none"
})
return
}
}
if(!this.name){
uni.showToast({
title: '请填写联系人姓名',
icon:"none"
})
return
}
if(!this.phone){
uni.showToast({
title: '请填写联系人电话',
icon:"none"
})
return
}
if(!isPhone(this.phone)){
uni.showToast({
title: '请填写正确电话',
icon:"none"
})
return
}
if(!this.citys){
uni.showToast({
title: '请选择服务地址',
icon:"none"
})
return
}
if(!this.add){
uni.showToast({
title: '请填写详细地址',
icon:"none"
})
return
}
if(!this.agree){
uni.showToast({
title: '请阅读合同内容',
icon:"none"
})
return
}
let svctime
if(this.isreal == '1'){
svctime = this.time
}else{
svctime = this.serTime
}
uni.showLoading({
title: '申请中...',
mask:true
})
const res = await request(apiArr.createServerOrder, 'POST', {
addr: this.citys + this.add,
appoint_id: this.info.appoint_id,
capon_id: 0,
cate_id: this.info.cate_id,
name: this.name,
order_type: this.type,
shop_id: this.info.shop_id,
svctime,
tel: this.phone
}, { silent: false });
console.log('12332322', res);
this.orderMsg = res;
// that.getGoodsMsg()
}
},
onLoad(options) {
this.id = options.id;
this.init(options.id);
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,154 @@
.tabList {
display: flex;
flex-wrap: wrap;
margin-top: 40rpx;
}
.tabItem {
display: flex;
width: 20%;
align-items: center;
flex-direction: column;
margin-bottom: 46rpx;
}
.tabImg {
height: 54rpx;
}
.tabName {
font-weight: 400;
font-size: 26rpx;
color: #222222;
}
.tit {
font-weight: bold;
font-size: 32rpx;
color: #222222;
margin-left: 20rpx;
padding-top: 30rpx;
}
.serverMore {
background-color: #fff;
padding-bottom: 60rpx;
}
image {
width: 100%;
height: 100%;
}
.serverList {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 52rpx;
margin-top: 30rpx;
padding-bottom: 30rpx;
}
.serverItem {
display: flex;
flex-direction: column;
align-items: center;
font-weight: 400;
font-size: 26rpx;
color: #222222;
}
.serverItem_img {
height: 54rpx;
margin-bottom: 16rpx;
}
.List {
padding: 0 20rpx;
}
.item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx 0;
border-bottom: 1rpx solid #E6E6E6;
box-sizing: border-box;
}
.item_left {
display: flex;
align-items: center;
}
.item_left_msg_money {
display: flex;
}
.item_right {
font-weight: 400;
font-size: 26rpx;
color: #FFFFFF;
width: 150rpx;
height: 50rpx;
background: #D5AC66;
border-radius: 100rpx 100rpx 100rpx 100rpx;
display: flex;
align-items: center;
justify-content: center;
}
.item_left_img {
width: 180rpx;
height: 180rpx;
border-radius: 30rpx;
overflow: hidden;
margin-right: 20rpx;
}
.item_left_msg_tit {
font-weight: 400;
font-size: 32rpx;
color: #000000;
display: flex;
align-items: center;
}
.item_left_msg_time {
font-weight: 400;
font-size: 24rpx;
color: #999999;
margin-top: 14rpx;
}
.item_left_msg_money {
font-weight: 400;
font-size: 22rpx;
color: #FF512A;
display: flex;
align-items: center;
margin-top: 30rpx;
}
.item_left_msg_money view {
font-size: 36rpx;
}
.phone {
width: 40rpx;
height: 40rpx;
background: #FFF2DA;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-left: 20rpx;
}
.phone image {
width: 24rpx;
height: 24rpx;
}

View File

@ -0,0 +1,89 @@
<template>
<view class="serverMore">
<view class="tabList">
<view class="tabItem" v-for="(item, index) in serverList" :key="index" @click="getList2(item.cate_id)">
<view class="tabImg">
<image :src="item.photo" mode="" />
</view>
<view class="tabName">{{item.cate_name}}</view>
</view>
</view>
<view class="gray"></view>
<view class="List">
<view class="item" v-for="(item, index) in tabList" :key="index">
<view class="item_left">
<view class="item_left_img">
<image :src="item.photo" mode="widthFix" />
</view>
<view class="item_left_msg">
<view class="item_left_msg_tit">
{{item.title}}
<view class="phone" @click="call">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/phone.png" mode="widthFix" />
</view>
</view>
<view class="item_left_msg_time">服务时间{{item.biz_time}}</view>
<view class="item_left_msg_money">
<view>{{item.price}}</view>/{{item.unit}}
</view>
</view>
</view>
<view class="item_right" @click="reservation(item.appoint_id)">
预约
</view>
</view>
</view>
</view>
</template>
<script>
import { apiArr } from '../../../api/communityService';
import { picUrl, request } from '../../../utils';
export default {
data() {
return {
flag: false,
cateid: "",
page_num: 1,
page_size: 10,
serverList: [],
tabList: [],
}
},
methods: {
async getCateList(id) {
const res = await request(apiArr.getAllList, 'POST', {
cate_id: Number(id),
page_num: 1,
page_size: 50
})
let flag = false
if (res.rows && res.rows.length == this.page_size) {
flag = true
} else {
flag = false
}
res.rows && res.rows.forEach(item => {
item.photo = picUrl + item.photo
item.cate.photo = picUrl + item.cate.photo
})
console.log(res, 'ssss');
this.tabList = this.tabList.concat(res.rows || []);
this.flag = flag;
this.page_num = this.page_num + 1;
},
},
onLoad(options) {
this.cateid = options.id;
// that.getDoorToDoorList()
this.getCateList(options.id)
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,185 @@
image {
width: 100%;
height: 100%;
}
.banner {
width: 710rpx;
height: 300rpx;
border-radius: 30rpx;
margin: 0 auto;
margin-top: 30rpx;
}
.banner_pic {
width: 710rpx;
height: 300rpx;
border-radius: 20rpx;
}
.tit {
font-weight: bold;
font-size: 40rpx;
color: #000000;
margin-top: 40rpx;
margin-left: 20rpx;
margin-right: 20rpx;
padding-bottom: 30rpx;
border-bottom: 1rpx solid #E6E6E6;
}
.msg_left_1 {
display: flex;
align-items: center;
font-weight: 400;
font-size: 24rpx;
color: #000000;
}
.msg_left_2 {
display: flex;
align-items: center;
font-weight: 400;
font-size: 24rpx;
color: #000000;
}
.msg_left_1 image {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
.msg_left_2 image {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
.msg_left_1 view {
border-radius: 100rpx 100rpx 100rpx 100rpx;
border: 1rpx solid #D5AC66;
font-weight: 400;
font-size: 22rpx;
color: #D5AC66;
display: flex;
align-items: center;
justify-content: center;
margin-left: 20rpx;
padding: 2rpx 10rpx;
}
.msg {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 20rpx;
margin-right: 48rpx;
margin-top: 28rpx;
}
.msg_right {
display: flex;
align-items: center;
font-weight: 400;
font-size: 24rpx;
color: #000000;
}
.msg_right image {
width: 60rpx;
height: 60rpx;
margin-bottom: 10rpx;
}
.msg_right2 {
margin-left: 40rpx;
}
.tag {
font-weight: 400;
font-size: 22rpx;
color: #FF512A;
background: #FFD8D0;
border-radius: 100rpx 100rpx 100rpx 100rpx;
border: 1rpx solid #FF512A;
display: inline-block;
padding: 2rpx 10rpx;
margin-left: 18rpx;
}
.imgList {
display: flex;
align-items: center;
flex-wrap: wrap;
margin: 30rpx 20rpx;
}
.imgList image {
width: 120rpx;
height: 120rpx;
border-radius: 30rpx 30rpx 30rpx 30rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
}
.subtit {
font-weight: bold;
font-size: 28rpx;
color: #000000;
margin-top: 30rpx;
margin-left: 20rpx;
}
.subCon {
font-weight: 400;
font-size: 24rpx;
color: #222222;
display: flex;
align-items: center;
margin-left: 20rpx;
margin-right: 20rpx;
margin-bottom: 30rpx;
margin-top: 20rpx;
}
.subCon view {
font-weight: 400;
font-size: 24rpx;
color: #999999;
margin-left: 20rpx;
}
.payList {
display: flex;
align-items: center;
flex-direction: column;
margin-top: 60rpx;
}
.payBtn {
font-weight: 400;
font-size: 36rpx;
color: #FFFFFF;
width: 650rpx;
height: 80rpx;
background: #FF512A;
border-radius: 100rpx 100rpx 100rpx 100rpx;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 40rpx;
}
.payBtn2 {
font-weight: 400;
font-size: 36rpx;
color: #FF512A;
width: 650rpx;
height: 80rpx;
border-radius: 100rpx 100rpx 100rpx 100rpx;
border: 1rpx solid #FF512A;
display: flex;
align-items: center;
justify-content: center;
}

View File

@ -0,0 +1,99 @@
<template>
<view class="box">
<view class="banner">
<image class="banner_pic" :src="info.photo" mode="" />
</view>
<view class="tit">{{info.shop_name}}</view>
<view class="msg">
<view class="msg_left">
<view class="msg_left_1">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_time.png" mode="" />
{{info.opening_time}}-{{info.closing_time}}
<view>{{info.is_open === 1 ? '营业' :'停业'}}</view>
</view>
<view class="msg_left_2">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_add.png" mode="" />
{{info.addr}}
</view>
</view>
<view class="msg_right">
<view class="msg_right1" @click="call">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_phone.png" mode="" />
电话
</view>
<view class="msg_right2" @click="handleOptionClick">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_add.png" mode="" />
导航
</view>
</view>
</view>
<view class="imgList">
<image v-for="(item, index) in info.picList" :key="index" :data-pic="item" @click="headerPicClick" :src="item" mode="aspectFill" />
</view>
<view class="gray"></view>
<view class="gray"></view>
<view class="subtit">公告</view>
<view class="subCon">{{info.presentation}}</view>
</view>
</template>
<script>
import { picUrl, request } from '../../../utils';
import { apiArr } from '../../../api/communityService';
export default {
data() {
return {
id: "",
info: ""
}
},
methods: {
async init(id) {
const res = await request(apiArr.getGoodsDesc, 'POST', {
shop_id: Number(id)
})
const newRes = {
...res,
photo: picUrl + res.photo
};
uni.setNavigationBarTitle({
title: res.shop_name
});
this.info = newRes;
},
//
call() {
let that = this
uni.makePhoneCall({
phoneNumber: this.info.tel,
fail(err) {
console.log('取消拨打', err)
}
})
},
//
handleOptionClick() {
uni.openLocation({
latitude: Number(this.info.lat),
longitude: Number(this.info.lng),
name: this.info.shop_name,
})
},
},
onLoad(options) {
this.id = options.id;
this.init(options.id);
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,73 @@
.header {
margin-left: 20rpx;
color: #222222;
font-size: 28rpx;
font-weight: bold;
}
.item{
display:flex;
border-bottom:1px solid #e6e6e6;
height: 90rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin-left: 52rpx;
margin-right: 48rpx;
}
.item-left {
display: flex;
align-items: center;
}
.item-title {
font-size: 26rpx;
color: #999999;
}
.item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
.item-right {
/* flex: 1; */
text-align: right;
font-size: 26rpx;
font-weight: 400;
color: #222222;
}
.right-icon {
width: 40rpx;
height: 40rpx;
}
.item-right-icon {
width: 13rpx;
height: 26rpx;
}
/* TODO: 为什么不生效? */
.not-border{
border-bottom: none;
}
.item:last-child{
border-bottom:none
}
.line {
background: #F9F9F9;
height: 20rpx;
}
.desc {
font-size: 26rpx;
font-weight: 400;
color: #FF512A;
}
.quit_login {
margin: 10rpx 50rpx 0;
background: #FF512A;
border-radius: 100rpx 100rpx 100rpx 100rpx;
height: 80rpx;
color: #FFFFFF;
font-size: 36rpx;
font-weight: 400;
line-height: 80rpx;
}

View File

@ -0,0 +1,134 @@
<template>
<view class="container">
<view class="item" data-url="/packages/user/uploadAvatar/index" data-title="上传头像" @click="handleSelectClick">
<view class="item-left">
<image class="item-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_422.png" />
<view class="item-title">上传头像</view>
</view>
<van-icon name="arrow" color="#D5AC66" />
</view>
<view class="item">
<view class="item-left">
<image class="item-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Classroom.png" />
<view class="item-title">当前账户</view>
</view>
<view class="item-right">{{userInfo.user_name}}</view>
</view>
<view class="item" data-url="/packages/user/resetPwd/index" data-title="修改登录密码" data-type="login"
@click="handleSelectClick">
<view class="item-left">
<image class="item-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_423.png" />
<view class="item-title">修改登录密码</view>
</view>
<van-icon name="arrow" color="#D5AC66" />
</view>
<view class="item not-border" data-url="/packages/user/resetPwd/index" data-title="修改支付密码" data-type="pay"
@click="handleSelectClick">
<view class="item-left">
<image class="item-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_424.png" />
<view class="item-title">修改支付密码</view>
</view>
<van-icon name="arrow" color="#D5AC66" />
</view>
<!-- 灰色分割线 -->
<view class="line"></view>
<view class="item not-border">
<view class="item-left">
<image class="item-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_425.png" />
<view class="item-title">绑定手机</view>
</view>
<view class="item-right desc">{{phoneNum}}</view>
</view>
<button class="quit_login" @click="handleQuitLoginClick">退出登录</button>
<nav-footer />
</view>
</template>
<script>
import { NavgateTo, request } from '../../../utils/index';
import { apiArr } from '../../../api/login';
export default {
data() {
return {
userInfoList: [{
pic: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_422.png',
desc: '上传头像',
url: "/packages/user/uploadAvatar/index",
isShowPic: true,
},
{
pic: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Classroom.png',
desc: '当前账户',
url: "",
text: "微信用户"
},
{
pic: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_423.png',
desc: '修改登录密码',
type: 'login',
url: "/packages/user/resetPwd/index",
isShowPic: true,
},
{
pic: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_424.png',
desc: '修改支付密码',
type: 'pay',
url: "/packages/user/resetPwd/index",
isShowPic: true,
isLast: true,
},
],
userInfo: {},
phoneNum: uni.getStorageSync('phone'),
}
},
methods: {
async init() {
const res = await request(apiArr.loginInfo, 'POST', {});
this.userInfo = res;
},
// url
handleSelectClick(event) {
const { url, title, type } = event.currentTarget.dataset
if (!url) return;
NavgateTo(`${url}?title=${title}&type=${type}`, { isLogin: false })
},
/**
* 退出登录
*/
handleQuitLoginClick() {
console.log('退出登录');
uni.removeStorageSync('ctoken');
uni.removeStorageSync('userId');
uni.removeStorageSync('phone');
uni.removeStorageSync('device_id');
uni.removeStorageSync('dealerId');
uni.removeStorageSync('is_deal');
uni.removeStorageSync('is_dev');
uni.removeStorageSync('is_shop');
uni.removeStorageSync('openId');
uni.removeStorageSync('shopArea');
uni.removeStorageSync('shopId');
uni.reLaunch({
url: '/pages/index/index'
})
},
},
onLoad() {
this.init();
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,111 @@
.container {
height: 100vh;
background: linear-gradient(to bottom, #FFE7E1, #FFFFFF);
/* background-attachment: fixed; */
background-size: cover;
padding-top: 20rpx;
padding-bottom: 20%;
}
/* 头部 */
.header {
display: flex;
align-items: center;
margin-left: 25rpx;
margin-top: 83rpx;
margin-bottom: 52rpx;
}
/* 头像 */
.left {
display: flex;
width: 120rpx;
height: 120rpx;
border-radius: 50%;
overflow: hidden;
background-color: #FF7354;
margin-right: 30rpx;
justify-content: center;
align-items: center;
pointer-events: auto;
}
/* 头像图片 */
.avatar {
width: 60%;
height: 55%;
margin-bottom: 20rpx;
pointer-events: auto;
}
.user_name {
font-size: 36rpx;
color: #000000;
font-weight: bold;
margin-bottom: 14rpx;
}
.share_poster {
display: inline-block;
font-size: 24rpx;
color: #FFFFFF;
padding: 5rpx 14rpx 7rpx 15rpx;
background-color: #FF9077;
border-radius: 100rpx 100rpx 100rpx 100rpx;
}
.main {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
margin: 0 15rpx 41rpx 25rpx;
padding: 43rpx 44rpx 47rpx 34rpx;
}
.item {
flex: 1 0 calc(33.333% - 10px);
background-color: #FFFFFF;
text-align: center;
margin-bottom: 50rpx;
}
.has-margin-bottom {
margin-bottom: 0;
}
.text {
font-size: 40rpx;
font-weight: 400;
color: #222222;
margin-bottom: 14rpx;
}
.desc {
font-size: 26rpx;
font-weight: 400;
color: #999999;
}
.navigation {
margin-left: 22rpx;
font-size: 32rpx;
font-weight: bold;
}
.order {
margin-top: 24rpx;
}
.nav_icon {
width: 50rpx;
height: 50rpx;
margin-bottom: 20rpx;
}
.grid-text {
font-size: 24rpx;
}
.uicon-volume {
font-size: 28rpx !important;
}
.u-grid-item {
margin-bottom: 43rpx;
}

View File

@ -0,0 +1,132 @@
<template>
<view class="container">
<view class="header">
<view class="left">
<image class="avatar" :src="userInfo.img"></image>
</view>
<view class="right">
<view class="user_name" @click="handleUserInfoClick">
{{ userInfo.user_name ? userInfo.user_name : '微信用户' }}
(ID:{{userInfo.user_id}})
</view>
<view class="share_poster" @click="handleShareClick">推广海报</view>
</view>
</view>
<!-- 推广下级 -->
<view class="main">
<view class="item">
<view class="text">{{0}}</view>
<view class="desc">累计推广下级</view>
</view>
<view class="item">
<view class="text">{{0}}</view>
<view class="desc">累计邀请业主</view>
</view>
<view class="item">
<view class="text">{{0}}</view>
<view class="desc">累计推广订单</view>
</view>
<view class="item has-margin-bottom">
<view class="text">{{0}}</view>
<view class="desc">今日推广下级</view>
</view>
<view class="item has-margin-bottom">
<view class="text">{{0}}</view>
<view class="desc">今日邀请业主</view>
</view>
<view class="item has-margin-bottom">
<view class="text">{{0}}</view>
<view class="desc">今日推广订单</view>
</view>
</view>
<view class="navigation">功能管理</view>
<view class="order">
<!-- 功能列表 -->
<u-grid col="4" :border="false" >
<u-grid-item @click="headerOrderClick(item)" v-for="(item, index) in functional_List" :key="index">
<image class="nav_icon" :src="item.image" mode=""></image>
<text class="grid-text">{{item.name}}</text>
</u-grid-item>
</u-grid>
</view>
<nav-footer />
</view>
</template>
<script>
import { NavgateTo, picUrl, request } from '../../../utils';
import { apiArr } from '../../../api/login';
export default {
data() {
return {
functional_List: [{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_25.png",
"name": "推广海报",
"url": "/packages/user/share/index",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_26.png",
"name": "我的下级",
"url": "",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_35.png",
"name": "下级订单",
"url": "",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_30.png",
"name": "联系平台",
"url": "",
"type": "h5"
},
],
userInfo: {},
}
},
methods: {
async init() {
const res = await request(apiArr.loginInfo, 'POST', {});
const newRes = {
...res,
img: picUrl + res.img || 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_309.png',
}
this.userInfo = newRes;
},
handleUserInfoClick() {
NavgateTo('/packages/user/index/index', { isLogin: false })
},
handleShareClick() {
NavgateTo('/packages/user/share/index', { isLogin: false })
},
headerOrderClick(event) {
console.log('11111', event)
const { url } = event;
if (!url) {
uni.showModal({
title: '提示',
content: '此功能暂未开通!',
showCancel: false,
})
} else {
NavgateTo(url, { isLogin: false })
}
},
},
onLoad() {
this.init();
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,86 @@
.points-overview {
box-sizing: border-box;
display: flex;
padding: 40rpx 20rpx 30rpx;
height: 185rpx;
}
.points-overview__content {
flex: 1;
}
.points-overview__label {
font-size: 26rpx;
color: #222;
}
.points-overview__num {
margin-top: 10rpx;
margin-left: 12rpx;
font-weight: bold;
font-size: 64rpx;
line-height: 75rpx;
color: #FF512A;
}
.points-overview__action {
flex-shrink: 1;
padding: 5rpx 22rpx;
width: max-content;
height: max-content;
border-radius: 40rpx;
background-color: rgba(255, 81, 42, 0.1);
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
}
.points-overview__desc {
margin-right: 10rpx;
font-size: 26rpx;
line-height: 30rpx;
color: #FF512A;
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
}
.block-divider {
width: 100%;
height: 20rpx;
background-color: #F9F9F9;
}
.record-list {
padding: 0 20rpx;
}
.record-list-item {
padding: 30rpx 0;
font-size: 26rpx;
color: #222;
}
.record-list-item__content {
display: flex;
}
.record-list-item__label {
flex: 1;
}
.record-list-item__num {
flex-shrink: 1;
}
.record-list-item__datetime {
margin-top: 10rpx;
font-size: 22rpx;
color: #999;
}
.record-list-item + .record-list-item {
border-top: 1px solid #E6E6E6;
}

View File

@ -0,0 +1,84 @@
<template>
<view class="container">
<view class="points-overview">
<view class="points-overview__content">
<view class="points-overview__label">账户积分</view>
<view class="points-overview__num">{{ pointsNum }}</view>
</view>
<navigator class="points-overview__action" url="/packages/user/pointsRule/index">
<text class="points-overview__desc">积分规则</text>
<image
style="width: 12rpx; height: 22rpx;"
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/more.primary.12x22.png"
>
</image>
</navigator >
</view>
<view class="block-divider"></view>
<view class="record-list">
<view
v-for="(item, index ) in records"
:key="index"
class="record-list-item"
>
<view class="record-list-item__content">
<view class="record-list-item__label">{{ item.source }}</view>
<view class="record-list-item__num">+{{ item.integral }}</view>
</view>
<view class="record-list-item__datetime">{{ item.create_time }}</view>
</view>
</view>
<nav-footer />
</view>
</template>
<script>
import { request } from '../../../utils';
import { apiArr } from '../../../api/user';
export default {
data() {
return {
count: 0,
records: [],
pointsNum: 0,
}
},
methods: {
async init () {
uni.showLoading({
title: '加载中',
})
const res = await request(apiArr.signIntegral,"POST", {});
this.pointsNum = res.integral;
await this.getSignCycle();
},
async getSignCycle () {
const res = await request(apiArr.signCycle, 'POST', {});
const { start_time, end_time, day_num } = res;
this.getSignList(start_time, end_time, day_num)
},
async getSignList(startTime, endTime, dayNum) {
const res = await request(apiArr.signList, 'POST', {
page_num: 1,
page_size: dayNum,
sign_date: [startTime, endTime]
});
uni.hideLoading();
this.records = res.rows;
},
},
onLoad() {
this.init();
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,23 @@
.desc-doc {
padding: 30rpx 28rpx;
}
.desc-title {
font-weight: bold;
font-size: 36rpx;
text-align: center;
}
.section {
margin-top: 20rpx;
}
.section-content {
margin-top: 20rpx;
font-size: 24rpx;
color: #555;
}
.section-content--grey {
color: #999;
}

View File

@ -0,0 +1,44 @@
<template>
<view class="desc-doc">
<view class="desc-title">积分兑换规则</view>
<view class="section">
<view class="section-title">. 积分获取</view>
<view class="section-content">1完成购物在平台进行消费支付可即可获得官方商城积分10元可换取1积分订单支付成功后到账</view>
<view class="section-content">2平台签到赠送积分</view>
</view>
<view class="section">
<view class="section-title">. 兑换规则</view>
<view class="section-content">积分可在官方商城兑换商品</view>
<view class="section-content section-content--grey">· 折扣券官方商城定期推出积分兑换折扣卷活动兑换折扣卷后需在有效期内使用有效期及使用规则请见折扣卷详情
</view>
<view class="section-content section-content--grey">· 其他有效期及使用规则请见商品详情</view>
<view class="section-content">
兑换后会扣减兑换积分兑换的礼券及兑换积分不能退回同类礼券每笔订单限使用一张仅限本ID使用不能折算为现金也不能再次兑换为积分已兑换的礼券可在我的账户  我的积分的明细中查询兑换礼券均有有效期请及时使用
</view>
</view>
<nav-footer />
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
},
onLoad() {
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,128 @@
.container {
width: 750rpx;
height: 902rpx;
background: linear-gradient(0deg, rgba(255,182,92,0) 0%, #ED7554 80%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.header {
margin-top: 57rpx;
margin-left: 34rpx;
display: flex;
justify-content: space-between;
}
.left_detail {
border-radius: 100rpx 100rpx 100rpx 100rpx;
background: rgba(255,255,255,0.2);
overflow: auto;
display: inline-flex;
align-items: center;
padding-right: 24rpx;
}
.gold_icon {
width: 48rpx;
height: 48rpx;
margin: 8rpx 20rpx 8rpx 17rpx;
}
.points {
font-weight: 400;
font-size: 40rpx;
color: #FFFFFF;
margin-right: 25rpx;
}
.tomorrow_sign {
margin-top: 20rpx;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
}
.right_desc {
text-align: right;
font-weight: bold;
font-size: 80rpx;
background: linear-gradient(90.00002264849354deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
}
.rigth_icon {
width: 408rpx;
height: 94rpx;
}
.main {
/* width: 100%; */
background: url('https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Rectangle_112.png');
border-radius: 30px 30px 30px 30px;
border: 1px solid #FFFFFF;
padding: 25rpx 20rpx 0;
margin-top: 22rpx;
position: relative;
}
.center_icon {
width: 382rpx;
height: 283rpx;
position: absolute;
right: 0;
top: -173rpx;
}
.center_header {
width: 710rpx;
display: inline-flex;
background: #FCF7DD;
border-radius: 30rpx 30rpx 30rpx 30rpx;
}
.signed {
font-weight: 400;
font-size: 32rpx;
color: #222222;
margin: 36rpx 0 36rpx 46rpx;
}
.center_time {
font-weight: 400;
color: #D5AC66;
margin: 36rpx 28rpx 36rpx 163rpx;
font-weight: 400;
font-size: 24rpx;
}
.points_detail {
margin-top: 40rpx;
width: 750rpx;
display: flex;
flex-wrap: wrap;
}
.day_detail {
width: 90rpx;
margin-right: 10rpx;
margin-bottom: 30rpx;
}
.item {
background: #FFECE7;
border-radius: 10rpx 10rpx 10rpx 10rpx;
width: 90rpx;
height: 110rpx;
overflow: hidden;
}
.red_border {
border: 1rpx solid #FF512A;
}
.points_time {
font-weight: 400;
font-size: 24rpx;
color: #000000;
text-align: center;
margin: 11rpx 0 11rpx;
}
.points_icon {
width: 40rpx;
height: 40rpx;
margin: 0 auto;
}
.day_time {
font-weight: 400;
font-size: 24rpx;
color: #000000;
margin-top: 10rpx;
text-align: center;
}
.color_red {
color: #FF512A;
}

View File

@ -0,0 +1,300 @@
<template>
<view class="container" :style="{paddingTop: top + 'px'}">
<u-navbar title="签到积分" leftIconColor="#FFFFFF" titleStyle="color: #FFFFFF" bgColor="transparent" leftIconSize="20px"
:autoBack="true" />
<view class="header">
<view class="header_left">
<view class="left_detail" @click="headerPointsClick">
<image class="gold_icon"
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/401463152_31.png" mode="" />
<text class="points">{{pointsNum}}</text>
<u-icon color="#FFFFFF" name="arrow-right" />
</view>
<view class="tomorrow_sign">明日签到+1</view>
</view>
<view class="header_right">
<image class="rigth_icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/QIANDAO.png"
mode="" />
</view>
</view>
<view class="main">
<image class="center_icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_311.png"
mode="" />
<view class="center_header">
<view class="signed">本期已签到<text>{{checkedData}}</text></view>
<view class="center_time">{{starteTime}}~{{endTime}}</view>
</view>
<view class="points_detail">
<view class="day_detail" v-for="(item, index) in pointsList" :key="index" @click="headerSignClick">
<view :class="['item', item.today && 'red_border']">
<view v-if="item.isSign" :class="['points_time', !item.isSign && 'color_red']">{{item.time}}</view>
<view v-if="!item.isSign" :class="['points_time', !item.isSign && 'color_red']">+{{item.points}}</view>
<image class="points_icon" v-if="item.isSign"
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_518.png" mode="" />
<image class="points_icon" wx:else
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/401463152_31.png" mode="" />
</view>
<view class="day_time">{{index +1}}</view>
</view>
</view>
</view>
<footer />
</view>
</template>
<script>
import {
request,
menuButtonInfo,
NavgateTo
} from '../../../utils';
import {
apiArr
} from '../../../api/user';
export default {
data() {
return {
top: 0,
starteTime: '',
endTime: '',
points: [{
time: '01.29',
state: true,
},
{
time: '+2',
state: false,
},
{
time: '+3',
state: false,
},
{
time: '+4',
state: false,
},
{
time: '+5',
state: false,
},
{
time: '+6',
state: false,
},
{
time: '+7',
state: false,
},
{
time: '+1',
state: false,
},
{
time: '+2',
state: false,
},
{
time: '+3',
state: false,
},
{
time: '+4',
state: false,
},
{
time: '+5',
state: false,
},
{
time: '+6',
state: false,
},
{
time: '+7',
state: false,
},
{
time: '+1',
state: false,
},
{
time: '+2',
state: false,
},
{
time: '+3',
state: false,
},
{
time: '+4',
state: false,
},
{
time: '+5',
state: false,
},
{
time: '+6',
state: false,
},
{
time: '+7',
state: false,
},
{
time: '+1',
state: false,
},
{
time: '+2',
state: false,
},
{
time: '+3',
state: false,
},
{
time: '+4',
state: false,
},
{
time: '+5',
state: false,
},
{
time: '+6',
state: false,
},
{
time: '+7',
state: false,
},
{
time: '+1',
state: false,
},
{
time: '+2',
state: false,
},
],
pointsList: [],
checkedData: 0,
pointsNum: 0,
}
},
methods: {
async getIntegral() {
const res = await request(apiArr.signIntegral, 'POST', {});
this.pointsNum = res.integral
},
async init() {
uni.showLoading({
title: '加载中',
mask: true,
})
this.getIntegral();
const res = await request(apiArr.signCycle, 'POST', {});
const {
start_time,
end_time,
day_num
} = res;
const starteTime = start_time.substring(0, 10);
const endTime = end_time.substring(0, 10);
this.starteTime = starteTime;
this.endTime = endTime;
await this.getGridList(starteTime, day_num);
await this.getSignList(starteTime, endTime, day_num);
uni.hideLoading();
},
getGridList(startTime, dayNum) {
//
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, '0'); // 0+1
const day = String(today.getDate()).padStart(2, '0');
const todayString = `${year}-${month}-${day}`;
// Date
const startDate = new Date(startTime);
const dayList = Array.from({
length: dayNum
}, (_, index) => {
// Date
const currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + index);
const currentDateString = currentDate.toISOString().split('T')[0]; // YYYY-MM-DD
//
const isToday = currentDateString === todayString;
// MM.DD
const formattedDate = (`0${currentDate.getMonth() + 1}`).slice(-2) + '.' + (`0${currentDate.getDate()}`)
.slice(-2);
return {
time: formattedDate,
date: currentDateString,
points: 1,
today: isToday,
}
});
this.pointsList = dayList;
},
async getSignList(startTime, endTime, dayNum) {
const res = await request(apiArr.signList, 'POST', {
page_num: 1,
page_size: dayNum,
sign_date: [startTime, endTime]
});
const newRes = res.rows.map((item) => {
return {
...item,
day: item.day.substring(0, 10),
}
});
const updatedList = this.pointsList.map(item => {
// 使 some
const isSign = newRes.some(dayObj => dayObj.day === item.date);
// isSign
return {
...item,
isSign: isSign
};
});
this.checkedData = res.total;
this.pointsList = updatedList;
},
headerPointsClick() {
NavgateTo('/packages/user/points/index', { isLogin: false })
},
},
onLoad() {
const meun = menuButtonInfo();
this.top = meun.height + meun.top;
this.init();
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,19 @@
// 修改密码页面参数类型
export const pageOptionType = {
pay: {
title: '已绑定手机号',
defultDesc: '请输入绑定手机号',
subTitle: '支付密码',
defultSubDesc: '请输入支付密码',
type: 'pay',
btnText: '设置',
},
login: {
title: '新设密码',
defultDesc: '请输入新密码',
subTitle: '确认密码',
defultSubDesc: '请再次输入密码',
type: 'login',
btnText: '修改',
}
};

View File

@ -0,0 +1,38 @@
.item{
display:flex;
border-bottom:1px solid #e6e6e6;
height: 90rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin: 36rpx 50rpx 30rpx;
}
.item-title {
font-weight: 400;
color: #999999;
font-size: 26rpx;
}
.input-desc {
font-size: 26rpx;
font-weight: 400;
text-align: right;
}
.tips {
font-size: 24rpx;
color: #222222;
font-weight: 400;
margin: 0 14rpx 40rpx 50rpx;
}
.desc {
color: #FF512A;
}
.submit_reset {
margin: 0 50rpx;
height: 80rpx;
line-height: 80rpx;
background: #FF512A;
border-radius: 100rpx 100rpx 100rpx 100rpx;
color: #FFFFFF;
font-size: 36rpx;
font-weight: 400;
}

View File

@ -0,0 +1,151 @@
<template>
<view class="container">
<view class="item">
<view class="item-title">{{content.title}}</view>
<!-- 修改支付密码输入框 -->
<input v-if="content.type === 'pay'" class="input-desc" :value="cellPhone" type="number" maxlength="11" data-name='phone' @input="handerChangeClick" :placeholder='content.defultDesc' />
<!-- 修改登录密码输入框 -->
<input v-if="content.type === 'login'" class="input-desc" password :value="cellPhone" data-name='phone' @input="handerChangeClick" :placeholder='content.defultDesc' />
</view>
<view class="item">
<view class="item-title">{{content.subTitle}}</view>
<input class="input-desc" :value="passWord" data-name='pwd' password @input="handerChangeClick" :placeholder="content.defultSubDesc" />
</view>
<view class="tips">
<text class="desc">提示</text>
如果您是微信登录的账户请直接填写新密码然后点击确认修改即可设置登录密码
</view>
<!-- 修改支付密码禁用规则 手机号不存在 或者 手机号不足11位 或者 密码不存在 则禁止点击 -->
<button
v-if="content.type === 'pay'"
class="submit_reset"
:disabled='!cellPhone || cellPhone.length !== 11 || !passWord'
@click="handleSubmit"
>
确认{{content.btnText}}
</button>
<!-- 修改登录密码禁用规则新密码不存在 或者 确认密码不存在 则禁止点击 -->
<button
v-if="content.type === 'login'"
class="submit_reset"
:disabled='!cellPhone || !passWord'
@click="handleSubmit"
>
确认{{content.btnText}}
</button>
<nav-footer />
</view>
</template>
<script>
import { request } from '../../../utils/index';
import { pageOptionType } from './constant';
import { apiArr } from '../../../api/user';
export default {
data() {
return {
cellPhone: null,
passWord: null,
type: '',
content:{},
}
},
methods: {
//
handerChangeClick(event) {
const {value} = event.detail;
const {name} = event.currentTarget.dataset;
if (name === 'phone') {
this.cellPhone = value;
};
if (name === 'pwd') {
this.passWord = value;
}
},
//
async handleSubmit() {
/**
* 参数场景说明
* 修改登录密码页面时cellPhone 是新设密码passWord 是确认密码
* 修改支付密码页面时cellPhone 是已绑定手机号passWord 是支付密码
*/
const {cellPhone, passWord, type} = this;
if (type === 'login') {
if (cellPhone !== passWord) {
uni.showToast({
title: '新密码与确认密码不一致',
icon: 'none',
duration: 2000
});
return
}
const res = await request(apiArr.modifyPass, "POST", {
new_password: cellPhone,
conform_password: passWord,
});
uni.showToast({
title: '修改登录密码成功',
icon: 'success',
success () {
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 2000)
}
})
}
if (type === 'pay') {
const res = await request(apiArr.payPass, "POST", {
mobile: cellPhone,
pay_password: passWord,
});
uni.showToast({
title: '设置支付密码成功',
icon: 'success',
success () {
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 2000)
}
})
};
},
},
onLoad(options) {
//
uni.setNavigationBarTitle({
title: options.title
});
// type
this.content = pageOptionType[options.type];
this.type = options.type;
},
onShow() {
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,52 @@
.container {
width: 754rpx;
height: 1334rpx;
overflow-x: hidden;
/* position: relative; */
background: url('https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/Group_756.png');
background-size: 100% 100%;
}
.icon {
width: 752rpx;
height: 1334rpx;
z-index: -1;
}
.main {
width: 100%;
position: absolute;
top: 886rpx;
z-index: 10;
}
.qrcode {
width: 255rpx;
height: 255rpx;
margin: 0 auto;
}
.qrcode_pic {
width: 255rpx;
height: 255rpx;
background: #D9D9D9;
border-radius: 50%;
}
.desc {
margin-top: 32rpx;
text-align: center;
font-weight: 400;
font-size: 26rpx;
color: #000000;
}
.share_btn {
margin-top: 39rpx;
display: flex;
justify-content: space-around;
}
.save {
display: inline-flex;
font-weight: 400;
font-size: 36rpx;
color: #FF512A;
border-radius: 100rpx 100rpx 100rpx 100rpx;
border: 1rpx solid #FF512A;
padding: 10rpx 70rpx;
}

View File

@ -0,0 +1,156 @@
<template>
<view class="container">
<view class="main">
<view class="qrcode">
<image class="qrcode_pic" :src="imagePath" mode="widthFix" />
</view>
<view class="desc">扫码体验小程序</view>
<view class="share_btn">
<view class="save" @click="headerQrcodeClick">保存二维码</view>
</view>
</view>
</view>
</template>
<script>
import {
picUrl,
request
} from '../../../utils';
import {
apiArr
} from '../../../api/user';
import permision from "../../../js_sdk/wa-permission/permission.js"
export default {
data() {
return {
imagePath: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test_qrcode.jpg',
}
},
methods: {
async init() {
const res = await request(apiArr.createQrcode, 'POST', {
page: '/page/index/index',
scene: `device=${wx.getStorageSync('device_id')}`
});
let img = picUrl + res.data;
console.log('img', img)
this.imagePath = img;
},
headerQrcodeClick() {
console.log('2');
const that = this;
uni.downloadFile({
url: that.imagePath, //
success: async (res) => {
console.log('11312312313', res);
if (res.statusCode === 200) {
const tempFilePath = res.tempFilePath; //
const systemInfo = uni.getSystemInfoSync();
console.log('获取当前设备信息', systemInfo); //TODO: ios
if (systemInfo.uniPlatform === 'mp-weixin') {
// 2.
uni.getSetting({
success(settingRes) {
console.log('查询授权状态')
if (!settingRes.authSetting['scope.writePhotosAlbum']) {
//
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
//
that.saveImageToAlbum(tempFilePath);
},
fail(err) {
console.log('131111', err)
//
uni.showModal({
title: '提示',
content: '需要授权保存图片到相册,请手动打开授权设置',
success(modalRes) {
if (modalRes.confirm) {
uni.openSetting(); //
}
}
});
}
});
} else {
//
that.saveImageToAlbum(tempFilePath);
}
},
fail(err) {
console.log('检查用户授权错误', err);
}
});
return;
}
if (systemInfo.osName === 'ios') {
const result = await permision.judgeIosPermission("photoLibrary");
if (result == 1) {
// strStatus = ""
that.saveImageToAlbum(tempFilePath);
} else if (result == 0) {
// strStatus = ""
permision.gotoAppPermissionSetting()
} else {
// strStatus = "";
permision.gotoAppPermissionSetting()
}
}
if (systemInfo.osName === 'android') {
const res = await permision.requestAndroidPermission('android.permission.WRITE_EXTERNAL_STORAGE');
if (result == 1) {
// strStatus = ""
that.saveImageToAlbum(tempFilePath);
} else if (result == 0) {
// strStatus = ""
permision.gotoAppPermissionSetting()
} else {
// strStatus = ""
permision.gotoAppPermissionSetting()
}
}
}
},
fail() {
uni.showToast({
title: '图片下载失败',
icon: 'none'
});
}
});
},
saveImageToAlbum(tempFilePath) {
uni.saveImageToPhotosAlbum({
filePath: tempFilePath,
success() {
uni.showToast({
title: '保存成功',
icon: 'success'
});
},
fail() {
uni.showToast({
title: '保存失败',
icon: 'none'
});
}
});
},
},
onLoad() {
// this.init();
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -0,0 +1,49 @@
.upload {
margin: 164rpx auto 58rpx;
width: 200rpx;
height: 200rpx;
background: #F9F9F9;
border-radius: 20rpx 20rpx 20rpx 20rpx;
border: 1rpx solid #999999;
position: relative;
}
.upload_img {
width: 200rpx;
height: 200rpx;
}
.no_border {
border: none;
}
.add {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 46rpx;
height: 4rpx;
background: #999999;
}
.column {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 4rpx;
height: 46rpx;
background: #999999;
}
.tips {
text-align: center;
margin: 0 auto;
font-weight: 400;
font-size: 24rpx;
}
.desc {
color: #FF512A;
}

View File

@ -0,0 +1,87 @@
<template>
<view class="container">
<view :class="['upload', picUrl && 'no_border' ]" @click="headerUploadClick">
<view v-if="!picUrl">
<view class="add"></view>
<view class="column"></view>
</view>
<image v-if="picUrl" class="upload_img" :src="picUrl" mode="" />
</view>
<view class="tips">
<text class="desc">提示</text>
建议大小300*300像素的图片
</view>
<nav-footer />
</view>
</template>
<script>
import { request, upload, picUrl as imageUrl } from '../../../utils/index';
import { apiArr } from '../../../api/user';
export default {
data() {
return {
picUrl: '',
}
},
methods: {
headerUploadClick() {
let _this = this;
wx.showLoading({
title: '上传中',
})
uni.chooseMedia({
count: 1,
success(res) {
console.log('123131', res);
const tempFilePaths = res.tempFiles;
//
upload(tempFilePaths[0].tempFilePath,(res)=>{
let datas = JSON.parse(res)
console.log(datas.data);
let url = imageUrl + datas.data.path
_this.picUrl = url;
//
request(apiArr.avatar, "POST", {
avatar: datas.data.path
}, { silent: false, nested: true }).then((res) => {
uni.hideLoading();
uni.showToast({
title: '上传头像成功',
icon: 'success',
mask: true,
success() {
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1500)
}
})
})
})
},
fail(err) {
console.log('拉起上传图片失败', err);
uni.hideLoading();
}
})
},
},
onLoad() {
},
onShow() {
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -3,8 +3,10 @@
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app",
"navigationStyle": "custom"
"navigationStyle": "custom",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
@ -14,17 +16,25 @@
}
},
{
"path" : "pages/webview/webview",
"style" :
{
"navigationBarTitleText" : ""
"path": "pages/shopcity/shopcity",
"style": {
"navigationBarTitleText": ""
}
},
{
"path" : "pages/shopcity/shopcity",
"style" :
"path": "pages/webview/webview",
"style": {
"navigationBarTitleText": ""
}
},
{
"navigationBarTitleText" : ""
"path": "pages/user/index",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
}
],
@ -84,7 +94,7 @@
]
},
{
"root": "community",
"root": "packages/community",
"pages": [{
"path": "index/index",
"style": {
@ -154,6 +164,11 @@
"style": {
"navigationBarBackgroundColor": "#F9F9F9"
}
},
{
"path": "ownerList/index",
"style": {
}
}
]
},
@ -172,6 +187,115 @@
}
}
]
},
{
"root": "packages/user",
"pages": [{
"path": "index/index",
"style": {
"navigationBarTitleText": "账户信息",
"navigationBarBackgroundColor": "#F9F9F9",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "uploadAvatar/index",
"style": {
"navigationBarTitleText": "上传头像",
"navigationBarBackgroundColor": "#F9F9F9",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "resetPwd/index",
"style": {
"navigationBarBackgroundColor": "#F9F9F9",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "points/index",
"style": {
"navigationBarTitleText": "积分",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "pointsSign/index",
"style": {
"navigationStyle": "custom",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "pointsRule/index",
"style": {
"navigationBarTitleText": "积分规则",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "marketing/index",
"style": {
"navigationBarTitleText": "营销推广",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "share/index",
"style": {
"navigationStyle": "custom"
}
}
]
},
{
"root": "packages/communityService",
"pages": [
{
"path": "index/index",
"style": {
"navigationBarTitleText": "社区服务",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
},
{
"path": "shopDetail/index",
"style": {}
},
{
"path": "serviceMore/index",
"style": {}
},
{
"path": "reservation/index",
"style": {}
},
{
"path": "reservationApply/index",
"style": {
"usingComponents": {
"areaPopup": "/components/areaPopup/areaPopup"
}
}
}
]
}
],

View File

@ -41,7 +41,6 @@
<view class="cirList">
<view :class="['cir', currentIdx == index ? 'active' : '']" v-for="(item, index) in bannerList" :key="index">
</view>
</view>
</view>
@ -117,9 +116,10 @@
<view class="empty" v-if="current != 0 && current != 1">
<van-empty description="暂无内容" />
</view>
</view>
<!-- <Footer /> -->
</template>
@ -141,8 +141,13 @@
apiArr as apiArr2
} from '../../api/doorToDoor.js'
import nav from '../../components/nav/nav'; //1.
export default {
components: {
nav
}, //2.
data() {
return {
s: uni.getSystemInfoSync().statusBarHeight, //
@ -223,49 +228,26 @@
// name:"",
// url:"/packages/official/index/index"
// },
]
],
title: 'Hello',
currentCity: "",
}
},
methods: {
meth1() {
console.log(1);
uni.navigateTo({
url: '/kitchen/index/index',
success: res => {},
fail: () => {},
complete: () => {}
});
},
meth2() {
console.log(2);
uni.navigateTo({
url: '/reservation/index/index',
success: res => {},
fail: () => {},
complete: () => {}
});
},
meth3() {
NavgateTo('/pages/login/login', {
isLogin: false
})
},
meth4() {
NavgateTo('/community/index/index', {
isLogin: false
})
},
meth5() {
NavgateTo('/shopWrite/index/index', {
isLogin: false
})
},
meth6() {
NavgateTo('/shopWrite/list/index', {
isLogin: false
})
onShow() {
if (uni.getStorageSync('city')) {
this.currentCity = {
city: uni.getStorageSync('city')
};
} else {
uni.setStorageSync('city', uni.getStorageSync('Usercity'))
}
},
methods: {
swipers(e) {
this.currentIdx = e.detail.current
},
@ -314,6 +296,9 @@
} else {
flag = false;
}
res.rows.forEach(item=>{
item.pic = this.picUrl + item.pic
})
that.CommunityList = that.CommunityList.concat(res.rows || []);
that.flag = flag;
that.page_num = that.page_num + 1;

150
pages/user/index.css Normal file
View File

@ -0,0 +1,150 @@
.conatiner {
height: 100%;
background: linear-gradient(to bottom, #FFE7E1, #FFFFFF);
background-attachment: fixed;
background-size: cover;
padding-top: 20rpx;
padding-bottom: 20%;
}
/* 头部 */
.header {
display: flex;
align-items: center;
margin-left: 25rpx;
/* margin-top: 83rpx; */
margin-bottom: 30rpx;
pointer-events: none;
}
/* 头像 */
.avatar-container {
display: flex;
width: 120rpx;
height: 120rpx;
border-radius: 50%;
overflow: hidden;
background-color: #FF7354;
margin-right: 30rpx;
justify-content: center;
align-items: center;
pointer-events: auto;
}
/* 头像图片 */
.avatar {
/* width: 100%;
height: 100%; */
width: 73rpx;
height: 69rpx;
/* margin-bottom: 20rpx; */
pointer-events: auto;
border-radius: 50%;
overflow: hidden;
}
/* 登录/注册 */
.login-btn {
font-size: 36rpx;
pointer-events: auto;
}
.section {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-left: 20rpx;
margin-right: 20rpx;
margin-bottom: 21rpx;
}
.order {
margin-top: 24rpx;
}
.nav_icon {
width: 50rpx;
height: 50rpx;
margin-bottom: 20rpx;
}
.grid-text {
font-size: 24rpx;
}
.item {
display: flex;
width: 48%;
height: 150rpx;
background-color: #FFFFFF;
border-radius: 30rpx;
justify-content: left;
align-items: center;
/* padding-left: 28rpx; */
}
.item1 {
display: flex;
justify-content: space-around;
width: 100%;
height: 220rpx;
background-color: #FFFFFF;
align-items: center;
border-radius: 30rpx;
}
.item-owner {
margin:0 116rpx 0 116rpx;
}
.item-icon {
width: 150rpx;
height: 98rpx;
margin-left: 30rpx;
}
.item-icon1 {
width: 150rpx;
height: 120rpx;
margin-left: 30rpx;
}
.icon-img {
display: flex;
width: 72rpx;
height: 72rpx;
flex-direction: column;
margin-bottom: 28rpx;
margin-left: 17%;
}
.item-content {
display: flex;
flex-direction: column;
padding-left: 28rpx;
}
.title-item {
font-size: 26rpx;
}
.item-title {
font-size: 28rpx;
color: #333;
font-weight: bold;
margin-bottom: 5rpx;
}
.item-subtitle {
font-size: 20rpx;
color: #666;
}
.navigation {
margin-top: 29rpx;
margin-left: 22rpx;
font-size: 32rpx;
font-weight: bold;
}
.uicon-volume {
font-size: 28rpx !important;
}
.u-grid-item {
margin-bottom: 43rpx;
}

333
pages/user/index.vue Normal file
View File

@ -0,0 +1,333 @@
<template>
<view class="conatiner" :style="{paddingTop: top + 'px'}">
<view class="header" @click="toLogin">
<view class="avatar-container">
<image class="avatar"
:src="userInfo.userPic || 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_309.png'"
mode="" />
</view>
<view class="login-btn">{{userInfo.user_name ? userInfo.user_name : '登录/注册'}}</view>
</view>
<view class="section">
<view class="item" @click="handlePointsClick">
<view class="item-content">
<text class="item-title">积分</text>
<text class="item-subtitle">我的剩余积分</text>
</view>
<image class="item-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/5bf7d7dca1ff7_1.png">
</image>
</view>
<view class="item" @click="handleSignClick">
<view class="item-content">
<text class="item-title">每日签到</text>
<text class="item-subtitle">签到获取积分</text>
</view>
<image class="item-icon1" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_311.png" />
</view>
</view>
<!-- 我的社区申请业主我的设备 -->
<view class="section">
<view class="item1">
<view class="item_device" @click="handleCommunityClick">
<image class="icon-community icon-img"
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_16.png"></image>
<text class="community-title title-item">我的社区</text>
</view>
<view class="item_device" @click="handleApplyOwnerClick">
<image class="icon-owner icon-img" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Frame.png" />
<text class="owner-title title-item">申请业主</text>
</view>
<view class="item_device" @click="handleFacilityClick">
<image class="icon-device icon-img" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Frame_1.png"/>
<text class="device-title title-item">我的设备</text>
</view>
<view class="item_device" @click="handleMeApplyClick">
<image class="icon-device icon-img" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_905.png"/>
<text class="device-title title-item">我的申请</text>
</view>
</view>
</view>
<!-- 我的订单 -->
<view class="navigation">我的订单</view>
<view class="order">
<u-grid col="4" :border="false" >
<u-grid-item @click="headerOrderClick(item)" v-for="(item, index) in order_List" :key="index">
<image class="nav_icon" :src="item.image" mode=""></image>
<text class="grid-text">{{item.name}}</text>
</u-grid-item>
</u-grid>
</view>
<!-- 功能服务 -->
<view class="navigation">功能服务</view>
<view class="order">
<u-grid col="4" :border="false" >
<u-grid-item @click="headerGridItemClick(item)" v-for="(item, index) in functional_List" :key="index">
<image class="nav_icon" :src="item.image" mode=""></image>
<text class="grid-text">{{item.name}}</text>
</u-grid-item>
</u-grid>
</view>
<view v-if="!isShop">
<view class="navigation">商家服务</view>
<view class="order">
<u-grid col="4" :border="false" >
<u-grid-item @click="headerGridItemClick(item)" v-for="(item, index) in shopServer" :key="index">
<image class="nav_icon" :src="item.image" mode=""></image>
<text class="grid-text">{{item.name}}</text>
</u-grid-item>
</u-grid>
</view>
</view>
<nav-footer />
</view>
</template>
<script>
import { apiArr } from '../../api/login';
import { menuButtonInfo, NavgateTo, picUrl, request } from '../../utils/index';
export default {
data() {
return {
top: 0,
order_List: [{
image: "https://zhsq.hshuishang.com/Public/img/common/order12.png",
name: "物业账单",
type: "h5",
url: "",
},
{
image: "https://zhsq.hshuishang.com/Public/img/common/order04.png",
name: "社区服务",
type: "h5",
url: "/packages/communityService/index/index",
},
{
image: "https://zhsq.hshuishang.com/Public/img/common/order11.png",
name: "商家优惠",
type: "h5",
url: "",
},
{
image: "https://zhsq.hshuishang.com/Public/img/common/order08.png",
name: "积分商城",
type: "h5",
url: "",
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/orderIcon_1.png",
name: "社区健康",
type: "h5",
url: "",
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/orderIcon_2.png",
name: "生活缴费",
type: "h5",
url: "",
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/orderIcon_3.png",
name: "社区商城",
type: "h5",
url: "",
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/orderIcon_4.png",
name: "周边商超",
type: "h5",
url: "",
},
],
functional_List: [{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_25.png",
"name": "生活缴费",
"url": "",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_26.png",
"name": "优惠卡券",
// "url": "/packages/user/coupon/index",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_35.png",
"name": "我的卡券",
"url": "",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_30.png",
"name": "营销推广",
"url": "/packages/user/marketing/index",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_27.png",
"name": "个人设置",
"url": "/packages/user/index/index",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_29.png",
"name": "平台客服",
"url": "/packages/WaterPurifier/pages/Addfriend/Addfriend",
"type": "h5"
},
{
"image": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/repairList.png",
"name": "报修列表",
"url": "/packages/OneRepair/pages/OwnerRepairList/OwnerRepairList",
"type": "h5"
},
],
shopServer: [{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_774.png",
name: "订单核销",
type: "",
url: "/shopWrite/index/index",
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_774.png",
name: "核销列表",
type: "",
url: "/shopWrite/list/index",
},
],
userInfo: {},
isShop: false,
}
},
methods: {
//
toLogin() {
NavgateTo('/packages/user/index/index', { isLogin: false });
},
//
handlePointsClick() {
NavgateTo('/packages/user/points/index', { isLogin: false });
},
//
handleSignClick() {
NavgateTo('/packages/user/pointsSign/index', { isLogin: false });
},
//
handleCommunityClick(){
NavgateTo('/packages/community/index/index', { isLogin: false})
},
//
handleApplyOwnerClick(){
NavgateTo(`/packages/community/index/index?types=2`, { isLogin: false})
},
//
handleFacilityClick() {
this.NotOpen();
},
//
handleMeApplyClick() {
NavgateTo(`/packages/community/ownerList/index`, { isLogin: false})
},
//
headerOrderClick(event) {
console.log('123133131', event);
if(!event.url) {
this.NotOpen();
return
} else {
if (!uni.getStorageSync('city')) {
wx.showModal({
title: '提示',
content: '请先选择您的城市',
confirmText:"去选择",
complete: (res) => {
if (res.cancel) {}
if (res.confirm) {
NavgateTo( '/pages/index/shopcity', {isLogin: false})
}
}
})
return
}
console.log('选择城市');
NavgateTo( `${event.url}`, {isLogin: false})
}
},
//
headerGridItemClick(event) {
if (!event.url) {
this.NotOpen();
return
}
//
if (event.url === '/packages/WaterPurifier/pages/Addfriend/Addfriend') {
NavgateTo( event.url, { isLogin: false})
return;
}
if (event.url) {
NavgateTo( event.url, { isLogin: false})
}
},
//
NotOpen() {
uni.showModal({
title: '提示',
content: '此功能暂未开通!',
showCancel: false,
complete: (res) => {
if (res.cancel) {
}
}
})
return
},
async getUserInfo() {
const isCtoken = uni.getStorageSync('ctoken');
if (!isCtoken) return;
const res = await request(apiArr.loginInfo, 'POST', {});
const newUserInfo = {
...res,
userPic: res.img ? `${picUrl}${res.img}` : 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/person/Group_309.png'
};
this.userInfo = newUserInfo;
},
},
onLoad() {
const meun = menuButtonInfo();
this.top = meun.height + meun.top;
},
onShow() {
console.log('111');
this.getUserInfo();
},
}
</script>
<style>
@import url("./index.css");
</style>

28
project.config.json Normal file
View File

@ -0,0 +1,28 @@
{
"appid": "wx03cc6c9d66213d37",
"compileType": "miniprogram",
"libVersion": "3.8.3",
"packOptions": {
"ignore": [],
"include": []
},
"setting": {
"coverView": true,
"es6": true,
"postcss": true,
"minified": true,
"enhance": true,
"showShadowRootInWxmlPanel": true,
"packNpmRelationList": [],
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
}
},
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
}
}

View File

@ -0,0 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "uniapp-ZHSQ",
"setting": {
"compileHotReLoad": true
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"kitchen/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './kitchen/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,gBAAI,CAAC,C","file":"kitchen/kitchen.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './kitchen/kitchen.vue'\ncreatePage(Page)"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"kitchen/kitchen/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './kitchen/kitchen/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"kitchen/kitchen/index/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './kitchen/kitchen/index/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"reservation/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './reservation/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js",null,"webpack:///D:/projection/Hbuilder/uniapp-ZHSQ/reservation/index/index/index.vue?fdd0","webpack:///D:/projection/Hbuilder/uniapp-ZHSQ/reservation/index/index/index.vue?816f","webpack:///D:/projection/Hbuilder/uniapp-ZHSQ/reservation/index/index/index.vue?b627","uni-app:///kitchen/kitchen/index/index.vue"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page","data","methods"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C;;;;;;;;;;;;;ACLhB;AAAA;AAAA;AAAA;AAAA;AAAkH;AAClH;AACyD;AACL;;;AAGpD;AAC8K;AAC9K,gBAAgB,6KAAU;AAC1B,EAAE,2EAAM;AACR,EAAE,gFAAM;AACR,EAAE,yFAAe;AACjB;AACA;AACA;AACA;AACA;AACA,EAAE,oFAAU;AACZ;AACA;;AAEA;AACe,gF;;;;;;;;;;;;ACtBf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACRA;AAAA;AAAA;AAAA;AAAypB,CAAgB,+mBAAG,EAAC,C;;;;;;;;;;;;;;;;;;;;;;;;eCO7qB;EACAC;IACA,QAEA;EACA;EACAC,UAEA;AACA;AAAA,2B","file":"reservation/index/index/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './reservation/index/index/index.vue'\ncreatePage(Page)","import { render, staticRenderFns, recyclableRender, components } from \"./index.vue?vue&type=template&id=bf8d3a12&\"\nvar renderjs\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null,\n false,\n components,\n renderjs\n)\n\ncomponent.options.__file = \"reservation/index/index/index.vue\"\nexport default component.exports","export * from \"-!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--17-0!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/template.js!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./index.vue?vue&type=template&id=bf8d3a12&\"","var components\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n}\nvar recyclableRender = false\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns, recyclableRender, components }","import mod from \"-!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib/index.js!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--13-1!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib/index.js!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--13-1!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../../下载目录/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./index.vue?vue&type=script&lang=js&\"","<template>\n\t<view>\n\t\t\n\t</view>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t\n\t\t}\n\t}\n</script>\n\n<style>\n\n</style>\n"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,aAAI,CAAC,C","file":"reservation/page1/page1.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './reservation/page1/page1.vue'\ncreatePage(Page)"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,oBAAI,CAAC,C","file":"reservation/reservation.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './reservation/reservation.vue'\ncreatePage(Page)"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"reservation/reservation/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './reservation/reservation/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"subPackages/kitchen/index/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './subPackages/kitchen/index/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"sources":["uni-app:///main.js"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","createPage","Page"],"mappings":";;;;;;;;;;;;;AAAA;AAGA;AACA;AAHA;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAG1DC,UAAU,CAACC,cAAI,CAAC,C","file":"subPackages/reservation/index/index.js","sourcesContent":["import 'uni-pages';\n// @ts-ignore\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;\nimport Vue from 'vue'\nimport Page from './subPackages/reservation/index/index.vue'\ncreatePage(Page)"],"sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,8 +2,9 @@
"pages": [
"pages/index/index",
"pages/login/login",
"pages/shopcity/shopcity",
"pages/webview/webview",
"pages/shopcity/shopcity"
"pages/user/index"
],
"subPackages": [
{
@ -24,7 +25,7 @@
]
},
{
"root": "community",
"root": "packages/community",
"pages": [
"index/index",
"communityDetail/index",
@ -36,7 +37,8 @@
"repairList/index",
"repairDetail/index",
"chooseMsg/index",
"addCar/index"
"addCar/index",
"ownerList/index"
]
},
{
@ -45,6 +47,29 @@
"index/index",
"list/index"
]
},
{
"root": "packages/user",
"pages": [
"index/index",
"uploadAvatar/index",
"resetPwd/index",
"points/index",
"pointsSign/index",
"pointsRule/index",
"marketing/index",
"share/index"
]
},
{
"root": "packages/communityService",
"pages": [
"index/index",
"shopDetail/index",
"serviceMore/index",
"reservation/index",
"reservationApply/index"
]
}
],
"window": {

View File

@ -286,4 +286,8 @@ image {
height: 20rpx;
background: #F9F9F9;
}
page{
font-size: 28rpx;
padding-bottom: 120rpx;
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More