提交 7c88b774 authored 作者: 宋雄's avatar 宋雄

对接接口

上级 1452ba4a
<script> <script>
export default { export default {
globalData: { globalData: {
isMobieDevice: true, houseInfo: {},
physicalInvoiceList: [] // 新增物理发票信息 configData: {
openid: '',
sessionKey: '',
unionid: null
},
user_phone: '',
registerInfo: {
propertyName: '',
propertyCode: '',
platformName: '',
platformCode: '',
buildingId: '',
buildingName: '',
unitId: '',
unitName: '',
roomId: '',
roomName: '',
buildingStatus: '',
buildingType: '',
isDefault: 0,
relationShip: '',
residentName: '',
residentPhone: '',
sex: '',
certificateType: '',
certificateNo: ''
},
maintenanceInfo: {
repairAddress: '',
repairArticle: '',
repairTitle: '',
ownerPhone: '',
reservationTime: '',
repairDesc: '',
repairPhoto: []
},
complaintInfo: {
// complaintThem: '',
// userName: '',
// userPhone: '',
// problemDesc: '',
// complaintImg: []
complaintImg: "http://192.168.0.118:9999/sys/common/static/scott/pic/DZaw29g8jc2g8517134094d63c4f033b196de2d131c5_1686290068976.jpg,http://192.168.0.118:9999/sys/common/static/scott/pic/Zagv670TpdYHaf63c87fc76c404e7e94bcb7470a353d_1686290068677.jpg,http://192.168.0.118:9999/sys/common/static/scott/pic/rYyK6iZ8EKNEdf951feec766be4346aed5987fee273b_1686290068684.png",
complaintTheme: "邻居装修太吵",
problemDesc: "邻居每天两三点装修,太不厚道",
userId: "1666361228882726913",
userName: "张三",
userPhone: "13119098978"
}
}, },
onLaunch: function() { onLaunch: function() {
//小程序自动更新 //小程序自动更新
...@@ -33,13 +81,13 @@ ...@@ -33,13 +81,13 @@
} }
}); });
} }
let _this = this; // let _this = this;
wx.getSystemInfo({ // wx.getSystemInfo({
success: function(res) { // success: function(res) {
let platform = res.platform // let platform = res.platform
_this.globalData.isMobieDevice = platform == "ios" || platform == "android" || platform == "devtools" // _this.globalData.isMobieDevice = platform == "ios" || platform == "android" || platform == "devtools"
} // }
}) // })
}, },
onShow: function() { onShow: function() {
console.log('App Show') console.log('App Show')
......
<template>
<view>
<uni-popup ref="authorization" background-color="#fff">
<view class="content-page" @touchmove="stopTouchMove">
<view class="img-box">
<!-- <image style="width: 100rpx; height: 100rpx;margin:22rpx;" mode="aspectFill" :src="`${serverConfig.pictureURL}/images/logo.png`"></image> -->
</view>
<view class="text">为了更完美的体验,请授权获取电话</view>
<button class="login-btn" type="primary" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber" hover-class="none">手机号登录/注册</button>
<view class="refuse" @click="refuse">取消</view>
</view>
</uni-popup>
</view>
</template>
<script>
import {
analysisMobileApi,
getPropertyLoginApi,
bindingUserInfoApi
} from "@/config/api.js"
import serverConfig from "@/config/server_config.js";
export default {
data() {
return {
serverConfig,
configData: {
openid: '',
sessionKey: '',
unionid: null
}
}
},
onReady() {
const userOpenId = uni.getStorageSync('openid');
if(!userOpenId) {
wx.login({
success (res) {
if (res.code) {
getPropertyLoginApi({code: res.code}).then(row=> {
if(row.code === 200) {
getApp().globalData.configData = {...row.result}
}
})
}
}
})
}
},
methods: {
onOpenLogin() {
this.$refs.authorization.open('center')
},
stopTouchMove() {
return false
},
refuse() {
this.$emit('refuse')
this.$refs.authorization.close()
uni.showToast({
icon: "none",
title: '您拒绝了授权,登录失败!'
})
},
//获取手机号
async onGetPhoneNumber(e) {
if (e.detail.errMsg === "getPhoneNumber:fail user deny") { //用户决绝授权
//拒绝授权后弹出一些提示
uni.showModal({
content: '您拒绝了授权,登录失败!',
showCancel: false
})
} else { //允许授权
let res = await analysisMobileApi({
code: e.detail.code,
iv: e.detail.iv,
encryptedData: e.detail.encryptedData,
sessionKey: getApp().globalData.configData.sessionKey
})
if (res.code === 200 && res.result) {
this.onbindingUserInfo(res.result.purePhoneNumber)
getApp().globalData.userPhone = res.result.purePhoneNumber
}
}
},
// 绑定用户
async onbindingUserInfo(phone) {
const { openid } = getApp().globalData.configData;
let res = await bindingUserInfoApi({openId: openid, phone})
if(res.code === 200 && res.result) {
uni.setStorageSync('openid', res.result.communityUser.openid);
uni.setStorageSync('user_phone', res.result.communityUser.phone);
let userType = res.result.communityUser.userType
if(userType === '1') { // 业主
this.$emit('loginEnd', res.result.communityOwners)
} else { // 维修员
this.$emit('loginEnd', res.result.employeeVos)
}
this.$refs.authorization.close()
}
}
}
}
</script>
<style lang="scss">
.content-page {
width: 100vw;
height: 100vh;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: center;
.img-box {
width: 144rpx;
height: 144rpx;
border: 2rpx solid #E4E6E9;
border-radius: 50%;
margin-top: 200rpx;
}
.text {
font-size: 28rpx;
color: #3D3D3D;
line-height: 50rpx;
margin-top: 50rpx;
}
.login-btn {
width: 578rpx;
height: 80rpx;
line-height: 80rpx;
font-size: 28rpx;
color: #FFFFFF;
background: #6799F1;
border-radius: 200rpx;
margin-top: 72rpx;
}
.refuse {
font-size: 28rpx;
color: #767676;
line-height: 33rpx;
margin-top: 34rpx;
}
}
</style>
<template>
<checkbox-group @change="changePolicy">
<label>
<view class="policy-box">
<checkbox value="true" :checked="checked" color="#1677FF" style="transform:scale(0.8)" />
<text class="text">我已阅读并同意</text>
<text class="policy" @click.stop="readAgreement">《用户服务协议》</text>
<text class="text"></text>
<text class="policy" @click.stop="readPolicy">《隐私政策》</text>
</view>
</label>
</checkbox-group>
</template>
<script>
export default {
props: {
checked: {
type: Boolean,
default: false
}
},
methods: {
changePolicy(e) {
this.$emit('change', e.detail.value.length)
},
readPolicy() {
uni.navigateTo({
url: '/pages/policy/policy'
})
},
readAgreement() {
uni.navigateTo({
url: '/pages/policy/agreement'
})
}
}
}
</script>
<style lang="scss">
.policy-box {
padding: 0 30rpx;
font-size: 14px;
vertical-align: middle;
.text {
color: #191A23;
vertical-align: middle;
}
.policy {
color: #1677FF;
vertical-align: middle;
}
}
</style>
...@@ -4,482 +4,141 @@ import { http } from '@/config/index.js' ...@@ -4,482 +4,141 @@ import { http } from '@/config/index.js'
*config 配置项 <object> 可传 {header: {}, custom: {load: false}} *config 配置项 <object> 可传 {header: {}, custom: {load: false}}
*/ */
// 登录、获取token // 获取首页轮播图
export const customerWxToken = (params, config = {})=> { export const getPropertyAdvApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/jwt/customerWxToken', http.get('/property-central/wechat/propertyAdv/list',
{ ...params }, {
{ ...config }) data: { ...params},
.then(res=> { resolve(res) }) ...config
.catch(err=> { reject(err) }) })
})
}
// 登录、获取token
export const customerToken = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/jwt/customerToken',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 刷新token
export const refreshToken = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get('/jwt/refreshCustomerWxToken',
{ ...params},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取user信息
export const getUserInfo = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get('/jwt/user',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取企业信息
export const getOneself = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get('/api/customer/customer/getOneself',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 首页获取数据
export const getHomeData = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/portal/pass/home/homeData',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取自营商城数据
export const getPageData = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/portal/pass/platformProduct/self/pageData',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 加入购物车
export const addCartPost = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/cart/addCart',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 购物车删除
export const deleteCartGet = (id, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/order/cart/deleteCartById/${id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取购物车
export const getCartList = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get('/api/order/cart/getCartList',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取选中的购物车数据
export const findByIds = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/cart/findByIds',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取新闻详情
export const getNewsDetail = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post(`/api/portal/pass/news/detail/${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取自营商城筛选条件
export const getScreenList = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/portal/pass/platformProduct/self/searchCriteria',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 下单时获取isCreditFacilities
export const getIsCreditUser = (params = {}, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/customer/customerCreditFacilities/isCreditUser',
{...params},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 下单时获取订单详情
export const getSearchById = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post(`/api/portal/pass/platformProduct/self/searchById?id=${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 下单时获取订单地址
export const getInfoForCart = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/customer/customerExtra/infoForCart',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 立即购买提交订单
export const submitOrder = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/selforder/save',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 待办列表
export const getBuyerList = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/order/getBuyerList',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 购物车提交订单
export const generateOrder = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/cart/generateOrder',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 取消订单
export const cancelById = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/order/cancelOrder',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 关闭订单
export const closeById = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/order/closeOrder',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 删除订单
export const deleteByIds = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/order/deleteByIds',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 订单详情
export const getOrderDetail = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/order/order/getById/${params.id}`,
{...config})
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 订单流程
export const getOrderProcessList = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/order/orderProcess/getOrderProcessList/${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 获取合同列表
export const getContractList = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/contract/getContractList',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 删除合同
export const deleteContract = (id, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/order/orderProcess/getOrderProcessList/${id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 上传pdf
export const uploadFile = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.upload('/api/file/file/upload/uploadFile',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 保存合同
export const uploadSaveContract = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/contract/uploadSaveContract',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 保存合同
export const contractConfirmation = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/order/contract/contractConfirmation',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 订单流程
export const getOrderMarginInfo = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/business/margin/getOrderMarginInfo/${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 订单流程
export const getOrderMarginRecords = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/business/margin/getOrderMarginRecords/${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 缴纳定金
export const PayDeposit = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/business/margin/save',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 地址列表
export const getAddressList = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/customer/customerReceiveInfo/getReceiveList',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 定金删除
export const deleteMargin = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/business/margin/deleteMargin/${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 定金确认提交 // 登录前获取key
export const depositConfirmSubmit = (id, config = {})=> { export const getPropertyLoginApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/order/order/submitMargin/${id}`, http.get('/property-community/wechat/wxUser/login',
{}, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取收货数量记录 // 获取手机号
export const getGoodsCountByOrderId = (params, config = {})=> { export const analysisMobileApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/logistics/sendGoods/getGoodsCountByOrderId/${params.id}`, http.get('/property-community/wechat/wxUser/phone',
{}, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 根据订单id查询付尾款记录 // 绑定用户
export const getFnalPayment = (params, config = {})=> { export const bindingUserInfoApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/logistics/finalPayment/getByOrderId/${params.id}`, http.get('/property-community/wechat/wxUser/bindingUserInfo',
{}, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 支付尾款 // 查物业
export const finalPayment = (params, config = {})=> { export const getSettledListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/finalPayment/create', http.get('/property-central/wechat/propertySettled/settledList',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 提交尾款 // 查小区
export const normalConfirmPay = (params, config = {})=> { export const getCompanyListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/finalPayment/normalConfirmPay', http.get('/property-company/wechat/companyCommunity/companyList',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 新增自提信息 // 查楼栋
export const addDelivery = (params, config = {})=> { export const getBuildingListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/billLading/create', http.get('/property-community/wechat/communityBuilding/buildingList',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 更新自提信息 // 查单元
export const updateSelf = (params, config = {})=> { export const getCommunityUnitListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/billLading/update', http.get('/property-community/wechat/communityBuilding/queryCommunityUnitListByMainId',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 新增配送地址 // 查房号
export const saveDelivery = (params, config = {})=> { export const getCommunityRoomListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/customer/customerReceiveInfo/save', http.get('/property-community/wechat/communityBuilding/queryCommunityRoomByUnitId',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 更新配送地址 // 查数据字典
export const updateDelivery = (params, config = {})=> { export const getDictItemsApi = (dictCode, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/order/order/updateDelivery', http.get('/property-community/wechat/communityUser/getDictItems',
{ ...params }, {
{ ...config }) data: { dictCode },
...config,
custom: {load: false}
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 根据订单id和商品配送类型查看提货单,以此判断是否可以修改地址 // 新增房屋认证
export const getByOrderIdAndType = (params, config = {})=> { export const postcommunityOwnerAddApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/billLading/getByOrderIdAndType', http.post('/property-community/wechat/communityOwner/add',
{ ...params }, { ...params },
{ ...config }) { ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
...@@ -487,109 +146,114 @@ export const getByOrderIdAndType = (params, config = {})=> { ...@@ -487,109 +146,114 @@ export const getByOrderIdAndType = (params, config = {})=> {
}) })
} }
// 获取对账信息 // 获取用户信息
export const getAccountStatementByOrderId = (params, config = {})=> { export const queryCommunityRoomByUnitIdApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/reconcilationRecords/getAccountStatementByOrderId', http.get('/property-community/wechat/communityUser/queryByOpenId',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 更改订单状态 // 获取小区详情
export const updateStatusStage = (params, config = {})=> { export const queryByOpenIddApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/order/rpc/order/updateStatusStage', http.get('/property-community/wechat/communityOwner/queryById',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取收货记录 // 编辑小区详情
export const getSendGoodsByOrder = (params, config = {})=> { export const editByOpenIdApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/sendGoods/getSendGoodsByOrder', http.get('/property-community/wechat/communityOwner/edit',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取收货记录 // 删除小区详情
// export const receiveGoods = (params, config = {})=> { export const deleteByOpenIdApi = (params, config = {})=> {
// return new Promise((resolve, reject)=> {
// http.post('/api/logistics/sendGoods/receiveGoods',
// { ...params },
// { ...config })
// .then(res=> { resolve(res) })
// .catch(err=> { reject(err) })
// })
// }
// 获取收货记录
export const receiveGoods = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/deliveryNotice/takeGoods', http.get('/property-community/wechat/communityOwner/delete',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取物理发票 // 登录后获取首页详情
export const getCustomerInvoive = (params, config = {})=> { export const getCommunityInfoApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get('/api/customer/customer/getCustomerInvoive', http.get('/property-community/wechat/communityUser/getCommunityInfo',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取未对账单 // 登录后获取首页详情
export const getNoAccountStatement = (params, config = {})=> { export const getAdvertisementApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/reconcilationRecords/getNoAccountStatement', http.get('/property-company/wechat/companyCommunity/queryList',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 删除发票 // 消息通知列表
export const deleteInvoiceInfo = (params, config = {})=> { export const getUserNoticeListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/customer/customerInvoiceInfo/delete/${params.id}`, http.get('/property-community/wechat/userNotice/list',
{}, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取发票详情 // 消息通知详情
export const getInvoiceInfo = (params, config = {})=> { export const getUserNoticeDetailApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/customer/customerInvoiceInfo/getOne/${params.id}`, http.get('/property-community/wechat/userNotice/queryById',
{}, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 新增发票 // 更新消息已读状态
export const saveInvoiceInfo = (params, config = {})=> { export const updateStatusApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/customer/customerInvoiceInfo/save', http.post('/property-community/wechat/userNotice/edit',
{ ...params }, { ...params },
{ ...config }) { ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
...@@ -597,32 +261,36 @@ export const saveInvoiceInfo = (params, config = {})=> { ...@@ -597,32 +261,36 @@ export const saveInvoiceInfo = (params, config = {})=> {
}) })
} }
// 获取商品发票记录 // 维修上报列表
export const getProductInvoiceByOrderId = (params, config = {})=> { export const getCommunityRepairListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/productInvoice/getProductInvoiceByOrderId', http.get('/property-community/wechat/communityRepair/list',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 物理发票添加或列表 // 维修上报详情
export const getInvoiceInfoByOrderId = (params, config = {})=> { export const getCommunityRepairDetailApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/logistics/invoiceInfo/getInvoiceInfoByOrderId/${params.id}`, http.get('/property-community/wechat/communityRepair/queryById',
{}, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 选择物理发票 // 新增维修上报
export const choseInvoice = (params, config = {})=> { export const addCommunityRepairApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/invoiceInfo/saveInvoice', http.post('/property-community/wechat/communityRepair/add',
{ ...params }, { ...params },
{ ...config }) { ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
...@@ -630,21 +298,10 @@ export const choseInvoice = (params, config = {})=> { ...@@ -630,21 +298,10 @@ export const choseInvoice = (params, config = {})=> {
}) })
} }
// 删除物理发票 // 修改维修上报
export const deletePhysicalInvoiceInfo = (params, config = {})=> { export const editCommunityRepairApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.get(`/api/logistics/invoiceInfo/delete/${params.id}`, http.post('/property-community/wechat/communityRepair/edit',
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 保存或者修改物理发票
export const saveProductInvoiceInfo = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/logistics/invoiceInfo/batchUpdate',
{ ...params }, { ...params },
{ ...config }) { ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
...@@ -652,76 +309,49 @@ export const saveProductInvoiceInfo = (params, config = {})=> { ...@@ -652,76 +309,49 @@ export const saveProductInvoiceInfo = (params, config = {})=> {
}) })
} }
// 对账驳回 // 删除维修上报
export const rejectAccountStatement = (params, config = {})=> { export const deleteCommunityRepairApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/reconcilationRecords/rejectAccountStatement', http.get('/property-community/wechat/communityRepair/delete',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 对账同意 // 投诉列表
export const agreeAccountStatement = (params, config = {})=> { export const getCommunityComplaintListApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/reconcilationRecords/agreeAccountStatement', http.get('/property-community/wechat/communityComplaint/list',
{ ...params }, {
{ ...config }) data: { ...params},
.then(res=> { resolve(res) }) ...config
.catch(err=> { reject(err) }) })
})
}
// 提交物理发票
export const batchSaveInvoice = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/logistics/productInvoice/batchSaveInvoice',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 删除商品发票
export const deleteProductInvoiceInfo = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get(`/api/logistics/productInvoice/delete${params.id}`,
{},
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 退出登录
export const logout = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.get('/jwt/logout',
{...params},
{ ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 获取购物车数量 // 投诉详情
export const getCartNumApi = (params, config = {})=> { export const getCommunityComplaintDetailApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/portal/pass/cart/getCartNum', http.get('/property-community/wechat/communityComplaint/queryById',
{ ...params }, {
{ ...config }) data: { ...params},
...config
})
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
.catch(err=> { reject(err) }) .catch(err=> { reject(err) })
}) })
} }
// 提收货通知列表 // 新增投诉
export const getDeliveryNoticeApi = (params, config = {})=> { export const addCommunityComplaintApi = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/deliveryNotice/page', http.post('/property-community/wechat/communityComplaint/add',
{ ...params }, { ...params },
{ ...config }) { ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
...@@ -729,32 +359,10 @@ export const getDeliveryNoticeApi = (params, config = {})=> { ...@@ -729,32 +359,10 @@ export const getDeliveryNoticeApi = (params, config = {})=> {
}) })
} }
// 获取收货列表 // 上传
export const getNoticeNeedList = (params, config = {})=> { export const uploadFile = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/logistics/deliveryNotice/getNoticeNeedByOrder',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 提发货通知单详情
export const getOrderDetailByDelivery = (params, config = {})=> {
return new Promise((resolve, reject)=> {
http.post('/api/logistics/deliveryNotice/getOrderDetailByDelivery',
{ ...params },
{ ...config })
.then(res=> { resolve(res) })
.catch(err=> { reject(err) })
})
}
// 更新提发货通知单数量
export const updateReceiveCount = (params, config = {})=> {
return new Promise((resolve, reject)=> { return new Promise((resolve, reject)=> {
http.post('/api/logistics/sendGoods/updateReceiveCount', http.upload('/wechat/common/upload',
{ ...params }, { ...params },
{ ...config }) { ...config })
.then(res=> { resolve(res) }) .then(res=> { resolve(res) })
......
...@@ -5,10 +5,7 @@ const http = new Request() ...@@ -5,10 +5,7 @@ const http = new Request()
http.setConfig((config) => { /* config 为默认全局配置*/ http.setConfig((config) => { /* config 为默认全局配置*/
config.baseURL = serverConfig.baseURL; config.baseURL = serverConfig.baseURL;
config.header = { config.header = {
'Content-Type': 'application/json;charset=UTF-8', 'Content-Type': 'application/json;charset=UTF-8'
'platform_code': serverConfig.platform_code,
'platform_name': serverConfig.platform_name,
'platform_short_code': serverConfig.platform_short_code
} }
return config return config
}) })
...@@ -19,8 +16,8 @@ http.interceptors.request.use((config) => { // 可使用async await 做异步操 ...@@ -19,8 +16,8 @@ http.interceptors.request.use((config) => { // 可使用async await 做异步操
...config.header, ...config.header,
} }
//获取存储的token //获取存储的token
const token = uni.getStorageSync('token'); // const token = uni.getStorageSync('token');
config.header['X-Token'] = token; // config.header['X-Token'] = token;
// 根据custom参数中配置的是否需要loading // 根据custom参数中配置的是否需要loading
if (config.custom.load) { if (config.custom.load) {
loginPopupNum ++ loginPopupNum ++
...@@ -41,7 +38,7 @@ http.interceptors.response.use((response) => { ...@@ -41,7 +38,7 @@ http.interceptors.response.use((response) => {
uni.hideLoading(); uni.hideLoading();
} }
}, 30) }, 30)
if(response.data.success) { if(Array.isArray(response.data) || response.data.success) {
return response.data return response.data
} else { } else {
setTimeout(()=> { setTimeout(()=> {
......
...@@ -2,11 +2,8 @@ ...@@ -2,11 +2,8 @@
* 接口参数 * 接口参数
*/ */
const serverConfig = { const serverConfig = {
// baseURL: "http://192.168.0.117:8760", baseURL: "http://192.168.0.118:9999",
baseURL: "https://www.goldcloudy.com", /* 根域名 */ // baseURL: "http://220.203.25.212:9999", /* 根域名 */
// baseURL: "http://114.67.111.37:8001", /* 根域名 */ // baseURL: "http://114.67.111.37:8001" /* 根域名 */
platform_code: 'P00001',
platform_name: encodeURI('四川金路智云数字科技有限公司'),
platform_short_code: 'P00001'
} }
export default serverConfig export default serverConfig
\ No newline at end of file
...@@ -2,31 +2,17 @@ ...@@ -2,31 +2,17 @@
<view class="container"> <view class="container">
<view class="page"> <view class="page">
<view class="complaints"> <view class="complaints">
<view class="information" @click="toDetail()"> <view class="information" v-for="item in maintenanceList" :key="item.id" @click="toDetail(item.id)">
<view class="title yellow">小区垃圾桶太少<view class="tag">待处理</view> <view class="title" :class="item.handleStatus === 'finish' ? 'gray' : 'yellow'">{{item.complaintTheme}}<view class="tag">{{item.statusName}}</view>
</view> </view>
<view class="content"> <view class="content">
<view class="item"> <view class="item">
<view class="name">投诉人</view> <view class="name">投诉人</view>
<view class="detail">张三123 156****7800 </view> <view class="detail">{{item.userName}} {{item.userPhone}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">投诉时间</view> <view class="name">投诉时间</view>
<view class="detail">2022年3月12日</view> <view class="detail">{{item.complaintTime}}</view>
</view>
</view>
</view>
<view class="information" @click="toDetail()">
<view class="title gray">浴霸不出水了<view class="tag">已完成</view>
</view>
<view class="content">
<view class="item">
<view class="name">投诉人</view>
<view class="detail">张三123 156****7800 </view>
</view>
<view class="item">
<view class="name">投诉时间</view>
<view class="detail">2022年3月12日</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -39,24 +25,44 @@ ...@@ -39,24 +25,44 @@
</template> </template>
<script> <script>
import {
getCommunityComplaintListApi,
} from '@/config/api.js'
import {Moment} from '@/utils/moment.js'
const handleStatus = {
waitPending: '待处理',
finish: '处理完成'
}
export default { export default {
data() { data() {
return {} return {
maintenanceList: []
}
}, },
methods: { methods: {
toDetail() { toDetail(id) {
uni.navigateTo({ uni.navigateTo({
url: '/pages/complaintsDetail/index', url: '/pages/complaintsDetail/index?id=' + id
}); });
}, },
toEditor() { toEditor() {
uni.navigateTo({ uni.navigateTo({
url: '/pages/complaintsAdd/index', url: '/pages/complaintsAdd/index',
}); });
},
async getList() {
let {result} = await getCommunityComplaintListApi({userId: getApp().globalData.houseInfo.id})
this.maintenanceList = result.records.map(item=> {
return {
...item,
statusName: handleStatus[item.handleStatus],
complaintTime: new Moment(new Date(item.createTime).getTime()).format('YYYY-MM-DD HH:mm'),
}
})
} }
}, },
onLoad() { onLoad() {
this.getList()
}, },
onShow() { onShow() {
...@@ -110,26 +116,6 @@ ...@@ -110,26 +116,6 @@
} }
} }
.red {
border-left: 2px solid #F42E2E;
.tag {
color: #F42E2E;
border: 1px solid #F42E2E;
background-color: #FFF5F5;
}
}
.green {
border-left: 2px solid #10D680;
.tag {
color: #10D680;
border: 1px solid #10D680;
background-color: #F1FFF9;
}
}
.gray { .gray {
border-left: 2px solid #B6B6BA; border-left: 2px solid #B6B6BA;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<view class="asterisk">*</view>投诉主题 <view class="asterisk">*</view>投诉主题
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入投诉主题" /> <input class="form-item-tit" v-model="formData.complaintTheme" focus placeholder="请输入投诉主题" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
...@@ -17,8 +17,7 @@ ...@@ -17,8 +17,7 @@
<view class="asterisk">*</view>投诉人姓名 <view class="asterisk">*</view>投诉人姓名
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<view class="form-item-tit">张三</view> <input class="form-item-tit" v-model="formData.userName" focus placeholder="请输入投诉人姓名" />
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
...@@ -26,21 +25,19 @@ ...@@ -26,21 +25,19 @@
<view class="asterisk">*</view>手机号码 <view class="asterisk">*</view>手机号码
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<view class="form-item-tit">18888888888</view> <input class="form-item-tit" v-model="formData.userPhone" focus placeholder="请输入手机号码" />
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
</view> </view>
<view class="form-item-text"> <view class="form-item-text">
<view class="title">问题描述</view> <view class="title">问题描述</view>
<view class="textarea"> <view class="textarea">
<uni-easyinput type="textarea" v-model="baseFormData.introduction" <uni-easyinput type="textarea" v-model="formData.problemDesc" placeholder="请输入问题描述" />
placeholder="请输入问题描述" /></uni-easyinput>
</view> </view>
</view> </view>
<view class="form-item-text"> <view class="form-item-text">
<view class="title">问题图片(最多传三张)</view> <view class="title">问题图片(最多传三张)</view>
<view class="picker"> <view class="picker">
<uni-file-picker limit="3"></uni-file-picker> <uni-file-picker file-mediatype="image" limit="3" @select="onSelectImage"></uni-file-picker>
</view> </view>
</view> </view>
</uni-forms> </uni-forms>
...@@ -53,24 +50,88 @@ ...@@ -53,24 +50,88 @@
</template> </template>
<script> <script>
import {
uploadFile,
addCommunityComplaintApi
} from '@/config/api.js'
import serverConfig from "@/config/server_config.js";
export default { export default {
data() { data() {
return { return {
formData: { formData: {
name: '', complaintTheme: '邻居装修太吵',
}, userName: '张三',
datetimesingle: '', userPhone: '13119098978',
problemDesc: '邻居每天两三点装修,太不厚道',
complaintImg: []
}
} }
}, },
methods: { methods: {
toAudit() { async toAudit() {
// let complaintImg = this.formData.complaintImg.map(item=>item.url).join(',')
// let data =await addCommunityComplaintApi({
// ...this.formData,
// complaintImg,
// userId: getApp().globalData.houseInfo.id
// })
// getApp().globalData.complaintInfo = {
// ...this.formData,
// complaintImg,
// repairStatus: 'waitAudit'
// }
// setTimeout(()=> {
// uni.showToast({
// title: '提交成功!',
// icon: 'none'
// });
// setTimeout(()=> {
uni.navigateTo({
url: '/pages/complaintsDetail/index',
});
// }, 1500)
// }, 30)
},
uploadImage(path) {
return new Promise((resolve, reject)=> {
uploadFile({
filePath: path,
name: 'file',
formData: { //其他需要携带的参数
'biz': 'scott/pic'
}
}).then(({message})=> {
resolve(message)
}).catch(err=> {
reject(err)
})
})
},
onSelectImage(e) {
let serveList = []
e.tempFilePaths.forEach(url=> {
serveList.push(this.uploadImage(url))
})
Promise.all(serveList).then(data=> {
let list = data.map(url=> {
let chunk = url.split('.')
return {
url: serverConfig.baseURL + '/sys/common/static/' + url,
name: chunk[0],
extname: chunk[1]
}
})
this.formData.complaintImg = this.formData.complaintImg.concat(list)
}).catch(err=> {
setTimeout(()=> {
uni.showToast({
title: '上传失败,请重试!',
icon: 'none'
});
}, 30)
console.log(err)
})
} }
},
onLoad() {
},
onShow() {
} }
} }
</script> </script>
......
...@@ -3,37 +3,36 @@ ...@@ -3,37 +3,36 @@
<view class="page"> <view class="page">
<view class="complaints"> <view class="complaints">
<view class="information"> <view class="information">
<view class="title">小区垃圾桶太少</view> <view class="title">{{complaintsDetail.complaintThem || ''}}</view>
<view class="content"> <view class="content">
<view class="item"> <view class="item">
<view class="name">投诉人</view> <view class="name">投诉人</view>
<view class="detail">张三123</view> <view class="detail">{{complaintsDetail.userName || ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">投诉时间</view> <view class="name">投诉时间</view>
<view class="detail">2020年3月12日</view> <view class="detail">{{complaintsDetail.complaintTime || ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">联系方式</view> <view class="name">联系方式</view>
<view class="detail">16589000078</view> <view class="detail">{{complaintsDetail.userPhone || ''}}</view>
</view> </view>
<view class="item text"> <view class="item text">
<view class="name">问题描述</view> <view class="name">问题描述</view>
<view class="detail">校区垃圾桶太少,导致每次丢垃校区垃圾桶太少,导致每次丢垃校区垃圾桶太少,导致每次丢垃校区垃圾桶太少,导致每次丢垃</view> <view class="detail">{{complaintsDetail.problemDesc || ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">状态</view> <view class="name">状态</view>
<view class="detail"><view class="tag">已处理</view></view> <view class="detail" :class="item.handleStatus === 'finish' ? 'gray' : 'yellow'"><view class="tag">{{complaintsDetail.statusName}}</view></view>
</view> </view>
<view class="item text"> <view class="item text" v-if="complaintsDetail.handleStatus === 'finish'">
<view class="name">处理结果</view> <view class="name">处理结果</view>
<view class="detail">已安排在3、5栋门前增加垃圾桶</view> <view class="detail">{{complaintsDetail.handleResult}}</view>
</view> </view>
<view class="item text"> <view class="item text">
<view class="name">附件</view> <view class="name">附件</view>
<view class="image"> <view class="image">
<image src="../../static/images/img02.png" class="icon"></image> <image v-for="(item,index) in complaintsDetail.complaintImg" :key="index" :src="item" class="icon"></image>
<image src="../../static/images/img03.png" class="icon"></image>
</view> </view>
</view> </view>
</view> </view>
...@@ -44,13 +43,52 @@ ...@@ -44,13 +43,52 @@
</template> </template>
<script> <script>
import {
getCommunityComplaintDetailApi
} from '@/config/api.js'
import {Moment} from '@/utils/moment.js'
const handleStatus = {
waitPending: '待处理',
finish: '处理完成'
}
export default { export default {
data() { data() {
return {} return {
complaintsDetail: {
complaintThem: '',
userName: '',
userPhone: '',
problemDesc: '',
handleStatus: '',
statusName: '',
complaintImg: []
}
}
}, },
methods: {}, methods: {
onLoad() { async getDetail(id) {
let {result} = await getCommunityComplaintDetailApi({id})
this.complaintsDetail = {
...result,
complaintImg: result.complaintImg.split(','),
complaintTime: new Moment(new Date(result.createTime).getTime()).format('YYYY-MM-DD HH:mm'),
statusName: handleStatus[result.handleStatus]
}
}
},
onLoad(options) {
if(options.id) {
this.getDetail(options.id)
} else {
let complaintsDetail = getApp().globalData.complaintInfo
this.complaintsDetail = {
...complaintsDetail,
complaintImg: complaintsDetail.complaintImg.split(','),
complaintTime: new Moment().format('YYYY-MM-DD HH:mm'),
handleStatus: 'waitPending',
statusName: '待处理'
}
}
}, },
onShow() { onShow() {
...@@ -101,6 +139,17 @@ ...@@ -101,6 +139,17 @@
width: 65%; width: 65%;
font-size: 28rpx; font-size: 28rpx;
color: #373737; color: #373737;
&.yellow .tag {
color: #F1BD4D;
border: 1px solid #F1BD4D;
background-color: #FFFCF6;
}
&.gray .tag {
color: #B6B6BA;
border: 1px solid #B6B6BA;
background-color: #F8F8F8;
}
.tag { .tag {
height: 40rpx; height: 40rpx;
line-height: 40rpx; line-height: 40rpx;
...@@ -108,9 +157,6 @@ ...@@ -108,9 +157,6 @@
padding: 2rpx 20rpx; padding: 2rpx 20rpx;
border-radius: 30rpx; border-radius: 30rpx;
display: inline-block; display: inline-block;
color: #B6B6BA;
border: 1px solid #B6B6BA;
background-color: #F8F8F8;
} }
} }
} }
......
<template> <template>
<view class="container" style="background-image: url('../../static/images/bg_home.png');"> <view class="container" style="background-image: url('../../static/images/bg_home.png');">
<view class="page"> <view class="page" :style="{'padding-top': statusBarHeight + 'px'}">
<view class="nav-top" @click="toCommunity()"> <view class="nav-top-box" @click="toCommunity()">
<view class="title">汉江之星小区</view> <view class="nav-top" v-if="houseInfo.platformName">
<image src="../../static/images/icon_up.png" class="icon"></image> <view class="title">{{houseInfo.platformName}}</view>
<image v-if="houseList.length > 1" mode="aspectFill" src="../../static/images/icon_up.png" class="icon"></image>
</view>
</view> </view>
<view class="banner"> <view class="banner">
<swiper class="swiper" :autoplay="false" :interval="3000" :circular="true"> <swiper class="swiper" :autoplay="false" :interval="3000" :circular="true">
<swiper-item> <swiper-item v-for="item in bannerList" :key="item.id">
<image src="../../static/images/banner.png" class="swiper-item"></image> <image mode="aspectFill" :src="item.imageUrl" class="swiper-item"></image>
</swiper-item>
<swiper-item>
<image src="../../static/images/banner.png" class="swiper-item"></image>
</swiper-item> </swiper-item>
</swiper> </swiper>
</view> </view>
<view class="message"> <view class="message" v-if="messageList.length">
<image src="../../static/images/icon_notice.png" class="icon"></image> <image src="../../static/images/icon_notice.png" class="icon"></image>
<swiper class="swiper" circular :indicator-dots="false" :autoplay="true" :interval='3000' <swiper class="swiper" circular :indicator-dots="false" :autoplay="true" :interval='3000'
:vertical="true"> :vertical="true">
<swiper-item :key="index" v-for="(item, index) in messageList"> <swiper-item :key="index" v-for="(item, index) in messageList">
<view class="text" @click="toDetails(1)">{{item}}</view> <view class="text" @click="toDetails(1)">{{item.noticeContent}}</view>
</swiper-item> </swiper-item>
</swiper> </swiper>
</view> </view>
...@@ -28,120 +27,245 @@ ...@@ -28,120 +27,245 @@
<view class="item" @click="quickEntry(1)"> <view class="item" @click="quickEntry(1)">
<view class="item-img"> <view class="item-img">
<image src="../../static/images/quick01.png" class="icon"></image> <image src="../../static/images/quick01.png" class="icon"></image>
<view class="num">10</view> <view class="num">{{communityInfo.noticeNotRead}}</view>
</view> </view>
<text>我的消息</text> <text>我的消息</text>
</view> </view>
<view class="item" @click="quickEntry(2)"> <view class="item" @click="quickEntry(2)">
<image src="../../static/images/quick02.png" class="icon"></image><text>房屋登记</text> <image src="../../static/images/quick02.png" class="icon"></image>
<text>房屋登记</text>
</view> </view>
<view class="item" @click="quickEntry(3)"> <view class="item" @click="quickEntry(3)">
<image src="../../static/images/quick03.png" class="icon"></image><text>生活缴费</text> <view class="item-img">
<image src="../../static/images/quick03.png" class="icon"></image>
<view class="num">{{communityInfo.notPay}}</view>
</view>
<text>生活缴费</text>
</view> </view>
<view class="item" @click="quickEntry(4)"> <view class="item" @click="quickEntry(4)">
<image src="../../static/images/quick04.png" class="icon"></image><text>维修上报</text> <image src="../../static/images/quick04.png" class="icon"></image>
<text>维修上报</text>
</view> </view>
<view class="item" @click="quickEntry(5)"> <view class="item" @click="quickEntry(5)">
<image src="../../static/images/quick05.png" class="icon"></image><text>小区投诉</text> <image src="../../static/images/quick05.png" class="icon"></image>
<text>小区投诉</text>
</view> </view>
<view class="item" @click="quickEntry(6)"> <view class="item" @click="quickEntry(6)">
<image src="../../static/images/quick06.png" class="icon"></image><text>公告公示</text> <image src="../../static/images/quick06.png" class="icon"></image>
<text>公告公示</text>
</view> </view>
<view class="item" @click="quickEntry(7)"> <view class="item" @click="quickEntry(7)">
<image src="../../static/images/quick07.png" class="icon"></image><text>缴纳物业费</text> <image src="../../static/images/quick07.png" class="icon"></image>
<text>缴纳物业费</text>
</view> </view>
</view> </view>
<view class="housekeeper" style="background-image: url('../../static/images/bg_guanjia.png');"> <view v-if="communityInfo.adminPhone" class="housekeeper" style="background-image: url('../../static/images/bg_guanjia.png');">
<view class="information"> <view class="information">
<image src="../../static/images/img01.png" class="icon"></image> <image :src="communityInfo.communityImage" class="icon"></image>
<view class="title"> <view class="title">
<text class="name">王一一</text> <text class="name">{{communityInfo.adminName}}</text>
<text class="about">您的专属管家</text> <text class="about">您的专属管家</text>
</view> </view>
</view> </view>
<view class="phone"> <view class="phone" @click="onCallPhone">
<image src="../../static/images/icon_phone.png" class="icon"></image> <image src="../../static/images/icon_phone.png" class="icon"></image>
<text>159-2546-5285</text> <text>{{communityInfo.adminPhone}}</text>
</view> </view>
</view> </view>
<view class="news"> <view v-if="noticeList.length" class="news">
<view class="title"> <view class="title">
<text>社区活动公告</text> <text>社区活动公告</text>
<image src="../../static/images/icon_more.png" class="icon"></image> <image src="../../static/images/icon_more.png" class="icon"></image>
</view> </view>
<view class="list"> <view class="list">
<view class="item" @click="toDetails(2)"> <view class="item" v-for="item in noticeList" :key="item.id" @click="toDetails(2)">
<image src="../../static/images/img02.png" class="icon"></image> <image src="../../static/images/img02.png" class="icon"></image>
<view class="con"> <view class="con">
<view class="name">开展民族团结进步创建进社区 活动</view> <view class="name">{{item.noticeTitle}}</view>
<view class="time">物业服务中心 2020/09/08</view>
</view>
</view>
<view class="item" @click="toDetails(2)">
<image src="../../static/images/img03.png" class="icon"></image>
<view class="con">
<view class="name">开展民族团结进步创建进社区 活动</view>
<view class="time">物业服务中心 2020/09/08</view> <view class="time">物业服务中心 2020/09/08</view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<authorization-modal ref="authorization" @loginEnd="onLoginEnd" @refuse="onRefuse" />
</view> </view>
</view> </view>
</template> </template>
<script> <script>
// import { import serverConfig from '@/config/server_config.js';
// getHomeData import {
// } from '@/config/api.js' getPropertyAdvApi,
queryCommunityRoomByUnitIdApi,
getCommunityInfoApi,
getAdvertisementApi
} from '@/config/api.js'
import { authorizationModal } from '@/components/authorization.vue'
export default { export default {
name: 'home', name: 'home',
components: {
authorizationModal
},
data() { data() {
return { return {
messageList: [ statusBarHeight: 24,
'紧急通知!!! 所有居民请于下午3点于小区广场做核酸!',
'住建部:2025年基本实现垃圾分类全覆盖,住房和城乡建设部表示,力争到今年年底前,地级及以上城市居民小区垃圾分类覆盖率达到90%以上,2025年底前基本实现垃圾分类全覆盖。', houseList: [], // 审核通过的小区列表
], waitList: [], // 待审核或已驳回列表
houseKey: 0,
neverRegister: false,
bannerList: [],
communityInfo: {},
// isLogin: false,
messageList: [],
noticeList: []
}
},
computed: {
isLogin() {
return uni.getStorageSync('openid')
},
houseInfo() {
return this.houseList[this.houseKey] || {}
},
isWaitAudit() {
return this.waitList.some(item=>item.auditStatus === 'waitAudit')
},
isRefuse() {
return this.waitList.some(item=>item.auditStatus === 'refuse')
} }
}, },
methods: { methods: {
getPropertyLogin() {
let info = uni.getStorageSync('house-info')
if(info) {
this.houseInfo = JSON.parse(info)
}
},
async getPropertyAdv() {
let {result} = await getPropertyAdvApi({
pageNo: 1,
pageSize: 10
})
this.bannerList = result.records.map(item=> {
return {
...item,
imageUrl: serverConfig.baseURL + '/sys/common/static/' + item.advImageUrl
}
})
},
toCommunity() { toCommunity() {
if(this.houseList.length <= 1) return
uni.navigateTo({ uni.navigateTo({
url: '/pages/community/index', url: '/pages/community/index',
}); });
}, },
quickEntry(type) { quickEntry(type) {
if (type == 1) { if (!!this.isLogin) {
uni.navigateTo({ if(this.neverRegister) { // 登录了但是还未认证
url: '/pages/message/index', uni.showToast({
}); icon: "none",
} else if (type == 2) { title: '暂未查到业主信息,请认证!'
uni.navigateTo({ })
url: '/pages/housing/index', setTimeout(()=> {
}); uni.navigateTo({
} else if (type == 3) { url: '/pages/housing/index',
uni.navigateTo({ });
url: '/pages/payCost/index', }, 1500)
}); } else {
} else if (type == 4) { if(this.houseList.length) {
uni.navigateTo({ if (type == 1) {
url: '/pages/maintenance/index', let id = this.houseList[this.houseKey].id
}); uni.navigateTo({
} else if (type == 5) { url: '/pages/message/index?id=' + id
uni.navigateTo({ });
url: '/pages/complaints/index', } else if (type == 2) {
}); if(this.waitList.length) {
} else if (type == 6) { uni.navigateTo({
uni.navigateTo({ url: '/pages/housingAudit/index'
url: '/pages/announcement/index', });
}); } else {
} else if (type == 7) { uni.navigateTo({
uni.navigateTo({ url: '/pages/housing/index'
url: '/pages/payCostProperty/index', });
}
} else if (type == 3) {
uni.navigateTo({
url: '/pages/payCost/index',
});
} else if (type == 4) {
uni.navigateTo({
url: '/pages/maintenance/index'
});
} else if (type == 5) {
uni.navigateTo({
url: '/pages/complaints/index'
});
} else if (type == 6) {
uni.navigateTo({
url: '/pages/announcement/index'
});
} else if (type == 7) {
uni.navigateTo({
url: '/pages/payCostProperty/index'
});
}
} else {
if(this.isRefuse) { // 已驳回
uni.showToast({
icon: "none",
title: "您的房屋认证已被驳回,请确认!"
})
setTimeout(()=> {
uni.navigateTo({
url: `/pages/housingAudit/index?id=${this.waitList[0].id}`
});
}, 1500)
} else {
if(type == 2) {
uni.navigateTo({
url: `/pages/housingAudit/index?id=${this.waitList[0].id}`
});
} else {
uni.showToast({
icon: "none",
title: "您的房屋认证正在审核中,请稍等!"
})
}
}
}
}
} else {
uni.hideTabBar()
this.$nextTick(() => {
this.$refs.authorization.onOpenLogin()
}); });
} }
}, },
onLoginEnd(list) {
uni.showTabBar()
if(list.length) {
console.log('维修员或者业主')
} else {
uni.showToast({
icon: "none",
title: '暂未查到业主信息,请认证!'
})
setTimeout(()=> {
uni.navigateTo({
url: '/pages/housing/index',
});
}, 1500)
}
},
onRefuse() {
uni.showTabBar()
},
toDetails(type) { toDetails(type) {
if (type == 1) { if (type == 1) {
uni.navigateTo({ uni.navigateTo({
...@@ -152,10 +276,67 @@ ...@@ -152,10 +276,67 @@
url: '/pages/announcementDetails/index', url: '/pages/announcementDetails/index',
}); });
} }
},
async getUserInfo() {
let openId = uni.getStorageSync('openid')
let phone = uni.getStorageSync('user_phone')
let {result} = await queryCommunityRoomByUnitIdApi({openId, phone})
if(result) {
let data = result.communityOwners
if(data.length) {
let houseList = data.filter(item=>item.auditStatus === 'auditPass')
if(houseList.length) {
let house_id = uni.getStorageSync('house_id')
if(house_id) {
let houseKey = houseList.findIndex(item=>item.id === house_id)
this.houseKey = houseKey === -1 ? 0 : houseKey
}
this.houseList = houseList
getApp().globalData.houseInfo = {
id: this.houseList[this.houseKey].id,
platformCode: this.houseList[this.houseKey].platformCode
}
this.getCommunityInfo()
this.getAdvertisement()
}
this.waitList = data.filter(item=>item.auditStatus !== 'auditPass')
} else {
this.neverRegister = true
}
}
},
async getCommunityInfo() {
let id = this.houseList[this.houseKey].id
let {result} = await getCommunityInfoApi({userId: id})
let communityInfo = {
notPay: result.notPay,
noticeNotRead: result.noticeNotRead,
communityImage: serverConfig.baseURL + '/sys/common/static/' + result.community.communityImage,
adminName: result.community.adminName,
adminPhone: result.community.adminPhone
}
this.communityInfo = {...communityInfo}
},
async getAdvertisement() {
let platformCode = this.houseList[this.houseKey].platformCode
let {result} = await getAdvertisementApi({communityCode: platformCode})
this.messageList = result.degreeNotice
this.noticeList = result.companyNotice
},
onCallPhone() {
uni.makePhoneCall({
phoneNumber: this.communityInfo.adminPhone
});
} }
}, },
onLoad() { onLoad() {
const menuButton = wx.getMenuButtonBoundingClientRect()
this.statusBarHeight = menuButton.top
this.getPropertyAdv()
// this.getPropertyLogin()
if(this.isLogin) {
this.getUserInfo()
}
}, },
onPullDownRefresh() { onPullDownRefresh() {
...@@ -169,39 +350,44 @@ ...@@ -169,39 +350,44 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.container { .container {
width: 100%; width: 100%;
min-height: 100vh;
background-position: top center; background-position: top center;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: cover; background-size: cover;
} }
.page { .page {
padding: 30rpx; padding-left: 30rpx;
padding-right: 30rpx;
padding-bottom: 30rpx;
} }
.nav-top { .nav-top-box {
width: 100%; width: 100%;
height: 44px; height: 90rpx;
line-height: 44px; .nav-top {
margin-top: 10rpx; width: 100%;
display: flex; height: 90rpx;
align-items: center; line-height: 90rpx;
display: flex;
.title { align-items: center;
font-size: 32rpx;
color: #1D1F1C; .title {
font-weight: 700; font-size: 32rpx;
color: #1D1F1C;
font-weight: 700;
}
.icon {
width: 20rpx;
height: 12rpx;
margin-left: 15rpx;
}
} }
.icon {
width: 20rpx;
height: 12rpx;
margin-left: 15rpx;
}
} }
.banner { .banner {
margin-top: 20rpx;
.swiper-item { .swiper-item {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -216,7 +402,7 @@ ...@@ -216,7 +402,7 @@
line-height: 34rpx; line-height: 34rpx;
background-color: #ffffff; background-color: #ffffff;
border-radius: 16rpx; border-radius: 16rpx;
margin: 30rpx 0; margin-top: 30rpx;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0 30rpx; padding: 0 30rpx;
...@@ -248,6 +434,7 @@ ...@@ -248,6 +434,7 @@
border-radius: 16rpx; border-radius: 16rpx;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 30rpx;
.item { .item {
width: 25%; width: 25%;
......
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-fl">物业公司</view> <view class="form-item-fl">物业公司</view>
<view class="form-item-fr"> <view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit"> <picker @change="e=>bindPickerChange(e, 'property')" range-key="propertyName" :value="settledKey" :range="settledList" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view> <view class="uni-input">{{settledList[settledKey].propertyName || '请选择'}}</view>
</picker> </picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
...@@ -41,35 +41,17 @@ ...@@ -41,35 +41,17 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-fl">小区</view> <view class="form-item-fl">小区</view>
<view class="form-item-fr"> <view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit"> <picker @change="e=>bindPickerChange(e, 'company')" range-key="communityName" :value="companyKey" :range="companyList" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view> <view class="uni-input">{{companyList[companyKey].communityName || '请选择'}}</view>
</picker> </picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-fl">楼栋</view> <view class="form-item-fl">房屋</view>
<view class="form-item-fr"> <view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit"> <picker mode="multiSelector" :range="houseList" range-key="name" :value="houseRoomKey" @change="houseKeyChange" @columnchange="colChange" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view> <view class="uni-input">{{houseRoomName || '请选择'}}</view>
</picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view>
</view>
<view class="form-item">
<view class="form-item-fl">单元</view>
<view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view>
</picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view>
</view>
<view class="form-item">
<view class="form-item-fl">户号</view>
<view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view>
</picker> </picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
...@@ -77,8 +59,8 @@ ...@@ -77,8 +59,8 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-fl">房屋状态</view> <view class="form-item-fl">房屋状态</view>
<view class="form-item-fr"> <view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit"> <picker @change="e=>bindPickerChange(e, 'status')" range-key="label" :value="statusKey" :range="statusList" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view> <view class="uni-input">{{statusList[statusKey].label || '请选择'}}</view>
</picker> </picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
...@@ -86,8 +68,8 @@ ...@@ -86,8 +68,8 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-fl">房屋用途</view> <view class="form-item-fl">房屋用途</view>
<view class="form-item-fr"> <view class="form-item-fr">
<picker @change="bindPickerChange" :value="index" :range="array" class="form-item-tit"> <picker @change="e=>bindPickerChange(e, 'type')" range-key="label" :value="typeKey" :range="typeList" class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择'}}</view> <view class="uni-input">{{typeList[typeKey].label || '请选择'}}</view>
</picker> </picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
...@@ -95,7 +77,7 @@ ...@@ -95,7 +77,7 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-fl">设为默认房屋</view> <view class="form-item-fl">设为默认房屋</view>
<view class="form-item-fr"> <view class="form-item-fr">
<switch checked color="#6A59F2" style="transform:scale(0.7)" /> <switch :checked="isDefault" color="#6A59F2" style="transform:scale(0.7)" />
</view> </view>
</view> </view>
</uni-forms> </uni-forms>
...@@ -108,30 +90,174 @@ ...@@ -108,30 +90,174 @@
</template> </template>
<script> <script>
export default { import {
data() { getSettledListApi,
return { getCompanyListApi,
index: '', getBuildingListApi,
array: ['选择一', '选择二', '选择三'] getCommunityUnitListApi,
} getCommunityRoomListApi,
}, getDictItemsApi
methods: { } from '@/config/api.js'
bindPickerChange: function(e) { const house = {
this.index = e.detail.value propertyName: '',
propertyCode: '',
platformName: '',
platformCode: '',
buildingId: '',
buildingName: '',
unitId: '',
unitName: '',
roomId: '',
roomName: '',
buildingStatus: '',
buildingType: '',
isDefault: 0
}
export default {
data() {
return {
settledList: [],
settledKey: '',
companyList: [],
companyKey: '',
houseList: [[], [], []],
houseRoomKey: [0, 0 , 0],
houseRoomName: '',
statusList: [],
statusKey: '',
typeList: [],
typeKey: '',
isDefault: true
}
},
watch: {
houseRoomKey: {
handler(newV, oldName) {
house.buildingId = this.houseList[0][newV[0]].id
house.buildingName = this.houseList[0][newV[0]].name
house.unitId = this.houseList[1][newV[1]].id
house.unitName = this.houseList[1][newV[1]].name
house.roomId = this.houseList[2][newV[2]].id
house.roomName = this.houseList[2][newV[2]].name
this.houseRoomName = `${this.houseList[0][newV[0]].name} ${this.houseList[1][newV[1]].name} ${this.houseList[2][newV[2]].name}`
}, },
toNext() { deep: true
uni.navigateTo({ }
url: '/pages/housingResidents/index', },
}); methods: {
bindPickerChange(e, type) {
switch(type) {
case 'property':
this.settledKey = Number(e.detail.value)
house.propertyName = this.settledList[this.settledKey].propertyName
house.propertyCode = this.settledList[this.settledKey].propertyCode
this.ongetCompanyList(house.propertyCode)
break;
case 'company':
this.companyKey = Number(e.detail.value)
house.platformName = this.companyList[this.companyKey].communityName
house.platformCode = this.companyList[this.companyKey].communityCode
this.ongetBuildingList(house.platformCode)
break;
case 'status':
this.statusKey = Number(e.detail.value)
house.buildingStatus = this.statusList[this.statusKey].value
break;
case 'type':
this.typeKey = Number(e.detail.value)
house.buildingType = this.statusList[this.typeKey].value
break;
default:
break
} }
}, },
onLoad() { async ongetSettledList() {
let {result} = await getSettledListApi({}, {custom: {load: false}})
this.settledList = result
},
async ongetCompanyList(platformCode) {
let {result} = await getCompanyListApi({platformCode}, {custom: {load: false}})
this.companyList = result
},
async ongetBuildingList(platformCode) {
let {result} = await getBuildingListApi({platformCode}, {custom: {load: false}})
let buildingList = result.map(item=> {
return {
...item,
name: item.buildingName
}
})
this.houseList[0] = new Array().concat([...buildingList])
// this.houseList[0].push(...buildingList)
if(buildingList.length) this.ongetCommunityList()
},
async ongetCommunityList() {
let platformCode = this.houseList[0][this.houseRoomKey[0]].platformCode
let id = this.houseList[0][this.houseRoomKey[0]].id
let {result} = await getCommunityUnitListApi({platformCode, id}, {custom: {load: false}})
let communityList = result.map(item=> {
return {
...item,
name: item.unitName
}
})
this.houseList[1] = new Array().concat([...communityList])
this.ongetHouseList()
},
async ongetHouseList() {
let platformCode = this.houseList[1][this.houseRoomKey[1]].platformCode
let id = this.houseList[1][this.houseRoomKey[1]].id
let {result} = await getCommunityRoomListApi({platformCode, id}, {custom: {load: false}})
let houseList = result.map(item=> {
return {
...item,
name: item.roomNum
}
})
this.houseList[2] = new Array().concat([...houseList])
this.$forceUpdate();
},
ongetDictItems(name) {
return getDictItemsApi(name)
}, },
onShow() {
colChange(node) {
if(node.detail.column === 0) {
this.houseRoomKey[1] = 0
this.houseRoomKey[0] = node.detail.value
this.ongetCommunityList()
}
if(node.detail.column === 1) {
this.houseRoomKey[2] = 0
this.houseRoomKey[1] = node.detail.value
this.ongetHouseList()
}
},
houseKeyChange(e) {
this.houseRoomKey = e.detail.value
},
toNext() {
house.isDefault = this.isDefault ? 1 : 0
let registerInfo = getApp().globalData.registerInfo
getApp().globalData.registerInfo = {...registerInfo, ...house}
uni.navigateTo({
url: '/pages/housingResidents/index',
});
} }
},
async onLoad() {
this.ongetSettledList()
this.statusList = await this.ongetDictItems('house_status')
this.typeList = await this.ongetDictItems('house_purpose')
},
onShow() {
} }
}
</script> </script>
<style> <style>
page { page {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<view class="housing"> <view class="housing">
<view class="audit"> <view class="audit">
<view class="uni-icons"><uni-icons type="more-filled" size="25" color="#F6C864"></uni-icons></view> <view class="uni-icons"><uni-icons type="more-filled" size="25" color="#F6C864"></uni-icons></view>
<view class="name">房屋审核中,请耐心等待</view> <view class="name">房屋{{statusTitle}}</view>
</view> </view>
<view class="steps"> <view class="steps">
<view class="item active"> <view class="item active">
...@@ -36,23 +36,23 @@ ...@@ -36,23 +36,23 @@
<view class="content"> <view class="content">
<view class="item"> <view class="item">
<view class="name">物业公司</view> <view class="name">物业公司</view>
<view class="detail">广州市南航碧桂园物业公司</view> <view class="detail">{{userHouse.propertyName || ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">小区</view> <view class="name">小区</view>
<view class="detail">广州市南航碧桂园小区</view> <view class="detail">{{userHouse.platformName || ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">间号</view> <view class="name"></view>
<view class="detail">101栋2单元402123</view> <view class="detail">{{userHouse.buildingName ? (userHouse.buildingName + userHouse.unitName + userHouse.roomName) : ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">业主</view> <view class="name">房间状态</view>
<view class="detail">张三</view> <view class="detail">{{filterbuildingCode(userHouse.buildingStatus, statusList)}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">间状态</view> <view class="name">屋用途</view>
<view class="detail">租赁</view> <view class="detail">{{filterbuildingCode(userHouse.buildingType, typeList)}}</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -60,42 +60,35 @@ ...@@ -60,42 +60,35 @@
<view class="title">住户信息</view> <view class="title">住户信息</view>
<view class="content"> <view class="content">
<view class="item"> <view class="item">
<view class="name">业主姓名 </view> <view class="name">与业主关系</view>
<view class="detail">张三</view> <view class="detail">{{filterbuildingCode(userHouse.relationShip, relationShipList)}}</view>
</view>
<view class="item">
<view class="name">{{userHouse.relationShip === '1' ? '业主' : '住户'}}姓名</view>
<view class="detail">{{userHouse.residentName}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">手机号码</view> <view class="name">手机号码</view>
<view class="detail">15619009090</view> <view class="detail">{{userHouse.residentPhone || ''}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">住户性别</view> <view class="name">性别</view>
<view class="detail"></view> <view class="detail">{{userHouse.sex ? '女' : '男'}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">证件类型</view> <view class="name">证件类型</view>
<view class="detail">身份证</view> <view class="detail">{{filterbuildingCode(userHouse.certificateType, certificateList)}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">证件号码</view> <view class="name">证件号码</view>
<view class="detail">371538199608080987</view> <view class="detail">{{userHouse.certificateNo || ''}}</view>
</view>
<view class="item">
<view class="name">与业主关系</view>
<view class="detail">租户</view>
</view>
<view class="item">
<view class="name">住户姓名</view>
<view class="detail">李四</view>
</view>
<view class="item">
<view class="name">住户手机号码</view>
<view class="detail">15619009090</view>
</view> </view>
</view> </view>
</view> </view>
<view class="form-submit" @click="toEditor()">修改</view> <template v-if="userHouse.auditStatus === 'refuse'">
<view class="form-delete" @click="deleteDialog">删除</view> <view class="form-submit" @click="toEditor()">修改</view>
<view class="form-delete" @click="deleteDialog">删除</view>
</template>
</view> </view>
</view> </view>
<uni-popup ref="popup" type="dialog"> <uni-popup ref="popup" type="dialog">
...@@ -106,32 +99,89 @@ ...@@ -106,32 +99,89 @@
</template> </template>
<script> <script>
export default { import {
data() { getDictItemsApi,
return {} queryByOpenIddApi,
deleteByOpenIdApi
} from '@/config/api.js'
export default {
data() {
return {
statusList: [],
typeList: [],
relationShipList: [
{label: '本人', value: '1'},
{label: '租户', value: '2'},
{label: '亲人', value: '3'},
{label: '朋友', value: '4'}
],
certificateList: [
{label: '身份证', value: '1'},
{label: '港澳通行证', value: '2'},
{label: '护照', value: '3'}
],
userHouse: {}
}
},
computed: {
statusTitle() {
if(this.userHouse.auditStatus === 'waitAudit') return '审核中,请耐心等待'
if(this.userHouse.auditStatus === 'refuse') return '已驳回,请确认'
return ''
}
},
methods: {
filterbuildingCode(code, list) {
if(!code) return
let row = list.find(item=>item.value === code)
return row ? row.label : ''
}, },
methods: { deleteDialog() {
deleteDialog() { this.$refs.popup.open()
this.$refs.popup.open()
},
dialogConfirm() {
},
dialogClose() {
this.$refs.popup.close()
},
toEditor() {
uni.navigateTo({
url: '/pages/housingResidents/index',
});
}
}, },
onLoad() { async dialogConfirm() {
let data = await deleteByOpenIdApi({id: this.userHouse.id})
setTimeout(()=> {
uni.showToast({
icon: "none",
title: '删除成功!'
})
setTimeout(()=> {
uni.switchTab({
url: '/pages/home/index'
})
}, 1500)
}, 50)
}, },
onShow() { dialogClose() {
this.$refs.popup.close()
},
toEditor() {
getApp().globalData.registerInfo = {...this.userHouse}
uni.navigateTo({
url: '/pages/housing/index',
});
},
async getHouseInfo(id) {
let {result} = await queryByOpenIddApi({id})
this.userHouse = {...result}
} }
},
async onLoad(options) {
let data = getApp().globalData.registerInfo
if(data.propertyCode && data.residentName) {
this.userHouse = {...data}
console.log(this.userHouse)
} else {
this.getHouseInfo(options.id)
}
this.statusList = await getDictItemsApi('house_status')
this.typeList = await getDictItemsApi('house_purpose')
},
onShow() {
} }
}
</script> </script>
<style> <style>
page { page {
......
...@@ -31,26 +31,29 @@ ...@@ -31,26 +31,29 @@
<uni-forms> <uni-forms>
<view class="form-item"> <view class="form-item">
<view class="form-item-fl"> <view class="form-item-fl">
<view class="asterisk">*</view>业主姓名 <view class="asterisk">*</view>与业主关系
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name" focus placeholder="请输入真实姓名" /> <picker @change="e=>bindPickerChange(e, 'relationShip')" range-key="label" :value="formData.relationShip" :range="relationShipList" class="form-item-tit">
<view class="uni-input">{{relationShipList[Number(formData.relationShip)].label || '请选择与业主关系'}}</view>
</picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-fl"> <view class="form-item-fl">
<view class="asterisk">*</view>联系方式 <view class="asterisk">*</view>{{formData.relationShip === '1' ? '业主' : '住户'}}姓名
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入手机号码" /> <input class="form-item-tit" readonly v-model="formData.residentName" focus placeholder="请输入姓名" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-fl"> <view class="form-item-fl">
<view class="asterisk"></view>住户性别 <view class="asterisk">*</view>联系方式
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<uni-data-checkbox v-model="formData.sex" :localdata="sexs" class="form-item-tit" /> <input class="form-item-tit" v-model="formData.residentPhone" focus placeholder="请输入手机号码" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
...@@ -58,9 +61,8 @@ ...@@ -58,9 +61,8 @@
<view class="asterisk"></view>证件类型 <view class="asterisk"></view>证件类型
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<picker @change="bindPickerChange" :value="formData.name2" :range="array" <picker @change="e=>bindPickerChange(e, 'certificate')" range-key="label" :value="formData.certificateType" :range="certificateList" class="form-item-tit">
class="form-item-tit"> <view class="uni-input">{{certificateList[formData.certificateType].label || '请选择证件类型'}}</view>
<view class="uni-input">{{array[index] || '请选择证件类型'}}</view>
</picker> </picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
...@@ -70,35 +72,15 @@ ...@@ -70,35 +72,15 @@
<view class="asterisk"></view>证件号码 <view class="asterisk"></view>证件号码
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入证件号码" /> <input class="form-item-tit" v-model="formData.certificateNo" focus placeholder="请输入证件号码" />
</view>
</view>
<view class="form-item">
<view class="form-item-fl">
<view class="asterisk">*</view>与业主关系
</view>
<view class="form-item-fr">
<picker @change="bindPickerChange" :value="formData.name2" :range="array"
class="form-item-tit">
<view class="uni-input">{{array[index] || '请选择与业主关系'}}</view>
</picker>
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view>
</view>
<view class="form-item">
<view class="form-item-fl">
<view class="asterisk">*</view>住户姓名
</view>
<view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name" focus placeholder="请输入住户姓名" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-fl"> <view class="form-item-fl">
<view class="asterisk">*</view>住户手机号码 <view class="asterisk"></view>住户性别
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入手机号码" /> <uni-data-checkbox v-model="formData.sex" :localdata="sexs" class="form-item-tit" />
</view> </view>
</view> </view>
</uni-forms> </uni-forms>
...@@ -111,44 +93,73 @@ ...@@ -111,44 +93,73 @@
</template> </template>
<script> <script>
export default { import {
data() { postcommunityOwnerAddApi
return { } from '@/config/api.js'
formData: { export default {
name: '', data() {
name1: '', return {
sex: '', formData: {
name2: '', relationShip: '1',
}, residentName: '',
sexs: [{ residentPhone: '',
text: '男', sex: '',
value: 0 certificateType: '',
}, { certificateNo: ''
text: '女',
value: 1
}],
index: '',
array: ['选择一', '选择二', '选择三']
}
},
methods: {
bindPickerChange: function(e) {
this.index = e.detail.value
}, },
toAudit() { sexs: [{
uni.navigateTo({ text: '男',
url: '/pages/housingAudit/index', value: 0
}); }, {
text: '女',
value: 1
}],
relationShipList: [
{label: '本人', value: '1'},
{label: '租户', value: '2'},
{label: '亲人', value: '3'},
{label: '朋友', value: '4'}
],
certificateList: [
{label: '身份证', value: '1'},
{label: '港澳通行证', value: '2'},
{label: '护照', value: '3'}
]
}
},
methods: {
bindPickerChange(e, type) {
if(type === 'certificate') {
this.formData.certificateType = e.detail.value
} else {
this.formData.relationShip = e.detail.value
} }
}, },
onLoad() { toAudit() {
let data = getApp().globalData.registerInfo
}, postcommunityOwnerAddApi({ ...data, ...this.formData}).then(res=> {
onShow() { getApp().globalData.registerInfo = { ...data, ...this.formData}
console.log(getApp().globalData.registerInfo)
uni.showToast({
icon: "none",
title: res.message
})
setTimeout(()=> {
uni.navigateTo({
url: '/pages/housingAudit/index',
});
}, 1500)
})
} }
},
onLoad() {
this.formData.residentPhone = uni.getStorageSync('user_phone')
},
onShow() {
} }
}
</script> </script>
<style> <style>
page { page {
......
...@@ -2,73 +2,21 @@ ...@@ -2,73 +2,21 @@
<view class="container"> <view class="container">
<view class="page"> <view class="page">
<view class="maintenance"> <view class="maintenance">
<view class="information"> <view class="information" v-for="item in maintenanceList" :key="item.id" @click="onDetail(item.id)">
<view class="title green">浴霸不出水了<view class="tag">待派单</view> <view class="title" :class="item.color">{{item.repairTitle}}<view class="tag">{{item.statusName}}</view>
</view> </view>
<view class="content"> <view class="content">
<view class="item"> <view class="item">
<view class="name">报修地址</view> <view class="name">报修地址</view>
<view class="detail">汉江之星小区101栋2单元401</view> <view class="detail">{{item.repairAddress}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">报修物品</view> <view class="name">报修物品</view>
<view class="detail">水暖-浴霸</view> <view class="detail">{{item.repairArticle}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">预约上门时间</view> <view class="name">预约上门时间</view>
<view class="detail">2021/09/09 13:00 - 14:00</view> <view class="detail">{{item.reservationTime}}</view>
</view>
</view>
</view>
<view class="information">
<view class="title red">浴霸不出水了<view class="tag">维修中</view>
</view>
<view class="content">
<view class="item">
<view class="name">报修地址</view>
<view class="detail">汉江之星小区101栋2单元401</view>
</view>
<view class="item">
<view class="name">报修物品</view>
<view class="detail">水暖-浴霸</view>
</view>
<view class="item">
<view class="name">预约上门时间</view>
<view class="detail">2021/09/09 13:00 - 14:00</view>
</view>
<view class="item">
<view class="name">维修员</view>
<view class="detail">张三</view>
</view>
<view class="item">
<view class="name">联系方式</view>
<view class="detail">15415234562</view>
</view>
</view>
</view>
<view class="information">
<view class="title gray">浴霸不出水了<view class="tag">已完成</view>
</view>
<view class="content">
<view class="item">
<view class="name">报修地址</view>
<view class="detail">汉江之星小区101栋2单元401</view>
</view>
<view class="item">
<view class="name">报修物品</view>
<view class="detail">水暖-浴霸</view>
</view>
<view class="item">
<view class="name">预约上门时间</view>
<view class="detail">2021/09/09 13:00 - 14:00</view>
</view>
<view class="item">
<view class="name">维修员</view>
<view class="detail">张三</view>
</view>
<view class="item">
<view class="name">联系方式</view>
<view class="detail">15415234562</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -81,24 +29,66 @@ ...@@ -81,24 +29,66 @@
</template> </template>
<script> <script>
export default { import {
data() { getCommunityRepairListApi,
return {} } from '@/config/api.js'
}, let statusList = {
methods: { waitAudit: {
toEditor() { name: '待审核',
uni.navigateTo({ color: 'green'
url: '/pages/maintenanceAdd/index', },
}); waitDispatch: {
} name: '待派单',
color: 'yellow'
},
inRepair: {
name: '维修中',
color: 'blue'
},
finish: {
name: '已完成',
color: 'gray'
},
refuse: {
name: '审核驳回',
color: 'red'
}
}
export default {
data() {
return {
maintenanceList: []
}
},
methods: {
toEditor() {
uni.navigateTo({
url: '/pages/maintenanceAdd/index',
});
}, },
onLoad() { async getList() {
let {result} = await getCommunityRepairListApi({ownerId: getApp().globalData.houseInfo.id})
this.maintenanceList = result.records.map(item=> {
return {
...item,
statusName: statusList[item.repairStatus].name,
color: statusList[item.repairStatus].color
}
})
}, },
onShow() { onDetail(id) {
uni.navigateTo({
url: `/pages/maintenanceAaudit/index?id=${id}`
});
} }
},
onLoad() {
this.getList()
},
onShow() {
} }
}
</script> </script>
<style> <style>
page { page {
...@@ -148,6 +138,26 @@ ...@@ -148,6 +138,26 @@
} }
} }
.yellow {
border-left: 2px solid #F1BD4D;
.tag {
color: #F1BD4D;
border: 1px solid #F1BD4D;
background-color: #FFFCF6;
}
}
.blue {
border-left: 2px solid #6A59F2;
.tag {
color: #6A59F2;
border: 1px solid #6A59F2;
background-color: #F6F5FF;
}
}
.green { .green {
border-left: 2px solid #10D680; border-left: 2px solid #10D680;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<view class="audit"> <view class="audit">
<view class="uni-icons"><uni-icons type="checkmarkempty" size="25" color="#F6C864"></uni-icons> <view class="uni-icons"><uni-icons type="checkmarkempty" size="25" color="#F6C864"></uni-icons>
</view> </view>
<view class="name">您的维修提交成功,请耐心等待</view> <view class="name">您的维修{{statusName}},请耐心等待</view>
</view> </view>
<view class="steps-landscape"> <view class="steps-landscape">
<view class="title">维修流程</view> <view class="title">维修流程</view>
...@@ -16,39 +16,40 @@ ...@@ -16,39 +16,40 @@
<view class="content"> <view class="content">
<view class="item"> <view class="item">
<view class="name">报修地址</view> <view class="name">报修地址</view>
<view class="detail">汉江之星小区01栋2单元402</view> <view class="detail">{{formModel.repairAddress}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">维修物品</view> <view class="name">维修物品</view>
<view class="detail">电梯</view> <view class="detail">{{formModel.repairArticle}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">标题</view> <view class="name">标题</view>
<view class="detail">电梯坏了</view> <view class="detail">{{formModel.repairTitle}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">手机号码</view> <view class="name">手机号码</view>
<view class="detail">16589000078</view> <view class="detail">{{formModel.ownerPhone}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="name">预约上门时间</view> <view class="name">预约上门时间</view>
<view class="detail">2022/09/09 14: 00 -16:00</view> <view class="detail">{{formModel.reservationTime}}</view>
</view> </view>
<view class="item text"> <view class="item text">
<view class="name">问题描述</view> <view class="name">问题描述</view>
<view class="detail">9月9号上午电梯突然无法运行9月9号上午电梯突然无法运行9月9号上午电梯突然无法运行</view> <view class="detail">{{formModel.repairDesc}}</view>
</view> </view>
<view class="item text"> <view class="item text">
<view class="name">附件</view> <view class="name">附件</view>
<view class="image"> <view class="image">
<image src="../../static/images/img02.png" class="icon"></image> <image v-for="(url, index) in imageList" :key="index" :src="url" class="icon"></image>
<image src="../../static/images/img03.png" class="icon"></image>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="form-submit" @click="toEditor()">修改</view> <template v-if="formModel.repairStatus === 'refuse'">
<view class="form-delete" @click="deleteDialog">删除</view> <view class="form-submit" @click="toEditor()">修改</view>
<view class="form-delete" @click="deleteDialog">删除</view>
</template>
</view> </view>
</view> </view>
<uni-popup ref="popup" type="dialog"> <uni-popup ref="popup" type="dialog">
...@@ -59,9 +60,24 @@ ...@@ -59,9 +60,24 @@
</template> </template>
<script> <script>
import {
getCommunityRepairDetailApi,
deleteCommunityRepairApi
} from '@/config/api.js'
const statusName = {
waitAudit: '待审核',
waitDispatch: '待派单',
inRepair: '维修中',
finish: '已完成',
refuse: '审核驳回'
}
import serverConfig from "@/config/server_config.js";
export default { export default {
data() { data() {
return { return {
statusName: '',
formModel: {},
imageList: [],
active: 1, active: 1,
list2: [{ list2: [{
title: '提交维修申请', title: '提交维修申请',
...@@ -73,21 +89,62 @@ ...@@ -73,21 +89,62 @@
} }
}, },
methods: { methods: {
async getDetail(id) {
let {result} = await getCommunityRepairDetailApi({id})
this.statusName = statusName[result.repairStatus]
this.formModel = {...result}
this.imageList = result.repairPhoto.split(',')
},
deleteDialog() { deleteDialog() {
this.$refs.popup.open() this.$refs.popup.open()
}, },
dialogConfirm() {}, async dialogConfirm() {
await deleteCommunityRepairApi({id: this.formModel.id})
setTimeout(()=> {
uni.showToast({
title: '删除成功!',
icon: 'none'
});
// 页面重载
const pages = getCurrentPages()
// 声明一个pages使用getCurrentPages方法
const curPage = pages[pages.length - 1]
// 声明一个当前页面
// curPage.onLoad(curPage.options) // 传入参数
setTimeout(()=> {
uni.navigateBack();
}, 1500)
}, 30)
},
dialogClose() { dialogClose() {
this.$refs.popup.close() this.$refs.popup.close()
}, },
toEditor() { toEditor() {
getApp().globalData.maintenanceInfo = {
...this.formModel,
repairPhoto: this.formModel.repairPhoto.split(',').map(url=>{
let chunk = url.split('.')
return {
url: serverConfig.baseURL + '/sys/common/static/' + url,
name: chunk[0],
extname: chunk[1]
}
})
}
uni.navigateTo({ uni.navigateTo({
url: '/pages/maintenanceAdd/index', url: '/pages/maintenanceAdd/index?type=edit',
}); });
} }
}, },
onLoad() { onLoad(option) {
if(option.id) {
this.getDetail(option.id)
} else {
let result = getApp().globalData.maintenanceInfo
this.statusName = statusName[result.repairStatus]
this.formModel = {...result}
this.imageList = result.repairPhoto.split(',')
}
}, },
onShow() { onShow() {
......
...@@ -9,8 +9,7 @@ ...@@ -9,8 +9,7 @@
<view class="asterisk">*</view>报修位置 <view class="asterisk">*</view>报修位置
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<view class="form-item-tit">汉江之星小区</view> <input class="form-item-tit" v-model="formData.repairAddress" focus placeholder="请输入报修位置" />
<uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
...@@ -18,7 +17,7 @@ ...@@ -18,7 +17,7 @@
<view class="asterisk">*</view>报修物品 <view class="asterisk">*</view>报修物品
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入报修物品" /> <input class="form-item-tit" v-model="formData.repairArticle" placeholder="请输入报修物品" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
...@@ -26,23 +25,23 @@ ...@@ -26,23 +25,23 @@
<view class="asterisk"></view>标题 <view class="asterisk"></view>标题
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入标题" /> <input class="form-item-tit" v-model="formData.repairTitle" placeholder="请输入标题" />
</view> </view>
</view> </view>
<view class="form-item"> <!-- <view class="form-item">
<view class="form-item-fl"> <view class="form-item-fl">
<view class="asterisk"></view>证件号码 <view class="asterisk"></view>证件号码
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入证件号码" /> <input class="form-item-tit" v-model="formData.name1" placeholder="请输入证件号码" />
</view> </view>
</view> </view> -->
<view class="form-item"> <view class="form-item">
<view class="form-item-fl"> <view class="form-item-fl">
<view class="asterisk">*</view>手机号码 <view class="asterisk">*</view>手机号码
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<input class="form-item-tit" v-model="formData.name1" focus placeholder="请输入手机号码" /> <input class="form-item-tit" v-model="formData.ownerPhone" placeholder="请输入手机号码" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
...@@ -50,51 +49,181 @@ ...@@ -50,51 +49,181 @@
<view class="asterisk">*</view>预约上门时间 <view class="asterisk">*</view>预约上门时间
</view> </view>
<view class="form-item-fr"> <view class="form-item-fr">
<uni-datetime-picker type="datetime" v-model="datetimesingle" :border="false" /> <uni-datetime-picker type="datetime" v-model="formData.reservationTime" return-type="timestamp" :hide-second="true" :clear-icon="false" :icon="false" :border="false" />
<uni-icons type="forward" color="#E4E4EA"></uni-icons> <uni-icons type="forward" color="#E4E4EA"></uni-icons>
</view> </view>
</view> </view>
<view class="form-item-text"> <view class="form-item-text">
<view class="title">问题描述</view> <view class="title">问题描述</view>
<view class="textarea"> <view class="textarea">
<uni-easyinput type="textarea" v-model="baseFormData.introduction" <uni-easyinput type="textarea" v-model="formData.repairDesc" placeholder="请输入问题描述" />
placeholder="请输入问题描述" /></uni-easyinput>
</view> </view>
</view> </view>
<view class="form-item-text"> <view class="form-item-text">
<view class="title">问题图片(最多传三张)</view> <view class="title">问题图片(最多传三张)</view>
<view class="picker"> <view class="picker">
<uni-file-picker limit="3"></uni-file-picker> <uni-file-picker v-model="formData.repairPhoto" file-mediatype="image" limit="3" @select="onSelectImage"></uni-file-picker>
</view> </view>
</view> </view>
</uni-forms> </uni-forms>
</view> </view>
<view class="form-submit" @click="toAudit()">下一步</view> <view class="form-submit" @click="toAudit()">{{isPageEdit ? '确认' : '下一步'}}</view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import {
uploadFile,
addCommunityRepairApi,
editCommunityRepairApi
} from '@/config/api.js'
import {Moment} from '@/utils/moment.js'
import serverConfig from "@/config/server_config.js";
export default { export default {
data() { data() {
return { return {
isPageEdit: false,
formData: { formData: {
name: '', repairAddress: '',
repairArticle: '',
repairTitle: '',
ownerPhone: '',
reservationTime: '',
repairDesc: '',
repairPhoto: []
}, },
datetimesingle: '',
} }
}, },
methods: { methods: {
toAudit() { async toAudit() {
uni.navigateTo({ console.log(new Moment(this.formData.reservationTime, 'YYYY-MM-DD HH-mm'))
url: '/pages/maintenanceAaudit/index', return
}); let repairPhoto = this.formData.repairPhoto.map(item=>item.url).join(',')
} if(this.isPageEdit) { // 编辑
let data =await editCommunityRepairApi({
...this.formData,
repairPhoto,
ownerId: getApp().globalData.houseInfo.id
})
// getApp().globalData.maintenanceInfo = {
// ...this.formData,
// repairPhoto,
// repairStatus: 'waitAudit',
// reservationTime: new Moment(this.formData.reservationTime, 'YYYY-MM-DD HH-mm')
// }
// setTimeout(()=> {
// uni.showToast({
// title: '编辑成功!',
// icon: 'none'
// });
// setTimeout(()=> {
// uni.navigateTo({
// url: '/pages/maintenanceAaudit/index',
// });
// }, 1500)
// }, 30)
} else {
let data =await addCommunityRepairApi({
...this.formData,
repairPhoto,
ownerId: getApp().globalData.houseInfo.id
})
// getApp().globalData.maintenanceInfo = {
// ...this.formData,
// repairPhoto,
// repairStatus: 'waitAudit',
// reservationTime: new Moment(this.formData.reservationTime, 'YYYY-MM-DD HH-mm')
// }
// setTimeout(()=> {
// uni.showToast({
// title: '提交成功!',
// icon: 'none'
// });
// setTimeout(()=> {
// uni.navigateTo({
// url: '/pages/maintenanceAaudit/index',
// });
// }, 1500)
// }, 30)
}
getApp().globalData.maintenanceInfo = {
...this.formData,
repairPhoto,
repairStatus: 'waitAudit',
reservationTime: new Moment(this.formData.reservationTime, 'YYYY-MM-DD HH-mm')
}
setTimeout(()=> {
uni.showToast({
title: `${this.isPageEdit ? '编辑' : '提交'}成功!`,
icon: 'none'
});
setTimeout(()=> {
uni.navigateTo({
url: '/pages/maintenanceAaudit/index',
});
}, 1500)
}, 30)
},
uploadImage(path) {
return new Promise((resolve, reject)=> {
uploadFile({
filePath: path,
name: 'file',
formData: { //其他需要携带的参数
'biz': 'scott/pic'
}
}).then(({message})=> {
resolve(message)
}).catch(err=> {
reject(err)
})
})
},
// // 选择上传触发函数
onSelectImage(e) {
let serveList = []
e.tempFilePaths.forEach(url=> {
serveList.push(this.uploadImage(url))
})
Promise.all(serveList).then(data=> {
let list = data.map(url=> {
let chunk = url.split('.')
return {
url: serverConfig.baseURL + '/sys/common/static/' + url,
name: chunk[0],
extname: chunk[1]
}
})
this.formData.repairPhoto = this.formData.repairPhoto.concat(list)
setTimeout(()=> {
uni.showToast({
title: '上传成功!',
icon: 'none'
});
}, 30)
}).catch(err=> {
setTimeout(()=> {
uni.showToast({
title: '上传失败,请重试!',
icon: 'none'
});
}, 30)
console.log(err)
})
},
// 移出图片函数
async deletephoto(){
this.form.attachment = ''
},
}, },
onLoad() { onLoad(option) {
if(option.type === 'edit') {
this.isPageEdit = true
this.formData = getApp().globalData.maintenanceInfo
}
}, },
onShow() { onShow() {
......
...@@ -2,6 +2,17 @@ ...@@ -2,6 +2,17 @@
<view class="container"> <view class="container">
<view class="page"> <view class="page">
<view class="message"> <view class="message">
<view class="item" v-for="(item, index) in noticeList" :key="item.id" @click="toDetail(item.id, index)">
<view class="top">
<view class="title">
<view class="point" v-if="item.noticeStatus === '0'"></view>
<image src="../../static/images/img01.png" class="icon"></image>
<view class="name">{{item.noticeTitle}}</view>
</view>
<image src="../../static/images/icon_more.png" class="arrow"></image>
</view>
<view class="con">{{item.noticeContent}}</view>
</view>
<view class="item" @click="toDetail()"> <view class="item" @click="toDetail()">
<view class="top"> <view class="top">
<view class="title"> <view class="title">
...@@ -48,26 +59,36 @@ ...@@ -48,26 +59,36 @@
</template> </template>
<script> <script>
export default { import {
data() { getUserNoticeListApi
return { } from '@/config/api.js'
export default {
} data() {
}, return {
methods: { noticeList: []
toDetail() { }
uni.navigateTo({ },
url: '/pages/messageDetails/index', methods: {
}); toDetail(id, index) {
} if(this.noticeList[index].noticeStatus === '0') {
}, this.noticeList[index].noticeStatus = '1'
onLoad() { }
uni.navigateTo({
url: '/pages/messageDetails/index?id=' + id,
});
}, },
onShow() { async getList(noticeUserId) {
let {result} = await getUserNoticeListApi({noticeUserId})
this.noticeList = result.records
} }
},
onLoad(option) {
this.getList(option.id)
},
onShow() {
} }
}
</script> </script>
<style> <style>
page { page {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<view class="container"> <view class="container">
<view class="page"> <view class="page">
<view class="news-details"> <view class="news-details">
<view class="title">维修申请状态更新通知<!-- <view class="tag">非常紧急</view> --> <view class="title">{{info.noticeTitle || ''}}<!-- <view class="tag">非常紧急</view> -->
</view> </view>
<view class="time">来源:物业服务中心 2020/09/08</view> <view class="time">来源:物业服务中心 2020/09/08</view>
<view class="content"><rich-text :nodes="content"></rich-text></view> <view class="content"><rich-text :nodes="content"></rich-text></view>
...@@ -13,23 +13,36 @@ ...@@ -13,23 +13,36 @@
</template> </template>
<script> <script>
export default { import {
data() { getUserNoticeDetailApi,
return { updateStatusApi
content: '本报5月28日讯 为巩固老旧小区改造成果,健全和完善长效管理机制,近日,青岛市城市管理委员会印发了《加强老旧小区改造后物业管理工作方案》(以下简称《方案》)。《方案》明确,今年列入改造计划的470余个老旧小区实行物业管理全覆盖,通过嵌入式开展环卫保洁、环境秩序等全要素整治,综合提升老旧小区环境品质。同时将划分物业管理区域、选举产生业主委员会或居民委员会、选聘物业企业、筹措房屋专项维修资金等事项作为老旧小区改造的前置条件。力争用三年时间推动老旧小区改造后物业服务由“低水平、保基本”向“高质量、全覆盖”转变升级。《方案》指老旧小区改造前应根据房屋、环境、配套设施和房屋产权的状况、长效管理服务需求以及业主消费意愿等实际情况,合理规划物业管理区域。通过召开业主大会选举产生业主委员会或由居委会代行职责,组织召开业主大会决策老旧小区改造后物业管理模式,采取专业化物业服务和社区托管、社会组织代管、居民自管等分类管理方式,实现老旧小区改造后物业管理全覆盖,同步确定房屋专项维修资金的补交、续交及使用,为老旧小区改造后实施长效管理提供资金保障,切实巩固老旧小区改造成果。为确保工作有效落实,在强化保障上,《方案》提出了各区(市)政府可结合实际给予财政补助,补助范围、补助期限、补助标准及方式由区(市)政府自行确定。可利用国有平台企业盘活闲置资产,物业企业通过开展助老、助餐、零售等经营用于服务小区及周边业主,所得收益可以用于补助老旧小区物业服务经费的不足。对自愿投资改造、接管改造后老旧小区签订物业服务合同5年及以上且业主满意度较高的物业企业,区(市)政府可给予有关支持,并给予信用加分。另一方面,结合老旧小区改造工作,建立完善青岛市智慧物业管理服务平台中老旧小区信息大数据,加大前端感知设备的配建力度。引导业主、物业企业积极使用平台,逐步提升物业管理服务的智慧化水平。' } from '@/config/api.js'
export default {
} data() {
}, return {
methods: { info: {},
content: '本报5月28日讯 为巩固老旧小区改造成果,健全和完善长效管理机制,近日,青岛市城市管理委员会印发了《加强老旧小区改造后物业管理工作方案》(以下简称《方案》)。《方案》明确,今年列入改造计划的470余个老旧小区实行物业管理全覆盖,通过嵌入式开展环卫保洁、环境秩序等全要素整治,综合提升老旧小区环境品质。同时将划分物业管理区域、选举产生业主委员会或居民委员会、选聘物业企业、筹措房屋专项维修资金等事项作为老旧小区改造的前置条件。力争用三年时间推动老旧小区改造后物业服务由“低水平、保基本”向“高质量、全覆盖”转变升级。《方案》指老旧小区改造前应根据房屋、环境、配套设施和房屋产权的状况、长效管理服务需求以及业主消费意愿等实际情况,合理规划物业管理区域。通过召开业主大会选举产生业主委员会或由居委会代行职责,组织召开业主大会决策老旧小区改造后物业管理模式,采取专业化物业服务和社区托管、社会组织代管、居民自管等分类管理方式,实现老旧小区改造后物业管理全覆盖,同步确定房屋专项维修资金的补交、续交及使用,为老旧小区改造后实施长效管理提供资金保障,切实巩固老旧小区改造成果。为确保工作有效落实,在强化保障上,《方案》提出了各区(市)政府可结合实际给予财政补助,补助范围、补助期限、补助标准及方式由区(市)政府自行确定。可利用国有平台企业盘活闲置资产,物业企业通过开展助老、助餐、零售等经营用于服务小区及周边业主,所得收益可以用于补助老旧小区物业服务经费的不足。对自愿投资改造、接管改造后老旧小区签订物业服务合同5年及以上且业主满意度较高的物业企业,区(市)政府可给予有关支持,并给予信用加分。另一方面,结合老旧小区改造工作,建立完善青岛市智慧物业管理服务平台中老旧小区信息大数据,加大前端感知设备的配建力度。引导业主、物业企业积极使用平台,逐步提升物业管理服务的智慧化水平。'
}, }
onLoad() { },
methods: {
toDetail(id) {
uni.navigateTo({
url: '/pages/messageDetails/index?id=' + id,
});
}, },
onShow() { async getDetail(id) {
let {result} = await getUserNoticeDetailApi({id})
this.info = result
updateStatusApi({...result})
} }
},
onLoad(option) {
this.getDetail(option.id)
},
onShow() {
} }
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</view> </view>
<image src="../../static/images/icon_more.png" class="arrow"></image> <image src="../../static/images/icon_more.png" class="arrow"></image>
</view> </view>
<view class="item"> <view class="item" @click="onDetail('/pages/maintenance/index')">
<view class="left"> <view class="left">
<image src="../../static/images/user03.png" class="icon"></image> <image src="../../static/images/user03.png" class="icon"></image>
<div class="title">我的报修</div> <div class="title">我的报修</div>
...@@ -76,7 +76,9 @@ ...@@ -76,7 +76,9 @@
} }
}, },
methods: { methods: {
onDetail(url) {
uni.navigateTo({url});
}
}, },
onLoad() { onLoad() {
......
<template>
<view class="container">
<p style="font-size:16px;font-weight: 600;text-align:center;margin-bottom:10px">欢迎您阅读本公司平台用户服务协议!</p>
<p>本协议发布之日起,本公司的网站平台、软件系统、APP、公众号、小程序等均适用本平台服务协议指本协议。</p>
<p>各服务条款前所列索引关键词仅为帮助您理解该条款表达的主旨之用,不影响或限制本协议条款的含义或解释。为维护您自身权益,建议您仔细阅读各条款具体表述。</p>
<p>0.1【审慎阅读】录流程中,点击同意本协议之前,应当认真阅读(未成年人应当在监管人陪同下阅读)本协议。请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款、法律适用和争议解决条款。免除或者限制责任的条款将以粗体下划线标识,您应重点阅读。如您对协议有任何疑问,可向本公司平台客服咨询。</p>
<p>0.2【签约动作】当您按照登录、注册页面提示填写信息、阅读并同意本协议且完成全部注册程序后,即表示已充分阅读、理解并接受本协议的全部内容,并与本公司应用达成一致,成为本公司用户。阅读本协议的过程中,如果您不同意本协议或其中任何条款约定,您应立即停止注册、登录程序。</p>
<p>0.3【协议变更】在您签署本协议之后,此文本可能因国家政策、产品以及履行本协议的环境发生变化而进行修改,修改后的协议发布在本公司平台上,并以本协议第九条约定的方式通知您。若您对修改后的协议有异议的,请立即停止登录、使用本公司平台产品及服务,若您登录或继续使用本公司平台产品或服务,视为对修改后的协议予以认可。</p>
<p>0.4【补充协议】由于互联网高速发展,您与本应用签署的协议列明的条款并不能完整罗列并覆盖您与本公司的所有权利与义务,现有的约定也不能保证完全符合未来发展的需求。因此,本应用法律声明及隐私权政策、规则均为本协议的补充协议,与本协议不可分割且具有同等法律效力。如您使用本公司服务,视为您同意上述补充协议。各补充协议的变更效力参照0.3款的约定。</p>
<p>一、 定义</p>
<p>本公司平台: 指包括网站官网,APP、公众号等网站及客户端。</p>
<p>本公司平台规则: 包括所有在应用平台上已经发布及后续发布的全部规则、解读、实施细则、产品流程说明、公告等内容。</p>
<p>用户: 下称&ldquo;&rdquo;&ldquo;用户&rdquo;,是指注册、登录、使用该应用平台的个人或组织,包括但不限于该应用平台入驻机构、该应用平台讲师、嘉宾、学员。</p>
<p>入驻机构: 指注册使用本应用机构等服务,在中国境内依法成立的法人组织或中国法律承认的其他机构。</p>
<p>讲师: 指注册使用本应用等服务,具有完全民事行为能力,从属于入驻机构或独立的个人讲师。</p>
<p>嘉宾: 指注册使用本应用机构等服务,具有完全民事行为能力或经监护人同意,受入驻机构或讲师邀请,参与本应用平台活动的个人。</p>
<p>学员: 注册、登录、使用本应用平台,参加入驻机构、讲师开设的课程等活动的个人。</p>
<p>二、 协议范围</p>
<p>2.1 签约主体</p>
<p>【签约主体】本协议由您与本应用平台经营者共同订立,本协议对您与本应用平台经营者均具有约束力。</p>
<p>【经营者信息】本应用平台经营者是指经营本应用平台的法律主体。</p>
<p>【经营者变更】本协议项下,本应用平台经营者可能根据平台的业务调整而发生变更,变更后的平台经营者与您共同履行本协议并向您提供服务,本应用平台经营者的变更不会影响您本协议项下的权益。</p>
<p>三、 账号注册与使用</p>
<p>3.1 用户资格</p>
<p>【用户资格】您确认,在您开始注册程序使用本应用平台服务前,您应当具备中华人民共和国法律规定的与您行为相适应的民事行为能力。若您不具备前述与您行为相适应的民事行为能力,则您及您的监护人应依照法律规定承担因此而导致的一切后果。</p>
<p>此外,您还需确保您符合中国法律的各项规定,不是任何国家、国际组织或者地域法律、规则限制的对象,否则您可能无法正常注册及使用本应用平台服务。</p>
<p>3.2 用户账号说明</p>
<p>【用户账号获得】 当您使用您的第三方平台账号,登录本应用平台,即在本应用平台创建等同于您的第三方平台账号的本应用账号。在您的应用账号绑定您的手机号后,您的手机号也具有您的本应用账号的同等效力。</p>
<p>【用户账号使用】 您有权使用您设置或确认的本应用用户账号登录本应用平台,以及通过机构ID登录本应用。</p>
<p>本应用平台只允许每位用户使用一个本应用平台账号。</p>
<p>由于您的本应用账号关联您的个人信息及本应用平台的商业信息,您的本应用账号仅限于您本人使用。未经本应用平台同意,您直接或间接授权第三方使用您本应用账号的行为无效。如经本应用平台判断,您的本应用账号的使用可能危及您的账号安全或本应用平台信息安全的,本应用平台可拒绝提供相应服务或终止本协议。</p>
<p>【用户账号转让】 您在本应用平台的账号不得以任何方式转让,否则本应用平台有权追究您的违约责任,且由此产生的一切责任均由您承担。</p>
<p>【实名认证】 为使您更好地使用本应用平台的各项服务,保障您的账号安全,本应用课可要求您按我国法律规定完成实名认证。</p>
<p>【不活跃账号回收】 如您的账号同时符合以下条件,则本应用可回收您的账号,您的账号将不能再登录本应用平台,并按本协议第十条的约定处理:</p>
<p>(一)未按要求完成实名认证;</p>
<p>(二)连续70天未用于登录本应用平台;</p>
<p>(三)不存在未到期的有效业务。</p>
<p>3.3 用户信息管理</p>
<p>3.3.1 真实合法</p>
<p>【信息真实】 入驻机构、讲师及嘉宾在使用本应用平台服务时,应当按本应用平台页面的提示准确完整地提供您的信息(包括您的姓名、联系地址、有效联系电话及证件信息等),以便本应用与您联系。您了解并同意,您有义务保证您提供信息的真实性及有效性。</p>
<p>【名称合法】 您在本应用平台设置的以下名称,包括但不限于用户名称、机构名称、专辑名称及课程名称等,不得违反国家法律法规以及本应用平台关于此类名称的管理规定,否则本应用平台可限制、禁止您使用本应用平台的相关服务,或按照本协议的违约处理措施进行处理。</p>
<p>3.3.2 更新维护</p>
<p>【信息更新】 您应当及时更新您提供的信息,在法律有明确规定要求本应用平台作为网络服务提供者必须对用户的信息进行核实的情况下,本应用将依法不时地对您的信息进行检查核实,您应当配合提供最新、真实、完整、有效的信息。</p>
<p>【信息维护】 存在以下任一条件时,本应用可向您发出询问或要求整改的通知,并要求您进行重新认证,直至中止、终止对您提供部分或全部本应用平台服务,本应用对此不承担责任,您将承担对您自身、他人及本应用造成的全部损失与不利后果。</p>
<p>(一)本应用按您最后一次提供的信息与您联系未果;</p>
<p>(二)您未按本应用的要求及时提供信息;</p>
<p>(三)您提供的信息存在明显不实;</p>
<p>(四)司法行政机关核实您提供的信息无效。</p>
<p>3.4 账号安全规范</p>
<p>【账号安全保管义务】 您通过第三方平台账号或手机号登录本应用平台,本应用任何时候均不会主动要求您提供您的第三方平台账号的密码或手机短信验证码。因此,建议您务必保管好您的第三方平台账号和手机,并确保您在每个上网时段结束时退出登录并以正确步骤离开本应用平台。</p>
<p>【账号损失】 因您主动泄露账号或因您遭受他人攻击、诈骗等行为导致的损失及后果,本应用对此不承担责任,您应通过司法、行政等救济途径向侵权行为人追偿。</p>
<p>【账号行为责任自负】 除本应用存在过错外,您应对您账号项下的所有行为结果(包括但不限于在线发布信息、购买课程或其他服务及披露信息等)负责。</p>
<p>【日常维护须知】 如发现任何未经授权使用您账号登录本应用平台或其他可能导致您账号遭窃、遗失的情况,建议您立即通知本应用。您理解本应用对您的任何请求采取行动均需要合理时间,且本应用应您的请求而采取的行动可能无法避免或阻止侵害后果的形成或扩大,除本应用存在法定过错外,本应用不承担责任。</p>
<p>四、 本应用平台服务及规范</p>
<p>【服务概况】 您可以在本应用平台上享受创建机构、课程、专辑,邀请课程嘉宾,开设、参与、购买、评价、转播课程,推广、分销具体课程或会员管理,给讲师打赏,在课程中发表评论、提问、发红包,有偿提问,提交平台协助解决争议等服务(其中部分为收费服务)。本应用平台将根据经营的实际需要,不时修改或开发新的服务内容,用户能享受的服务范围,以本应用平台提供的实际功能为准。</p>
<p>4.1 机构管理</p>
<p>【机构创建】 您可以在本应用平台创建属于您个人的机构,并设定机构是否收费及收费价格,开设多门类公开或付费课程,发布和申请推广课程信息,吸引学员参与或购买课程。</p>
<p>【机构限制】 基于本应用平台管理需要,您理解并认可,同一用户在本应用平台仅能开设一个机构,本应用可关闭您在本应用平台同时开设的其他机构。</p>
<p>【机构转让】 由于机构与本应用平台账号的不可分性,机构转让实质为本应用平台账号的转让,因此本应用不允许您转让机构。</p>
<p>【专辑、课程删除】 您可以删除您机构内所有或部分专辑及课程,但您应当对您删除专辑及课程所造成的违约、侵权等法律后果承担相应责任,包括但不限于对此前已收取的相关费用的退还及赔偿承担相应责任。</p>
<p>【机构关停】 在您的机构连续8周无公开或付费课程的情况下,本应用有权关停您的机构。</p>
<p>【课程管理】 机构创建者对讲师在机构内开设的课程承担管理责任,讲师在课程中对嘉宾及学员承担管理责任。</p>
<p>4.2 机构、专辑、课程的发布与推广</p>
<p>【发布与推广】 用户创建机构,添加专辑和课程后,可以通过本应用平台提供的邀请卡等服务,发布课程信息,吸引学员参与或购买课程。 用户还可以与本应用平台签订推广协议,在本应用平台的推荐页面,以图片或文字的形式向学员推广相应课程。</p>
<p>4.3 依法纳税</p>
<p>【依法纳税】 依法纳税是每一个公民、企业应尽的义务。对于从本应用平台获得的应纳税所得,您应及时依法向税务主管机关申报纳税。根据国家法律法规政策,如税务机关要求本应用平台作为代扣代缴义务人的,本应用平台可在用户对课程收益提现前,扣除应纳税款,代为缴纳。</p>
<p>4.4 课程购买</p>
<p>【课程购买】 您可以通过您注册时填写的第三方账号、手机号或者其他联系方式订阅您感兴趣的课程信息。当您在本应用平台购买课程时,请您务必仔细确认所购课程的时间、价格及内容等重要事项,并在下单时仔细核实课程和价格信息。您购买课程的交易发生在您与入驻机构或个人讲师之间,本应用平台无正当理由不能要求入驻机构或个人讲师退款。若您与入驻机构或个人讲师达成退款合意,本应用在扣除课程费用的1%(含第三方平台收取的手续费)作为退款手续费后,将剩余款项原路返回您的账户。</p>
<p>【用户谨慎义务】 本应用仅向您提供本应用平台服务,您了解本应用平台上的信息系用户自行发布,且可能存在风险和瑕疵。鉴于本应用平台具备存在海量信息及信息远程和即时发布的特点,本应用无法逐一审查课程内容的质量、效果、准确性和真实性,对此您在参与或购买课程时应谨慎判断。</p>
<p>4.5 服务收费</p>
<p>【服务收费】 本应用为本应用平台向您提供的服务付出了大量的成本,除本应用平台明示的收费业务外,本应用向您提供的服务目前是免费的。如未来本应用向您收取合理费用,本应用会采取合理途径、以足够合理的期限提前通过法定程序,并以本协议第九条约定的方式通知您,确保您有充分选择的权利。</p>
<p>4.6 禁止行为</p>
<p>【禁止行为】 您不得在本应用平台上从事以下行为:</p>
<p>(一)利用本应用平台发表、传送、传播、储存危害国家安全、国家统一、社会稳定的内容;</p>
<p>(二)利用本应用平台发表侮辱、诽谤、色情、暴力、引起他人不安及任何违反国家法律法规政策的内容;</p>
<p>(三)利用本应用平台发表、传送、传播、储存侵害他人知识产权、商业秘密、肖像权、隐私权等合法权利的内容;</p>
<p>(四)利用本应用平台发表欺诈、虚假、不准确、存在误导性的信息,或冒充、利用他人名义进行活动;</p>
<p>(五)利用本应用平台从事任何违法犯罪活动;</p>
<p>(六)发布破坏、篡改、删除、影响本应用平台任一系统正常运行或未经授权秘密获取本应用平台及其他用户数据、个人资料的病毒、木马、爬虫等恶意软件、程序代码;</p>
<p>(七)发布其他违背社会公共利益、公共道德或依据本协议或本应用平台规则不适合在本应用平台上发布的信息;</p>
<p>(八)在本应用平台上贬低、诋毁竞争对手,干扰本应用平台上进行的任何交易、活动,或以任何方式干扰或试图干扰本应用平台的正常运作;</p>
<p>(九)对课程实施恶意购买、恶意维权等扰乱本应用平台正常交易秩序的行为。</p>
<p>(十)其他违反中华人民共和国相关法律法规及国家政策的行为。</p>
<p>4.7 交易争议处理</p>
<p>【交易争议处理】 您在本应用平台交易过程中与其他用户发生争议的,您或其他用户中的任何一方均有权选择以下途径解决:</p>
<p>(一)与争议相对方自主协商;</p>
<p>(二)向本应用平台客服申请协助解决争议;</p>
<p>(三)请求消费者协会或者其他依法成立的调解组织调解;</p>
<p>(四)向有关行政部门投诉;</p>
<p>(五)根据与争议相对方达成的仲裁协议(如有)提请仲裁机构仲裁;</p>
<p>(六)向人民法院提起诉讼。</p>
<p>4.8 免责条款</p>
<p>【不可抗力及第三方原因】 本应用依照法律规定履行基础保障义务,但对于下述原因导致的合同履行障碍、履行瑕疵、履行延后或履行内容变更等情形,本应用不承担相应的违约责任:</p>
<p>(一)因自然灾害、罢工、暴乱、战争、政府行为、司法行政命令等不可抗力因素;</p>
<p>(二)因电力供应故障、通讯网络故障等公共服务因素或网络流量拥堵、黑客攻击等第三人因素;</p>
<p>(三)在本应用已尽善意管理的情况下,因常规或紧急的设备与系统维护、设备与系统故障、网络信息与数据安全等因素。</p>
<p>五、 用户信息的保护及例外</p>
<p>5.1 用户信息保护</p>
<p>【信息保护注意事项】 本应用非常重视用户个人信息的保护,在您使用本应用提供的服务时,您同意本应用按照在本应用平台上公布的隐私权政策收集、存储、保护、使用和披露您的个人信息。本应用希望通过隐私权政策向您清楚地介绍本应用对您个人信息的处理方式,因此本应用建议您完整地阅读隐私权政策(详情见本应用帮助手册),以帮助您更好地保护您的隐私权。除此以外,您需要特别注意以下几点:</p>
<p>(一)请您勿在使用本应用平台服务过程中透露您的各类财产帐户、银行卡、信用卡、第三方支付账号及对应密码等重要资料,否则由此带来的任何损失由您自行承担;</p>
<p>(二)您的注册信息是本应用平台的重要保护内容,本应用将采取必要的技术保护措施。但由于互联网的开放性以及技术的迅猛发展,可能因第三方因素导致您的信息泄漏,本应用平台对此不承担责任;</p>
<p>(三)本应用平台的服务具有公开性,若您将个人隐私信息上传、发表至本应用平台,或通过本应用平台传播给其他人,由此引起隐私的泄漏,本应用对此不承担责任;</p>
<p>(四)由于您将账号信息告知他人或与他人共享账号,由此导致的任何个人隐私的泄漏,本应用对此不承担责任;</p>
<p>(五)若您是未成年人,您在本应用平台上发表或上传信息前,应咨询您的监护人并取得监护人的同意。</p>
<p>5.2 第三方合作信息互通</p>
<p>【第三方合作信息互通】 为提升本应用的质量,本应用平台可能会与第三方合作共同向您提供相关的本应用服务,此类合作可能需要包括但不限于本应用用户数据与第三方用户数据的互通。在此情况下,您知晓并同意如该第三方同意承担与本应用平台同等的保护用户隐私的责任,则本应用平台有权将您的注册资料等提供给该第三方,并与第三方约定您的数据仅为双方合作的本应用之目的使用;</p>
<p>并且,本应用将对该等第三方使用您的数据的行为进行监督和管理,尽一切合理努力保护您的个人信息的安全性。</p>
<p>5.3 用户信息保护的例外</p>
<p>【信息保护例外】 保护用户隐私和其他个人信息是本应用的一项基本政策,本应用保证不会将您的注册资料及您在使用本应用平台时存储在本应用的非公开内容用于任何用途,但下列情况除外:</p>
<p>(一)您自行在网络上公开的信息或其他已合法公开的个人信息;</p>
<p>(二)以合法渠道获取的个人信息;</p>
<p>(三)事先获得您的明确授权;</p>
<p>(四)为维护社会公共利益;</p>
<p>(五)本应用或学校、科研机构等基于公共利益为学术研究或统计的目的,且公开方式不足以识别特定自然人;</p>
<p>(六)您侵害本应用合法权益,为维护前述合法权益且在必要范围内;</p>
<p>(七)根据相关政府主管部门或根据相关法律法规和政策的要求;</p>
<p>(八)其他必要情况。</p>
<p>六、知识产权及相关权利</p>
<p>6.1 用户权利通知</p>
<p>【用户权利通知】 本应用尊重他人的知识产权和合法权益,呼吁用户也要同样尊重他人的知识产权和他人的合法权益。若您认为您的知识产权或其他合法权益被侵犯,请按照以下规范向本应用平台提供资料。</p>
<p>【权利通知格式规范】 为了本应用平台有效处理您发出的权利通知,请您使用以下格式(包括各条款的序号):</p>
<p>(一)权利人对涉嫌侵权内容拥有知识产权或其他合法权益,依法可以行使知识产权或其他合法权益的权属证明;</p>
<p>(二)请充分、明确地描述被侵犯了知识产权或其他合法权益的情况并请提供涉嫌侵权的课程名称或第三方网址(如有);</p>
<p>(三)请指明涉嫌侵权课程或其他信息的哪些内容侵犯了第(二)项中列明的权利;</p>
<p>(四)请提供权利人具体的联络信息,包括姓名、身份证或护照复印件(对自然人)、机构登记证明复印件(对机构)、通信地址、电话号码、传真和电子邮件;</p>
<p>(五)请提供涉嫌侵权内容在信息网络上的位置(如指明您举报的含有侵权内容的出处,即:具体某个课程或具体的网页地址)以便我们与您举报的含有侵权内容的课程所有权人/管理人联系;</p>
<p>(六)请在权利通知中加入如下关于通知内容真实性的声明:&ldquo;我保证,本通知中所述信息是充分、真实、准确的,如果本权利通知内容不完全属实,本人将承担由此产生的一切法律责任&rdquo;</p>
<p>(七)请您签署该权利通知,如果您是依法成立的机构或组织,请您加盖公章。</p>
<p>【权利通知失实】 如果权利通知的陈述失实,权利通知提交者将承担由此造成的全部法律责任(包括但不限于赔偿各种费用及律师费)。如果您不确定网络上可获取的资料是否侵犯了其知识产权和其他合法权益,本应用建议您首先咨询专业人士。</p>
<p>6.2 用户授权</p>
<p>【用户授权】 对于用户通过本应用平台上传至可公开(免费或付费)获取区域的任何内容,用户同意本应用在全世界范围内具有免费的、永久性的、不可撤销的、非独家的和完全再许可的权利和许可,以使用、复制、修改、改编、出版、翻译、据以创作衍生作品、传播、表演和展示此等内容(整体或部分),和/或将此等内容编入当前已知的或以后开发的其他任何形式的作品、媒体或技术中。</p>
<p>6.3 权利声明</p>
<p>【权利声明】 本应用平台所有的产品、技术与所有程序均属于本应用的知识产权,&ldquo;本应用&rdquo;&ldquo;Lycheer&rdquo;及相关图形等为本应用的注册商标。未经本应用许可,任何人不得擅自(包括但不限于:以非法的方式复制、传播、展示、镜像、上载、下载)使用,否则本应用将依法追究法律责任。</p>
<p>七、第三方产品和服务</p>
<p>7.1 第三方产品和服务</p>
<p>【第三方产品和服务】 本服务可能包含第三方提供的产品或服务。当您使用第三方提供的产品或服务时,可能会另有相关的协议或规则,您同样应当认真阅读并遵守。如您在使用第三方产品或服务时发生任何纠纷的,请您与第三方直接联系,本应用不承担任何责任,但根据需要会依法提供必要的协助。</p>
<p>7.2 第三方支付服务</p>
<p>【第三方支付服务】 用户在本应用平台上通过打赏、购买课程、发红包等方式支付的资金,分别视为对特定对象的赠与(打赏)、对特定商品的消费支出(购买课程)和对不特定对象的赠与(发红包)。用户在本应用平台上进行的包括但不限于上述各种支付活动均直接通过微信支付和财付通等第三方支付服务实现,用户应遵守第三方支付服务协议。因第三方支付服务收取的手续费和导致的资金损失由用户自行承担或根据第三方支付服务的协议处理,本应用不承担相应责任。</p>
<p>7.3 代收服务</p>
<p>【代收服务】 除本应用直接收取的推广费用、入驻费用外,用户在本应用平台上通过打赏、购买课程、发红包等方式支付的资金,用户均同意由本应用代收后,支付给用户的相应支付活动所指向的特定对象。用户支付的资金均存入第三方支付平台或本应用的账号。用户使用本应用代收服务期间,本应用无须对为您保管、代收或代付款项的货币贬值、汇率损失和利息损失及其他风险担责,并且本应用无须向您支付此等款项的任何孳息。</p>
<p>7.4 提现服务</p>
<p>【提现服务】 根据不同的支付方式,接受资金的用户可在本应用平台上申请提现。根据相关法律法规及第三方支付平台的限制,每位用户每天只能提现一次,单笔提现可能存在一定的提现限额和账期要求。本应用无法提供资金即时到账服务,您认可资金于途中流转需要合理时间。提现指令一旦发出即立即生效、不可撤销,本应用有权根据您发出的提现指令进行支付操作。您应妥善保管您的手机等电子设备以及第三方平台账号及密码、支付密码、短信校验码等信息和资料,因您泄露、遗失、复制、转交前述信息和资料而导致的损失,由您自行承担。</p>
<p>八、 用户的违约及处理</p>
<p>8.1 违约认定</p>
<p>【违约情形】 发生如下情形之一的,视为您违约:</p>
<p>(一)使用本应用平台服务时违反有关法律法规规定;</p>
<p>(二)违反本协议、本协议补充协议约定或本应用平台规则。</p>
<p>【违约认定】 本应用可在本应用平台规则中约定违约认定的程序和标准,例如可依据您的用户数据和课程信息与本应用平台大数据的关系来认定您是否构成违约;您有义务对您的数据或信息的异常现象进行充分举证和合理解释,否则将被认定为违约。</p>
<p>8.2 违约处理措施</p>
<p>【信息处理】 您在本应用平台上发布的信息构成违约的,本应用可根据相应规则立即对相应信息进行删除、屏蔽处理或对您的课程进行下架、监管。</p>
<p>【行为限制】 您在本应用平台上实施的行为,或虽未在本应用平台上实施但对本应用平台及其用户产生影响的行为构成违约的,本应用可依据相应规则对您执行限制参加推广活动、中止向您提供部分或全部服务、划扣违约金等处理措施。如您的行为构成根本违约的,本应用可查封您的账号,终止向您提供服务。</p>
<p>【信息移交】 为遵守国家法律、法规,维护社会安全,对于在本应用平台实施违法犯罪活动的用户,本应用将可能冻结账号,并向公安机关移交与违法犯罪活动有关的线索及用户信息。</p>
<p>【账号严重风险】 当您违约的同时存在欺诈、售假、盗用他人账号等特定情形或您存在危及他人交易安全或账号安全风险时,或严重影响本应用平台正常运转的,本应用会依照您行为的风险程度对您的账号采取取消收款、关停课程、终止服务等强制措施。</p>
<p>8.3 赔偿责任</p>
<p>【赔偿范围】 如您的行为使本应用遭受损失(包括自身的直接经济损失、商誉损失及对外支付的赔偿金、和解款、律师费、诉讼费等间接经济损失),您应赔偿本应用的上述全部损失。</p>
<p>【损失追偿】 如您的行为使本应用遭受第三人主张权利,本应用可在对第三人承担金钱给付等义务后就全部损失向您追偿。</p>
<p>【资金划扣】 如因您的行为构成严重违法、犯罪或违反相关政策的强制性规定,使得第三人遭受损失的,本应用出于社会公共利益保护或消费者权益保护目的,可从您由本应用代收的资金中划扣相应款项进行支付。如您由本应用代收的资金不足以支付上述赔偿款项的,本应用可直接扣减您在本应用其它协议项下的权益。</p>
<p>8.4 特别约定</p>
<p>【商业贿赂】 如您向本应用雇员或顾问等提供实物、现金、现金等价物、劳务、旅游等价值明显超出正常商务洽谈范畴的利益,则可视为您存在商业贿赂行为。发生上述情形的,本应用可立即终止与您的所有合作并向您收取违约金及/或赔偿金,该等金额以本应用因您的贿赂行为而遭受的经济损失和商誉损失作为计算依据。</p>
<p>【关联处理】 如您因严重违约导致本应用终止本协议的,出于维护平台秩序及保护用户权益的目的,本应用可对本应用与您在其他协议项下的合作采取中止甚或终止协议的措施,并以本协议第九条约定的方式通知您。</p>
<p>九、 通知</p>
<p>9.1 用户有效的联系方式</p>
<p>【联系方式真实有效】 您在注册成为本应用平台用户,并接受本应用平台服务时,您应保证使用真实有效的第三方平台账号。如果您绑定您的手机号,您应保证使用本人的手机号。如果您创建机构,开设收费课程的,本应用将要求您提供真实的联系方式,对于联系方式发生变更的,您有义务及时更新有关信息,并保持可被联系的状态。</p>
<p>您提供的微信号、手机号或其他联系方式,作为您在本应用平台的有效联系方式。本应用将向您的上述其中之一或若干联系方式向您送达各类通知,而此类通知的内容可能对您的权利义务产生重大的有利或不利影响,请您务必及时关注。</p>
<p>9.2 本应用联系方式</p>
<p>您对于本应用的通知应当通过本应用平台对外正式公布的通信地址、传真号码、电子邮件地址等联系信息进行送达。</p>
<p>9.3 通知的送达</p>
<p>【通知送达的方式】 本应用通过上述联系方式向您发出通知,其中以电子方式发出的书面通知,包括但不限于在本应用平台公告,向您提供的联系电话发送手机短信,向您提供的电子邮件地址发送电子邮件,向您的第三方账号(如微信账号)推送本应用公众号消息,在发送成功后即视为送达;以纸质载体发出的书面通知,按照提供联系地址交邮后的第五个自然日即视为送达。</p>
<p>【通知送达的法律后果】 你应当保证所提供的联系方式是准确、有效的,并进行实时更新。如果因提供的联系方式不确切,或不及时告知变更后的联系方式,使通知无法送达或未及时送达,由您自行承担由此可能产生的法律后果。</p>
<p>十、 协议的终止</p>
<p>10.1 终止的情形</p>
<p>【用户发起的终止】 您有权通过以下任一方式终止本协议:</p>
<p>(一)变更事项生效前,您停止使用并明示不愿接受变更事项的;</p>
<p>(二)您明示不愿继续使用本应用平台服务,且符合本应用平台终止条件的。</p>
<p>【本应用发起的终止】 出现以下情况时,本应用可以本协议第九条约定的方式通知您终止本协议:</p>
<p>(一)您违反本协议约定,本应用依据违约条款终止本协议的;</p>
<p>(二)您盗用他人账号、发布违禁信息、骗取他人财物、侵犯他人知识产权、扰乱市场秩序、采取不正当手段谋利等行为,本应用依据本协议和本应用平台规则对您的账号予以查封的;</p>
<p>(三)除上述情形外,因您多次违反本应用平台规则相关规定且情节严重,本应用依据本协议及本应用平台规则对您的账号予以查封的;</p>
<p>(四)您的账号被本应用依据本协议回收的;</p>
<p>(五)根据法律、法规、政策规定,出于维护公共利益的目的,其它应当终止服务的情况。</p>
<p>10.2 协议终止后的处理</p>
<p>【用户信息披露】 本协议终止后,除法律有明确规定外,本应用无义务向您或您指定的第三方披露您账号中的任何信息。</p>
<p>【本应用权利】 本协议终止后,本应用仍享有下列权利:</p>
<p>(一)继续保存您留存于本应用平台的本协议的各类信息;</p>
<p>(二)对于您过往的违约行为,本应用仍可依据本协议向您追究违约责任。</p>
<p>【交易处理】 本协议终止后,对于您在本协议存续期间产生的未结清的支付的款项和收取的款项(指存入第三方支付平台或本应用账号,未提现的款项),本应用可通知交易相对方并根据交易相对方的意愿决定是否取消该笔支付。</p>
<p>入驻机构或讲师自行终止协议或因上述条款被终止协议,仍有未完成的收费服务的,应积极与付费用户协商解决;拒绝协商或协商未果的,本应用将依据《中华人民共和国消费者权益保护法》等法律法规的规定,为用户向入驻机构或讲师追究违约责任提供必要信息或协助。</p>
<p>十一、 法律适用、管辖与其他</p>
<p>11.1 法律适用</p>
<p>【法律适用】 本协议之订立、生效、解释、修订、补充、终止、执行与争议解决均适用中华人民共和国大陆地区法律;如法律无相关规定的,参照商业惯例及/或行业惯例。</p>
<p>11.2 管辖</p>
<p>【管辖】 您因使用本应用平台服务所产生及与本应用平台服务有关的争议,由本应用与您协商解决。协商不成时,任何一方均可向本应用经营者注册地的人民法院提起诉讼。</p>
<p>11.3 协议可分性</p>
<p>【协议可分性】 本协议任一条款被视为废止、无效或不可执行,该条应视为可分的且并不影响本协议其余条款的有效性及可执行性。</p>
</view>
</template>
<script>
export default {
name: 'agreement',
data() {
return {
}
}
}
</script>
<style lang="scss" scoped>
.container {
box-sizing: border-box;
min-height: 100vh;
background-color: #fff;
padding: 40rpx 30rpx;
word-break: break-all;
line-height: 1.4;
text-align: justify;
}
</style>
<template>
<view class="container">
<p style="font-size:16px;font-weight: 600;text-align:center;margin-bottom:10px">《隐私政策》</p>
<p style="font-weight: 600;margin:3px 0;">引言</p>
<p>本平台(&ldquo;金路智云客户平台&rdquo;,http://www.goldcloudy.com/)重视访问者(包括但不限于通过有线或移动设备访问本平台的个人及企业,以下统称&ldquo;用户&rdquo;)的隐私。用户在使用本平台的服务时,本平台可能会收集和使用用户的相关信息。本平台希望通过本《隐私政策》向用户说明,在使用本平台的服务时,本平台如何收集、使用、储存和分享这些信息,以及本平台为用户提供的访问、更新、控制和保护这些信息的方式。本《隐私政策》与用户所使用的本平台服务息息相关,希望用户仔细阅读,在需要时,按照本《隐私政策》的指引,作出用户认为适当的选择。本《隐私政策》中涉及的相关技术词汇,本平台尽量以简明扼要的表述,并提供进一步说明的链接,以便用户的理解。&nbsp;<text style="font-weight: 600;">用户使用或继续使用本平台的服务,即意味着同意本平台按照本《隐私政策》收集、使用、储存和分享用户的相关信息。</text>&nbsp;如对本《隐私政策》或相关事宜有任何问题,请通过客服热线:4001-618-891与本平台联系。</p>
<p style="font-weight: 600;margin:3px 0;">未成年人的特别注意事项</p>
<p>如果用户未满18周岁,用户无权使用本平台服务,因此本平台希望用户不要向本平台提供任何个人信息。如果用户未满18周岁,用户只能在父母或监护人的陪同下才可以使用本平台服务。</p>
<p style="font-weight: 600;margin:3px 0;">本平台可能收集的信息</p>
<p>本平台提供服务时,可能会收集、储存和使用下列与用户有关的信息。如果用户不提供相关信息,可能无法注册成为本平台的用户或无法享受本平台提供的某些服务,或者无法达到相关服务拟达到的效果。</p>
<em>用户提供的信息</em>
<p>用户在注册账户或使用本平台的服务时,向本平台提供的相关个人信息,例如姓名、电话号码、电子邮件等;以及相关企业信息,例如企业名称、电话号码、联系地址、银行账户、主营业务等; 用户通过本平台的服务向其他方提供的共享信息,以及用户使用本平台的服务时所储存的信息。</p>
<em>其他方分享的用户的信息</em>
<p>其他方使用本平台的服务时所提供有关用户的共享信息。</p>
<em>本平台获取的用户的信息</em>
<p>用户使用服务时本平台可能收集如下信息:</p>
<p>日志信息,&nbsp;指用户使用本平台的服务时,系统可能通过cookies、web beacon或其他方式自动采集的技术信息,包括: 设备或软件信息,例如用户的移动设备、网页浏览器或用于接入本平台服务的其他程序所提供的配置信息、用户的IP地址和移动设备所用的版本和设备识别码; 在使用本平台服务时搜索或浏览的信息,例如用户使用的网页搜索词语、访问的社交媒体页面url地址,以及用户在使用本平台服务时浏览或要求提供的其他信息和内容详情; 用户在使用本平台服务时发生的交易信息,例如用户交易的货物信息、款项信息、物流信息、时间信息; 有关用户曾使用的移动应用(APP)和其他软件的信息,以及用户曾经使用该等移动应用和软件的信息; 用户通过本平台的服务进行通讯的信息,例如曾通讯的账号,以及通讯时间、数据和时长;</p>
<p>位置信息,&nbsp;指用户开启设备定位功能并使用本平台基于位置提供的相关服务时,收集的有关用户位置的信息,包括: 用户通过具有定位功能的移动设备使用本平台的服务时,通过GPS或WiFi等方式收集的用户的地理位置信息; 用户或其他用户提供的包含用户所处地理位置的实时信息,例如用户提供的账户信息中包含的用户所在地区信息,用户或其他人上传的显示用户当前或曾经所处地理位置的共享信息,用户或其他人共享的照片包含的地理标记信息; 用户可以通过关闭定位功能,停止对用户的地理位置信息的收集。</p>
<em>本平台可能如何使用信息</em>
<p>本平台可能将在向用户提供服务的过程之中所收集的信息用作下列用途:向用户提供服务;在本平台提供服务时,用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途,确保本平台向用户提供的产品和服务的安全性;帮助本平台设计新服务,改善本平台现有服务;使本平台更加了解用户如何接入和使用本平台的服务,从而针对性地回应用户的个性化需求,例如语言设定、位置设定、个性化的帮助服务和指示,或对用户和其他用户作出其他方面的回应;评估本平台服务中的广告和其他促销及推广活动的效果,并加以改善;软件认证或管理软件升级;让用户参与有关本平台产品和服务的调查。为了让用户有更好的体验、改善本平台的服务或用户同意的其他用途,在符合相关法律法规的前提下,本平台可能将通过某一项服务所收集的信息,以汇集信息或者个性化的方式,用于本平台的其他服务。例如,在用户使用本平台的一项服务时所收集的信息,可能在另一服务中用于向用户提供特定内容,或向用户展示与用户相关的、非普遍推送的信息。如果本平台在相关服务中提供了相应选项,用户也可以授权本平台将该服务所提供和储存的信息用于本平台的其他服务。</p>
<p style="font-weight: 600;margin:3px 0;">用户如何访问和控制自己的个人信息</p>
<p>本平台将尽一切可能采取适当的技术手段,保证用户可以访问、更新和更正自己的注册信息或使用本平台的服务时提供的其他个人信息。在访问、更新、更正和删除前述信息时,本平台可能会要求用户进行身份验证,以保障账户安全。</p>
<em>本平台可能分享的信息</em>
<p>除以下情形外,未经用户同意,本平台以及本平台的关联公司不会与任何第三方分享用户的个人信息:本平台以及本平台的关联公司,可能将用户的个人信息与本平台的关联公司、合作伙伴及第三方服务供应商、承包商及代理(例如代表本平台发出电子邮件或推送通知的通讯服务提供商、为本平台提供位置数据的地图服务供应商)分享(他们可能并非位于用户所在的法域),用作下列用途:向用户提供本平台的服务;实现&ldquo;本平台可能如何使用信息&rdquo;部分所述目的;履行本平台在《金路智云电商平台交易总则》或本《隐私政策》中的义务和行使本平台的权利;理解、维护和改善本平台的服务。如本平台或本平台的关联公司与任何上述第三方分享用户的个人信息,本平台将努力确保该等第三方在使用用户的个人信息时遵守本《隐私政策》及本平台要求其遵守的其他适当的保密和安全措施。随着本平台业务的持续发展,本平台以及本平台的关联公司有可能进行合并、收购、资产转让或类似的交易,用户的个人信息有可能作为此类交易的一部分而被转移。本平台将在转移前通知用户。本平台或本平台的关联公司还可能为以下需要而保留、保存或披露用户的个人信息:;遵守适用的法律法规;遵守法院命令或其他法律程序的规定;遵守相关政府机关的要求;为遵守适用的法律法规、维护社会公共利益,或保护本平台的客户、本平台或本平台的集团公司、其他用户或雇员的人身和财产安全或合法权益所合理必需的用途。</p>
<p style="font-weight: 600;margin:3px 0;">信息安全</p>
<p>本平台仅在本《隐私政策》所述目的所必需的期间和法律法规要求的时限内保留用户的个人信息。 本平台使用各种安全技术和程序,以防信息的丢失、不当使用、未经授权阅览或披露。例如,在某些服务中,本平台将利用加密技术来保护用户提供的个人信息。但请用户理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全。用户需要了解,用户接入本平台的服务所用的系统和通讯网络,有可能因本平台可控范围外的因素而出现问题。</p>
<p style="font-weight: 600;margin:3px 0;">用户分享的信息</p>
<p>本平台的多项服务,可让用户不仅与自己的社交网络,也与使用该服务的所有用户公开分享用户的相关信息,例如,用户在本平台的服务中所上传或发布的信息(包括用户公开的企业信息、联系方式、交易信息等)、用户对其他人上传或发布的信息作出的回应,以及包括与这些信息有关的位置数据和日志信息。使用本平台服务的其他用户也有可能分享与用户有关的信息(包括位置数据和日志信息)。特别是,本平台的社交媒体服务,是专为使用户与世界各地的用户共享信息而设计,用户可以使共享信息实时、广泛地传递。只要用户不删除共享信息,有关信息会一直留存在公共领域;即使用户删除共享信息,有关信息仍可能由其他用户或不受本平台控制的非关联第三方独立地缓存、复制或储存,或由其他用户或该等第三方在公共领域保存。 因此,请用户谨慎考虑通过本平台的服务上传、发布和交流的信息内容。在一些情况下,用户可通过本平台某些服务的隐私设定来控制有权浏览用户共享信息的用户范围。如要求从本平台的服务中删除用户的相关信息,请通过该等特别服务条款提供的方式操作。</p>
<p style="font-weight: 600;margin:3px 0;">本平台可能如何收集信息</p>
<p>本平台或本平台的第三方合作伙伴,可能通过cookies和web beacon收集和使用用户的信息,并将该等信息储存为日志信息。本平台使用自己的cookies和web beacon,目的是为用户提供更个性化的用户体验和服务,并用于以下用途:记住用户的身份。例如:cookies和web beacon有助于本平台辨认用户作为本平台的注册用户的身份,或保存用户向本平台提供的有关用户的喜好或其他信息;分析用户使用本平台服务的情况。例如,本平台可利用cookies和web beacon来了解用户使用本平台的服务进行什么活动,或哪些网页或服务最受用户的欢迎;广告优化。Cookies和web beacon有助于本平台根据用户的信息,向用户提供与用户相关的广告而非进行普遍的广告投放。本平台为上述目的使用cookies和web beacon的同时,可能将通过cookies和web beacon收集的非个人身份信息,经统计加工后提供给广告商或其他合作伙伴,用于分析用户如何使用本平台的服务,并用于广告服务。本平台的产品和服务上可能会有广告商或其他合作方放置的cookies和web beacon。这些cookies和web beacon可能会收集与用户相关的非个人身份信息,以用于分析用户如何使用该等服务、向用户发送用户可能感兴趣的广告,或用于评估广告服务的效果。这些第三方cookies和web beacon收集和使用该等信息,不受本《隐私政策》约束,而是受相关使用者的隐私政策约束,本平台不对第三方的cookies或web beacon承担责任。用户可以通过浏览器设置拒绝或管理cookies或web beacon。但请注意,如果停用cookies或web beacon,用户有可能无法享受最佳的服务体验,某些服务也可能无法正常使用。</p>
<p style="font-weight: 600;margin:3px 0;">本平台可能向用户发送的邮件和信息</p>
<p>邮件和信息推送用户在使用本平台的服务时,本平台可能使用用户的信息向用户的设备发送电子邮件、新闻或推送通知。如用户不希望收到这些信息,可以按照本平台的相关提示,在设备上选择取消订阅。与服务有关的公告本平台可能在必要时(例如因系统维护而暂停某一项服务时)向用户发出与服务有关的公告。用户可能无法取消这些与服务有关、性质不属于推广的公告。</p>
<p style="font-weight: 600;margin:3px 0;">隐私政策的适用例外</p>
<p>本平台的服务可能包括或链接至第三方提供的社交媒体或其他服务(包括网站)。例如:本平台通过广告或本平台服务的其他方式向用户提供链接,使用户可以接入第三方的服务或网站。该等第三方社交媒体或其他服务可能由相关的第三方或本平台运营。用户使用该等第三方的社交媒体服务或其他服务(包括用户向该等第三方提供的任何个人信息),须受该第三方的服务条款及隐私政策(而非《通用服务条款》或本《隐私政策》)约束,用户需要仔细阅读其条款。本《隐私政策》仅适用于本平台所收集的信息,并不适用于任何第三方提供的服务或第三方的信息使用规则,本平台对任何第三方使用由用户提供的信息不承担任何责任。</p>
<p style="font-weight: 600;margin:3px 0;">隐私政策的适用范围</p>
<p>除某些特定服务外,本平台所有的服务均适用本《隐私政策》。这些特定服务将适用特定的隐私政策。针对某些特定服务的特定隐私政策,将更具体地说明本平台在该等服务中如何使用用户的信息。该特定服务的隐私政策构成本《隐私政策》的一部分。&nbsp;如相关特定服务的隐私政策与本《隐私政策》有不一致之处,适用该特定服务的隐私政策。除本《隐私政策》另有规定外,本《隐私条款》所用词语将与《金路智云客户平台交易总则》所定义的词语具有相同的涵义。</p>
<p style="font-weight: 600;margin:3px 0;">变更</p>
<p>本平台可能适时修订本《隐私政策》的条款,该等修订构成本《隐私政策》的一部分。如该等修订造成用户在本《隐私政策》下权利的实质减少,本平台将在修订生效前通过在主页上显著位置提示或以其他方式通知用户。在该种情况下,若用户继续使用本平台的服务,即表示同意受经修订的本《隐私政策》的约束。</p>
</view>
</template>
<script>
export default {
name: 'policy',
data() {
return {
}
}
}
</script>
<style lang="scss" scoped>
.container {
box-sizing: border-box;
min-height: 100vh;
background-color: #fff;
padding: 40rpx 30rpx;
word-break: break-all;
line-height: 1.4;
text-align: justify;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论