房屋管理、房屋详情修改,门牌号信息页面更新、场所记录页面搭建
7 files modified
2 files added
| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "views/csjl",
|
| | | "style": {
|
| | | "navigationBarTitleText": "场所记录",
|
| | | "enablePullDownRefresh": false,
|
| | | "navigationBarBackgroundColor": "#fff",
|
| | | "navigationBarTextStyle": "black"
|
| | | }
|
| | | },
|
| | | {
|
| | | "path":"views/rental", |
| | | "style": { |
| | | "navigationBarTitleText": "出租房管理", |
| | |
| | | "navigationBarTextStyle": "white", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | },
|
| | | {
|
| | | "path": "houseNumber/index",
|
| | | "style": {
|
| | | "navigationBarTitleText": "门牌码信息",
|
| | | "enablePullDownRefresh": false,
|
| | | "navigationBarBackgroundColor": "#fff",
|
| | | "navigationBarTextStyle": "black"
|
| | | } |
| | | |
| | | }
|
| | | ] |
| | | } |
| | | |
| | |
| | | }, {
|
| | | // 自定义验证函数,见上说明
|
| | | validator: (rule, value, callback) => {
|
| | | const reg = /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
|
| | | const reg =
|
| | | /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/
|
| | | if (reg.test(value)) { |
| | | return true |
| | | } |
| | |
| | |
|
| | | <view class="list-btn">
|
| | | <u-button icon="edit-pen" class="btn-item" type="primary" plain text="修改"
|
| | | :disabled="item.status == 1 || item.status == 2"
|
| | | @click="pushPage(item)"></u-button>
|
| | | <u-button icon="calendar" class="btn-item" type="primary" plain text="续租"
|
| | | :disabled="item.status == 2"
|
| | | :disabled="item.status == 1 || item.status == 2" @click="pushPage(item)"></u-button>
|
| | | <u-button icon="calendar" class="btn-item" type="primary" plain text="续租" :disabled="item.status == 2"
|
| | | @click="xzHandleClick(item)"></u-button>
|
| | | <u-button icon="order" class="btn-item" type="primary" plain text="终止"
|
| | | :disabled="item.status == 1 || item.status == 2" @click="terminate(item)"></u-button>
|
| | |
| | | <u-divider text="已经到底了"></u-divider>
|
| | | </view>
|
| | |
|
| | | <u-datetime-picker :show="isPickerShow" @cancel="isPickerShow = false" mode="date"
|
| | | <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="isPickerShow = false" :show="isPickerShow" @cancel="isPickerShow = false" mode="date"
|
| | | @confirm="dueTimeConfirm"></u-datetime-picker>
|
| | | <u-datetime-picker :show="istPickerShow" @cancel="istPickerShow = false" mode="date"
|
| | | <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="istPickerShow = false" :show="istPickerShow" @cancel="istPickerShow = false" mode="date"
|
| | | @confirm="terminateTimeConfirm"></u-datetime-picker>
|
| | | <u-modal :show="isModelShow" width="auto" :showCancelButton="true" title="提示" content="请确认是否删除当前租户信息"
|
| | | @cancel="isModelShow = false" @confirm="deleteRentalConfirm"></u-modal>
|
| | | <u-toast ref="uToast"></u-toast>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | |
| | | name: '已终止',
|
| | | value: 2
|
| | | },
|
| | | ]
|
| | | ],
|
| | | currentTime: Number(new Date()),
|
| | | currentRentInfo: {}
|
| | | }
|
| | | },
|
| | | methods: {
|
| | |
| | | },
|
| | | xzHandleClick(item) {
|
| | | this.currentRentalId = item.housingRentalId
|
| | | this.currentRentInfo = item
|
| | | this.isPickerShow = true
|
| | | },
|
| | | async dueTimeConfirm(e) {
|
| | | // 判断当前选中的时间是否小于租房时间
|
| | | const {
|
| | | rentalTime
|
| | | } = this.currentRentInfo
|
| | | const rentDate = new Date(rentalTime).getTime()
|
| | | if (rentDate > e.value) {
|
| | | this.$refs.uToast.show({
|
| | | type: 'warning', |
| | | message: "续租时间不可小于租房时间", |
| | | position: 'top', |
| | | iconUrl: 'https://cdn.uviewui.com/uview/demo/toast/success.png'
|
| | | })
|
| | | return
|
| | | }
|
| | | const time = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
|
| | | const res = await updateDueTime({
|
| | | id: this.currentRentalId,
|
| | |
| | | this.istPickerShow = true
|
| | | },
|
| | | async terminateTimeConfirm(e) {
|
| | | const { |
| | | rentalTime |
| | | } = this.currentRentInfo |
| | | const rentDate = new Date(rentalTime).getTime() |
| | | if (rentDate > e.value) { |
| | | this.$refs.uToast.show({ |
| | | type: 'warning', |
| | | message: "终止时间不可小于租房时间", |
| | | position: 'top', |
| | | iconUrl: 'https://cdn.uviewui.com/uview/demo/toast/success.png' |
| | | }) |
| | | return |
| | | }
|
| | | const time = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
|
| | | const res = await updateDueTime({
|
| | | id: this.currentRentalId,
|
| | |
| | | :popupTitle="selectBusTitle" :dataLists="selectBusList" @cancel="typeShow = false" @submit="typeSelect">
|
| | | </select-bus>
|
| | | <!--出租时间选择-->
|
| | | <u-datetime-picker :closeOnClickOverlay="true" @close="rentTimeShow = false" :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
|
| | | <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="rentTimeShow = false" :show="rentTimeShow" mode="date" @confirm="rentTimeConfirm"
|
| | | @cancel="rentTimeShow = false"></u-datetime-picker>
|
| | | <u-datetime-picker :closeOnClickOverlay="true" @close="dueTimeShow = false" :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
|
| | | <u-datetime-picker v-model="currentTime" :closeOnClickOverlay="true" @close="dueTimeShow = false" :show="dueTimeShow" mode="date" @confirm="dueTimeConfirm"
|
| | | @cancel="dueTimeShow = false"></u-datetime-picker>
|
| | |
|
| | | <view class="bottom-tools">
|
| | |
| | | selectBusKey: '',
|
| | | typeShow: false,
|
| | | houseCode: '',
|
| | | rentId: ''
|
| | | rentId: '', |
| | | currentTime: Number(new Date())
|
| | | }
|
| | | },
|
| | | onLoad(option) {
|
| | |
| | | {{ location }}{{ room }}{{ `(共${num}人)` }}
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <!-- <view class="item statistics">
|
| | | <view class="room">{{ room }}</view>
|
| | | <view class="num">{{ `(共${num}人)` }}</view>
|
| | | </view> -->
|
| | | </view>
|
| | |
|
| | |
|
| | |
| | | pushShopPage(e){
|
| | | console.log(e,8888)
|
| | | const { addressCode } = e |
| | | let url = `/subPackage/workbench/views/cscj?stdId=${addressCode}` |
| | | let url = `/subPackage/house/houseNumber/index?stdId=${addressCode}` |
| | | this.$u.func.globalNavigator(url, "navTo")
|
| | | }
|
| | | }
|
| New file |
| | |
| | | <template>
|
| | | <view class="container">
|
| | | <view class="info-box">
|
| | | <view class="policeman-box">
|
| | | <view class="line-box">
|
| | | <view class="title">公安局</view>
|
| | | <view class="value">{{ policeData.branchName }}</view>
|
| | | </view>
|
| | | <view class="line-box">
|
| | | <view class="title">派出所</view>
|
| | | <view class="value">{{ policeData.localPoliceStationName }}</view>
|
| | | </view>
|
| | | <view class="line-box">
|
| | | <view class="title">辖区民警</view>
|
| | | <view class="value">{{ policeData.policeman }}</view>
|
| | | </view>
|
| | | <view class="line-box">
|
| | | <view class="title">联系电话</view>
|
| | | <view class="value">{{ policeData.policemanPhone }}</view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="fireman-box"> |
| | | <view class="line-box"> |
| | | <view class="title">消防照片</view> |
| | | <view class="value">未完善</view> |
| | | </view> |
| | | <view class="line-box"> |
| | | <view class="title">采集人</view> |
| | | <view class="value">未完善</view> |
| | | </view> |
| | | <view class="line-box"> |
| | | <view class="title">消防责任人</view> |
| | | <view class="value">未完善</view> |
| | | </view> |
| | | <view class="line-box"> |
| | | <view class="title">采集时间</view> |
| | | <view class="value">未完善</view> |
| | | </view> |
| | | <view class="line-box"> |
| | | <view class="title">历史事件</view> |
| | | <view class="value">未完善</view> |
| | | </view> |
| | | </view>
|
| | | </view>
|
| | | <view class="btn-box">
|
| | | <view class="sl-box" @click="csjlClick">
|
| | | <u-icon name="/static/icon/menu-01.png" size="30"></u-icon>
|
| | | <text>场所记录</text>
|
| | | </view>
|
| | | <view class="sl-box" @click="cscjClick">
|
| | | <u-icon name="/static/icon/menu-02.png" size="30"></u-icon>
|
| | | <text>场所采集</text>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | | <script>
|
| | | import {
|
| | | getDoorplateAddressDetail
|
| | | } from "@/api/doorplateAddress/doorplateAddress";
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | stdId: '',
|
| | | policeData: {
|
| | | branchName: '未完善',
|
| | | localPoliceStationName: '未完善',
|
| | | policeman: '未完善',
|
| | | policemanPhone: '未完善'
|
| | | },
|
| | | firemanData: {
|
| | | |
| | | }
|
| | | }
|
| | | },
|
| | | onLoad(option) {
|
| | | this.stdId = option.stdId
|
| | | this.getBuildingDetail()
|
| | | },
|
| | | methods: {
|
| | | async getBuildingDetail() {
|
| | | const {
|
| | | code,
|
| | | data
|
| | | } = await getDoorplateAddressDetail({
|
| | | stdId: this.stdId
|
| | | })
|
| | | if (code !== 200) {
|
| | | uni.showToast({
|
| | | title: "数据请求失败",
|
| | | icon: "error",
|
| | | duration: 1500
|
| | | }) |
| | | return
|
| | | } |
| | | const { |
| | | branchName, |
| | | localPoliceStationName, |
| | | policeman, |
| | | policemanPhone |
| | | } = data |
| | | console.log(data); |
| | | this.policeData = {
|
| | | branchName: branchName || '未完善',
|
| | | localPoliceStationName: localPoliceStationName || '未完善',
|
| | | policeman: policeman || '未完善',
|
| | | policemanPhone: policemanPhone || '未完善'
|
| | | }
|
| | | }, |
| | | cscjClick() { |
| | | this.$u.func.globalNavigator('/subPackage/workbench/views/cscj?stdId='+this.stdId) |
| | | }, |
| | | csjlClick() { |
| | | this.$u.func.globalNavigator('/subPackage/workbench/views/csjl?stdId='+this.stdId) |
| | | }
|
| | | },
|
| | | }
|
| | | </script>
|
| | | <style lang="scss" scoped>
|
| | | .container {
|
| | | background-color: #f6f6f6; |
| | | height: 100%;
|
| | |
|
| | | .info-box { |
| | | height: calc(100% - 110rpx); |
| | | padding-bottom: 20rpx; |
| | | overflow: auto;
|
| | | .policeman-box,
|
| | | .fireman-box {
|
| | | background-color: #fff;
|
| | | margin-top: 20rpx;
|
| | | padding: 0 20rpx;
|
| | |
|
| | | .line-box {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | border-bottom: 1rpx solid #f6f6f6;
|
| | | padding: 25rpx 0;
|
| | | font-size: 32rpx;
|
| | | .title { |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .value {
|
| | | color: #989898; |
| | | width: 50%; |
| | | word-wrap: break-word; |
| | | margin-left: 20rpx; |
| | | text-align: right;
|
| | | }
|
| | |
|
| | | &:last-child {
|
| | | border: 0;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .btn-box {
|
| | | width: 100%;
|
| | | height: 90rpx;
|
| | | background-color: #fff;
|
| | | display: flex;
|
| | | box-shadow: 0 2rpx 12rpx 0 rgba(0, 0, 0, .1);
|
| | |
|
| | | .sl-box {
|
| | | flex: 1;
|
| | | display: flex;
|
| | | justify-content: center;
|
| | |
|
| | | text {
|
| | | margin-left: 15rpx;
|
| | | font-size: 27rpx;
|
| | | line-height: 90rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | </style> |
| | |
| | | <view class="container">
|
| | | <view class="main">
|
| | | <view class="content">
|
| | | <u-form labelWidth="70" :model="form" ref="form">
|
| | | <u-form labelWidth="70" :model="form" ref="form" :rules="rules">
|
| | | <box-title title=""></box-title>
|
| | |
|
| | | <view class="basic-info mt-20">
|
| | | <u-form-item class="form-item" labelWidth="100" label="绑定手机" required>
|
| | | <u-form-item class="form-item" labelWidth="100" label="绑定手机" required prop="phone">
|
| | | <u--input border="none" v-model="form.phone" placeholder="请输入">
|
| | | </u--input>
|
| | | </u-form-item>
|
| | |
| | | <box-title class="mt-20" title="房屋外观"></box-title>
|
| | | <view class="pic mt-20">
|
| | | <u-upload :fileList="form.images" :previewFullImage="uploadConfig.previewFullImage"
|
| | | :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple" :maxCount="uploadConfig.maxCount"
|
| | | :capture="uploadConfig.capture" @afterRead="afterReadImg" @delete="deletePic">
|
| | | :accept="uploadConfig.acceptImg" :multiple="uploadConfig.multiple"
|
| | | :maxCount="uploadConfig.maxCount" :capture="uploadConfig.capture" @afterRead="afterReadImg"
|
| | | @delete="deletePic">
|
| | | </u-upload>
|
| | | </view>
|
| | |
|
| | | <box-title title="房屋标签"></box-title>
|
| | | <view class="mt-20 flex label-btn-box b-c-w">
|
| | | <view v-for="(item, index) in labelBtnList" :key="index">
|
| | | <u-button color="#000" size="mini" type="primary" |
| | | :style="{background: item.color}"
|
| | | :plain="true" :text="item.name"
|
| | | @click="showLabelPopup(item)"></u-button>
|
| | | <u-button color="#000" size="mini" type="primary" :style="{background: item.color}"
|
| | | :plain="true" :text="item.name" @click="showLabelPopup(item)"></u-button>
|
| | | </view>
|
| | | </view>
|
| | | </u-form>
|
| | |
| | | removeHouseLabel
|
| | | } from "@/api/house/houseLabel.js";
|
| | | import {
|
| | | getHouseDetail,saveOrUpdateHouse
|
| | | getHouseDetail,
|
| | | saveOrUpdateHouse
|
| | | } from "@/api/house/house.js";
|
| | | import {
|
| | | minioBaseUrl
|
| | | } from '@/common/setting'
|
| | | import { number } from "echarts"; |
| | | import {
|
| | | number
|
| | | } from "echarts";
|
| | | export default {
|
| | | mixins: [uploadMixin],
|
| | | data() {
|
| | |
| | | propertyPrice: "",
|
| | | serviceDue: "",
|
| | | imageUrls: "",
|
| | | },
|
| | | rules: {
|
| | |
|
| | | phone: [{
|
| | | required: true, |
| | | message: '请输入手机号',
|
| | | // 可以单个或者同时写两个触发验证方式 |
| | | trigger: ['change', 'blur'],
|
| | | },
|
| | | {
|
| | | // 自定义验证函数,见上说明
|
| | | validator: (rule, value, callback) => {
|
| | | const reg =
|
| | | /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1589]))\d{8}$/
|
| | | if (reg.test(value)) {
|
| | | return true
|
| | | }
|
| | | return false
|
| | | },
|
| | | message: '请输入正确的手机号',
|
| | | // 触发器可以同时用blur和change
|
| | | trigger: ['change', 'blur'],
|
| | | }
|
| | | ]
|
| | | },
|
| | | showList: {
|
| | | relation: false
|
| | |
| | | duration: 1500,
|
| | | success: () => {
|
| | | setTimeout(() => {
|
| | | // uni.navigateBack()
|
| | | uni.navigateBack()
|
| | | }, 1500)
|
| | | }
|
| | | })
|
| | |
| | | })
|
| | | return
|
| | | }
|
| | | // 刷新页面
|
| | | this.getHouseDetailInfo()
|
| | | // 刷新页面 (直接刷新页面上传但没提交的图片会直接没了)
|
| | | // this.getHouseDetailInfo()
|
| | | const labelIndex = this.labelBtnList.findIndex(item => item.id === id)
|
| | | console.log(id);
|
| | | this.labelBtnList[labelIndex].color = color
|
| | | this.popupShow = false
|
| | | },
|
| | |
|
| New file |
| | |
| | | <template>
|
| | | <view class="container">
|
| | | <view class="tabsAndSearch">
|
| | | <view class="tabs">
|
| | | <u-tabs :list="tabsList" @click="tabClick" :scrollable="false"></u-tabs>
|
| | | </view>
|
| | | <view class="search">
|
| | | <u--input placeholder="请输入场所名称" prefixIcon="search" class="search-ipt"
|
| | | prefixIconStyle="font-size: 22px;color: #909399"></u--input>
|
| | | </view>
|
| | | </view>
|
| | | <view class="info-box">
|
| | | <view class="records-card" v-for="records in recordsData" :key="records.id">
|
| | | <view class="title">
|
| | | <text>{{ records.title }}</text>
|
| | | <text>{{ records.time }}</text>
|
| | | </view>
|
| | | <view class="info">
|
| | | <view class="charge-man">
|
| | | <text>场所负责人:</text>
|
| | | <text>{{ records.chargeMan }}</text>
|
| | | </view>
|
| | | <view class="phone">
|
| | | <text>手机号:</text>
|
| | | <text>{{ records.phone }}</text>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | tabsList: [{
|
| | | id: 1,
|
| | | name: '全部'
|
| | | },
|
| | | {
|
| | | id: 2,
|
| | | name: '待完善'
|
| | | },
|
| | | {
|
| | | id: 3,
|
| | | name: '已完善'
|
| | | }
|
| | | ],
|
| | | recordsData: [{
|
| | | id: 1,
|
| | | title: '科创4栋',
|
| | | time: new Date().toLocaleString(),
|
| | | chargeMan: '铃铃铃',
|
| | | phone: '17678654431'
|
| | | },
|
| | | {
|
| | | id: 2,
|
| | | title: '科创4栋',
|
| | | time: new Date().toLocaleString(),
|
| | | chargeMan: '铃铃铃',
|
| | | phone: '17678654431'
|
| | | },
|
| | | {
|
| | | id: 3,
|
| | | title: '科创4栋',
|
| | | time: new Date().toLocaleString(),
|
| | | chargeMan: '铃铃铃',
|
| | | phone: '17678654431'
|
| | | },
|
| | | {
|
| | | id: 4,
|
| | | title: '科创4栋',
|
| | | time: new Date().toLocaleString(),
|
| | | chargeMan: '铃铃铃',
|
| | | phone: '17678654431'
|
| | | }
|
| | | ]
|
| | | }
|
| | | },
|
| | | methods: {
|
| | | tabClick() {
|
| | |
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | .container {
|
| | | height: 100%;
|
| | | overflow-y: auto;
|
| | | background-color: #f6f6f6;
|
| | |
|
| | | .tabsAndSearch {
|
| | | background-color: #fff;
|
| | |
|
| | | .tabs { |
| | | }
|
| | |
|
| | | .search {
|
| | | padding: 20rpx 70rpx;
|
| | |
|
| | | .search-ipt {
|
| | | border: 0;
|
| | | border-radius: 9999rpx;
|
| | | background-color: #f6f6f6;
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | .info-box {
|
| | | .records-card {
|
| | | margin: 20rpx 30rpx 0 30rpx;
|
| | | background-color: #fff;
|
| | | padding: 30rpx;
|
| | | border-radius: 10rpx;
|
| | |
|
| | | .title {
|
| | | line-height: 70rpx;
|
| | | display: flex;
|
| | | font-size: 35rpx;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | border-bottom: 1rpx solid #f6f6f6;
|
| | |
|
| | | text {
|
| | | &:nth-child(1) {
|
| | | font-weight: 700;
|
| | | }
|
| | |
|
| | | &:nth-child(2) {
|
| | | font-size: 27rpx;
|
| | | color: #999999;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .charge-man,
|
| | | .phone {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | font-weight: 30rpx;
|
| | | color: #717171;
|
| | | margin-top: 25rpx;
|
| | | font-size: 30rpx;
|
| | | }
|
| | |
|
| | | &:last-child {
|
| | | margin-bottom: 20rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | </style> |