@ -0,0 +1,16 @@ | |||
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ | |||
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 | |||
"version": "0.0", | |||
"configurations": [{ | |||
"default" : | |||
{ | |||
"launchtype" : "local" | |||
}, | |||
"mp-weixin" : | |||
{ | |||
"launchtype" : "local" | |||
}, | |||
"type" : "uniCloud" | |||
} | |||
] | |||
} |
@ -0,0 +1,19 @@ | |||
<script> | |||
export default { | |||
onLaunch: function() { | |||
console.log('App Launch') | |||
}, | |||
onShow: function() { | |||
console.log('App Show') | |||
}, | |||
onHide: function() { | |||
console.log('App Hide') | |||
} | |||
} | |||
</script> | |||
<style lang="scss"> | |||
@import '@/uni_modules/uv-ui-tools/index.scss'; | |||
@import './styles/index.scss'; | |||
</style> |
@ -0,0 +1,21 @@ | |||
MIT License | |||
Copyright (c) 2023 www.uvui.cn | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all | |||
copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
SOFTWARE. |
@ -0,0 +1,164 @@ | |||
<p align="center"> | |||
<span> </span><img alt="logo" src="https://www.uvui.cn/common/logo.png" width="120" height="120"> | |||
</p> | |||
<h3 align="center">uv-ui</h3> | |||
<h3 align="center">兼容vue3+2多平台快速开发的UI框架</h3> | |||
[](https://gitee.com/climblee/uv-ui) | |||
[](https://gitee.com/climblee/uv-ui) | |||
[](https://github.com/climblee/uv-ui) | |||
[](https://github.com/climblee/uv-ui/issues) | |||
[](https://www.uvui.cn) | |||
[](https://www.uvui.cn/components/changelog.html) | |||
[](https://en.wikipedia.org/wiki/MIT_License) | |||
## 温馨提示:如需下载uv-ui示例项目,请不要使用【下载插件ZIP】按钮。 | |||
### uvui官方群1:<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=aaoyDvfV7nSee9vzWfzyZM1vKlu3xrNZ&authKey=pdU6HDpyzGUoc1QvQvCmzCbwzsoHgBbToF%2F0ChP4lNjPIPgWHGRE4I99XYGiTcNI&noverify=0&group_code=549833913" target="_blank">549833913</a> | |||
### uvui官方群2:<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=2QbEeKBn6ysCyQ09V4mgst1W8onxFybQ&authKey=aMTGL5zCYwsinG%2FeH0qMlAqXAdyKr5AjXVf2oMnsmj7NCg%2F2HraMU%2FNFxELLIPvp&noverify=0&group_code=206060892" target="_blank">206060892</a> | |||
## uvui特点 | |||
1. **uv-ui的前世今生**,`uv-ui` 是基于 `uview2.x` 版本改造而来。重命名也是为了避开发布冲突和很多组件 `u-`在 `nvue` 中不能使用的情况,所以这才诞生了`uv-ui`。感谢 `uview-ui` 作者的开源奉献,再次为开源点赞。 同时 `uv-ui` 也是无条件开源。 | |||
2. **全端兼容**,`uv-ui`支持vue3、vue2、app-vue、app-nvue、h5、小程序等。`uv-ui`的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。 | |||
3. **扩展配置**,`uv-ui`内置的方法默认不再挂载到`uni`对象之上,也就意味着默认情况下不能在项目中直接使用`uni.$uv.xxx`使用内置方法。但是可以通过扩展可以解决,通过如下方式进行配置即可,使用方式请参考[扩展配置](https://www.uvui.cn/components/setting.html)。其中包括[ JS工具库](https://www.uvui.cn/components/setting.html#%E6%89%A9%E5%B1%95%E9%85%8D%E7%BD%AE-js%E5%B7%A5%E5%85%B7%E5%BA%93)、[ 自定义主题](https://www.uvui.cn/components/setting.html#%E6%89%A9%E5%B1%95%E9%85%8D%E7%BD%AE-%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%BB%E9%A2%98)、[ 基础样式](https://www.uvui.cn/components/setting.html#%E6%89%A9%E5%B1%95%E9%85%8D%E7%BD%AE-%E5%9F%BA%E7%A1%80%E6%A0%B7%E5%BC%8F)、[ setconfig](https://www.uvui.cn/components/setting.html#%E6%89%A9%E5%B1%95%E9%85%8D%E7%BD%AE-setconfig)等。 | |||
## 预览 | |||
通过微信(APP下载不支持微信扫码)或浏览器扫码查看演示效果。 | |||
<img src="https://mp-31ed6237-7b7b-4597-8448-a53d6d6031cf.cdn.bspapp.com/uvui/download-wx.png" width="200" /> <img src="https://mp-31ed6237-7b7b-4597-8448-a53d6d6031cf.cdn.bspapp.com/uvui/download-app.png" width="200" /> <img src="https://mp-31ed6237-7b7b-4597-8448-a53d6d6031cf.cdn.bspapp.com/uvui/download-h5.png" width="200" /> | |||
## 链接 | |||
- [官方文档](https://www.uvui.cn) | |||
- [演示地址](https://h5.uvui.cn) | |||
- [更新日志](https://www.uvui.cn/components/changelog.html) | |||
- [关于我们](https://www.uvui.cn/cooperation/about.html) | |||
- <a href="#list">组件列表</a> | |||
## 交流反馈 | |||
欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uvui.cn/components/addQQGroup.html) | |||
## 快速开始 | |||
方式一:`uv-ui` 强烈建议通过 `下载插件并导入HbuilderX` 导入组件。 | |||
方式二:下载完整 [uv-ui项目](https://ext.dcloud.net.cn/plugin?id=12287) 将 `uni_modules` 复制到自己的项目。 | |||
方式三:通过 `npm i @climblee/uv-ui` 下载,此方法需要配置 easycom,配置详情可查看[安装](https://www.uvui.cn/components/install.html)。 | |||
请通过[快速上手](https://www.uvui.cn/components/quickstart.html)了解更详细的内容。 | |||
**注意:导入插件后,建议`HBuilderX`重新运行项目,可能新导入的插件不能实时更新而导致不能运行。** | |||
## 使用方法 | |||
组件导入 `uni_modules` 后,直接在项目中使用,无需通过import引入组件。 | |||
```html | |||
<template> | |||
<uv-icon name="baidu" size="30" color="#909399"></uv-icon> | |||
</template> | |||
``` | |||
## 扩展功能 | |||
`uv-ui` 内置了强大的工具函数、请求封装等,可以根据自身需求进行扩展配置,详情请查看[扩展配置](https://www.uvui.cn/components/setting.html)。 | |||
**注意:只有[扩展配置](https://www.uvui.cn/components/setting.html)后才能在自己的项目页面中使用组件库内置方法和变量等**。 | |||
<div id="list"></div> | |||
## 组件列表 | |||
下表为 `uv-ui` 的扩展组件清单,点击每个组件**点击下载&安装**即可在详情页面导入组件到项目下,导入后建议重新运行即可直接使用,组件无需import和注册。 | |||
| 组件名 | 组件说明 | | |||
| --- | --- | | |||
| uv-skeletons | [新版骨架屏(推荐)](https://www.uvui.cn/components/skeletons.html) | | |||
| uv-calendars | [新版日历(推荐)](https://www.uvui.cn/components/calendars.html) | | |||
| uv-drop-down | [下拉筛选](https://www.uvui.cn/components/dropDown.html) | | |||
| uv-scroll-list | [横向滚动列表](https://www.uvui.cn/components/scrollList.html) | | |||
| uv-vtabs | [垂直选项卡](https://www.uvui.cn/components/vtabs.html) | | |||
| uv-pick-color | [颜色选择器](https://www.uvui.cn/components/pickColor.html) | | |||
| uv-qrcode | [二维码](https://www.uvui.cn/components/qrcode.html) | | |||
| uv-waterfall | [瀑布流](https://www.uvui.cn/components/waterfall.html) | | |||
| uv-row | [Layout 布局](https://www.uvui.cn/components/layout.html) | | |||
| uv-icon | [图标](https://www.uvui.cn/components/icon.html) | | |||
| uv-button | [按钮](https://www.uvui.cn/components/button.html) | | |||
| uv-text | [文本](https://www.uvui.cn/components/text.html) | | |||
| uv-link | [超链接](https://www.uvui.cn/components/link.html) | | |||
| uv-image | [图片](https://www.uvui.cn/components/image.html) | | |||
| uv-transition | [动画](https://www.uvui.cn/components/transition.html) | | |||
| uv-form | [表单](https://www.uvui.cn/components/form.html) | | |||
| uv-input | [增强输入框](https://www.uvui.cn/components/input.html) | | |||
| uv-textarea | [增强文本域](https://www.uvui.cn/components/textarea.html) | | |||
| uv-checkbox | [复选框](https://www.uvui.cn/components/checkbox.html) | | |||
| uv-radio | [单选框](https://www.uvui.cn/components/radio.html) | | |||
| uv-switch | [开关选择器](https://www.uvui.cn/components/switch.html) | | |||
| uv-calendar | [日历](https://www.uvui.cn/components/calendar.html) | | |||
| uv-picker | [选择器](https://www.uvui.cn/components/picker.html) | | |||
| uv-datetime-picker | [时间选择器](https://www.uvui.cn/components/datetimePicker.html) | | |||
| uv-code | [验证码倒计时](https://www.uvui.cn/components/code.html) | | |||
| uv-keyboard | [键盘](https://www.uvui.cn/components/keyboard.html) | | |||
| uv-rate | [评分](https://www.uvui.cn/components/rate.html) | | |||
| uv-search | [多功能搜索框](https://www.uvui.cn/components/search.html) | | |||
| uv-number-box | [步进器](https://www.uvui.cn/components/numberBox.html) | | |||
| uv-upload | [上传](https://www.uvui.cn/components/upload.html) | | |||
| uv-slider | [滑动选择器](https://www.uvui.cn/components/slider.html) | | |||
| uv-list | [列表](https://www.uvui.cn/components/list.html) | | |||
| uv-index-list | [索引列表](https://www.uvui.cn/components/indexList.html) | | |||
| uv-tags | [标签](https://www.uvui.cn/components/tag.html) | | |||
| uv-line-progress | [线形进度条](https://www.uvui.cn/components/lineProgress.html) | | |||
| uv-badge | [徽标数](https://www.uvui.cn/components/badge.html) | | |||
| uv-count-down | [倒计时](https://www.uvui.cn/components/countDown.html) | | |||
| uv-count-to | [数字滚动](https://www.uvui.cn/components/countTo.html) | | |||
| uv-avatar | [头像](https://www.uvui.cn/components/avatar.html) | | |||
| uv-skeleton | [骨架屏](https://www.uvui.cn/components/skeleton.html) | | |||
| uv-loading-icon | [加载动画](https://www.uvui.cn/components/loadingIcon.html) | | |||
| uv-loading-page | [加载页](https://www.uvui.cn/components/loadingPage.html) | | |||
| uv-load-more | [加载更多](https://www.uvui.cn/components/loadMore.html) | | |||
| uv-empty | [内容为空](https://www.uvui.cn/components/empty.html) | | |||
| uv-tooltip | [长按提示](https://www.uvui.cn/components/tooltip.html) | | |||
| uv-alert | [警告提示](https://www.uvui.cn/components/alert.html) | | |||
| uv-toast | [消息提示](https://www.uvui.cn/components/toast.html) | | |||
| uv-notice-bar | [滚动通知](https://www.uvui.cn/components/noticeBar.html) | | |||
| uv-notify | [消息提示](https://www.uvui.cn/components/notify.html) | | |||
| uv-no-network | [无网络提示](https://www.uvui.cn/components/noNetwork.html) | | |||
| uv-popup | [弹出层](https://www.uvui.cn/components/popup.html) | | |||
| uv-modal | [模态框](https://www.uvui.cn/components/modal.html) | | |||
| uv-cell | [单元格](https://www.uvui.cn/components/cell.html) | | |||
| uv-swipe-action | [滑动单元格](https://www.uvui.cn/components/swipeAction.html) | | |||
| uv-swiper | [轮播图](https://www.uvui.cn/components/swiper.html) | | |||
| uv-collapse | [折叠面板](https://www.uvui.cn/components/collapse.html) | | |||
| uv-grid | [宫格布局](https://www.uvui.cn/components/grid.html) | | |||
| uv-album | [相册](https://www.uvui.cn/components/album.html) | | |||
| uv-tabbar | [底部导航栏](https://www.uvui.cn/components/tabbar.html) | | |||
| uv-back-top | [返回顶部](https://www.uvui.cn/components/backTop.html) | | |||
| uv-navbar | [自定义导航栏](https://www.uvui.cn/components/navbar.html) | | |||
| uv-action-sheet | [底部操作菜单](https://www.uvui.cn/components/actionSheet.html) | | |||
| uv-tabs | [标签选项卡](https://www.uvui.cn/components/tabs.html) | | |||
| uv-steps | [步骤条](https://www.uvui.cn/components/steps.html) | | |||
| uv-subsection | [分段器](https://www.uvui.cn/components/subsection.html) | | |||
| uv-sticky | [吸顶](https://www.uvui.cn/components/sticky.html) | | |||
| uv-parse | [富文本解析器](https://www.uvui.cn/components/parse.html) | | |||
| uv-overlay | [遮罩层](https://www.uvui.cn/components/overlay.html) | | |||
| uv-code-input | [验证码输入](https://www.uvui.cn/components/codeInput.html) | | |||
| uv-read-more | [展开阅读更多](https://www.uvui.cn/components/readMore.html) | | |||
| uv-line | [线条](https://www.uvui.cn/components/line.html) | | |||
| uv-gap | [间隔槽](https://www.uvui.cn/components/gap.html) | | |||
| uv-divider | [分割线](https://www.uvui.cn/components/divider.html) | | |||
## 版权信息 | |||
uv-ui遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uv-ui应用到您的产品中。 | |||
## 作者想说 | |||
- 开源真的不易,不图大家的钱财,所以希望大家多多鼓励支持,希望不要恶意评论,有问题加群快速解决。 | |||
- 遇到BUG,是一件很正常的事情,是程序肯定就有BUG,所以希望大家能以理解的心态去提出BUG,然后作者才有动力去努力修复。 | |||
- 最后觉得好用的小伙伴,不要吝啬你的双手,给个好评就是给我们最大的鼓励。 | |||
# 恶评者手下留情,有事加QQ群解决:549833913 |
@ -0,0 +1,11 @@ | |||
const { http } = uni.$uv | |||
// 获取菜单 | |||
console.info(`http`,http) | |||
export const fetchMenu = (params, config = {}) => http.get('/applet/index/getRecommendDocs', params, config) | |||
/** | |||
* 登录的接口 | |||
*/ | |||
// 微信登录接口 | |||
export const wxLogin = (params) => http.get('/api/login/login', {params:params}) |
@ -0,0 +1,3 @@ | |||
export default { | |||
baseUrl: 'https://api.book118.com' | |||
} |
@ -0,0 +1,244 @@ | |||
<template> | |||
<uv-popup ref="popup" mode="bottom" :popup="false" :mask="true" :closeable="true" :safe-area-inset-bottom="true" | |||
close-icon-color="#ffffff" :z-index="uZIndex" :maskCloseAble="maskCloseAble" @close="close"> | |||
<uv-tabs v-if="value" lineColor="#a0cd63" :list="genTabsList" :scrollable="true" :current="tabsIndex" @change="tabsChange" ref="tabs"></uv-tabs> | |||
<view class="area-box"> | |||
<view class="u-flex" :class="{ 'change':isChange }"> | |||
<view class="area-item"> | |||
<view class="u-padding-10 u-bg-gray" style="height: 100%;"> | |||
<scroll-view :scroll-y="true" style="height: 100%"> | |||
<uv-cell-group> | |||
<uv-cell v-for="(item,index) in provinces" :title="item.label" :arrow="false" :name="index" :key="index" | |||
@click="provinceChange"> | |||
<template v-slot:right-icon> | |||
<uv-icon v-if="isChooseP&&province===index" size="34" color="#a0cd63" name="checkbox-mark"></uv-icon> | |||
</template> | |||
</uv-cell> | |||
</uv-cell-group> | |||
</scroll-view> | |||
</view> | |||
</view> | |||
<view class="area-item"> | |||
<view class="u-padding-10 u-bg-gray" style="height: 100%;"> | |||
<scroll-view :scroll-y="true" style="height: 100%"> | |||
<uv-cell-group v-if="isChooseP"> | |||
<uv-cell v-for="(item,index) in citys" :title="item.label" :arrow="false" :name="index" :key="index" | |||
@click="cityChange"> | |||
<template v-slot:right-icon> | |||
<uv-icon v-if="isChooseC&&city===index" size="34" color="#a0cd63" name="checkbox-mark"></uv-icon> | |||
</template> | |||
</uv-cell> | |||
</uv-cell-group> | |||
</scroll-view> | |||
</view> | |||
</view> | |||
<view class="area-item"> | |||
<view class="u-padding-10 u-bg-gray" style="height: 100%;"> | |||
<scroll-view :scroll-y="true" style="height: 100%"> | |||
<uv-cell-group v-if="isChooseC"> | |||
<uv-cell v-for="(item,index) in areas" :title="item.label" :arrow="false" :name="index" :key="index" | |||
@click="areaChange"> | |||
<template v-slot:right-icon> | |||
<uv-icon v-if="isChooseA&&area===index" size="34" color="#a0cd63" name="checkbox-mark"></uv-icon> | |||
</template> | |||
</uv-cell> | |||
</uv-cell-group> | |||
</scroll-view> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</uv-popup> | |||
</template> | |||
<script> | |||
import provinces from "./utils/province.js"; | |||
import citys from "./utils/city.js"; | |||
import areas from "./utils/area.js"; | |||
/** | |||
* city-select 省市区级联选择器 | |||
* @property {String Number} z-index 弹出时的z-index值(默认1075) | |||
* @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭Picker(默认true) | |||
* @property {String} default-region 默认选中的地区,中文形式 | |||
* @property {String} default-code 默认选中的地区,编号形式 | |||
*/ | |||
export default { | |||
props: { | |||
// 通过双向绑定控制组件的弹出与收起 | |||
value: { | |||
type: Boolean, | |||
default: true | |||
}, | |||
// 默认显示的地区,可传类似["河北省", "秦皇岛市", "北戴河区"] | |||
defaultRegion: { | |||
type: Array, | |||
default () { | |||
return []; | |||
} | |||
}, | |||
// 默认显示地区的编码,defaultRegion和areaCode同时存在,areaCode优先,可传类似["13", "1303", "130304"] | |||
areaCode: { | |||
type: Array, | |||
default () { | |||
return []; | |||
} | |||
}, | |||
// 是否允许通过点击遮罩关闭Picker | |||
maskCloseAble: { | |||
type: Boolean, | |||
default: true | |||
}, | |||
// 弹出的z-index值 | |||
zIndex: { | |||
type: [String, Number], | |||
default: 0 | |||
} | |||
}, | |||
data() { | |||
return { | |||
cityValue: "", | |||
isChooseP: false, //是否已经选择了省 | |||
province: 0, //省级下标 | |||
provinces: provinces, | |||
isChooseC: false, //是否已经选择了市 | |||
city: 0, //市级下标 | |||
citys: citys[0], | |||
isChooseA: false, //是否已经选择了区 | |||
area: 0, //区级下标 | |||
areas: areas[0][0], | |||
tabsIndex: 0, | |||
} | |||
}, | |||
mounted() { | |||
this.init(); | |||
}, | |||
computed: { | |||
isChange() { | |||
return this.tabsIndex > 1; | |||
}, | |||
genTabsList() { | |||
let tabsList = [{ | |||
name: "请选择" | |||
}]; | |||
if (this.isChooseP) { | |||
tabsList[0]['name'] = this.provinces[this.province]['label']; | |||
tabsList[1] = { | |||
name: "请选择" | |||
}; | |||
} | |||
if (this.isChooseC) { | |||
tabsList[1]['name'] = this.citys[this.city]['label']; | |||
tabsList[2] = { | |||
name: "请选择" | |||
}; | |||
} | |||
if (this.isChooseA) { | |||
tabsList[2]['name'] = this.areas[this.area]['label']; | |||
} | |||
return tabsList; | |||
}, | |||
uZIndex() { | |||
// 如果用户有传递z-index值,优先使用 | |||
return this.zIndex ? this.zIndex : 99; | |||
} | |||
}, | |||
methods: { | |||
open(){ | |||
this.$refs.popup.open(); | |||
}, | |||
init() { | |||
if (this.areaCode.length == 3) { | |||
this.setProvince("", this.areaCode[0]); | |||
this.setCity("", this.areaCode[1]); | |||
this.setArea("", this.areaCode[2]); | |||
} else if (this.defaultRegion.length == 3) { | |||
this.setProvince(this.defaultRegion[0], ""); | |||
this.setCity(this.defaultRegion[1], ""); | |||
this.setArea(this.defaultRegion[2], ""); | |||
}; | |||
}, | |||
setProvince(label = "", value = "") { | |||
this.provinces.map((v, k) => { | |||
if (value ? v.value == value : v.label == label) { | |||
this.provinceChange(k); | |||
} | |||
}) | |||
}, | |||
setCity(label = "", value = "") { | |||
this.citys.map((v, k) => { | |||
if (value ? v.value == value : v.label == label) { | |||
this.cityChange(k); | |||
} | |||
}) | |||
}, | |||
setArea(label = "", value = "") { | |||
this.areas.map((v, k) => { | |||
if (value ? v.value == value : v.label == label) { | |||
this.isChooseA = true; | |||
this.area = k; | |||
} | |||
}) | |||
}, | |||
close() { | |||
this.$refs.popup.close(); | |||
}, | |||
tabsChange(index) { | |||
this.tabsIndex = index; | |||
}, | |||
provinceChange(param) { | |||
this.isChooseP = true; | |||
this.isChooseC = false; | |||
this.isChooseA = false; | |||
this.province = param.name; | |||
this.citys = citys[param.name]; | |||
this.tabsIndex = 1; | |||
}, | |||
cityChange(param) { | |||
this.isChooseC = true; | |||
this.isChooseA = false; | |||
this.city = param.name; | |||
this.areas = areas[this.province][param.name]; | |||
this.tabsIndex = 2; | |||
}, | |||
areaChange(param) { | |||
this.isChooseA = true; | |||
this.area = param.name; | |||
let result = {}; | |||
result.province = this.provinces[this.province]; | |||
result.city = this.citys[this.city]; | |||
result.area = this.areas[this.area]; | |||
this.$emit('city-change', result); | |||
this.close(); | |||
} | |||
} | |||
} | |||
</script> | |||
<style lang="scss"> | |||
.area-box { | |||
width: 100%; | |||
overflow: hidden; | |||
height: 800rpx; | |||
.u-flex { | |||
display: flex; | |||
} | |||
.u-padding-10 { | |||
padding: 10rpx; | |||
} | |||
>view { | |||
width: 150%; | |||
transition: transform 0.3s ease-in-out 0s; | |||
transform: translateX(0); | |||
&.change { | |||
transform: translateX(-33.3333333%); | |||
} | |||
} | |||
.area-item { | |||
width: 33.3333333%; | |||
height: 800rpx; | |||
} | |||
} | |||
</style> |
@ -0,0 +1 @@ | |||
var provinceData=[{"label":"北京市","value":"11"},{"label":"天津市","value":"12"},{"label":"河北省","value":"13"},{"label":"山西省","value":"14"},{"label":"内蒙古自治区","value":"15"},{"label":"辽宁省","value":"21"},{"label":"吉林省","value":"22"},{"label":"黑龙江省","value":"23"},{"label":"上海市","value":"31"},{"label":"江苏省","value":"32"},{"label":"浙江省","value":"33"},{"label":"安徽省","value":"34"},{"label":"福建省","value":"35"},{"label":"江西省","value":"36"},{"label":"山东省","value":"37"},{"label":"河南省","value":"41"},{"label":"湖北省","value":"42"},{"label":"湖南省","value":"43"},{"label":"广东省","value":"44"},{"label":"广西壮族自治区","value":"45"},{"label":"海南省","value":"46"},{"label":"重庆市","value":"50"},{"label":"四川省","value":"51"},{"label":"贵州省","value":"52"},{"label":"云南省","value":"53"},{"label":"西藏自治区","value":"54"},{"label":"陕西省","value":"61"},{"label":"甘肃省","value":"62"},{"label":"青海省","value":"63"},{"label":"宁夏回族自治区","value":"64"},{"label":"新疆维吾尔自治区","value":"65"},{"label":"台湾","value":"66"},{"label":"香港","value":"67"},{"label":"澳门","value":"68"}];export default provinceData; |
@ -0,0 +1,52 @@ | |||
import Vue from 'vue' | |||
import utils from './utils/utils.js' | |||
import uvUI from '@/uni_modules/uv-ui-tools' | |||
console.info(`uvUI`,uvUI) | |||
Vue.use(uvUI); | |||
// 当前环境 | |||
const type = 'prod' | |||
// 环境配置 | |||
const config = { | |||
dev : { | |||
baseUrl : 'http://augcl.natapp1.cc/employ-api', | |||
}, | |||
prod : { | |||
baseUrl : 'https://employadmin.augcl.com/employ-api', | |||
} | |||
} | |||
// 默认配置 | |||
const defaultConfig = { | |||
mapKey : 'XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU', | |||
aliOss : { | |||
url : 'https://tennis-oss.xzaiyp.top/', | |||
config : { | |||
//桶的地址 | |||
region: 'oss-cn-guangzhou', | |||
//id | |||
accessKeyId:'LTAI5tNycA46YTwm383dRvMV', | |||
//密钥 | |||
accessKeySecret:'tAdbYQCmdur6jbZ8hjvgB7T1Z52mIG', | |||
//桶的名字 | |||
bucket: 'zhuoqiu-image', | |||
endpoint:'oss-cn-guangzhou.aliyuncs.com', | |||
} | |||
}, | |||
} | |||
uni.$uv.setConfig({ | |||
config: { | |||
unit: 'rpx' | |||
}, | |||
}) | |||
Vue.prototype.$config = utils.deepMergeObject(defaultConfig, config[type]) | |||
export default Vue.prototype.$config |
@ -0,0 +1,20 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8" /> | |||
<script> | |||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || | |||
CSS.supports('top: constant(a)')) | |||
document.write( | |||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + | |||
(coverSupport ? ', viewport-fit=cover' : '') + '" />') | |||
</script> | |||
<title></title> | |||
<!--preload-links--> | |||
<!--app-context--> | |||
</head> | |||
<body> | |||
<div id="app"><!--app-html--></div> | |||
<script type="module" src="/main.js"></script> | |||
</body> | |||
</html> |
@ -0,0 +1,38 @@ | |||
import App from './App' | |||
import uvUI from '@/uni_modules/uv-ui-tools' | |||
import { Request } from '@/util/request/index' | |||
// #ifndef VUE3 | |||
import Vue from 'vue' | |||
import './uni.promisify.adaptor' | |||
Vue.config.productionTip = false | |||
App.mpType = 'app' | |||
import store from './store' | |||
Vue.prototype.$store = store | |||
import './config.js' | |||
import './utils/index.js' | |||
const app = new Vue({ | |||
...App, | |||
store, | |||
}) | |||
app.$mount() | |||
Request(app) | |||
// #endif | |||
// #ifdef VUE3 | |||
import { | |||
createSSRApp | |||
} from 'vue' | |||
export function createApp() { | |||
const app = createSSRApp(App) | |||
Request(app) | |||
return { | |||
app | |||
} | |||
} | |||
// #endif |
@ -0,0 +1,107 @@ | |||
{ | |||
"name" : "tenancy-wechat-uniapp", | |||
"appid" : "__UNI__09A45BC", | |||
"description" : "", | |||
"versionName" : "1.0.0", | |||
"versionCode" : "100", | |||
"transformPx" : false, | |||
"app-plus" : { | |||
"usingComponents" : true, | |||
"nvueStyleCompiler" : "uni-app", | |||
"compilerVersion" : 3, | |||
"splashscreen" : { | |||
"alwaysShowBeforeRender" : true, | |||
"waiting" : true, | |||
"autoclose" : true, | |||
"delay" : 0 | |||
}, | |||
"modules" : { | |||
"Canvas" : "nvue canvas" | |||
}, | |||
"distribute" : { | |||
"android" : { | |||
"permissions" : [ | |||
"<uses-feature android:name=\"android.hardware.camera\"/>", | |||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", | |||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", | |||
"<uses-permission android:name=\"android.permission.CAMERA\"/>", | |||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", | |||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>" | |||
] | |||
}, | |||
"ios" : { | |||
"dSYMs" : false | |||
}, | |||
"sdkConfigs" : { | |||
"ad" : {} | |||
}, | |||
"icons" : { | |||
"android" : { | |||
"hdpi" : "unpackage/res/icons/72x72.png", | |||
"xhdpi" : "unpackage/res/icons/96x96.png", | |||
"xxhdpi" : "unpackage/res/icons/144x144.png", | |||
"xxxhdpi" : "unpackage/res/icons/192x192.png" | |||
}, | |||
"ios" : { | |||
"appstore" : "unpackage/res/icons/1024x1024.png", | |||
"ipad" : { | |||
"app" : "unpackage/res/icons/76x76.png", | |||
"app@2x" : "unpackage/res/icons/152x152.png", | |||
"notification" : "unpackage/res/icons/20x20.png", | |||
"notification@2x" : "unpackage/res/icons/40x40.png", | |||
"proapp@2x" : "unpackage/res/icons/167x167.png", | |||
"settings" : "unpackage/res/icons/29x29.png", | |||
"settings@2x" : "unpackage/res/icons/58x58.png", | |||
"spotlight" : "unpackage/res/icons/40x40.png", | |||
"spotlight@2x" : "unpackage/res/icons/80x80.png" | |||
}, | |||
"iphone" : { | |||
"app@2x" : "unpackage/res/icons/120x120.png", | |||
"app@3x" : "unpackage/res/icons/180x180.png", | |||
"notification@2x" : "unpackage/res/icons/40x40.png", | |||
"notification@3x" : "unpackage/res/icons/60x60.png", | |||
"settings@2x" : "unpackage/res/icons/58x58.png", | |||
"settings@3x" : "unpackage/res/icons/87x87.png", | |||
"spotlight@2x" : "unpackage/res/icons/80x80.png", | |||
"spotlight@3x" : "unpackage/res/icons/120x120.png" | |||
} | |||
} | |||
}, | |||
"splashscreen" : { | |||
"androidStyle" : "common" | |||
} | |||
}, | |||
"nvueLaunchMode" : "", | |||
"renderer" : "native" | |||
}, | |||
"quickapp" : {}, | |||
"mp-weixin" : { | |||
"appid" : "", | |||
"setting" : { | |||
"urlCheck" : false, | |||
"es6" : true, | |||
"postcss" : true, | |||
"minified" : true | |||
}, | |||
"usingComponents" : true | |||
}, | |||
"mp-alipay" : { | |||
"usingComponents" : true | |||
}, | |||
"mp-baidu" : { | |||
"usingComponents" : true | |||
}, | |||
"mp-toutiao" : { | |||
"usingComponents" : true | |||
}, | |||
"uniStatistics" : { | |||
"enable" : false | |||
}, | |||
"vueVersion" : "3", | |||
"h5" : { | |||
"router" : { | |||
"mode" : "history" | |||
}, | |||
"title" : "tenancy" | |||
} | |||
} |
@ -0,0 +1,141 @@ | |||
{ | |||
"pages": [ | |||
{ | |||
"path": "pages/home/index", | |||
"style": { | |||
"navigationBarTitleText": "租房" | |||
} | |||
}, | |||
{ | |||
"path": "pages/auth/index", | |||
"style": { | |||
"navigationBarTitleText": "微信登录", | |||
"navigationStyle":"custom" | |||
} | |||
}, | |||
{ | |||
"path": "pages/login/index", | |||
"style": { | |||
"navigationStyle":"custom" | |||
} | |||
}, | |||
{ | |||
"path": "pages/discover/index", | |||
"style": { | |||
"navigationBarTitleText": "发现" | |||
} | |||
}, | |||
{ | |||
"path": "pages/user/index", | |||
"style": { | |||
"navigationBarTitleText": "我的", | |||
"navigationStyle":"default", | |||
"navigationBarBackgroundColor": "#1EC77A", | |||
"navigationBarTextStyle": "white" | |||
} | |||
}, | |||
{ | |||
"path": "pages/message/index", | |||
"style": { | |||
"navigationBarTitleText": "消息" | |||
} | |||
}, | |||
{ | |||
"path": "pages/apply/index", | |||
"style": { | |||
"navigationBarTitleText": "申请" | |||
} | |||
} | |||
], | |||
"subPackages": [ | |||
{ | |||
"root": "pages_subpack", | |||
"pages": [ | |||
{ | |||
"path": "category/index", | |||
"style": { | |||
"navigationBarTitleText": "分类" | |||
} | |||
}, | |||
{ | |||
"path": "detail/index", | |||
"style": { | |||
"navigationBarTitleText": "详情" | |||
} | |||
}, | |||
{ | |||
"path": "release/index", | |||
"style": { | |||
"navigationBarTitleText": "发布" | |||
} | |||
}, | |||
{ | |||
"path": "broker/index", | |||
"style": { | |||
"navigationBarTitleText": "经纪人" | |||
} | |||
}, | |||
{ | |||
"path": "homeowner/index", | |||
"style": { | |||
"navigationBarTitleText": "房东" | |||
} | |||
}, | |||
{ | |||
"path": "success/index", | |||
"style": { | |||
"navigationBarTitleText": "登录成功" | |||
} | |||
}, | |||
{ | |||
"path": "house/index", | |||
"style": { | |||
"navigationBarTitleText": "房屋发布" | |||
} | |||
}, | |||
{ | |||
"path": "realname/index", | |||
"style": { | |||
"navigationBarTitleText": "实名认证" | |||
} | |||
}, | |||
{ | |||
"path": "successful/index", | |||
"style": { | |||
"navigationBarTitleText": "申请成功" | |||
} | |||
} | |||
] | |||
} | |||
], | |||
"globalStyle": { | |||
"navigationBarTextStyle": "white", | |||
"navigationBarTitleText": "租房", | |||
"navigationBarBackgroundColor": "#1EC77A", | |||
"backgroundColor": "#1EC77A" | |||
}, | |||
"tabBar": { | |||
"color": "#666666", | |||
"selectedColor": "#1EC77A", | |||
"backgroundColor": "#ffffff", | |||
"list": [ | |||
{ | |||
"pagePath": "pages/home/index", | |||
"iconPath": "static/bar/home.png", | |||
"selectedIconPath": "static/bar/home_selected.png", | |||
"text": "首页" | |||
}, { | |||
"pagePath": "pages/discover/index", | |||
"iconPath": "static/bar/find.png", | |||
"selectedIconPath": "static/bar/find_selected.png", | |||
"text": "发现" | |||
}, { | |||
"pagePath": "pages/user/index", | |||
"iconPath": "static/bar/user.png", | |||
"selectedIconPath": "static/bar/user_selected.png", | |||
"text": "我的" | |||
} | |||
] | |||
}, | |||
"uniIdRouter": {} | |||
} |
@ -0,0 +1,36 @@ | |||
<template> | |||
<view> | |||
<view class="se-flex se-flex-v-c se-pt-40"> | |||
<image class="se-w-500 se-h-400" src="@/static/image/82x.png" mode=""></image> | |||
<text class="se-c-33 se-fs-24">您还不是房东,请先提交申请</text> | |||
</view> | |||
<view class="se-px-80 se-py-40 se-mt-50"> | |||
<view class="se-c-white se-py-20 se-fs-26 se-bgc-orange se-br-40 se-ta-c" @click="onNavigator()"> | |||
立即申请 | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
} | |||
}, | |||
methods:{ | |||
onNavigator(){ | |||
uni.navigateTo({ | |||
url:"/pages_subpack/realname/index" | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,120 @@ | |||
<template> | |||
<view class="se-pos se-h-vh-100"> | |||
<view class="se-flex se-pt-200 se-flex-h-c se-flex-ff-cw"> | |||
<image class="se-w-150 se-h-150" src="@/static/image/logo.png" mode=""></image> | |||
<view class="se-flex se-flex-h-c se-fs-34 se-fw-6 se-c-black se-mt-40"> | |||
租房小程序 | |||
</view> | |||
</view> | |||
<view class="se-pb-200 se-pos-cb se-w-p-100"> | |||
<view @click="onLogin()" class="se-mx-80 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green"> | |||
<image class="se-w-45 se-h-35" src="@/static/image/wechat.png" mode=""></image> | |||
<text class="se-ml-10">微信登录</text> | |||
</view> | |||
<!-- <view class="se-mx-80 se-br-40 se-mt-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-66 se-bgc-f5"> | |||
<text>手机验证码登录</text> | |||
</view> --> | |||
<view class="se-mx-80 se-br-40 se-mt-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-24 se-c-33"> | |||
<uv-checkbox-group @change="checkboxChange" v-model="checked"> | |||
<uv-checkbox name="1" activeColor="#07C160" label-size="12" shape="circle" label="阅读并同意"></uv-checkbox> | |||
<text class="se-c-green" @click="open()">《隐私政策》</text> | |||
<text class="se-c-green" @click="open()">《服务条款》</text> | |||
</uv-checkbox-group> | |||
</view> | |||
</view> | |||
<uv-popup ref="popup" :round="20" mode="center" bg-color="transparent" :close-on-click-overlay="false"> | |||
<view class="se-w-600 se-bgc-white se-br-40 se-p-40"> | |||
<view class="se-flex se-flex-h-c"> | |||
<image class="se-a-80" src="@/static/image/6588.png" mode=""></image> | |||
</view> | |||
<view class="se-flex se-flex-h-c se-fs-34 se-fw-6 se-c-black se-mt-40"> | |||
服务协议和隐私权政策 | |||
</view> | |||
<view class="se-lh-40 se-mt-40 se-fs-24 se-c-99"> | |||
<text>请您务必审慎阅读、充分理解用户协议和隐私政策各条款,包括但不限于用户注意事项、用户行为规范以及为了向你提供服务而收集、使用、存储你个人信息的情况等。你可阅读</text> | |||
<text class="se-c-black se-fw-6" @click="handleOpenPrivacyContract()">《租房小程序用户服务协议》</text> | |||
<text>和</text> | |||
<text class="se-c-black se-fw-6" @click="handleOpenPrivacyContract()">《租房小程序平台隐私权政策》</text> | |||
<text>了解详细信息。如你同意,请点击下方按钮开始接受我们的服务。</text> | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-mt-40"> | |||
<view @click="onCancel" class="se-br-20 se-flex-1 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-66 se-bgc-f5"> | |||
<text>不同意</text> | |||
</view> | |||
<view @click="onAgree" class="se-br-20 se-ml-20 se-flex-1 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green"> | |||
<text class="se-ml-10">同意</text> | |||
</view> | |||
</view> | |||
</view> | |||
</uv-popup> | |||
</view> | |||
</template> | |||
<script> | |||
import { fetchMenu,wxLogin } from "@/common/api.js" | |||
export default { | |||
name : 'Auth', | |||
data() { | |||
return { | |||
checked:[], | |||
show:false | |||
} | |||
}, | |||
methods: { | |||
open(){ | |||
this.$refs.popup.open(); | |||
}, | |||
checkboxChange(n) { | |||
console.log('change', n); | |||
}, | |||
onCancel(){ | |||
this.$refs.popup.close(); | |||
this.checked=[]; | |||
}, | |||
onAgree(){ | |||
this.$refs.popup.close(); | |||
this.checked=['1']; | |||
}, | |||
onLogin(){ | |||
let that = this | |||
if(that.checked.length==0){ | |||
return uni.showToast({ | |||
icon: "none", | |||
title: "请勾选隐私协议" | |||
}) | |||
} | |||
uni.showLoading({ | |||
title: '登录中...' | |||
}) | |||
uni.login({ | |||
success(res) { | |||
console.info(res.code) | |||
if(res.errMsg != "login:ok"){ | |||
return | |||
} | |||
wxLogin({ code : res.code }).then((response) => { | |||
uni.hideLoading() | |||
uni.setStorageSync('token', response.result.token) | |||
that.commit('setUserInfo',{userInfo:response.result.userInfo,token:response.result.token}) | |||
}).catch(() =>{ | |||
}) | |||
} | |||
}) | |||
}, | |||
handleOpenPrivacyContract() { | |||
// 打开隐私协议页面 | |||
wx.openPrivacyContract({ | |||
success: () => {}, // 打开成功 | |||
fail: () => {}, // 打开失败 | |||
complete: () => {} | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
</style> |
@ -0,0 +1,52 @@ | |||
<template> | |||
<view class="se-p-20"> | |||
<view class="se-p-20 se-bgc-white se-br-20 se-mb-20" v-for="(items,indexs) in 5" :key="indexs"> | |||
<view class="se-flex se-flex-h"> | |||
<image class="se-a-80" src="../../static/image/6588.png" mode=""></image> | |||
<view class="se-flex se-flex-v se-ml-30"> | |||
<text class="se-fs-28 se-c-black">天越翔园 4室2厅 66.45㎡ </text> | |||
<view class="se-flex se-flex-ai-c se-pt-10"> | |||
<text class="se-c-red se-fs-30 se-fw-6">450万</text> | |||
<text class="se-c-66 se-fs-22 se-ml-20">罗湖 莲塘</text> | |||
</view> | |||
</view> | |||
</view> | |||
<view class="se-c-black se-fs-26 se-lh-40 se-pt-20"> | |||
三层复试,中空挑高,厅出大阳台,使用率超高,天越翔园 | |||
</view> | |||
<view class="se-br-10 se-py-20"> | |||
<video class="se-br-10 se-w-p-100 se-h-360" src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4" controls></video> | |||
</view> | |||
<view class="se-bgc-f5 se-br-10 se-py-20 se-px-10 se-c-black se-fs-24 se-flex se-flex-ai-c"> | |||
<image class="se-a-30 se-br-p-50" src="../../static/image/6588.png" mode=""></image> | |||
<text class="se-ml-10 se-fw-6">程敏</text> | |||
</view> | |||
</view> | |||
<view class="se-pos-fixed se-pos-rc" style="right: 30rpx;"> | |||
<image @click="onNavigator()" class="se-a-150" src="@/static/image/discover.png" mode=""></image> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
} | |||
}, | |||
methods:{ | |||
onNavigator(){ | |||
uni.navigateTo({ | |||
url:"/pages_subpack/release/index" | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,176 @@ | |||
<template> | |||
<view> | |||
<view class="se-px-40 se-py-20"> | |||
<view class="se-bgc-white se-br-50 se-c-black se-px-20 se-py-5 se-flex se-flex-h-sb se-fs-26"> | |||
<view class="se-b-r se-pl-10 se-pr-20 se-flex se-flex-h se-h-40 se-lh-40 " @click="handleAreaChange()"> | |||
<text class="se-pr-20 nobreak">{{city}}</text> | |||
<uv-icon name="arrow-down-fill"></uv-icon> | |||
</view> | |||
<view class="se-ml-20"> | |||
<uv-search :showAction="false" bgColor="transparent" placeholder="请输入租房信息" v-model="keyword"></uv-search> | |||
</view> | |||
</view> | |||
</view> | |||
<view class="backdrop se-mb-20"> | |||
<image class="se-w-vw-100 se-h-400" src="@/static/image/banner.png" mode=""></image> | |||
</view> | |||
<view class="se-grid se-bgc-white se-py-30 se-mt-300"> | |||
<navigator url="/pages_subpack/category/index" v-for="(item, index) in nav" :key="index" class="se-flex-v-c se-mb-20"> | |||
<image class="se-a-100 se-br-20" :src="item.img" mode=""></image> | |||
<text class="se-w-150 se-h-60 se-lh-30 se-c-black se-fs-22 se-ta-c se-mt-10 se-toe-2">{{item.name}}</text> | |||
</navigator> | |||
<!-- <view v-for="(item, index) in nav" :key="index" class="se-flex-v-c se-mb-20" @click="onNav"> | |||
<image class="se-a-100 se-br-20" :src="item.img" mode=""></image> | |||
<text class="se-w-150 se-h-60 se-lh-30 se-c-black se-fs-22 se-ta-c se-mt-10 se-toe-2">{{item.name}}</text> | |||
</view> --> | |||
</view> | |||
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-orange se-flex se-flex-ai-c se-fs-24"> | |||
<image class="se-a-80" src="@/static/image/aed60x.png" mode=""></image> | |||
<text class="se-ml-10">今日有20套租房信息新发布....</text> | |||
</view> | |||
<view class="se-bgc-white se-my-20"> | |||
<uv-tabs :list="list" :activeStyle="{color:'#000000'}" :inactiveStyle="{color:'#666666'}" :lineColor="`url(${lineBg}) 100% 100%`"></uv-tabs> | |||
</view> | |||
<view class="se-pb-200"> | |||
<view @click="onDetail(item)" class="se-my-10 se-mx-20 se-px-20 se-py-20 se-br-20 se-bgc-white se-flex" v-for="(item,index) in 20" :key="index"> | |||
<view class="se-pos se-w-260 se-h-180"> | |||
<image class="se-a-80 se-pos-lt" src="../../static/image/2x.png" mode=""></image> | |||
<image class="se-w-260 se-h-180 se-br-10" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image> | |||
</view> | |||
<view class="se-pl-10 se-w-p-100"> | |||
<view class="se-c-black se-fs-28"> | |||
整租·四季峰景四期 2室2厅1卫 | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-fs-24 se-mt-10 se-c-66"> | |||
<text>精装修</text> | |||
<text>1年</text> | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-mt-10"> | |||
<view class="se-display-ib se-c-white se-bgc-orange se-fs-22 se-br-8 se-px-10 se-py-5"> | |||
全新首租 | |||
</view> | |||
<view class="se-c-66 se-flex se-flex-ai-c"> | |||
<uv-icon name="eye"></uv-icon> | |||
<text class="se-ml-5 se-fs-18">999+</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-mt-10"> | |||
<text class="se-c-red se-fs-28 se-fw-6">¥1500元/月</text> | |||
<text class="se-c-66 se-fs-22">四季峰景四期</text> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 地址 --> | |||
<citySelect ref="citySelectRef" :zIndex="0" @city-change="handleCityChange"></citySelect> | |||
</view> | |||
</template> | |||
<script> | |||
import citySelect from "@/components/cityselect/index.vue" | |||
import { fetchMenu } from '@/common/api.js'; | |||
const lineBg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAANCAYAAAC3mX7tAAAAAXNSR0IArs4c6QAAAbxJREFUOE+lk0FrE1EUhc+ZDOhMigjZdNcWdCPJqNCdlkZw4TKL2mVwkKLQ/gAFRcEu/AEKuumDrEopNEsXSlNoV+2iTYIbBdNdNwGpmRmFyVx5oQk6mYSpvt1799z7zTnvDQPlBAJcRGxZOLXotn7Gz8ftZePaROCZP+IaEh36a04LxFS8mMmgcKFcb54H9Kvi5LtdNIZ6BMf0lVMDMD88UJ7abuP1eUDeWuEZyVcJPZ/oKeclgRcJxRMrG17l4udOGthZbF8ATMb1IvKcXiU/y66xnziM2LQf1O+nAfnq+hYgpSStCeMmdcFXzi6AWyMGrlvZcGmUs54T31QQLIzo37Pd+u0eKFD5osDYHvPlJyLyNopYnbgUtrSuc2pOG4aUSC4nxTWYFXHOfni02wPp5anCO4KP0sSUViOQ91m38VjrByDZLprBt/ZHkAkvMO3oP3QiO9ZM7i7v1MK/QHoj6sblQLrV/4ZpCDMluoff++iBo/6Bdua32m/+NUYdlz2dW+k7GQnqF84eyOqY1xjPcw8Rn+iLTwp6yFFcpP8zhLxHsgjBFRrI9WKO0AbxVURqMOVDttw8GHeTvwFKoZ4cmcUYJAAAAABJRU5ErkJggg=="; | |||
export default{ | |||
components:{ | |||
citySelect | |||
}, | |||
data(){ | |||
return{ | |||
city:"长沙市", | |||
keyword:"", | |||
lineBg: lineBg, | |||
nav:[ | |||
{ | |||
img:"../../static/image/nav1.png", | |||
name:"闲置散居农房" | |||
}, | |||
{ | |||
img:"../../static/image/nav2.png", | |||
name:"集体建设用地" | |||
}, | |||
{ | |||
img:"../../static/image/nav3.png", | |||
name:"鱼塘" | |||
}, | |||
{ | |||
img:"../../static/image/nav4.png", | |||
name:"林地" | |||
}, | |||
{ | |||
img:"../../static/image/nav5.png", | |||
name:"经营性建设用地" | |||
}, | |||
{ | |||
img:"../../static/image/nav6.png", | |||
name:"耕地" | |||
}, | |||
{ | |||
img:"../../static/image/nav7.png", | |||
name:"出租房" | |||
}, | |||
{ | |||
img:"../../static/image/nav8.png", | |||
name:"二手房" | |||
} | |||
], | |||
list: [ | |||
{ | |||
name: '近期热销' | |||
}, { | |||
name: '城市' | |||
}, { | |||
name: '分区' | |||
}, { | |||
name: '闲置资源分类' | |||
} | |||
], | |||
} | |||
}, | |||
mounted() { | |||
this.getHttpData() | |||
}, | |||
methods:{ | |||
getHttpData() { | |||
const res = fetchMenu(); | |||
console.log(res) | |||
}, | |||
handleAreaChange(){ | |||
this.$refs.citySelectRef.open() | |||
}, | |||
handleCityChange(e) { | |||
console.info(e) | |||
this.city = e.city.label | |||
// this.form.area = e.province.label + '-' + e.city.label + '-' + e.area.label; | |||
}, | |||
onDetail(event){ | |||
uni.navigateTo({ | |||
url:"/pages_subpack/detail/index" | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
.se-grid{ | |||
border-top-right-radius: 50rpx; | |||
border-top-left-radius: 50rpx; | |||
} | |||
.backdrop{ | |||
width: 750rpx; | |||
height: 350rpx; | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
z-index: -1; | |||
/* border-radius: 0 0 14% 14%; */ | |||
} | |||
.nobreak { | |||
white-space: nowrap; | |||
} | |||
</style> |
@ -0,0 +1,46 @@ | |||
<template> | |||
<view> | |||
<view class="se-pt-200 se-flex se-flex-h-c se-flex-ff-cw"> | |||
<image class="se-w-150 se-h-150" src="@/static/image/logo.png" mode=""></image> | |||
<view class="se-flex se-flex-h-c se-fs-34 se-fw-6 se-c-black se-mt-40"> | |||
租房小程序 | |||
</view> | |||
<view class="se-mt-20 se-fs-26 se-c-black se-flex se-flex-h-c"> | |||
申请获取您的头像、昵称 | |||
</view> | |||
</view> | |||
<view class="se-mx-40 se-py-100"> | |||
<view class="se-b-t se-b-b se-flex se-h-140 se-lh-140 se-flex-h-sb"> | |||
<text>头像</text> | |||
<image class="se-w-100 se-h-100" src="@/static/image/header.png" mode=""></image> | |||
</view> | |||
<view class=" se-b-b se-flex se-h-140 se-lh-140 se-flex-h-sb"> | |||
<text>昵称</text> | |||
<input class="se-h-80 se-lh-80 se-w-320" placeholder-class="se-fs-24 se-ta-r" placeholder="请输入名称" type="text" /> | |||
</view> | |||
</view> | |||
<view class="se-mx-40"> | |||
<view class="se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green"> | |||
确认 | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name : 'Login', | |||
data() { | |||
return { | |||
} | |||
}, | |||
methods: { | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
</style> |
@ -0,0 +1,37 @@ | |||
<template> | |||
<view> | |||
<view class="se-flex se-m-20 se-bgc-white se-br-10 se-p-20" v-for="(items,indexs) in 8" :key="indexs" @click="onNavigator()"> | |||
<image class="se-a-80 se-br-10 " src="@/static/image/logo.png" mode=""></image> | |||
<view class="se-pl-10 se-w-p-85"> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-c-black se-fs-28 se-c-black"> | |||
<text>租房小王子</text> | |||
<text class="se-c-text-sub se-fs-24">12:56</text> | |||
</view> | |||
<view class="se-c-text-sub se-fs-26">[整租·四季峰景四期 2室1厅1卫]</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
list:[] | |||
} | |||
}, | |||
methods:{ | |||
onNavigator(){ | |||
// uni.navigateTo({ | |||
// url:"/pages_subpack/release/index" | |||
// }) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,90 @@ | |||
<template> | |||
<view class="u-page"> | |||
<view class="se-pt-50 se-pb-120 se-px-40 se-bgc-green se-c-white se-pos"> | |||
<view class="se-flex"> | |||
<image src="@/static/image/header.png" class="se-br-p-50 se-w-120 se-h-120" mode=""></image> | |||
<view class="se-ml-20 se-flex se-flex-v-sa se-flex-ai-fs"> | |||
<view class="se-flex"> | |||
<text class="se-fw-6 se-fs-30">热心小肖</text> | |||
<!-- <view class="se-flex se-flex-ai-c se-ml-20"> | |||
<image class="se-a-25 se-mr-10" src="@/static/image/pencil.png" mode=""></image> | |||
<text class="se-fs-22">修改资料</text> | |||
</view> --> | |||
</view> | |||
<view class="se-fs-24 se-display-ib"> | |||
<text>手机号:</text> | |||
<text class="se-ml-20">13189698114</text> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<view class="se-m-30 se-pl-30 se-pr-20 se-br-20 se-bgc-white"> | |||
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b"> | |||
<view class="se-flex se-flex-ai-c"> | |||
<image class="se-a-30" src="@/static/image/47086.png" mode=""></image> | |||
<text class="se-ml-20 se-fs-24 se-fw-5">房东中心</text> | |||
</view> | |||
<view class="se-flex se-flex-ai-c"> | |||
<uv-icon name="arrow-right"></uv-icon> | |||
</view> | |||
</view> | |||
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b"> | |||
<view class="se-flex se-flex-ai-c"> | |||
<image class="se-a-30" src="@/static/image/47100.png" mode=""></image> | |||
<text class="se-ml-20 se-fs-24 se-fw-5">经纪人中心</text> | |||
</view> | |||
<view class="se-flex se-flex-ai-c"> | |||
<uv-icon name="arrow-right"></uv-icon> | |||
</view> | |||
</view> | |||
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb"> | |||
<view class="se-flex se-flex-ai-c"> | |||
<image class="se-a-30" src="@/static/image/47186.png" mode=""></image> | |||
<text class="se-ml-20 se-fs-24 se-fw-5">关于我们</text> | |||
</view> | |||
<view class="se-flex se-flex-ai-c"> | |||
<uv-icon name="arrow-right"></uv-icon> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
} | |||
}, | |||
methods: { | |||
onCustomerService(){ | |||
uni.showModal({ | |||
title: '联系客服', | |||
content: '确定拨打客服电话?', | |||
success: function (res) { | |||
if (res.confirm) { | |||
console.log('用户点击确定'); | |||
} else if (res.cancel) { | |||
console.log('用户点击取消'); | |||
} | |||
} | |||
}); | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page { | |||
background-color: #f5f5f5 !important; | |||
} | |||
.se-grid { | |||
display: grid; | |||
grid-template-columns: 1fr 1fr 1fr 1fr; | |||
gap: 10rpx; | |||
padding-bottom: 4rpx; | |||
} | |||
</style> |
@ -0,0 +1,71 @@ | |||
<template> | |||
<view class="se-p-30"> | |||
<uv-form labelPosition="top" :model="form" :rules="rules" ref="form"> | |||
<uv-form-item label="账号" prop="name" > | |||
<uv-input v-model="form.name" type="text" placeholder="请输入账号" customStyle="border-radius: 30px;margin-top:5px;background-color: #ffffff;padding:5px 20px;" border="none"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="密码" prop="password"> | |||
<uv-input v-model="form.password" type="password" placeholder="请输入密码" customStyle="border-radius: 30px;margin-top:5px;background-color: #ffffff;padding:5px 20px;" border="none"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item> | |||
<uv-button type="primary" text="登录" customStyle="margin-top: 30px;background-color: #1EC7B6;border-radius: 30px;" @click="submit"></uv-button> | |||
</uv-form-item> | |||
</uv-form> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
form:{ | |||
name:"", | |||
password:"" | |||
}, | |||
rules:{ | |||
name:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入账号', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
password:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入密码', | |||
trigger: ['blur', 'change'] | |||
} | |||
] | |||
} | |||
} | |||
}, | |||
methods:{ | |||
submit() { | |||
uni.navigateTo({ | |||
url:"/pages_subpack/house/index" | |||
}) | |||
this.$refs.form.validate().then(res => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验通过' | |||
}) | |||
}).catch(errors => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验失败' | |||
}) | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,227 @@ | |||
<template> | |||
<view> | |||
<view class="se-bgc-white se-pb-20 se-pt-30 se-px-40"> | |||
<uv-search @search="onSearch()" placeholder="搜索租房信息" :showAction="false" v-model="keyword"></uv-search> | |||
</view> | |||
<view class="se-pb-10 se-px-40 se-bgc-white"> | |||
<uv-drop-down ref="dropDown" sign="dropDown_1" text-active-color="#20CD7D" | |||
:extra-icon="{name:'arrow-down-fill',color:'#666',size:'26rpx'}" | |||
:extra-active-icon="{name:'arrow-up-fill',color:'#20CD7D',size:'26rpx'}" :defaultValue="defaultValue" | |||
:custom-style="{padding: '0rpx 0rpx',borderBottom:'1rpx solid transparent'}" @click="selectMenu"> | |||
<uv-drop-down-item name="region" type="2" :label="dropItem('region').label" :value="dropItem('region').value"> | |||
</uv-drop-down-item> | |||
<uv-drop-down-item name="rent" type="2" :label="dropItem('rent').label" :value="dropItem('rent').value"> | |||
</uv-drop-down-item> | |||
<uv-drop-down-item name="type" type="2" :label="dropItem('type').label" :value="dropItem('type').value"> | |||
</uv-drop-down-item> | |||
<uv-drop-down-item name="duration" type="2" :label="dropItem('duration').label" :value="dropItem('duration').value"> | |||
</uv-drop-down-item> | |||
<!-- <uv-drop-down-item name="vip_type" type="1" label='VIP文档' :value="dropItem('vip_type').value"> | |||
</uv-drop-down-item> --> | |||
</uv-drop-down> | |||
<uv-drop-down-popup sign="dropDown_1" :click-overlay-on-close="true" :currentDropItem="currentDropItem" | |||
@clickItem="clickItem" @popupChange="change"></uv-drop-down-popup> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
onPageScroll() { | |||
// 滚动后及时更新位置 | |||
this.$refs.dropDown.init(); | |||
}, | |||
computed: { | |||
dropItem(name) { | |||
return (name) => { | |||
const result = {}; | |||
const find = this.result.find(item => item.name === name); | |||
if (find) { | |||
result.label = find.label; | |||
result.value = find.value; | |||
} else { | |||
result.label = this[name].label; | |||
result.value = this[name].value; | |||
} | |||
return result; | |||
} | |||
}, | |||
// 获取当前下拉筛选项 | |||
currentDropItem() { | |||
return this[this.activeName]; | |||
} | |||
}, | |||
data() { | |||
return { | |||
keyword: "", | |||
// 表示value等于这些值,就属于默认值 | |||
defaultValue: ['all', 'all', 'all','all'], | |||
// 筛选结果 | |||
result: [], | |||
region:{ | |||
label: '区域', | |||
value: 'all', | |||
activeIndex: 0, | |||
color: '#333', | |||
activeColor: '#20CD7D', | |||
child: [{ | |||
label: '全部区域', | |||
value: 'all' | |||
}, { | |||
label: '湖南', | |||
value: 'hunan' | |||
}, { | |||
label: '广州', | |||
value: 'guangzhou' | |||
}] | |||
}, | |||
rent:{ | |||
label: '租金', | |||
value: 'all', | |||
activeIndex: 0, | |||
color: '#333', | |||
activeColor: '#20CD7D', | |||
child: [{ | |||
label: '全部', | |||
value: 'all' | |||
}, { | |||
label: '0-2k', | |||
value: '2000' | |||
}, { | |||
label: '2k-4k', | |||
value: '4000' | |||
}, { | |||
label: '4k-6k', | |||
value: '6000' | |||
}, { | |||
label: '6k+', | |||
value: '6000+' | |||
}] | |||
}, | |||
type: { | |||
label: '类型', | |||
value: 'all', | |||
activeIndex: 0, | |||
color: '#333', | |||
activeColor: '#20CD7D', | |||
child: [{ | |||
label: '全部', | |||
value: 'all' | |||
}, { | |||
label: '闲置散居农房', | |||
value: 'nongfang' | |||
}, { | |||
label: '鱼塘', | |||
value: 'yutang' | |||
}, { | |||
label: '耕地', | |||
value: 'gengdi' | |||
}] | |||
}, | |||
duration:{ | |||
label: '年限', | |||
value: 'all', | |||
activeIndex: 0, | |||
color: '#333', | |||
activeColor: '#20CD7D', | |||
child: [{ | |||
label: '全部', | |||
value: 'all' | |||
}, { | |||
label: '5年内', | |||
value: '0-5' | |||
}, { | |||
label: '5-10年', | |||
value: '5-10' | |||
}, { | |||
label: '10-20年', | |||
value: '10-20' | |||
}] | |||
}, | |||
activeName: 'region', | |||
vip_type: { | |||
label: 'VIP文档', | |||
value: 0, | |||
activeIndex: 0 | |||
} | |||
} | |||
}, | |||
methods: { | |||
onSearch(){ | |||
this.$emit("onSearch",this.keyword) | |||
}, | |||
change(e) { | |||
console.log('弹窗打开状态:', e); | |||
}, | |||
/** | |||
* 点击每个筛选项回调 | |||
* @param {Object} e { name, active, type } = e | |||
*/ | |||
selectMenu(e) { | |||
const { | |||
name, | |||
active, | |||
type | |||
} = e; | |||
this.activeName = name; | |||
// type 等于1 的需要特殊处理:type不等于1可以忽略 | |||
if (type == 1) { | |||
this.clickItem({ | |||
name: 'vip_type', | |||
label: 'VIP文档', | |||
value: e.active ? 1 : 0 | |||
}); | |||
} else { | |||
const find = this.result.find(item => item.name == this.activeName); | |||
if (find) { | |||
const findIndex = this[this.activeName].child.findIndex(item => item.label == find.label && item | |||
.value == find.value); | |||
this[this.activeName].activeIndex = findIndex; | |||
} else { | |||
this[this.activeName].activeIndex = 0; | |||
} | |||
} | |||
}, | |||
/** | |||
* 点击菜单回调处理 | |||
* @param {Object} item 选中项 { label,value } = e | |||
*/ | |||
clickItem(e) { | |||
// 下面有重新赋值,所以用let | |||
let { | |||
label, | |||
value | |||
} = e; | |||
const findIndex = this.result.findIndex(item => item.name == this.activeName); | |||
if (this.defaultValue.indexOf(value) > -1 && this[this.activeName].label) { | |||
label = this[this.activeName].label; | |||
} | |||
// 已经存在筛选项 | |||
if (findIndex > -1) { | |||
this.$set(this.result, findIndex, { | |||
name: this.activeName, | |||
label, | |||
value | |||
}) | |||
} else { | |||
this.result.push({ | |||
name: this.activeName, | |||
label, | |||
value | |||
}); | |||
} | |||
this.result = this.result.filter(item => this.defaultValue.indexOf(item.value) == -1); | |||
// uni.showModal({ | |||
// content: `筛选的值:${JSON.stringify(this.result)}` | |||
// }) | |||
console.info(this.result) | |||
this.$emit("onParent",this.result) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
</style> |
@ -0,0 +1,61 @@ | |||
<template> | |||
<view class="uv-page"> | |||
<searchVue @onSearch="onSearch($event)" @onParent="onDropDown($event)" /> | |||
<view class="se-my-10 se-mx-20 se-px-20 se-py-20 se-br-20 se-bgc-white se-flex" v-for="(item,index) in 20" :key="index"> | |||
<view class="se-pos se-w-260 se-h-180"> | |||
<image class="se-a-80 se-pos-lt" src="../../static/image/2x.png" mode=""></image> | |||
<image class="se-w-260 se-h-180 se-br-10" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image> | |||
</view> | |||
<view class="se-pl-10 se-w-p-100"> | |||
<view class="se-c-black se-fs-28"> | |||
整租·四季峰景四期 2室2厅1卫 | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-fs-24 se-mt-10 se-c-66"> | |||
<text>精装修</text> | |||
<text>1年</text> | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-mt-10"> | |||
<view class="se-display-ib se-c-white se-bgc-orange se-fs-22 se-br-8 se-px-10 se-py-5"> | |||
全新首租 | |||
</view> | |||
<view class="se-c-66 se-flex se-flex-ai-c"> | |||
<uv-icon name="eye"></uv-icon> | |||
<text class="se-ml-5 se-fs-18">999+</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-flex-h-sb se-flex-ai-c se-mt-10"> | |||
<text class="se-c-red se-fs-28 se-fw-6">¥1500元/月</text> | |||
<text class="se-c-66 se-fs-22">四季峰景四期</text> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import searchVue from './component/search.vue' | |||
export default{ | |||
components:{ | |||
searchVue | |||
}, | |||
data(){ | |||
return{ | |||
keyword:"", | |||
} | |||
}, | |||
methods:{ | |||
onSearch(event){ | |||
console.info(event) | |||
}, | |||
onDropDown(event){ | |||
console.info(event[0].value) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,262 @@ | |||
<template> | |||
<view> | |||
<view class="se-w-vw-100 se-h-500"> | |||
<uv-swiper :radius="0" :list="list" :height="250" keyName="url" :autoplay="false"></uv-swiper> | |||
</view> | |||
<view class="se-py-20 se-flex se-bgc-white"> | |||
<view class="se-w-vw-90 se-pl-30"> | |||
<view class=" se-c-black se-fw-6 se-fs-32"> | |||
整租·四季峰景四期·2室1厅1卫整租·四季峰景四期·2室1厅1卫整租·四季峰景四期·2室1厅1卫 | |||
</view> | |||
<view class="se-display-ib se-c-white se-bgc-orange se-fs-22 se-br-8 se-px-10 se-py-5"> | |||
全新首租 | |||
</view> | |||
</view> | |||
<view class="se-w-vw-10 se-pr-30 se-flex se-flex-v-c"> | |||
<uv-icon name="photo"></uv-icon> | |||
<text class="se-c-black se-fs-20">分享</text> | |||
</view> | |||
</view> | |||
<view class="se-mt-30 se-bgc-white se-py-30 se-flex se-flex-h-fs"> | |||
<view class="se-flex-1 se-flex-v-sa"> | |||
<text class="se-c-66 se-fw-5">价格</text> | |||
<text class="se-c-red se-fw-6 se-mt-20">2000元/月</text> | |||
</view> | |||
<view class="se-flex-1 se-flex-v-sa"> | |||
<text class="se-c-66 se-fw-5">户型</text> | |||
<text class="se-c-red se-fw-6 se-mt-20">2000元/月</text> | |||
</view> | |||
<view class="se-flex-1 se-flex-v-sa"> | |||
<text class="se-c-66 se-fw-5">面积</text> | |||
<text class="se-c-red se-fw-6 se-mt-20">90平方米</text> | |||
</view> | |||
</view> | |||
<view class="se-mt-30 se-p-40 se-bgc-white"> | |||
<view class="se-flex se-flex-ai-c se-pb-10"> | |||
<view class="line-green"></view> | |||
<view class="se-ml-10 se-fs-32 se-c-black se-fw-6"> | |||
房源信息 | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">编号</text> | |||
<text class="se-c-black">232355214</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">房屋结构</text> | |||
<text class="se-c-black">两室一厅</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-2 se-py-20"> | |||
<text class="se-c-66 se-mr-20">房屋地址</text> | |||
<text class="se-c-black se-fw-6">湖南省长沙市天心区芙蓉街道四季峰景四期</text> | |||
</view> | |||
</view> | |||
<view class="se-flex bgc-active-lg se-py-20 se-br-10"> | |||
<view class="se-w-p-85 se-pl-30"> | |||
<view class=" se-c-black se-fw-6 se-fs-24"> | |||
具体地址:长沙市天心区桂花坪街道231号 | |||
</view> | |||
<view class="se-fs-22 se-py-5"> | |||
距离你1.4km 骑行9分钟 步行18分钟 | |||
</view> | |||
</view> | |||
<view class="se-w-p-15 se-pr-30 se-flex se-flex-v-c"> | |||
<uv-icon name="photo"></uv-icon> | |||
<text class="se-c-black se-fs-20 se-mt-10">导航</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-2 se-py-20"> | |||
<text class="se-c-66 se-mr-20">房屋周边</text> | |||
<text class="se-c-black se-fw-6">超市·幼儿园·医院·学校·小吃街等</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">房间数量</text> | |||
<text class="se-c-black">2</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">菜地</text> | |||
<text class="se-c-black">40㎡</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">距离场镇距离</text> | |||
<text class="se-c-black">2km</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">距离成都西三环</text> | |||
<text class="se-c-black">2km</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">房屋主体是否改造</text> | |||
<text class="se-c-black">否</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">房屋面积</text> | |||
<text class="se-c-black">90㎡</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">院子总面积</text> | |||
<text class="se-c-black">30㎡</text> | |||
</view> | |||
<view class="se-flex-2 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">房屋朝向及海拔</text> | |||
<text class="se-c-black">90坐南朝北 600</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">是否经过安置</text> | |||
<text class="se-c-black">是</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">交通</text> | |||
<text class="se-c-black">交通便利</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">坟包及电塔 工厂噪音</text> | |||
<text class="se-c-black">无</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">水电气网</text> | |||
<text class="se-c-black">正常</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">停车</text> | |||
<text class="se-c-black">100元/月</text> | |||
</view> | |||
<view class="se-flex-2 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">付款方式及押金</text> | |||
<text class="se-c-black">押一付三(押金¥2000)</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">租期</text> | |||
<text class="se-c-black">1年</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">非正常死亡</text> | |||
<text class="se-c-black">无</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">邻居对房东评价</text> | |||
<text class="se-c-black">为人和善</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">佣金</text> | |||
<text class="se-c-black">200</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">钥匙</text> | |||
<text class="se-c-black">2</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">户主家庭职业</text> | |||
<text class="se-c-black">医生</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-fs-24"> | |||
<view class="se-flex-1 se-py-20"> | |||
<text class="se-c-66 se-mr-20">报建手续</text> | |||
<text class="se-c-black">完整</text> | |||
</view> | |||
<view class="se-flex-1 se-py-20 se-flex se-flex-h-fe"> | |||
<text class="se-c-66 se-mr-20">户主年龄</text> | |||
<text class="se-c-black">40岁</text> | |||
</view> | |||
</view> | |||
</view> | |||
<view class="se-mt-30 se-p-40 se-bgc-white"> | |||
<view class="se-flex se-flex-ai-c se-pb-10"> | |||
<view class="line-green"></view> | |||
<view class="se-ml-10 se-fs-32 se-c-black se-fw-6"> | |||
产权证照片 | |||
</view> | |||
</view> | |||
<view class="se-flex se-mt-20"> | |||
<image class="se-w-320 se-h-180 se-br-5" src="../../static/image/logo.png" mode=""></image> | |||
<image class="se-w-320 se-h-180 se-br-5 se-ml-10" src="../../static/image/logo.png" mode=""></image> | |||
</view> | |||
</view> | |||
<view class="se-mt-30 se-p-40 se-bgc-white"> | |||
<view class="se-flex se-flex-ai-c se-pb-10"> | |||
<view class="line-green"></view> | |||
<view class="se-ml-10 se-fs-32 se-c-black se-fw-6"> | |||
房东评价 | |||
</view> | |||
</view> | |||
<view class="se-mt-30" v-for="(items,indexs) in 5" :key="indexs"> | |||
<view class="se-flex se-w-p-100"> | |||
<view class="se-flex se-flex-1"> | |||
<image class="se-a-80 se-br-p-50" src="../../static/image/6588.png" mode=""></image> | |||
<view class="se-flex se-flex-v-sa se-flex-ai-fs se-ml-10"> | |||
<text class="se-c-33 se-fs-26">IYU466930948</text> | |||
<text class="se-c-66 se-fs-22">2024.04.18</text> | |||
</view> | |||
</view> | |||
<view class="se-flex se-flex-1 se-flex-h-fe"> | |||
<uv-rate :count="5" activeColor="#FCD618" v-model="rate"></uv-rate> | |||
</view> | |||
</view> | |||
<view class="se-lh-40 se-mt-10 se-fs-24 se-c-33"> | |||
房东人很不错,当时疫情没在房子里面住,直接给我免了一个月房租,真的很感动,平时有什么需要维修的地方联系他也会很快处理☺☺☺ | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
rate:3, | |||
list: [{ | |||
url: 'https://cdn.uviewui.com/uview/resources/video.mp4', | |||
title: '昨夜星辰昨夜风,画楼西畔桂堂东', | |||
poster: 'https://cdn.uviewui.com/uview/swiper/swiper1.png' | |||
}, { | |||
url: 'https://cdn.uviewui.com/uview/swiper/swiper2.png', | |||
title: '身无彩凤双飞翼,心有灵犀一点通' | |||
}, { | |||
url: 'https://cdn.uviewui.com/uview/swiper/swiper3.png', | |||
title: '谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳' | |||
}] | |||
} | |||
}, | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
.line-green { | |||
width: 8rpx; | |||
height: 32rpx; | |||
background: #20CD7D; | |||
border-radius: 4rpx; | |||
} | |||
.bgc-active-lg{ | |||
background-color: #F1FFF9; | |||
} | |||
</style> |
@ -0,0 +1,60 @@ | |||
<template> | |||
<view class="se-p-30"> | |||
<uv-form labelPosition="top" :model="form" :rules="rules" ref="form"> | |||
<uv-form-item label="经纪人邀请码" prop="invite" labelWidth="220"> | |||
<uv-input v-model="form.invite" type="text" placeholder="请输入邀请码" customStyle="border-radius: 30px;margin-top:5px;background-color: #ffffff;padding:5px 20px;" border="none"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item> | |||
<uv-button type="primary" text="登录" customStyle="margin-top: 30px;background-color: #1EC77A;border-radius: 30px;" @click="submit"></uv-button> | |||
</uv-form-item> | |||
</uv-form> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
form:{ | |||
invite:"", | |||
password:"" | |||
}, | |||
rules:{ | |||
invite:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入邀请码', | |||
trigger: ['blur', 'change'] | |||
} | |||
] | |||
} | |||
} | |||
}, | |||
methods:{ | |||
submit() { | |||
uni.navigateTo({ | |||
url:"/pages_subpack/house/index" | |||
}) | |||
this.$refs.form.validate().then(res => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验通过' | |||
}) | |||
}).catch(errors => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验失败' | |||
}) | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,359 @@ | |||
<template> | |||
<view class="se-p-40 se-bgc-white"> | |||
<uv-form labelPosition="left" :model="form" :rules="rules" ref="form" labelWidth="60" labelStyle="font-size:26rpx;"> | |||
<uv-form-item label="标题" prop="title" > | |||
<uv-input v-model="form.title" type="text" placeholder="请输入标题" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="价格" prop="price"> | |||
<uv-input v-model="form.price" type="text" placeholder="请输入价格" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="户型" prop="house"> | |||
<uv-input v-model="form.house" type="text" placeholder="请输入户型" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="面积" prop="proportion"> | |||
<uv-input v-model="form.proportion" type="text" placeholder="请输入面积" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="所属位置" prop="address" @click="handleAreaChange()"> | |||
<uv-input v-model="form.address" @click="handleAreaChange()" disabled disabledColor="#ffffff" placeholder="所属位置" border="none"> | |||
</uv-input> | |||
<template v-slot:right> | |||
<uv-icon name="arrow-right"></uv-icon> | |||
</template> | |||
</uv-form-item> | |||
<uv-form-item label="编号" prop="number"> | |||
<uv-input v-model="form.number" type="text" placeholder="请输入编号" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="房屋周边" prop="perimeter"> | |||
<uv-input v-model="form.perimeter" type="text" placeholder="请输入房屋周边" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="房间数量" prop="housesNumber"> | |||
<uv-number-box v-model="form.housesNumber" :min="1" :max="10"></uv-number-box> | |||
</uv-form-item> | |||
<uv-form-item label="房屋主体是否改造" labelWidth="200" prop="revamp"> | |||
<uv-radio-group v-model="form.revamp" placement="row"> | |||
<uv-radio name="1" label="是"></uv-radio> | |||
<uv-radio name="0" customStyle="margin-left:30rpx;" label="否"></uv-radio> | |||
</uv-radio-group> | |||
</uv-form-item> | |||
<uv-form-item label="是否经过安置" labelWidth="200" prop="resettle"> | |||
<uv-radio-group v-model="form.resettle" placement="row"> | |||
<uv-radio name="1" label="是"></uv-radio> | |||
<uv-radio name="0" customStyle="margin-left:30rpx;" label="否"></uv-radio> | |||
</uv-radio-group> | |||
</uv-form-item> | |||
<uv-form-item label="院子总面积" labelWidth="100" prop="yardProportion"> | |||
<uv-input v-model="form.yardProportion" type="text" placeholder="请输入院子总面积" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="坟包及电塔工厂噪音" labelWidth="150" prop="noise"> | |||
<uv-input v-model="form.noise" type="text" placeholder="请输入坟包及电塔工厂噪音" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="水电气网" prop="net"> | |||
<uv-input v-model="form.net" type="text" placeholder="请输入水电气网" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="停车" prop="park"> | |||
<uv-input v-model="form.park" type="text" placeholder="请输入停车" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="付款方式及押金" labelWidth="120" prop="deposit"> | |||
<uv-input v-model="form.deposit" type="text" placeholder="请输入押金" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="天府市民云房屋信息档案查询" labelWidth="100" prop="archival" labelPosition="top"> | |||
<uv-input v-model="form.archival" type="text" placeholder="请输入天府市民云房屋信息档案查询" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="租期" prop="tenancy"> | |||
<uv-input v-model="form.tenancy" type="text" placeholder="请输入租期" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="邻居对房东的评价" labelWidth="120" prop="evaluate"> | |||
<uv-input v-model="form.evaluate" type="text" placeholder="请输入邻居对房东的评价" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="非正常死亡" labelWidth="80" prop="death"> | |||
<uv-input v-model="form.death" type="text" placeholder="请输入非正常死亡" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="钥匙" prop="key"> | |||
<uv-input v-model="form.key" type="text" placeholder="请输入钥匙" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="佣金" prop="commission"> | |||
<uv-input v-model="form.commission" type="text" placeholder="请输入佣金" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="报建手续" prop="procedures"> | |||
<uv-input v-model="form.procedures" type="text" placeholder="请输入报建手续" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="产权证照片" labelWidth="250" prop="isOwnershipList" labelPosition="top"> | |||
<uv-upload customStyle="margin-top:20rpx;" :fileList="form.ownershipList" @afterRead="afterOwnershipRead" @delete="deleteOwnershipPic" name="1" | |||
multiple :maxCount="10"></uv-upload> | |||
</uv-form-item> | |||
<uv-form-item label="房屋照片/视频" labelWidth="250" prop="isHouseList" labelPosition="top"> | |||
<uv-upload customStyle="margin-top:20rpx;" :fileList="form.houseList" @afterRead="afterHouseRead" @delete="deleteHousePic" name="1" | |||
multiple :maxCount="10"></uv-upload> | |||
</uv-form-item> | |||
<uv-form-item label="备注" prop="remark" labelPosition="top"> | |||
<uv-input v-model="form.remark" type="text" placeholder="请输入备注" customStyle="border-radius: 5px;margin-top:5px;background-color: #f5f5f5;padding:5px 10px;"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item> | |||
<uv-button type="primary" text="确认发布" customStyle="margin-top: 30px;background-color: #1EC77A;border-radius: 30px;" @click="submit"></uv-button> | |||
</uv-form-item> | |||
</uv-form> | |||
<!-- 地址 --> | |||
<citySelect ref="citySelectRef" :zIndex="0" @city-change="handleCityChange"></citySelect> | |||
</view> | |||
</template> | |||
<script> | |||
import citySelect from "@/components/cityselect/index.vue" | |||
export default{ | |||
components:{ | |||
citySelect | |||
}, | |||
data(){ | |||
return{ | |||
form:{ | |||
title:"",//标题 | |||
price:"",//价格 | |||
house:"",//户型 | |||
proportion:"",//面积 | |||
address:"",//所属位置 | |||
number:"",//编号 | |||
perimeter:"",//房屋周边 | |||
housesNumber:1,//房间数量 | |||
revamp:0,//房屋主体是否改造 | |||
resettle:0,//是否经过安置 | |||
yardProportion:"",//院子总面积 | |||
noise:"",//噪音 | |||
net:"",//水电气网 | |||
park:"",//停车 | |||
deposit:"",//押金 | |||
archival:"",//档案查询 | |||
tenancy:"",//租期 | |||
evaluate:"",//评价 | |||
death:"",//非正常死亡 | |||
key:"",//钥匙 | |||
commission:"",//佣金 | |||
procedures:"",//手续 | |||
isOwnershipList:"", | |||
ownershipList:[], | |||
isHouseList:"", | |||
houseList:[], | |||
remark:"" | |||
}, | |||
rules:{ | |||
title:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入账号', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
price:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入价格', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
house:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入户型', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
proportion:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入面积', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
number:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入编号', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
perimeter:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入房屋周边', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
yardProportion:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入院子总面积', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
noise:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入坟包及电塔工厂噪音', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
net:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入水电气网', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
park:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入停车', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
deposit:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入押金', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
archival:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入天府市民云房屋信息档案查询', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
tenancy:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入租期', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
evaluate:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入邻居对房东的评价', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
death:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入非正常死亡', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
key:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入钥匙', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
commission:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入佣金', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
procedures:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入报建手续', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
} | |||
} | |||
}, | |||
watch: { | |||
'form.ownershipList'(newValue, oldValue) { | |||
if (newValue.length > 0) { | |||
this.form.isOwnershipList = '有' | |||
} else { | |||
this.form.isOwnershipList = '' | |||
} | |||
}, | |||
'form.houseList'(newValue, oldValue) { | |||
if (newValue.length > 0) { | |||
this.form.isHouseList = '有' | |||
} else { | |||
this.form.isHouseList = '' | |||
} | |||
} | |||
}, | |||
onReady() { | |||
this.$refs.form.setRules(this.rules) | |||
}, | |||
methods:{ | |||
deleteHousePic(event) { | |||
this.form.houseList.splice(event.index, 1) | |||
}, | |||
async afterHouseRead(e) { | |||
let self = this | |||
e.file.forEach(file => { | |||
self.$Oss.ossUpload(file.url).then(url => { | |||
self.form.houseList.push({ | |||
url | |||
}) | |||
}) | |||
}) | |||
}, | |||
deleteOwnershipPic(event) { | |||
this.form.ownershipList.splice(event.index, 1) | |||
}, | |||
async afterOwnershipRead(e) { | |||
let self = this | |||
e.file.forEach(file => { | |||
self.$Oss.ossUpload(file.url).then(url => { | |||
self.form.ownershipList.push({ | |||
url | |||
}) | |||
}) | |||
}) | |||
}, | |||
handleAreaChange(){ | |||
this.$refs.citySelectRef.open() | |||
}, | |||
handleCityChange(e) { | |||
this.form.address = e.province.label + '-' + e.city.label + '-' + e.area.label; | |||
}, | |||
submit() { | |||
this.$refs.form.validate().then(res => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验通过' | |||
}) | |||
}).catch(errors => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验失败' | |||
}) | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,104 @@ | |||
<template> | |||
<view class="se-p-30"> | |||
<uv-form labelPosition="top" :labelWidth="200" :model="form" :rules="rules" ref="form"> | |||
<uv-form-item label="姓名" prop="name" > | |||
<uv-input v-model="form.name" type="text" placeholder="请输入姓名" customStyle="border-radius: 30px;margin-top:5px;background-color: #ffffff;padding:5px 20px;" border="none"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="身份证号码" prop="idcard"> | |||
<uv-input v-model="form.idcard" type="text" placeholder="请输入身份证号码" customStyle="border-radius: 30px;margin-top:5px;background-color: #ffffff;padding:5px 20px;" border="none"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="联系方式" prop="phone"> | |||
<uv-input v-model="form.phone" type="number" placeholder="请输入联系方式" customStyle="border-radius: 30px;margin-top:5px;background-color: #ffffff;padding:5px 20px;" border="none"></uv-input> | |||
</uv-form-item> | |||
<uv-form-item> | |||
<view class="se-flex se-flex-v"> | |||
<text class="se-c-black se-fw-6 se-fs-30">请上传身份证正反面照片</text> | |||
<text class="se-fs-26 se-mt-10 se-c-text">信息仅用身份核实,上传后可增加曝光机会</text> | |||
</view> | |||
<view class="se-my-20 se-p-20 se-flex se-flex-h-sa se-br-10" style="background: #f9f1e9;"> | |||
<image class="se-w-350 se-h-240" src="@/static/image/47719x.png" mode=""></image> | |||
<view class="se-br-10 se-py-10 se-px-20 se-c-white se-bgc-orange" style="background-color: #FF9F39;"> | |||
点击上传 | |||
</view> | |||
</view> | |||
<view class="se-c-text-sub se-ta-c se-fs-24"> | |||
(确保文字清晰、可辨、避免遮挡、不全、反光) | |||
</view> | |||
<view class="se-my-20 se-p-20 se-flex se-flex-h-sa se-br-10" style="background: #f9f1e9;"> | |||
<image class="se-w-350 se-h-240" src="@/static/image/47719x.png" mode=""></image> | |||
<view class="se-br-10 se-py-10 se-px-20 se-c-white se-bgc-orange" style="background-color: #FF9F39;"> | |||
点击上传 | |||
</view> | |||
</view> | |||
</uv-form-item> | |||
<uv-form-item> | |||
<uv-button type="primary" text="申请" customStyle="margin-top: 10px;border-color: #FF9F39;background-color: #FF9F39;border-radius: 30px;" @click="submit"></uv-button> | |||
</uv-form-item> | |||
</uv-form> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
form:{ | |||
name:"", | |||
idcard:"", | |||
phone:"" | |||
}, | |||
rules:{ | |||
name:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入姓名', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
idcard:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入身份证号码', | |||
trigger: ['blur', 'change'] | |||
} | |||
], | |||
phone:[ | |||
{ | |||
type: 'string', | |||
required: true, | |||
message: '请输入联系方式', | |||
trigger: ['blur', 'change'] | |||
} | |||
] | |||
} | |||
} | |||
}, | |||
methods:{ | |||
submit() { | |||
uni.navigateTo({ | |||
url:"/pages_subpack/successful/index" | |||
}) | |||
this.$refs.form.validate().then(res => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验通过' | |||
}) | |||
}).catch(errors => { | |||
uni.showToast({ | |||
icon: 'none', | |||
title: '校验失败' | |||
}) | |||
}) | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
page{ | |||
background-color: #f5f5f5; | |||
} | |||
</style> |
@ -0,0 +1,26 @@ | |||
<template> | |||
<view class=" se-p-30"> | |||
<navigator url="/pages_subpack/homeowner/index" class="se-flex se-mt-50 se-flex-ai-c se-flex-h-c se-bgc-active se-c-white se-fs-28 se-py-20 se-px-250 se-br-30" style="background-color: #1EC77A;"> | |||
我是房东 | |||
</navigator> | |||
<navigator url="/pages_subpack/broker/index" class="se-flex se-mt-50 se-flex-ai-c se-flex-h-c se-bgc-active se-c-white se-fs-28 se-py-20 se-px-250 se-br-30" style="background-color: #1EC7B6;"> | |||
我是经纪人 | |||
</navigator> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
} | |||
}, | |||
methods:{ | |||
} | |||
} | |||
</script> | |||
<style> | |||
</style> |
@ -0,0 +1,29 @@ | |||
<template> | |||
<view class="se-p-30"> | |||
<view class="se-flex se-flex-v-c se-mt-120"> | |||
<image class="se-a-130" src="../../static/image/47052.png" mode=""></image> | |||
<text class="se-fw-6 se-c-black se-mt-30">登录成功</text> | |||
</view> | |||
<view class="se-px-20 se-mt-100"> | |||
<navigator url="/pages_subpack/house/index" class="se-flex se-mt-20 se-flex-ai-c se-flex-h-c se-c-white se-fs-28 se-py-20 se-px-250 se-br-30" style="background-color: #1EC77A;"> | |||
去发布 | |||
</navigator> | |||
<navigator url="/pages/home/index" class="se-flex se-mt-40 se-flex-ai-c se-flex-h-c se-bgc-cancel se-b se-c-33 se-fs-28 se-py-20 se-px-250 se-br-30"> | |||
退出登录 | |||
</navigator> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default{ | |||
data(){ | |||
return{ | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
</style> |
@ -0,0 +1,8 @@ | |||
<template> | |||
</template> | |||
<script> | |||
</script> | |||
<style> | |||
</style> |
@ -0,0 +1 @@ | |||
export default {} |
@ -0,0 +1,15 @@ | |||
import Vue from 'vue' | |||
import Vuex from 'vuex' | |||
import data from './modules/data' | |||
import user from './modules/user' | |||
import getters from './getters' | |||
Vue.use(Vuex) | |||
export default new Vuex.Store({ | |||
modules: { | |||
data, | |||
user | |||
}, | |||
getters | |||
}) |
@ -0,0 +1,17 @@ | |||
export default { | |||
state: { | |||
isTurntableShow:false, | |||
isShareShow:false, | |||
}, | |||
mutations: { | |||
mutationsTurntable(state,status) { | |||
state.isTurntableShow = status | |||
}, | |||
mutationsShareShow(state,status) { | |||
state.isShareShow = status | |||
}, | |||
}, | |||
actions: {} | |||
} |
@ -0,0 +1,35 @@ | |||
export default { | |||
state: { | |||
token:"", | |||
userInfo : {}, //用户信息 | |||
}, | |||
mutations: { | |||
onAuth(state){ | |||
}, | |||
setUserInfo(state,obj){ | |||
state.userInfo = obj.userInfo | |||
state.token = obj.token | |||
}, | |||
logout(state){ | |||
uni.showModal({ | |||
title: '确认退出登录吗', | |||
success(r) { | |||
if(r.confirm){ | |||
state.userInfo = {} | |||
state.token = "" | |||
uni.removeStorageSync('token') | |||
uni.redirectTo({ | |||
url: '/pages/index/index' | |||
}) | |||
} | |||
} | |||
}) | |||
}, | |||
}, | |||
actions: {} | |||
} |
@ -0,0 +1,12 @@ | |||
.u-tabs__wrapper__nav__line { | |||
bottom: 0 !important; | |||
} | |||
.u-button { | |||
border-radius: 10rpx !important; | |||
} | |||
.se-bgi { | |||
background-repeat: no-repeat; | |||
background-size: 100%; | |||
} |
@ -0,0 +1,4 @@ | |||
@import './bs.scss'; | |||
@import './component.scss'; | |||
@import './layout.scss'; | |||
@import './ui.scss'; |
@ -0,0 +1,45 @@ | |||
$header-height: calc(var(--status-bar-height) + 90rpx); | |||
$app-height: calc(var(--status-bar-height) + 70rpx); | |||
$header-app-height: calc(var(--status-bar-height) + 170rpx); | |||
.se { | |||
&-layout { | |||
&-has-header { | |||
padding-top: $header-height; | |||
} | |||
&:has(.se-app) { | |||
padding-top: $header-app-height; | |||
.se-header { | |||
height: 100rpx; | |||
padding-top: 0; | |||
top: 70rpx; | |||
} | |||
} | |||
} | |||
&-page { | |||
padding: 20rpx; | |||
} | |||
&-header { | |||
width: 100%; | |||
height: $header-height; | |||
padding-top: var(--status-bar-height); | |||
position: fixed; | |||
left: 0; | |||
top: 0; | |||
z-index: 9; | |||
} | |||
&-app { | |||
width: 100%; | |||
height: $app-height; | |||
padding-top: var(--status-bar-height); | |||
position: fixed; | |||
left: 0; | |||
top: 0; | |||
z-index: 9; | |||
} | |||
} |
@ -0,0 +1,98 @@ | |||
.u-popup__content,.uni-page-head,.u-tabbar__content,.u-navbar__content,.u-transition{ | |||
width: 750rpx !important; | |||
max-width: 750px; | |||
margin: 0 auto; | |||
} | |||
.se-header,.se-bottom, | |||
.se-app{ | |||
> view { | |||
width: 750rpx !important; | |||
max-width: 750px; | |||
margin: 0 auto; | |||
} | |||
} | |||
.se-bottom{ | |||
width: 750rpx !important; | |||
max-width: 750px; | |||
} | |||
.uni-tabbar-bottom { | |||
bottom: 0; | |||
.uni-tabbar { | |||
width: 750rpx !important; | |||
max-width: 750px; | |||
position: absolute !important; | |||
left: 50% !important; | |||
transform: translateX(-50%); | |||
} | |||
} | |||
html{ | |||
height: 100%; | |||
background-color: #fff; | |||
} | |||
.uni-body{ | |||
height: auto; | |||
background-color: #fff; | |||
} | |||
uni-app{ | |||
height: unset; | |||
uni-page { | |||
display: block; | |||
height: 100%; | |||
.uni-input-input{ | |||
padding-left:2rpx; | |||
font-size: 22rpx; | |||
} | |||
uni-page-head .uni-page-head{ | |||
height: 88rpx; | |||
height: calc(88rpx + constant(safe-area-inset-top)); | |||
height: calc(88rpx + env(safe-area-inset-top)); | |||
padding: 0rpx 10rpx; | |||
} | |||
uni-page-head .uni-page-head__title{ | |||
line-height: 88rpx; | |||
} | |||
uni-page-head .uni-page-head~.uni-placeholder { | |||
width: 100%; | |||
height: 88rpx; | |||
height: calc(88rpx + constant(safe-area-inset-top)); | |||
height: calc(88rpx + env(safe-area-inset-top)); | |||
} | |||
uni-page-body { | |||
color: #333333; | |||
font-size: 28rpx; | |||
} | |||
uni-page-wrapper{ | |||
background: #fff; | |||
} | |||
uni-slider .uni-slider-handle-wrapper { | |||
height: 20rpx; | |||
} | |||
} | |||
} | |||
// 控制 tabbar 选中样式 | |||
// .uni-tabbar__icon__diff { | |||
// width: 100rpx !important; | |||
// height: 100rpx !important; | |||
// } | |||
.uni-page-head { | |||
border-bottom: 1px solid #dddddd; | |||
} | |||
.refresh { | |||
animation: rotating 300ms linear infinite reverse; | |||
} | |||
@keyframes rotating { | |||
from { | |||
transform: rotate(0deg); | |||
} | |||
to { | |||
transform: rotate(-360deg); | |||
} | |||
} |
@ -0,0 +1,13 @@ | |||
@import '../mixin/flex.scss'; | |||
.se { | |||
@for $i from 0 through 1000 { | |||
@if $i % 5 == 0 { | |||
&-a-#{$i} { | |||
@include flex-v-c; | |||
width: $i + rpx; | |||
height: $i + rpx; | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,58 @@ | |||
@import '../mixin/color.scss'; | |||
.se { | |||
&-b { | |||
border: 1rpx solid $border; | |||
&-ts + &-ts { | |||
border-top: 1rpx solid $border; | |||
} | |||
&-ls + &-ls { | |||
border-left: 1rpx solid $border; | |||
} | |||
@each $s, $l in t top, r right, b bottom, l left { | |||
&-#{$s} { | |||
border-#{$l}: 1rpx solid $border; | |||
} | |||
} | |||
@each $name in $names { | |||
$i: index($names, $name); | |||
&-#{$name} { | |||
border: 1rpx solid nth($colors, $i); | |||
} | |||
} | |||
&-n { | |||
border: none; | |||
} | |||
} | |||
&-br { | |||
@for $i from 0 through 100 { | |||
@if $i % 1 == 0 { | |||
&-#{$i} { | |||
border-radius: $i + rpx; | |||
} | |||
} | |||
} | |||
&-p-50 { | |||
border-radius: 50%; | |||
} | |||
} | |||
&-bs { | |||
box-shadow: 0 3rpx 9rpx 0 rgba(0, 0, 0, 0.06); | |||
&-t { | |||
box-shadow: -2rpx -2rpx 12rpx rgba(0, 0, 0, 0.1); | |||
} | |||
&-b { | |||
box-shadow: 2rpx 2rpx 12rpx rgba(0, 0, 0, 0.1); | |||
} | |||
} | |||
} |
@ -0,0 +1,46 @@ | |||
@import '../mixin/color.scss'; | |||
.se { | |||
&-c { | |||
@each $name in $names { | |||
$i: index($names, $name); | |||
&-#{$name} { | |||
color: nth($colors, $i); | |||
} | |||
} | |||
&-n { | |||
color: unset; | |||
} | |||
} | |||
&-bgc { | |||
@each $name in $names { | |||
$i: index($names, $name); | |||
&-#{$name} { | |||
background-color: nth($colors, $i); | |||
} | |||
} | |||
@each $name in $names-lg { | |||
$i: index($names-lg, $name); | |||
&-#{$name} { | |||
background-image: nth($colors-lg, $i); | |||
} | |||
} | |||
&-n { | |||
background: none; | |||
background-color: unset; | |||
background-image: none; | |||
} | |||
} | |||
&-o { | |||
@for $i from 0 through 10 { | |||
&-#{$i} { | |||
opacity: $i / 10; | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,69 @@ | |||
@import '../mixin/flex.scss'; | |||
.se { | |||
&-flex { | |||
@include flex; | |||
&-if { | |||
display: inline-flex !important; | |||
} | |||
&-ff { | |||
&-rw { | |||
flex-flow: row wrap !important; | |||
} | |||
&-cw { | |||
flex-flow: column wrap !important; | |||
} | |||
} | |||
@each $s in h, v { | |||
&-#{$s} { | |||
@include flex; | |||
@if $s == h { | |||
@include rn; | |||
} @else { | |||
@include cn; | |||
} | |||
@each $ss, $ll in fs flex-start, c center, fe flex-end, sb space-between, sa space-around { | |||
&-#{$ss} { | |||
@if $s == h { | |||
@include flex-rn; | |||
} @else { | |||
@include flex-cn; | |||
} | |||
justify-content: $ll; | |||
} | |||
} | |||
} | |||
} | |||
@for $i from 0 through 10 { | |||
&-#{$i} { | |||
flex: $i; | |||
} | |||
} | |||
@each $s, $l in fs flex-start, c center, fe flex-end, sb space-between, sa space-around, s stretch { | |||
&-ac-#{$s} { | |||
align-content: $l; | |||
} | |||
} | |||
@each $s, $l in fs flex-start, c center, fe flex-end, s stretch, b baseline { | |||
&-ai-#{$s} { | |||
align-items: $l; | |||
} | |||
} | |||
@each $s, $l in fs flex-start, c center, fe flex-end, s stretch, b baseline, a auto { | |||
&-as-#{$s} { | |||
align-self: $l; | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,17 @@ | |||
.se { | |||
&-fs { | |||
@for $i from 0 through 100 { | |||
&-#{$i} { | |||
font-size: $i + rpx; | |||
} | |||
} | |||
} | |||
&-fw { | |||
@for $i from 0 through 10 { | |||
&-#{$i} { | |||
font-weight: $i * 100; | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,28 @@ | |||
@mixin pos { | |||
left: 0; | |||
right: 0; | |||
top: 0; | |||
bottom: 0; | |||
} | |||
.se { | |||
&-full { | |||
width: 100%; | |||
height: 100%; | |||
&-vw { | |||
width: 100vw; | |||
height: 100vh; | |||
} | |||
&-fixed { | |||
@include pos; | |||
position: fixed; | |||
} | |||
&-abs { | |||
@include pos; | |||
position: absolute; | |||
} | |||
} | |||
} |
@ -0,0 +1,39 @@ | |||
.se { | |||
&-h { | |||
@for $i from 0 through 1000 { | |||
@if $i % 5 == 0 { | |||
&-#{$i} { | |||
height: $i + rpx; | |||
} | |||
} | |||
@if $i <=100 { | |||
&-p-#{$i} { | |||
height: $i * 1%; | |||
} | |||
&-vh-#{$i} { | |||
height: $i + vh; | |||
} | |||
} | |||
} | |||
&-n { | |||
height: unset; | |||
} | |||
} | |||
&-lh { | |||
@for $i from 0 through 200 { | |||
@if $i % 5 == 0 { | |||
&-#{$i} { | |||
line-height: $i + rpx; | |||
} | |||
} | |||
} | |||
&-n { | |||
line-height: unset; | |||
} | |||
} | |||
} |
@ -0,0 +1,10 @@ | |||
@import './area.scss'; | |||
@import './border.scss'; | |||
@import './color.scss'; | |||
@import './flex.scss'; | |||
@import './font.scss'; | |||
@import './full.scss'; | |||
@import './height.scss'; | |||
@import './pm.scss'; | |||
@import './pos.scss'; | |||
@import './width.scss'; |
@ -0,0 +1,47 @@ | |||
.se { | |||
@for $i from 0 through 500 { | |||
@if $i % 5 == 0 or $i < 20 { | |||
&-p { | |||
&-#{$i} { | |||
padding: $i + rpx; | |||
} | |||
&x-#{$i} { | |||
padding-left: $i + rpx; | |||
padding-right: $i + rpx; | |||
} | |||
&y-#{$i} { | |||
padding-top: $i + rpx; | |||
padding-bottom: $i + rpx; | |||
} | |||
} | |||
&-m { | |||
&-#{$i} { | |||
margin: $i + rpx; | |||
} | |||
&x-#{$i} { | |||
margin-left: $i + rpx; | |||
margin-right: $i + rpx; | |||
} | |||
&y-#{$i} { | |||
margin-top: $i + rpx; | |||
margin-bottom: $i + rpx; | |||
} | |||
} | |||
@each $s, $l in t top, r right, b bottom, l left { | |||
&-p#{$s}-#{$i} { | |||
padding-#{$l}: $i + rpx; | |||
} | |||
&-m#{$s}-#{$i} { | |||
margin-#{$l}: $i + rpx; | |||
} | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,82 @@ | |||
.se { | |||
&-pos { | |||
position: relative; | |||
&-fixed { | |||
position: fixed !important; | |||
} | |||
&-lt { | |||
position: absolute; | |||
left: 0; | |||
top: 0; | |||
} | |||
&-lc { | |||
position: absolute; | |||
left: 0; | |||
top: 50%; | |||
transform: translateY(-50%); | |||
} | |||
&-lb { | |||
position: absolute; | |||
left: 0; | |||
bottom: 0; | |||
} | |||
&-ct { | |||
position: absolute; | |||
left: 50%; | |||
top: 0; | |||
transform: translateX(-50%); | |||
} | |||
&-cc { | |||
position: absolute; | |||
left: 50%; | |||
top: 50%; | |||
transform: translate(-50%, -50%); | |||
} | |||
&-cb { | |||
position: absolute; | |||
left: 50%; | |||
bottom: 0; | |||
transform: translateX(-50%); | |||
} | |||
&-rt { | |||
position: absolute; | |||
right: 0; | |||
top: 0; | |||
} | |||
&-rc { | |||
position: absolute; | |||
right: 0; | |||
top: 50%; | |||
transform: translateY(-50%); | |||
} | |||
&-rb { | |||
position: absolute; | |||
right: 0; | |||
bottom: 0; | |||
} | |||
} | |||
&-zi { | |||
&-s { | |||
z-index: 9; | |||
} | |||
&-m { | |||
z-index: 999; | |||
} | |||
&-l { | |||
z-index: 99999; | |||
} | |||
} | |||
} |
@ -0,0 +1,25 @@ | |||
.se { | |||
&-w { | |||
@for $i from 0 through 1000 { | |||
@if $i % 5 == 0 { | |||
&-#{$i} { | |||
width: $i + rpx; | |||
} | |||
} | |||
@if $i <=100 { | |||
&-p-#{$i} { | |||
width: $i * 1%; | |||
} | |||
&-vw-#{$i} { | |||
width: $i + vw; | |||
} | |||
} | |||
} | |||
&-n { | |||
width: unset; | |||
} | |||
} | |||
} |
@ -0,0 +1,4 @@ | |||
@import './core/index.scss'; | |||
@import './out/index.scss'; | |||
@import './bs/index.scss'; | |||
@import './theme/index.scss'; |
@ -0,0 +1,39 @@ | |||
@import '../theme/color.scss'; | |||
$white: #ffffff; | |||
$white-mask: rgba(255, 255, 255, 0.7); | |||
$white-lg: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.7)); | |||
$black: #000000; | |||
$black-mask: rgba(0, 0, 0, 0.3); | |||
$black-lg: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.3)); | |||
$gray: #999999; | |||
$c-33: #333333; | |||
$c-66: #666666; | |||
$c-99: #999999; | |||
$c-dd: #dddddd; | |||
$c-f5: #f5f5f5; | |||
$c-f9: #f9f9f9; | |||
$blue: #409eff; | |||
$blue-lg: linear-gradient(to right, #0aa4ae, #305fb2, #6203b8); | |||
$green: #1EC77A; | |||
$green-lg: linear-gradient(to right, #1EC77A, #ffff00); | |||
$yellow: #ffff00; | |||
$yellow-lg: linear-gradient(to right, #ffff00, #e6a23c); | |||
$orange: #FF7A31; | |||
$orange-lg: linear-gradient(to right, #e6a23c, #FF7A31); | |||
$red: #f56c6c; | |||
$red-lg: linear-gradient(to right, #f56c6c, #409eff); | |||
// $border: #dddddd; | |||
// $active: #409eff; | |||
// $active-lg: linear-gradient(to right, #409eff, #dddddd); | |||
// $cancel: #999999; | |||
// $confirm: #409eff; | |||
$names: white, white-mask, black, black-mask, gray, 33, 66, 99, dd, f5,f9, blue, green, yellow, orange, red, active, cancel, confirm; | |||
$colors: $white, $white-mask, $black, $black-mask, $gray, $c-33, $c-66, $c-99, $c-dd, $c-f5,$c-f9, $blue, $green, $yellow, $orange, $red, $active, $cancel, $confirm; | |||
$names-lg: white-lg, black-lg, blue-lg, green-lg, yellow-lg, orange-lg, red-lg, active-lg; | |||
$colors-lg: $white-lg, $black-lg, $blue-lg, $green-lg, $yellow-lg, $orange-lg, $red-lg, $active-lg; |
@ -0,0 +1,33 @@ | |||
@mixin flex { | |||
display: flex; | |||
} | |||
@mixin rn { | |||
flex-flow: row nowrap; | |||
} | |||
@mixin cn { | |||
flex-flow: column nowrap; | |||
} | |||
@mixin flex-rn { | |||
@include flex; | |||
@include rn; | |||
align-items: center; | |||
} | |||
@mixin flex-cn { | |||
@include flex; | |||
@include cn; | |||
align-items: center; | |||
} | |||
@mixin flex-h-c { | |||
@include flex-rn; | |||
justify-content: center; | |||
} | |||
@mixin flex-v-c { | |||
@include flex-cn; | |||
justify-content: center; | |||
} |
@ -0,0 +1,20 @@ | |||
@mixin scrollbar { | |||
// &::-webkit-scrollbar { | |||
// width: 15px; | |||
// height: 15px; | |||
// } | |||
// &::-webkit-scrollbar-thumb { | |||
// // -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); | |||
// background-color: rgba(0, 0, 0, 0.2); | |||
// background-clip: content-box; | |||
// border: 5px solid transparent; | |||
// border-radius: 100px; | |||
// } | |||
// &::-webkit-scrollbar-track { | |||
// // -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1); | |||
// // background-color: rgba(0, 0, 0, 0.1); | |||
// // border-radius: 100px; | |||
// } | |||
} |
@ -0,0 +1,21 @@ | |||
body { | |||
height: 100%; | |||
background-color: #f5f5f5; | |||
color: #333333; | |||
} | |||
button, | |||
input, | |||
textarea { | |||
border: none; | |||
outline: none; | |||
resize: none; | |||
} | |||
#app { | |||
height: 100%; | |||
font-size: 28rpx; | |||
word-break: break-all; | |||
} |
@ -0,0 +1,33 @@ | |||
@import '../mixin/flex.scss'; | |||
@mixin btn { | |||
@include flex-h-c; | |||
display: inline-flex; | |||
border-radius: 20rpx; | |||
padding: 0 40rpx; | |||
} | |||
.se { | |||
&-btn { | |||
&-s, | |||
&-m, | |||
&-l { | |||
@include btn; | |||
} | |||
&-s { | |||
height: 60rpx; | |||
font-size: 24rpx; | |||
} | |||
&-m { | |||
height: 80rpx; | |||
font-size: 28rpx; | |||
} | |||
&-l { | |||
height: 100rpx; | |||
font-size: 32rpx; | |||
} | |||
} | |||
} |
@ -0,0 +1,75 @@ | |||
@import '../mixin/scrollbar.scss'; | |||
.se { | |||
&-clearfix { | |||
&::after { | |||
content: ' '; | |||
display: block; | |||
visibility: hidden; | |||
height: 0; | |||
font-size: 0; | |||
clear: both; | |||
} | |||
} | |||
&-scroll { | |||
@include scrollbar; | |||
overflow: auto; | |||
&-x { | |||
@include scrollbar; | |||
overflow-x: auto; | |||
&-n { | |||
overflow-x: hidden; | |||
} | |||
} | |||
&-y { | |||
@include scrollbar; | |||
overflow-y: auto; | |||
&-n { | |||
overflow-y: hidden; | |||
} | |||
} | |||
&-n { | |||
overflow: hidden; | |||
} | |||
} | |||
&-display { | |||
&-b { | |||
display: block; | |||
} | |||
&-ib { | |||
display: inline-block; | |||
} | |||
&-n { | |||
display: none; | |||
} | |||
} | |||
&-float { | |||
&-l { | |||
float: left; | |||
} | |||
&-r { | |||
float: right; | |||
} | |||
} | |||
&-cursor { | |||
&-p { | |||
cursor: pointer; | |||
} | |||
&-d { | |||
cursor: default; | |||
} | |||
} | |||
} |
@ -0,0 +1,7 @@ | |||
@import './base.scss'; | |||
@import './btn.scss'; | |||
@import './common.scss'; | |||
@import './input.scss'; | |||
@import './shape.scss'; | |||
@import './text.scss'; | |||
@import './transition.scss'; |
@ -0,0 +1,88 @@ | |||
@import '../mixin/flex.scss'; | |||
@import '../mixin/color.scss'; | |||
@mixin required { | |||
&.se-input-required { | |||
::before { | |||
content: '*'; | |||
color: $red; | |||
} | |||
} | |||
} | |||
@mixin name { | |||
.se-input-name { | |||
min-width: 80rpx; | |||
&::after { | |||
content: ':'; | |||
} | |||
} | |||
} | |||
@mixin icon { | |||
.se-input-icon { | |||
font-size: 20rpx; | |||
} | |||
} | |||
@mixin input { | |||
.se-input-inner { | |||
-webkit-appearance: none; | |||
flex: 1; | |||
width: 100%; | |||
height: 100%; | |||
background-color: transparent; | |||
color: $c-99; | |||
&::-webkit-input-placeholder { | |||
color: $c-99; | |||
} | |||
&:disabled { | |||
-webkit-opacity: 1; | |||
-webkit-text-fill-color: $c-99; | |||
background-color: transparent; | |||
color: $c-99; | |||
} | |||
} | |||
} | |||
.se { | |||
&-input { | |||
&-s { | |||
@include flex-h-c; | |||
@include required; | |||
@include name; | |||
@include icon; | |||
@include input; | |||
height: 30rpx; | |||
} | |||
&-m { | |||
@include flex-h-c; | |||
@include required; | |||
@include name; | |||
@include icon; | |||
@include input; | |||
height: 40rpx; | |||
} | |||
&-l { | |||
@include flex-h-c; | |||
@include required; | |||
@include name; | |||
@include icon; | |||
@include input; | |||
height: 50rpx; | |||
} | |||
} | |||
&-textarea { | |||
@include flex-h-c; | |||
@include required; | |||
@include name; | |||
@include icon; | |||
@include input; | |||
} | |||
} |
@ -0,0 +1,52 @@ | |||
@import '../mixin/flex.scss'; | |||
@mixin badge { | |||
@include flex-h-c; | |||
display: inline-flex; | |||
border-radius: 5rpx; | |||
padding: 5rpx 10rpx; | |||
} | |||
@mixin circle { | |||
@include flex-h-c; | |||
display: inline-flex; | |||
border-radius: 50%; | |||
overflow: hidden; | |||
} | |||
.se { | |||
&-badge { | |||
&-d { | |||
@include badge; | |||
} | |||
&-c { | |||
@include badge; | |||
padding: 5rpx 20rpx; | |||
border-radius: 20rpx; | |||
} | |||
&-m { | |||
@include badge; | |||
border-radius: 0 10rpx 10rpx 10rpx; | |||
} | |||
&-r { | |||
@include badge; | |||
padding: 5rpx 20rpx; | |||
border-radius: 20rpx 0 0 20rpx; | |||
} | |||
} | |||
&-circle { | |||
@for $i from 0 through 200 { | |||
@if $i % 5 == 0 { | |||
&-#{$i} { | |||
@include circle; | |||
width: $i + rpx; | |||
height: $i + rpx; | |||
} | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,92 @@ | |||
@mixin toe { | |||
-webkit-box-orient: vertical; | |||
display: -webkit-box; | |||
text-overflow: ellipsis; | |||
overflow: hidden; | |||
} | |||
.se { | |||
&-ta { | |||
&-l { | |||
text-align: left; | |||
} | |||
&-c { | |||
text-align: center; | |||
} | |||
&-r { | |||
text-align: right; | |||
} | |||
} | |||
&-td { | |||
&-lt { | |||
text-decoration: line-through; | |||
} | |||
&-u { | |||
text-decoration: underline; | |||
} | |||
&-n { | |||
text-decoration: none; | |||
} | |||
} | |||
&-ti-em-2 { | |||
text-indent: 2em; | |||
} | |||
&-toe { | |||
@for $i from 0 through 10 { | |||
&-#{$i} { | |||
@include toe; | |||
-webkit-line-clamp: $i; | |||
lines: $i; | |||
} | |||
} | |||
} | |||
&-va { | |||
&-t { | |||
vertical-align: top; | |||
} | |||
&-m { | |||
vertical-align: middle; | |||
} | |||
&-b { | |||
vertical-align: bottom; | |||
} | |||
&-bl { | |||
vertical-align: baseline; | |||
} | |||
} | |||
&-ws { | |||
&-nw { | |||
white-space: nowrap; | |||
} | |||
&-nm { | |||
white-space: normal; | |||
} | |||
} | |||
&-wb { | |||
&-ba { | |||
word-break: break-all; | |||
} | |||
&-bw { | |||
word-break: break-word; | |||
} | |||
&-ka { | |||
word-break: keep-all; | |||
} | |||
} | |||
} |
@ -0,0 +1,61 @@ | |||
@mixin transition($time) { | |||
will-change: transform; | |||
transition: all ease $time; | |||
} | |||
@mixin transform($type) { | |||
opacity: 0; | |||
transform: $type; | |||
} | |||
.se { | |||
&-fade-enter-active, | |||
&-fade-leave-active { | |||
@include transition(0.3s); | |||
} | |||
&-fade-enter-from, | |||
&-fade-leave-to { | |||
@include transform(''); | |||
} | |||
&-fade-transform-enter-active, | |||
&-fade-transform-leave-active { | |||
@include transition(0.3s); | |||
} | |||
&-fade-transform-enter-from { | |||
@include transform(translateX(-30px)); | |||
} | |||
&-fade-transform-leave-to { | |||
@include transform(translateX(30px)); | |||
} | |||
&-slide-fade-enter-active, | |||
&-slide-fade-leave-active { | |||
@include transition(0.3s); | |||
} | |||
&-slide-fade-enter-from, | |||
&-slide-fade-leave-to { | |||
@include transform(translateX(30px)); | |||
} | |||
&-slide-right-enter-active, | |||
&-slide-right-leave-active, | |||
&-slide-left-enter-active, | |||
&-slide-left-leave-active { | |||
@include transition(0.3s); | |||
} | |||
&-slide-right-enter-from, | |||
&-slide-left-leave-to { | |||
@include transform(translateX(-100%)); | |||
} | |||
&-slide-left-enter-from, | |||
&-slide-right-leave-to { | |||
@include transform(translateX(100%)); | |||
} | |||
} |
@ -0,0 +1,57 @@ | |||
$text: #ffffff; | |||
$text-active: #1678ff; | |||
$text-gray: #72709e; | |||
$page: #000223; | |||
$area: #1b1844; | |||
$area-l: #272b55; | |||
$select: #272b55; | |||
$dialog: #272b55; | |||
$mask: rgba(0, 0, 0, 0.8); | |||
$image: rgba(0, 0, 0, 0.8); | |||
$image-lg: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.8)); | |||
$gold-lg: linear-gradient(to right, #e9cfc9, #f6e2dd); | |||
// mixin/color.scss | |||
$border: #27243d; | |||
$active: #1678ff; | |||
$active-lg: linear-gradient(to right, #1678ff, #abbaf0); | |||
$cancel: #201c54; | |||
$confirm: #1678ff; | |||
// mixin/color.scss | |||
$names-c: text, text-active, text-gray; | |||
$colors-c: $text, $text-active, $text-gray; | |||
$names-bgc: page, area, area-l, select, dialog, mask, image; | |||
$colors-bgc: $page, $area, $area-l, $select, $dialog, $mask, $image; | |||
$names-lg: image-lg, gold-lg; | |||
$colors-lg: $image-lg, $gold-lg; | |||
.se { | |||
&-c { | |||
@each $name in $names-c { | |||
$i: index($names-c, $name); | |||
&-#{$name} { | |||
color: nth($colors-c, $i); | |||
} | |||
} | |||
} | |||
&-bgc { | |||
@each $name in $names-bgc { | |||
$i: index($names-bgc, $name); | |||
&-#{$name} { | |||
background-color: nth($colors-bgc, $i); | |||
} | |||
} | |||
@each $name in $names-lg { | |||
$i: index($names-lg, $name); | |||
&-#{$name} { | |||
background-image: nth($colors-lg, $i); | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,2 @@ | |||
// @import './black.scss'; | |||
@import './white.scss'; |
@ -0,0 +1 @@ | |||
@import './color.scss'; |
@ -0,0 +1,63 @@ | |||
$text: #333333; | |||
$text-sub: #666666; | |||
$text-third: #999999; | |||
$text-active: #1678ff; | |||
$text-red: #ea4e3d; | |||
$text-green: #1EC77A; | |||
$text-orange: #FF9F39; | |||
$page: #f5f5f5; | |||
$area: #ffffff; | |||
$area-l: #f5f5f5; | |||
$select: #f5f5f5; | |||
$dialog: #ffffff; | |||
$green: #1EC77A; | |||
$orange: #FF9F39; | |||
$mask: rgba(0, 0, 0, 0.3); | |||
$image: rgba(0, 0, 0, 0.3); | |||
$image-lg: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.3)); | |||
$gold-lg: linear-gradient(to right, #e9cfc9, #f6e2dd); | |||
// mixin/color.scss | |||
$border: #dddddd; | |||
$active: #1678ff; | |||
$active-lg: linear-gradient(to right, #1678ff, #abbaf0); | |||
$cancel: #e0e0e0; | |||
$confirm: #1678ff; | |||
// mixin/color.scss | |||
$names-c: text, text-sub, text-active, text-red, text-third, text-green, text-orange; | |||
$colors-c: $text, $text-sub, $text-active, $text-red, $text-third, $text-green, $text-orange; | |||
$names-bgc: page, area, area-l, select, dialog, mask, image, active, green, orange; | |||
$colors-bgc: $page, $area, $area-l, $select, $dialog, $mask, $image, $active, $green, $orange; | |||
$names-lg: image-lg, gold-lg; | |||
$colors-lg: $image-lg, $gold-lg; | |||
.se { | |||
&-c { | |||
@each $name in $names-c { | |||
$i: index($names-c, $name); | |||
&-#{$name} { | |||
color: nth($colors-c, $i); | |||
} | |||
} | |||
} | |||
&-bgc { | |||
@each $name in $names-bgc { | |||
$i: index($names-bgc, $name); | |||
&-#{$name} { | |||
background-color: nth($colors-bgc, $i); | |||
} | |||
} | |||
@each $name in $names-lg { | |||
$i: index($names-lg, $name); | |||
&-#{$name} { | |||
background-image: nth($colors-lg, $i); | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,14 @@ | |||
/** | |||
* 下方引入的为uvUI的集成样式文件,为scss预处理器,其中包含了一些"uv-"开头的自定义变量 | |||
* 使用的时候,请将下面的一行复制到您的uniapp项目根目录的uni.scss中即可 | |||
* uvUI自定义的css类名和scss变量,均以"uv-"开头,不会造成冲突,请放心使用 | |||
* @import '@/uni_modules/uv-ui-tools/theme.scss'; | |||
*/ | |||
.se-grid { | |||
width: 100%; | |||
display: grid; | |||
grid-template-columns: 1fr 1fr 1fr 1fr; | |||
gap: 10rpx; | |||
} | |||
@ -0,0 +1,7 @@ | |||
## 1.0.2(2023-07-02) | |||
uv-action-sheet 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/actionSheet.html | |||
## 1.0.1(2023-05-16) | |||
1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 | |||
2. 优化部分功能 | |||
## 1.0.0(2023-05-10) | |||
uv-action-sheet 底部操作菜单 |