Commit 1755fb4b authored by 秦威威's avatar 秦威威

接口对接

parent 78e0aa1c
......@@ -81,6 +81,9 @@
.v-center {
align-items:center;
}
.text-left {
text-align:left;
}
.vh-center {
justify-content: center;
align-items:center;
......
......@@ -38,7 +38,7 @@ import checkUpdateApp from "@/utils/updateapp.js"
/**
* 上传图片
* @author 万世科技
* @author 小威
* @param {String} imgurl 图片地址
*/
function uploadImg(imgurl) {
......@@ -46,17 +46,15 @@ function uploadImg(imgurl) {
const token = uni.getStorageSync('token')
try {
uni.uploadFile({
url: config.domain + '/api/common/upload',
url: config.domain + '/api/oss/upload',
header: {
token
"Authorization": token
},
filePath: imgurl,
name: 'file',
success: res => {
// console.log(res)
const data = JSON.parse(res.data)
// console.log(data)
if (data.code === 1) {
if (data.code === 200) {
resolve(data.data)
} else {
reject(data)
......@@ -64,7 +62,6 @@ function uploadImg(imgurl) {
},
fail: err => {
reject(err)
// console.log(err)
}
})
} catch (err) {
......@@ -77,7 +74,7 @@ function uploadImg(imgurl) {
/**
* 打开高德地图APP
* @author 万世科技
* @author 小威
* @param {String} current_latitude 当前纬度
* @param {String} current_longitude 当前经度
* @param {String} current_address 当前所在地名称
......@@ -138,7 +135,7 @@ function openGaoDeMap(current_latitude, current_longitude, current_address, shop
/**
* 打开百度地图APP
* @author 万世科技
* @author 小威
* @param {String} current_latitude 当前纬度
* @param {String} current_longitude 当前经度
* @param {String} current_address 当前所在地名称
......@@ -389,7 +386,7 @@ const isVideo = (url) => {
/**
* 检测是否是邮箱
* @author 万世科技
* @author 小威
* @param {String} email 邮箱号
*/
function testEmail(email) {
......@@ -399,7 +396,7 @@ function testEmail(email) {
/**
* 检测是否是手机号
* @author 万世科技
* @author 小威
* @param {String} mobile 手机号
*/
function testMobile(mobile) {
......@@ -409,7 +406,7 @@ function testMobile(mobile) {
/**
* 检测是否是Url
* @author 万世科技
* @author 小威
* @param {String} url url地址
*/
function testUrl(url) {
......@@ -530,8 +527,13 @@ function toast(text) {
uni.$u.toast(text)
}
function isNull(text) {
return text == null || text == '' ? true : false
}
function isNullStr(text) {
return text == null || text == '' ? '' : text
}
/**
* 微信小程序支付或APP微信支付或APP支付宝支付
* @param {Object} orderInfo 支付信息对象
......@@ -623,6 +625,12 @@ function wxBrowserPay(params) {
);
}
function splitList(data) {
if (data == null) {
return []
}
return data.split(',')
}
const wskj_function = {
......@@ -661,7 +669,10 @@ const wskj_function = {
toast,
pay,
onSaveImageAlbum,
wxBrowserPay
wxBrowserPay,
isNullStr,
isNull,
splitList,
}
......
......@@ -43,18 +43,15 @@
images: {
immediate: true,
handler(newVal, oldVal) {
// console.log(newVal)
// console.log(this.fileList)
this.fileList = []
if (newVal) {
const urlList = newVal.split(",")
console.log(urlList)
urlList.forEach(item => {
// 防止直接传递全路径
let url = this.removeUrl(item, this.$config.domain)
this.fileList.push({
status: 'success',
message: '',
fullurl: this.$config.domain + url,
fullurl: url,
url: url
})
})
......@@ -66,15 +63,12 @@
// 删除图片
deletePic(event, type) {
this.fileList.splice(event.index, 1)
this.uploadParseData()
},
// 新增图片
async afterRead(event, type) {
// console.log(event)
let lists = [].concat(event.file)
let fileListLen = this.fileList.length
lists.map((item) => {
this.fileList.push({
...item,
......@@ -84,13 +78,13 @@
})
for (let i = 0; i < lists.length; i++) {
const result = await this.$wskj.uploadImg(lists[i].url)
// console.log(result)
console.log(result)
let item = this[[type]][fileListLen]
this.fileList.splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result.url,
fullurl: result.fullurl
fullurl: result.url
}))
fileListLen++
}
......@@ -98,6 +92,8 @@
},
uploadParseData() {
const images = this.fileList.map(item => item[this.type]).join(",")
console.log(this.fileList)
console.log(images)
this.$emit('upload', images)
},
removeUrl(str, urlToRemove) {
......
......@@ -12,6 +12,12 @@
"navigationBarTitleText": "协议"
}
},
{
"path": "pages/my/feedback",
"style": {
"navigationBarTitleText": "协议"
}
},
{
"path": "pages/wy-home",
"style": {
......
......@@ -33,45 +33,58 @@
return {
agreement: false,
code: '',
userId: ''
};
},
onLoad(options) {
this.userId = options.userId || ''
const token = uni.getStorageSync('token')
if (!token) {
if (token) {
this.$wskj.switchTab('/pages/wy-home');
}
},
onShow() {
},
methods: {
onGetphonenumber(e) {
// 获取微信授权code
const than = this
uni.login({
provider: 'weixin',
success: (loginRes) => {
this.code = loginRes.code
console.log("微信授权信息", loginRes)
console.log("手机号授权信息", e)
if (e.detail.iv && e.detail.encryptedData) {
const params = {
url: '/api/login/mobile',
loadingTip: '登录中...',
data: {
payCode: this.code,
loginCode: e.detail.code,
}
}
this.$request(params).then(res => {
console.log(res)
if (res.code === 200) {
uni.setStorageSync('token', res.data.token)
this.$wskj.switchTab('/pages/wy-home');
than.code = loginRes.code
// 获取用户信息
uni.getUserInfo({
provider: 'weixin',
success: function(infoRes) {
console.log("微信授权信息", loginRes)
console.log("微信用户信息", infoRes);
console.log("手机号授权信息", e)
if (e.detail.iv && e.detail.encryptedData) {
const params = {
url: '/api/login/mobile',
loadingTip: '登录中...',
data: {
payCode: than.code,
loginCode: e.detail.code,
encryptedData: infoRes.encryptedData,
iv: infoRes.iv,
}
}
than.$request(params).then(res => {
console.log(res)
if (res.code === 200) {
uni.setStorageSync('token', res.data.token)
than.$wskj.switchTab('/pages/wy-home');
} else {
than.$u.toast(res.msg || '登录失败')
}
})
} else {
this.$u.toast(res.msg || '登录失败')
than.$u.toast('手机号授权失败')
}
})
} else {
this.$u.toast('手机号授权失败')
}
}
});
}
});
......
<template>
<view class='container'>
<view class='container'>
<view class="wapper">
<view class="reason">
<view class="title">文字描述(必填)</view>
<view class="mt-30">
<u--textarea v-model="reason" height="260rpx" maxlength="150" placeholder="请输入(最低10个字)" count></u--textarea>
<u--textarea v-model="reason" height="260rpx" maxlength="150" placeholder="请输入(最低10个字)"
count></u--textarea>
</view>
</view>
<view class="mt-30">
<text>相关图片(必填,最多9张)</text>
<view class="control">
<upload-image
v-model="images"
maxCount="3"
width="100"
height="100"
type="fullurl"
></upload-image>
<upload-image v-model="images" maxCount="3" width="100" height="100" type="fullurl"></upload-image>
</view>
</view>
</view>
<view class="btn-box">
<view @click="onSubmit" class="fullscreen-btn">
<text>提交</text>
</view>
</view>
<!-- 提交 -->
<wskj-modal :show="submitShow" :showCancelButton="true" confirmText="确定" confirmColor="#EB7318"
@close="submitShow = false" @confirm="onConfirmSubmit" @cancel="submitShow = false">
......@@ -37,92 +32,90 @@
</view>
</view>
</wskj-modal>
</view>
</view>
</template>
<script>
export default {
data() {
return {
reason:'',
submitShow: false,
images: '',
};
},
onLoad() {
this.images = '/assets/img/qrcode.png'
},
methods: {
onSubmit(){
// console.log(this.images)
// this.images = ''
// console.log(this.images)
if(!this.reason){
return this.$u.toast('请输入内容')
}
if(!this.images){
return this.$u.toast('请至少上传一张照片')
}
if(this.reason.length < 10){
return this.$u.toast('文字描述最低10个字')
}
this.submitShow = true
export default {
data() {
return {
reason: '',
submitShow: false,
images: '',
};
},
// 提交
onConfirmSubmit(){
const params = {
url: '/api/user/yijian',
loadingTip: '',
data: {
content: this.reason,
images: this.images
onLoad() {
this.images = '/assets/img/qrcode.png'
},
methods: {
onSubmit() {
// console.log(this.images)
// this.images = ''
// console.log(this.images)
if (!this.reason) {
return this.$u.toast('请输入内容')
}
}
// console.log(params);
this.$request(params).then(res => {
// console.log(res)
this.submitShow = false
if(res.code === 1) {
this.$u.toast(res.msg || '提交成功')
this.reason = ''
this.images = ''
} else {
this.$u.toast(res.msg || '提交失败')
if (!this.images) {
return this.$u.toast('请至少上传一张照片')
}
if (this.reason.length < 10) {
return this.$u.toast('文字描述最低10个字')
}
}).catch(err => {
this.submitShow = false
this.$u.toast(err.msg || '提交失败')
})
}
},
};
this.submitShow = true
},
// 提交
onConfirmSubmit() {
const params = {
url: '/api/user/yijian',
loadingTip: '',
data: {
content: this.reason,
images: this.images
}
}
// console.log(params);
this.$request(params).then(res => {
// console.log(res)
this.submitShow = false
if (res.code === 1) {
this.$u.toast(res.msg || '提交成功')
this.reason = ''
this.images = ''
} else {
this.$u.toast(res.msg || '提交失败')
}
}).catch(err => {
this.submitShow = false
this.$u.toast(err.msg || '提交失败')
})
}
},
};
</script>
<style scoped>
.container {
padding: 30rpx;
}
.wapper {
}
.reason {
}
.reason > .title {
}
.reason > textarea {
.wapper {}
.reason {}
.reason>.title {}
.reason>textarea {
margin-top: 20rpx;
padding: 15rpx;
width: 100% !important;
border: 1px solid #ccc !important;
}
.control {
margin-top: 20rpx;
}
.btn-box {
width: 90%;
position: fixed;
......@@ -130,4 +123,4 @@ export default {
left: 50%;
margin-left: -45%;
}
</style>
</style>
\ No newline at end of file
......@@ -44,6 +44,35 @@
</view>
</view>
</u-popup>
<u-popup :show="showHh" mode="center" @close="closeHh" @open="openHh" round="20">
<view class="flex-column mlr-50" style="width:600rpx;">
<text class="fs-32 fw-600 mtb-20">楼栋号/单元号/户号</text>
<scroll-view scroll-y class="h-400">
<view v-for="(item, index) in listHh" :key="index" @click="onSelectHh(index)">
<view class="fs-24 pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text :style="selectHhIndex==index?'color: #1FCA7C;':'color: #000000;'">{{item.room}}</text>
</view>
</view>
</scroll-view>
<view class="mt-40" @click="onSubmitHh()">
<text class="plr-80 ptb-12 br-12" style="background:#1FCA7C;color: #fff;">完成</text>
</view>
</view>
</u-popup>
<!-- <view class="v-top-popup">
<u-popup :show="show" @close="close" @open="open" mode="top" :style="{ top: 100 + 'px' }">
<view class="flex-column">
<text class="fs-24 mtb-20 text-left ml-30">当前小区:{{address}}</text>
<scroll-view scroll-y>
<view v-for="(item, index) in listXq" :key="index" @click="onSelect(index)">
<view class="fs-24 pad-30 text-left" style="border-bottom: 1rpx solid #E9E9E9;">
<text>{{item.communityName}}</text>
</view>
</view>
</scroll-view>
</view>
</u-popup>
</view> -->
</view>
</template>
......@@ -51,10 +80,17 @@
export default {
data() {
return {
//选择小区用到的字段
address: '请选择',
show: false,
selectIndex: 0,
selectIndex: -1,
listXq: [],
communityId: '', //小区ID
//选择小区户号用到的字段
showHh: false,
selectHhIndex: -1,
listHh: [],
proprietorId: '', //户号id
list1: [
"https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0826%2F07b46817j00rzyq1h000kd000hs00alp.jpg&thumbnail=660x2147483647&quality=80&type=jpg",
"https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0826%2F07b46817j00rzyq1h000kd000hs00alp.jpg&thumbnail=660x2147483647&quality=80&type=jpg",
......@@ -95,7 +131,11 @@
};
},
onShow() {
this.listAll()
this.userInfo()
this.getXqList()
//获取小区信息
const addressItem = uni.getStorageSync("addressItem")
this.address = addressItem.communityName
},
methods: {
open() {
......@@ -103,7 +143,6 @@
},
close() {
this.show = false
// console.log('close');
},
onSelect(index) {
this.selectIndex = index
......@@ -111,11 +150,14 @@
onSubmit() {
this.show = false
this.address = this.listXq[this.selectIndex].communityName
this.communityId = this.listXq[this.selectIndex].communityId
uni.setStorageSync('addressItem', this.listXq[this.selectIndex])
this.getHhList()
},
listAll() {
//获取小区数据
getXqList() {
const params = {
url: '/api/community/listAll',
loadingTip: '',
method: 'GET',
data: {}
}
......@@ -124,6 +166,57 @@
this.listXq = res.data
})
},
openHh() {
this.showHh = true
},
closeHh() {
this.showHh = false
},
onSelectHh(index) {
this.selectHhIndex = index
},
onSubmitHh() {
this.showHh = false
this.proprietorId = this.listHh[this.selectHhIndex].proprietorId
this.upHh()
},
//获取户号数据
getHhList() {
const params = {
url: '/api/community/room/listAllByCommunityId/' + this.communityId,
method: 'GET',
data: {}
}
this.$request(params).then(res => {
console.log(res.data)
this.listHh = res.data
//打开户号选择的弹框
this.openHh()
})
},
upHh() {
const params = {
url: '/api/community/cut/' + this.communityId + "/" + this.proprietorId,
data: {}
}
this.$request(params).then(res => {
this.$wskj.toast("设置成功")
})
},
userInfo() {
const params = {
url: '/api/login/userInfo',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
uni.setStorageSync('userInfo', res.data)
})
},
onClick(index) {
if (index == 0) {
this.$wskj.to("/pagesMain/pages/fkdj")
......@@ -143,6 +236,7 @@
}
if (index == 4) {
this.$wskj.toast("敬请期待")
this.$wskj.to("/pages/my/feedback")
return
}
if (index == 5) {
......@@ -179,4 +273,9 @@
border-bottom: 1rpx solid #f5f5f5;
border-right: 1rpx solid #f5f5f5;
}
.v-top-popup /deep/ .u-popup__content {
border-radius: 0 0 24rpx 24rpx;
margin-top: 20%;
}
</style>
\ No newline at end of file
......@@ -3,10 +3,10 @@
<view style="background: linear-gradient( 180deg, #1FCA7C 0%, #F2F2F2 100%);">
<view class="h-300 flex flex-row-between mt-200">
<view class="flex ml-25 mt-70 v-center h-95">
<image class="w-95 h-95 br-50" src="/static/icon_logo.png"></image>
<image class="w-95 h-95 br-50" :src="userInfo.avatar"></image>
<view class="flex-column ml-10" style="color: #FFFFFF;text-align: left;" @click="onClick(3)">
<text class="fs-32 fw-700">旅行的小七仔</text>
<text class="fs-24 mt-10">177****1234</text>
<text class="fs-32 fw-700">{{userInfo.nickName}}</text>
<text class="fs-24 mt-10">{{userInfo.mobile}}</text>
</view>
</view>
<image class="w-344 h-266" src="/static/icon_my_bg.png"></image>
......@@ -18,11 +18,11 @@
<view class="flex-column br-12 pad-25" style="background: #F3FEF9;">
<view class="flex">
<image class="h-42 w-42" src="/static/icon_my_fw.png"></image>
<text class="fs-28">利达国宾中心</text>
<text class="fs-28">{{userInfo.communityName}}</text>
</view>
<text class="fs-24 h-54 lh-54 mt-30"
style="background: linear-gradient( 90deg, #CAF6E2 0%, #FFFFFF 100%);">
1栋2单元205室
{{userInfo.room}}
</text>
</view>
</view>
......@@ -58,14 +58,26 @@
export default {
data() {
return {
userInfo: {},
};
},
onLoad(options) {
onShow() {
this.getUserInfo()
},
methods: {
getUserInfo() {
const params = {
url: '/api/login/userInfo',
loadingTip: '',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
this.userInfo = res.data
uni.setStorageSync('userInfo', res.data)
})
},
onClick(index) {
if (index == 3) {
this.$wskj.to("/pagesMine/pages/zlbj")
......
......@@ -16,7 +16,6 @@
data() {
return {
};
},
onLoad(options) {
......@@ -31,11 +30,11 @@
},
onClick(index) {
if (index == 0) {
this.$wskj.to("/pagesMain/pages/bxbs_submit?type=0")
this.$wskj.to("/pagesMain/pages/bxbs_submit?type=1")
return
}
if (index == 1) {
this.$wskj.to("/pagesMain/pages/bxbs_submit?type=1")
this.$wskj.to("/pagesMain/pages/bxbs_submit?type=2")
return
}
if (index == 2) {
......@@ -43,7 +42,7 @@
return
}
if (index == 3) {
this.$wskj.to("/pagesMain/pages/fwgz")
this.$wskj.to("/pagesMain/pages/fwgz?type=1")
return
}
}
......
......@@ -11,7 +11,7 @@
:style="{ color: index==0?'#FF682D':index==1?'#EEA616':index==2?'#1FCA7C':'#23BBEE'}"
v-for="(item, index) in 4" :key="index">
<text class="mt-20 fs-36">25</text>
<text class="mb-20 fs-24">待处理</text>
<text class="mb-20 fs-24">{{index==0?'待处理':index==1?'待支付':index==2?'已完成':index==3?'已取消':''}}</text>
<view v-if="index==tabIndex"
style="background: #27CC81;height: 10rpx;width: 100%;border-radius: 12rpx;">
</view>
......@@ -22,25 +22,29 @@
</view>
<view class="overflow-y">
<scroll-view scroll-y style="height: 100%;">
<view v-for="(item, index) in 8" :key="index" @click="onClick(index)">
<view v-for="(item, index) in list" :key="index" @click="onCz('详情',index)">
<view class="flex-column br-12 mt-30 mlr-24 pad-20"
style="box-shadow: 0px 0px 15px 1px rgba(142,142,142,0.16);background: white;">
<view class="flex vh-center mt-20">
<image class="h-25 w-25 mr-15" style="background: #1FCA7C;"> </image>
<image class="h-40 w-40 mr-15" src="/static/icon_gd.png"> </image>
<text class="fs-32 fw-700" style="flex: 1;">居家报修</text>
<text>待处理</text>
<text>{{item.state==1?'待处理':item.state==2?'待支付':item.state==3?'已完成':item.state==4?'已取消':''}}</text>
</view>
<text class="fs-28 br-6 pad-20 mtb-20" style="background: #EBF5F0;">待处理</text>
<text class="fs-28 br-6 pad-20 mtb-20"
style="background: #EBF5F0;">{{item.repairsDescription}}</text>
<scroll-view scroll-x="true" scroll-with-animation="true">
<view class="flex">
<view class="w-140 h-140 mr-15" v-for="(itemImg, index2) in 10" :key="index2">
<image class="w-140 h-140" style="background: #1FCA7C;"></image>
<view class="w-140 h-140 mr-15"
v-for="(itemImg, index2) in $wskj.splitList(item.repairsImg)" :key="index2">
<image class="w-140 h-140" :src="itemImg"></image>
</view>
</view>
</scroll-view>
<view class="flex vh-center h-60 mt-20 fs-24">
<text style="flex: 1;color: #000;">2025-03-10 10:01:45</text>
<text style="color: #EEA616;">去支付</text>
<text style="flex: 1;color: #000;">{{item.repairsTime}}</text>
<text @tap.stop="onCz('关闭报修',index)" v-if="item.state==1"
style="color: #23BBEE;">关闭报修</text>
<text @tap.stop="onCz('去支付',index)" v-if="item.state==2" style="color: #EEA616;">去支付</text>
<text style="color: #27CC81;margin-left: 30rpx;">报修详情</text>
</view>
</view>
......@@ -57,14 +61,51 @@
return {
type: 0,
tabIndex: 0,
list: [],
};
},
onLoad(e) {
this.type = e.type
this.getList()
},
methods: {
onClick(index) {
this.$wskj.to("/pagesMain/pages/bxxq")
this.tabIndex = index;
this.getList()
},
onCz(e, index) {
if (e == "详情") {
this.$wskj.to("/pagesMain/pages/bxxq")
return
}
if (e == "关闭报修") {
this.gb(this.list[index].repairsId);
return
}
if (e == "去支付") {
return
}
},
getList() {
const params = {
url: '/api/repairs/userListAll?state=' + (this.tabIndex + 1),
method: 'GET',
}
this.$request(params).then(res => {
this.list = res.data
})
},
gb(id) {
const params = {
url: '/api/repairs/cancel/' + id,
method: 'PUT',
}
this.$request(params).then(res => {
this.getList()
})
}
},
};
......
......@@ -7,25 +7,25 @@
</view>
<view class="mar-20">
<view class="flex-column-center">
<image class="w-20 h-20" style="background-color: #1FCA7C;"></image>
<text>利达国宾中心</text>
<image class="w-30 h-30" src="/static/icon_home_dw.png"></image>
<text>{{userinfo.communityName}}</text>
</view>
<view class="flex-column-center fs-32 fw-700 mt-30">
<view class="flex-column-center fs-32 fw-700 mt-30 ml-10">
<image class="w-10 h-40 mr-15" style="background-color: #1FCA7C;"></image>
<text>业主信息</text>
</view>
<view class="flex-column br-12 fs-28 mt-30" style="box-shadow: 0px 0px 15px 1px rgba(142,142,142,0.16);">
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text style="color: #999999;">业主姓名</text>
<text>张三</text>
<text>{{$wskj.isNullStr(userinfo.name)}}</text>
</view>
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text style="color: #999999;">业主房间号</text>
<text>张三</text>
<text>{{$wskj.isNullStr(userinfo.room)}}</text>
</view>
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text style="color: #999999;">业主手机号</text>
<text>张三</text>
<text>{{userinfo.mobile}}</text>
</view>
</view>
<view class="flex-column-center fs-32 fw-700 mt-30">
......@@ -37,7 +37,8 @@
<u--textarea v-model="reason" height="260rpx" maxlength="100" placeholder="填写下详细报修内容,有助于工作人员快速帮您解决问题"
count border="border"></u--textarea>
<view class="mt-30">
<upload-image v-model="images" maxCount="3" width="70" height="70" type="fullurl"></upload-image>
<upload-image @upload="upload" v-model="imgurl" maxCount="3" width="70" height="70"
type="fullurl"></upload-image>
</view>
</view>
......@@ -45,16 +46,6 @@
<view @click="onSubmit" class="fullscreen-btn">
<text>提交</text>
</view>
<!-- 提交 -->
<wskj-modal :show="submitShow" :showCancelButton="true" confirmText="确定" confirmColor="#EB7318"
@close="submitShow = false" @confirm="onConfirmSubmit" @cancel="submitShow = false">
<view class="pt-40 pb-40">
<view>
<text class="fs-28">确认提交?</text>
</view>
</view>
</wskj-modal>
</view>
</template>
......@@ -65,58 +56,48 @@
title: '居家报修',
type: 0,
reason: '',
submitShow: false,
images: '',
userinfo: '',
};
},
onLoad(e) {
this.type = e.type
if (e.type == 0) {
if (e.type == 1) {
this.title = "居家报修"
} else {
this.title = "公区报事"
}
this.userinfo = uni.getStorageSync("userInfo")
},
methods: {
onSubmit() {
this.$wskj.to("/pagesMain/pages/tjsq?type=" + this.type)
// if (!this.reason) {
// return this.$u.toast('请输入内容')
// }
// if (!this.images) {
// return this.$u.toast('请至少上传一张照片')
// }
// if (this.reason.length < 10) {
// return this.$u.toast('文字描述最低10个字')
// }
// this.submitShow = true
upload(e) {
this.images = e
},
// 提交
onConfirmSubmit() {
// const params = {
// url: '/api/user/yijian',
// loadingTip: '',
// data: {
// content: this.reason,
// images: this.images
// }
// }
// // console.log(params);
// this.$request(params).then(res => {
// // console.log(res)
// this.submitShow = false
// if (res.code === 1) {
// this.$u.toast(res.msg || '提交成功')
// this.reason = ''
// this.images = ''
// } else {
// this.$u.toast(res.msg || '提交失败')
// }
// }).catch(err => {
// this.submitShow = false
// this.$u.toast(err.msg || '提交失败')
// })
onSubmit() {
console.log(this.images)
if (!this.reason) {
this.$wskj.toast('请输入报修信息');
return
}
if (!this.images) {
this.$wskj.toast('请上传图片');
return
}
const params = {
url: '/api/repairs/add',
loadingTip: '加载中...',
data: {
repairsDescription: this.reason,
repairsImg: this.images,
type: this.type
}
}
this.$request(params).then(res => {
this.$wskj.toast('提交成功')
setTimeout(() => {
this.$wskj.goBack(1)
}, 600)
})
}
},
};
......
......@@ -5,21 +5,22 @@
:title-style="{color: '#FFF'}">
</u-navbar>
<view class=" mlr-25 mt-30 ">
<input style="height: 72rpx; text-align: center;border:1rpx solid #F2F2F2; border-radius:36rpx ;"
placeholder="搜索" placeholder-style="color:#fff" />
<input
style="height: 72rpx; text-align: center;border:1rpx solid #F2F2F2; border-radius:36rpx;color: #fff;"
placeholder="搜索" placeholder-style="color:#fff" @input="search" />
</view>
</view>
<view class="overflow-y mlr-25"
style="background: white;border-top-left-radius: 20rpx;border-top-right-radius: 20rpx;margin-top: -250rpx;">
<scroll-view scroll-y style="height: 100%;">
<view class="mar-20">
<view v-for="(item, index) in 40" :key="index">
<view v-for="(item, index) in filteredList(searchKey)" :key="index">
<view class="flex" style="border:1rpx solid #20CA7D;">
<view class="flex vh-center ptb-20 fs-24" style="flex: 1;border-right:1rpx solid #1FCA7C;">
天气预报
{{item.name}}
</view>
<view class="flex vh-center fs-28" style="flex: 1;border-right:1rpx solid #1FCA7C;">
12121
{{item.phone}}
</view>
<view class="flex vh-center" style="flex: 1;" @click="onZd(index)">
<view class="flex-column vh-center" style="flex: 1;">
......@@ -28,7 +29,7 @@
<image v-else class="w-30 h-30" src="/pagesMain/static/icon_cydh_zd.png"></image>
<text style="color: #999999;font-size: 18rpx;">{{index==0?"取消置顶":"置顶"}}</text>
</view>
<view class="flex-column vh-center ml-30" style="flex: 1;" @click="onBd('10086')">
<view class="flex-column vh-center ml-30" style="flex: 1;" @click="onBd(item.phone)">
<image class="w-30 h-30" src="/pagesMain/static/icon_cydh_dh.png"></image>
<text style="color: #999999;font-size: 18rpx;">一键拨打</text>
</view>
......@@ -49,11 +50,15 @@
export default {
data() {
return {
list: [],
searchKey: '',
};
},
onLoad(e) {
},
onShow() {
this.listAll()
},
methods: {
onZd(index) {
......@@ -64,6 +69,28 @@
}
},
search(event) {
this.searchKey = event.detail.value
console.log(this.filteredList(this.searchKey))
},
filteredList(e) {
return e == '' ? this.list : this.list.filter(item => {
// 筛选条件:名称包含关键词(忽略大小写)
return item.name.includes(e)
})
},
listAll() {
const params = {
url: '/api/commonPhone/listAll',
loadingTip: '',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
console.log(res.data)
this.list = res.data
})
},
onBd(phone) {
this.$wskj.onCall(phone)
}
......
......@@ -9,53 +9,59 @@
<view class="mar-20 fs-32 fw-600" style="text-align: left;">访客登记</view>
<view class="list-container">
<view class="list-item">
<view class="flex" style="flex: 1;text-align: left;">
<view class="flex w-220" style="text-align: left;">
<text class="t">*</text>
<text class="name">访客姓名</text>
</view>
<view style="flex: 2;">
<input class="" style="text-align: left;" placeholder="请输入姓名"
placeholder-style="color:#999999" />
<view style="flex: 1;">
<input class="" style="text-align: left;" placeholder="请输入姓名" placeholder-style="color:#999999"
v-model="data.guestName" />
</view>
</view>
<view class="list-item" @click="show=true">
<view class="flex" style="flex: 1;text-align: left;">
<view class="list-item" @click="open">
<view class="flex w-220" style="text-align: left;">
<text class="t">*</text>
<text class="name">到访小区</text>
</view>
<view class="flex-column-center" style="flex: 2;">
<text style="flex: 1;text-align: left;">请选择小区</text>
<view class="flex-column-center" style="flex: 1;">
<text style="flex: 1;text-align: left;"
v-model="data.communityId">{{address==''?'请选择小区':address}}</text>
<image class="h-20 w-20" src="@/static/icon_r.png"></image>
</view>
</view>
<view class="list-item">
<view class="flex" style="flex: 1;text-align: left;">
<view class="flex w-220" style="text-align: left;">
<text class="t">*</text>
<text class="name">到访房间号</text>
</view>
<view style="flex: 2;">
<input class="" style="text-align: left;" placeholder="请输入房间号"
placeholder-style="color:#999999" />
<view style="flex: 1;">
<input class="" style="text-align: left;" placeholder="请输入房间号" placeholder-style="color:#999999"
v-model="data.guestRoom" />
</view>
</view>
<view class="list-item" @click="showDate = true">
<view class="flex" style="flex: 1;text-align: left;">
<view class="list-item">
<view class="flex w-220" style="text-align: left;">
<text class="t">*</text>
<text class="name">到访时间</text>
<text class="name">手机号</text>
</view>
<view class="flex-column-center" style="flex: 2;">
<text style="flex: 1;text-align: left;">{{startTimeValue==""?"请选择到访时间":startTimeValue}}</text>
<image class="h-20 w-20" src="@/static/icon_r.png"></image>
<view style="flex: 1;">
<input class="" style="text-align: left;" placeholder="请输入手机号" placeholder-style="color:#999999"
v-model="data.guestPhone" />
</view>
</view>
<view class="list-item">
<view class="flex" style="flex: 1;text-align: left;">
<view class="flex w-220" style="text-align: left;">
<text class="t">*</text>
<text class="name">手机号</text>
<text class="name">验证码</text>
</view>
<view style="flex: 2;">
<input class="" style="text-align: left;" placeholder="请输入手机号"
placeholder-style="color:#999999" />
<view style="flex: 1;">
<input class="" style="text-align: left;" placeholder="请输入验证码" placeholder-style="color:#999999"
v-model="data.phoneCode" />
</view>
<view>
<u-toast ref="uToast"></u-toast>
<u-code seconds="60" ref="uCode" @change="codeChange"></u-code>
<u-button @tap="getCode">{{tips}}</u-button>
</view>
</view>
<view class="list-item">
......@@ -64,35 +70,32 @@
<text class="name">车牌号</text>
</view>
<view style="flex: 2;">
<input class="" style="text-align: left;" placeholder="请输入车牌号"
placeholder-style="color:#999999" />
<input class="" style="text-align: left;" placeholder="请输入车牌号" placeholder-style="color:#999999"
v-model="data.plateNumber" />
</view>
</view>
</view>
</view>
<view class="mt-65">
<text class="plr-100 ptb-25 br-12 fs-30" style="background:#1FCA7C;color: #fff;">提交</text>
<text class="plr-100 ptb-25 br-12 fs-30" style="background:#1FCA7C;color: #fff;" @click="onAdd">提交</text>
</view>
<u-popup :show="show" mode="center" @close="close" @open="open" round="20">
<view class="flex-column mlr-50" style="width:600rpx;">
<text class="fs-32 fw-600 mtb-20">选择小区</text>
<scroll-view scroll-y class="h-400">
<view v-for="(item, index) in 8" :key="index">
<view v-for="(item, index) in listXq" :key="index" @click="onSelect(index)">
<view class="fs-24 pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text>西城小区</text>
<text
:style="selectIndex==index?'color: #1FCA7C;':'color: #000000;'">{{item.communityName}}</text>
</view>
</view>
</scroll-view>
<view class="mt-40">
<view class="mt-40" @click="onSubmit()">
<text class="plr-80 ptb-12 br-12" style="background:#1FCA7C;color: #fff;">下一步</text>
</view>
</view>
</u-popup>
<u-datetime-picker ref="datetimePicker" :show="showDate" v-model="startTime" mode="date" :formatter="formatter"
:closeOnClickOverlay="true" @confirm="onConfirmStartTime" @cancel="onCloseStartTime"
@close="onCloseStartTime"></u-datetime-picker>
</view>
</template>
......@@ -100,10 +103,19 @@
export default {
data() {
return {
showDate: false,
startTimeValue: "",
startTime: new Date().getTime(),
tips: '',
show: false,
selectIndex: -1,
address: '',
data: {
guestName: "", //访客姓名
guestPhone: "", //访客手机
communityId: 0, //小区ID
guestRoom: "", //访客房间号
plateNumber: "", //车牌号
phoneCode: "" //手机验证码
},
listXq: [],
list1: [
"https://zhongqian.xnszz.com/1-images/home/20250213002.png",
],
......@@ -131,43 +143,94 @@
};
},
onLoad(options) {
},
onReady() {
// 微信小程序需要用此写法
this.$refs.datetimePicker.setFormatter(this.formatter)
this.listAll()
},
methods: {
open() {
// console.log('open');
//选择小区
listAll() {
const params = {
url: '/api/community/listAll',
loadingTip: '',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
console.log(res.data)
this.listXq = res.data
})
},
close() {
onSelect(index) {
this.selectIndex = index
},
onSubmit() {
this.show = false
// console.log('close');
this.data.communityId = this.listXq[this.selectIndex].communityId;
this.address = this.listXq[this.selectIndex].communityName;
uni.setStorageSync('addressItem', this.listXq[this.selectIndex]);
},
formatter(type, value) {
if (type === 'year') {
return `${value}年`
}
if (type === 'month') {
return `${value}月`
//获取验证码
codeChange(text) {
this.tips = text;
},
getCode() {
if (!this.data.guestPhone) {
this.$wskj.toast('请输入手机号');
return
}
if (type === 'day') {
return `${value}日`
if (this.$refs.uCode.canGetCode) {
const params = {
url: '/api/login/sendSmsCode',
loadingTip: '',
method: 'GET',
data: {
mobile: this.data.guestPhone
}
}
this.$request(params).then(res => {
this.$refs.uCode.start();
})
} else {
this.$wskj.toast('倒计时结束后再发送');
}
return value
},
onOpenStartTime() {
this.showDate = true
},
onCloseStartTime() {
this.showDate = false
//新增访客
onAdd() {
if (!this.data.guestName) {
this.$wskj.toast('请输入姓名');
return
}
if (!this.data.communityId) {
this.$wskj.toast('请选择小区');
return
}
if (!this.data.guestRoom) {
this.$wskj.toast('请输入房间号');
return
}
if (!this.data.guestPhone) {
this.$wskj.toast('请输入手机号');
return
}
if (!this.data.phoneCode) {
this.$wskj.toast('请输入验证码');
return
}
const params = {
url: '/api/guest/add',
loadingTip: '加载中...',
data: this.data
}
this.$request(params).then(res => {
})
},
onConfirmStartTime(e) {
this.onCloseStartTime()
this.startTimeValue = this.$wskj.timeFormat(e.value, 'yyyy-mm-dd')
this.$emit('onConfirmStartTime', this.startTimeValue)
open() {
this.show = true
},
close() {
this.show = false
}
}
};
</script>
......
<template>
<view class='center'>
<view style="background: linear-gradient( 180deg, #1FCA7C 0%, #F2F2F2 100%);">
<u-navbar :autoBack="true" title="报修详情" placeholder="true" bgColor="transparent" leftIconColor="#FFF"
<u-navbar :autoBack="true" title="服务规则说明" placeholder="true" bgColor="transparent" leftIconColor="#FFF"
:title-style="{color: '#FFF'}">
</u-navbar>
<view class="h-300 flex flex-row-between v-center ml-60 mr-35">
......@@ -18,10 +18,7 @@
<scroll-view scroll-y style="height: 100%;">
<view class="mar-20">
<u-parse :content="content"></u-parse>
</view>
</scroll-view>
</view>
</view>
......@@ -40,48 +37,19 @@
};
},
onLoad(e) {
this.content = decodeURIComponent("<p>露从今夜白,月是故乡明</p>")
this.onGz(1)
},
methods: {
onSubmit() {
this.$wskj.to("/pagesMain/pages/tjsq?type=" + this.type)
// if (!this.reason) {
// return this.$u.toast('请输入内容')
// }
// if (!this.images) {
// return this.$u.toast('请至少上传一张照片')
// }
// if (this.reason.length < 10) {
// return this.$u.toast('文字描述最低10个字')
// }
// this.submitShow = true
},
// 提交
onConfirmSubmit() {
// const params = {
// url: '/api/user/yijian',
// loadingTip: '',
// data: {
// content: this.reason,
// images: this.images
// }
// }
// // console.log(params);
// this.$request(params).then(res => {
// // console.log(res)
// this.submitShow = false
// if (res.code === 1) {
// this.$u.toast(res.msg || '提交成功')
// this.reason = ''
// this.images = ''
// } else {
// this.$u.toast(res.msg || '提交失败')
// }
// }).catch(err => {
// this.submitShow = false
// this.$u.toast(err.msg || '提交失败')
// })
onGz(type) {
const params = {
url: '/api/rule/' + type,
loadingTip: '',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
this.content = decodeURIComponent(res.data.ruleContent)
})
}
},
};
......
......@@ -60,7 +60,7 @@
return
}
if (index == 3) {
this.$wskj.to("/pagesMain/pages/fwgz")
this.$wskj.to("/pagesMain/pages/fwgz?type=2")
return
}
}
......
......@@ -6,23 +6,19 @@
<text class="fs-32 fw-700 pad-30" style="text-align: left;">家庭成员</text>
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text>姓名</text>
<input style="text-align: right;" placeholder="请输入姓名" />
<input style="text-align: right;" placeholder="请输入姓名" v-model="data.name" />
</view>
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;" @click="open">
<!-- <view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;" @click="open">
<text>性别</text>
<view class="flex v-center">
<text>{{sex==''?"请选择":sex}}</text>
<image class="w-25 h-30 ml-10" src="/static/icon_r.png"></image>
</view>
</view>
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text>关系</text>
<input style="text-align: right;" placeholder="请输入和业主的关系" />
</view>
</view> -->
<view class="flex-row-between pad-30" style="border-bottom: 1rpx solid #E9E9E9;">
<text>手机号</text>
<input style="text-align: right;" :disabled="disabled" type="tel" maxlength="11"
placeholder="请输入手机号" />
placeholder="请输入手机号" v-model="data.phone" />
</view>
</view>
......@@ -30,12 +26,15 @@
@confirm="confirm"></u-picker>
</scroll-view>
</view>
<view class="h-140 pt-20">
<!-- <view class="fullscreen-btn">
<view class="pt-20">
<view v-if="type==0" class="fullscreen-btn mb-30" @click="onClick('确认添加')">
确认添加
</view> -->
<view class="fullscreen-btn" style="background: #FF6363;">
删除
</view>
<view v-if="type==1" class="fullscreen-btn mb-30" @click="onClick('确认修改')">
确认修改
</view>
<view v-if="type==1" class="fullscreen-btn mb-30" style="background: #FF6363;" @click="onClick('确认删除')">
确认删除
</view>
</view>
......@@ -52,11 +51,29 @@
columns: [
['', '']
],
type: 0,
userInfo: '',
data: {
id: "",
proprietorId: 0,
name: "",
phone: "",
}
};
},
onLoad(options) {
this.type = options.type
if (this.type == 1) {
this.disabled = true
}
if (!this.$wskj.isNull(options.data)) {
const json = JSON.parse(decodeURIComponent(options.data))
console.log(json)
this.data.id = json.id
this.data.name = json.name
this.data.phone = json.phone
}
this.getUserInfo()
},
methods: {
open() {
......@@ -69,7 +86,83 @@
this.show = false
this.sex = e.value[0]
console.log("LMG", e.value[0])
}
},
onClick(e) {
if (e == "确认添加") {
this.add()
return
}
if (e == "确认修改") {
this.up()
return
}
if (e == "确认删除") {
this.delete()
return
}
},
getUserInfo() {
const params = {
url: '/api/login/userInfo',
loadingTip: '',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
this.data.proprietorId = res.data.proprietorId
})
},
add() {
if (this.$wskj.isNull(this.data.name)) {
this.$wskj.toast('请输入姓名')
return
}
if (this.$wskj.isNull(this.data.phone)) {
this.$wskj.toast('请输入手机号')
return
}
const params = {
url: '/api/familyMember/add',
data: this.data
}
this.$request(params).then(res => {
this.$u.toast(res.msg || '添加成功')
setTimeout(() => {
this.$wskj.goBack(1)
}, 600)
})
},
up() {
if (this.$wskj.isNull(this.data.name)) {
this.$wskj.toast('请输入姓名')
return
}
const params = {
url: '/api/familyMember/update',
data: {
id: this.data.id,
name: this.data.name
}
}
this.$request(params).then(res => {
this.$u.toast(res.msg || '修改成功')
setTimeout(() => {
this.$wskj.goBack(1)
}, 600)
})
},
delete() {
const params = {
url: '/api/familyMember/delete/' + this.data.id,
}
this.$request(params).then(res => {
this.$u.toast(res.msg || '删除成功')
setTimeout(() => {
this.$wskj.goBack(1)
}, 600)
})
},
}
};
......
......@@ -6,12 +6,12 @@
<view class="flex-column br-12 pad-25" style="background: #F3FEF9;">
<view class="flex v-center">
<image class="h-42 w-42" src="/static/icon_my_fw.png"></image>
<text class="fs-28">利达国宾中心</text>
<text class="fs-28">{{userInfo.communityName}}</text>
<image class="h-25 w-25 mt-5" src="/static/icon_r.png"></image>
</view>
<text class="fs-24 h-54 lh-54 mt-30"
style="background: linear-gradient( 90deg, #CAF6E2 0%, #FFFFFF 100%);">
1栋2单元205室
{{userInfo.room}}
</text>
</view>
</view>
......@@ -23,19 +23,11 @@
<view class="overflow-y">
<scroll-view scroll-y style="height: 100%;">
<view @click="onClickSelecte(index)" v-for="(item, index) in 10" :key="index">
<view @click="onClickSelecte(index)" v-for="(item, index) in list" :key="index">
<view class="flex-column br-12 fs-28 pad-30 mb-20" style="background: #FFFFFF;">
<view class="flex vh-center">
<image class="w-95 h-95 br-50" src="/static/icon_logo.png"></image>
<view class="flex-column ml-20" style="text-align: left;flex: 1;">
<text class="fs-30">家庭成员1</text>
<view class="flex">
<text class="fs-22 mt-10 plr-20 ptb-5 br-4"
style="border: 1px solid #1FCA7C;color: #1FCA7C;">长辈1</text>
</view>
</view>
<text class="fs-28">17787878787</text>
<view class="flex-between-center">
<text class="fs-30">{{item.name}}</text>
<text class="fs-28">{{item.phone}}</text>
</view>
</view>
</view>
......@@ -54,13 +46,39 @@
export default {
data() {
return {
selecteIndex: 0
userInfo: '',
list: [],
};
},
onLoad(options) {
},
onShow() {
this.getUserInfo()
},
methods: {
getList() {
const params = {
url: '/api/familyMember/listAllByUserId',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
console.log(res.data)
this.list = res.data
})
},
getUserInfo() {
const params = {
url: '/api/login/userInfo',
method: 'GET',
data: {}
}
this.$request(params).then(res => {
this.userInfo = res.data
this.getList()
})
},
open() {
},
......@@ -69,13 +87,13 @@
},
onClick(index) {
if (index == 0) {
this.$wskj.to("/pagesMine/pages/jtcy")
this.$wskj.to("/pagesMine/pages/jtcy?type=0")
return
}
},
onClickSelecte(index) {
this.selecteIndex = index
this.$wskj.to("/pagesMine/pages/jtcy")
this.$wskj.to("/pagesMine/pages/jtcy?type=1&data=" + encodeURIComponent(JSON.stringify(this.list[index])))
}
}
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment