| @ -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 底部操作菜单 | |||||