1263428893@qq.com 3 months ago
commit
f191212adc
953 changed files with 95723 additions and 0 deletions
  1. +16
    -0
      .hbuilderx/launch.json
  2. +19
    -0
      App.vue
  3. +21
    -0
      LICENSE
  4. +164
    -0
      README.md
  5. +11
    -0
      common/api.js
  6. +3
    -0
      common/config.js
  7. +244
    -0
      components/cityselect/index.vue
  8. +1
    -0
      components/cityselect/utils/area.js
  9. +1
    -0
      components/cityselect/utils/city.js
  10. +1
    -0
      components/cityselect/utils/province.js
  11. +52
    -0
      config.js
  12. +20
    -0
      index.html
  13. +38
    -0
      main.js
  14. +107
    -0
      manifest.json
  15. +141
    -0
      pages.json
  16. +36
    -0
      pages/apply/index.vue
  17. +120
    -0
      pages/auth/index.vue
  18. +52
    -0
      pages/discover/index.vue
  19. +176
    -0
      pages/home/index.vue
  20. +46
    -0
      pages/login/index.vue
  21. +37
    -0
      pages/message/index.vue
  22. +90
    -0
      pages/user/index.vue
  23. +71
    -0
      pages_subpack/broker/index.vue
  24. +227
    -0
      pages_subpack/category/component/search.vue
  25. +61
    -0
      pages_subpack/category/index.vue
  26. +262
    -0
      pages_subpack/detail/index.vue
  27. +60
    -0
      pages_subpack/homeowner/index.vue
  28. +359
    -0
      pages_subpack/house/index.vue
  29. +104
    -0
      pages_subpack/realname/index.vue
  30. +26
    -0
      pages_subpack/release/index.vue
  31. +29
    -0
      pages_subpack/success/index.vue
  32. +8
    -0
      pages_subpack/successful/index.vue
  33. BIN
      static/bar/find.png
  34. BIN
      static/bar/find_selected.png
  35. BIN
      static/bar/home.png
  36. BIN
      static/bar/home_selected.png
  37. BIN
      static/bar/user.png
  38. BIN
      static/bar/user_selected.png
  39. BIN
      static/image/2x.png
  40. BIN
      static/image/46525.png
  41. BIN
      static/image/47052.png
  42. BIN
      static/image/47086.png
  43. BIN
      static/image/47100.png
  44. BIN
      static/image/47186.png
  45. BIN
      static/image/47719x.png
  46. BIN
      static/image/6588.png
  47. BIN
      static/image/82x.png
  48. BIN
      static/image/aed60x.png
  49. BIN
      static/image/banner.png
  50. BIN
      static/image/discover.png
  51. BIN
      static/image/header.png
  52. BIN
      static/image/logo.png
  53. BIN
      static/image/nav1.png
  54. BIN
      static/image/nav2.png
  55. BIN
      static/image/nav3.png
  56. BIN
      static/image/nav4.png
  57. BIN
      static/image/nav5.png
  58. BIN
      static/image/nav6.png
  59. BIN
      static/image/nav7.png
  60. BIN
      static/image/nav8.png
  61. BIN
      static/image/pencil.png
  62. BIN
      static/image/wechat.png
  63. +1
    -0
      store/getters.js
  64. +15
    -0
      store/index.js
  65. +17
    -0
      store/modules/data.js
  66. +35
    -0
      store/modules/user.js
  67. +12
    -0
      styles/bs/bs.scss
  68. +0
    -0
      styles/bs/component.scss
  69. +4
    -0
      styles/bs/index.scss
  70. +45
    -0
      styles/bs/layout.scss
  71. +98
    -0
      styles/bs/ui.scss
  72. +13
    -0
      styles/core/area.scss
  73. +58
    -0
      styles/core/border.scss
  74. +46
    -0
      styles/core/color.scss
  75. +69
    -0
      styles/core/flex.scss
  76. +17
    -0
      styles/core/font.scss
  77. +28
    -0
      styles/core/full.scss
  78. +39
    -0
      styles/core/height.scss
  79. +10
    -0
      styles/core/index.scss
  80. +47
    -0
      styles/core/pm.scss
  81. +82
    -0
      styles/core/pos.scss
  82. +25
    -0
      styles/core/width.scss
  83. +4
    -0
      styles/index.scss
  84. +39
    -0
      styles/mixin/color.scss
  85. +33
    -0
      styles/mixin/flex.scss
  86. +20
    -0
      styles/mixin/scrollbar.scss
  87. +21
    -0
      styles/out/base.scss
  88. +33
    -0
      styles/out/btn.scss
  89. +75
    -0
      styles/out/common.scss
  90. +7
    -0
      styles/out/index.scss
  91. +88
    -0
      styles/out/input.scss
  92. +52
    -0
      styles/out/shape.scss
  93. +92
    -0
      styles/out/text.scss
  94. +61
    -0
      styles/out/transition.scss
  95. +57
    -0
      styles/theme/black.scss
  96. +2
    -0
      styles/theme/color.scss
  97. +1
    -0
      styles/theme/index.scss
  98. +63
    -0
      styles/theme/white.scss
  99. +14
    -0
      uni.scss
  100. +7
    -0
      uni_modules/uv-action-sheet/changelog.md

+ 16
- 0
.hbuilderx/launch.json View File

@ -0,0 +1,16 @@
{ // launch.json configurations app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtypelocalremote, localremote
"version": "0.0",
"configurations": [{
"default" :
{
"launchtype" : "local"
},
"mp-weixin" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}

+ 19
- 0
App.vue View File

@ -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>

+ 21
- 0
LICENSE View File

@ -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.

+ 164
- 0
README.md View File

@ -0,0 +1,164 @@
<p align="center">
<span>&nbsp;&nbsp;&nbsp;&nbsp;</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>
[![star](https://gitee.com/climblee/uv-ui/badge/star.svg?theme=gvp)](https://gitee.com/climblee/uv-ui)
[![star](https://gitee.com/climblee/uv-ui/badge/fork.svg?theme=gvp)](https://gitee.com/climblee/uv-ui)
[![star](https://img.shields.io/github/stars/climblee/uv-ui?style=flat-square&logo=GitHub)](https://github.com/climblee/uv-ui)
[![issues](https://img.shields.io/github/issues/climblee/uv-ui?style=flat-square&logo=GitHub)](https://github.com/climblee/uv-ui/issues)
[![Website](https://img.shields.io/badge/uvui-up-blue?style=flat-square)](https://www.uvui.cn)
[![version](https://img.shields.io/badge/version-1.1.16-brightgreen.svg)](https://www.uvui.cn/components/changelog.html)
[![license](https://img.shields.io/github/license/climblee/uv-ui?style=flat-square)](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" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="https://mp-31ed6237-7b7b-4597-8448-a53d6d6031cf.cdn.bspapp.com/uvui/download-app.png" width="200" />&nbsp;&nbsp;&nbsp;&nbsp;<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

+ 11
- 0
common/api.js View File

@ -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})

+ 3
- 0
common/config.js View File

@ -0,0 +1,3 @@
export default {
baseUrl: 'https://api.book118.com'
}

+ 244
- 0
components/cityselect/index.vue View File

@ -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 [];
}
},
// defaultRegionareaCodeareaCode["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>

+ 1
- 0
components/cityselect/utils/area.js
File diff suppressed because it is too large
View File


+ 1
- 0
components/cityselect/utils/city.js
File diff suppressed because it is too large
View File


+ 1
- 0
components/cityselect/utils/province.js View File

@ -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;

+ 52
- 0
config.js View File

@ -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

+ 20
- 0
index.html View File

@ -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>

+ 38
- 0
main.js View File

@ -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

+ 107
- 0
manifest.json View File

@ -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"
}
}

+ 141
- 0
pages.json View File

@ -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": {}
}

+ 36
- 0
pages/apply/index.vue View File

@ -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>

+ 120
- 0
pages/auth/index.vue View File

@ -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>

+ 52
- 0
pages/discover/index.vue View File

@ -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>

+ 176
- 0
pages/home/index.vue View File

@ -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>

+ 46
- 0
pages/login/index.vue View File

@ -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>

+ 37
- 0
pages/message/index.vue View File

@ -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>

+ 90
- 0
pages/user/index.vue View File

@ -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>

+ 71
- 0
pages_subpack/broker/index.vue View File

@ -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>

+ 227
- 0
pages_subpack/category/component/search.vue View File

@ -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 type1
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>

+ 61
- 0
pages_subpack/category/index.vue View File

@ -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>

+ 262
- 0
pages_subpack/detail/index.vue View File

@ -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>

+ 60
- 0
pages_subpack/homeowner/index.vue View File

@ -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>

+ 359
- 0
pages_subpack/house/index.vue View File

@ -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>

+ 104
- 0
pages_subpack/realname/index.vue View File

@ -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>

+ 26
- 0
pages_subpack/release/index.vue View File

@ -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>

+ 29
- 0
pages_subpack/success/index.vue View File

@ -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>

+ 8
- 0
pages_subpack/successful/index.vue View File

@ -0,0 +1,8 @@
<template>
</template>
<script>
</script>
<style>
</style>

BIN
static/bar/find.png View File

Before After
Width: 40  |  Height: 40  |  Size: 1.1 KiB

BIN
static/bar/find_selected.png View File

Before After
Width: 40  |  Height: 40  |  Size: 1.2 KiB

BIN
static/bar/home.png View File

Before After
Width: 32  |  Height: 32  |  Size: 1.5 KiB

BIN
static/bar/home_selected.png View File

Before After
Width: 40  |  Height: 40  |  Size: 1.4 KiB

BIN
static/bar/user.png View File

Before After
Width: 40  |  Height: 40  |  Size: 934 B

BIN
static/bar/user_selected.png View File

Before After
Width: 40  |  Height: 40  |  Size: 980 B

BIN
static/image/2x.png View File

Before After
Width: 76  |  Height: 76  |  Size: 5.4 KiB

BIN
static/image/46525.png View File

Before After
Width: 54  |  Height: 54  |  Size: 876 B

BIN
static/image/47052.png View File

Before After
Width: 131  |  Height: 131  |  Size: 7.1 KiB

BIN
static/image/47086.png View File

Before After
Width: 24  |  Height: 26  |  Size: 1.3 KiB

BIN
static/image/47100.png View File

Before After
Width: 25  |  Height: 27  |  Size: 1.2 KiB

BIN
static/image/47186.png View File

Before After
Width: 28  |  Height: 28  |  Size: 1.9 KiB

BIN
static/image/47719x.png View File

Before After
Width: 349  |  Height: 239  |  Size: 11 KiB

BIN
static/image/6588.png View File

Before After
Width: 78  |  Height: 78  |  Size: 1.1 KiB

BIN
static/image/82x.png View File

Before After
Width: 514  |  Height: 410  |  Size: 86 KiB

BIN
static/image/aed60x.png View File

Before After
Width: 84  |  Height: 84  |  Size: 5.8 KiB

BIN
static/image/banner.png View File

Before After
Width: 750  |  Height: 404  |  Size: 109 KiB

BIN
static/image/discover.png View File

Before After
Width: 150  |  Height: 154  |  Size: 14 KiB

BIN
static/image/header.png View File

Before After
Width: 96  |  Height: 96  |  Size: 817 B

BIN
static/image/logo.png View File

Before After
Width: 148  |  Height: 148  |  Size: 3.3 KiB

BIN
static/image/nav1.png View File

Before After
Width: 100  |  Height: 100  |  Size: 4.4 KiB

BIN
static/image/nav2.png View File

Before After
Width: 100  |  Height: 100  |  Size: 4.8 KiB

BIN
static/image/nav3.png View File

Before After
Width: 100  |  Height: 100  |  Size: 5.0 KiB

BIN
static/image/nav4.png View File

Before After
Width: 100  |  Height: 100  |  Size: 4.1 KiB

BIN
static/image/nav5.png View File

Before After
Width: 100  |  Height: 100  |  Size: 4.6 KiB

BIN
static/image/nav6.png View File

Before After
Width: 100  |  Height: 100  |  Size: 5.3 KiB

BIN
static/image/nav7.png View File

Before After
Width: 100  |  Height: 100  |  Size: 3.8 KiB

BIN
static/image/nav8.png View File

Before After
Width: 100  |  Height: 100  |  Size: 4.3 KiB

BIN
static/image/pencil.png View File

Before After
Width: 21  |  Height: 23  |  Size: 363 B

BIN
static/image/wechat.png View File

Before After
Width: 44  |  Height: 35  |  Size: 1.3 KiB

+ 1
- 0
store/getters.js View File

@ -0,0 +1 @@
export default {}

+ 15
- 0
store/index.js View File

@ -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
})

+ 17
- 0
store/modules/data.js View File

@ -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: {}
}

+ 35
- 0
store/modules/user.js View File

@ -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: {}
}

+ 12
- 0
styles/bs/bs.scss View File

@ -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
styles/bs/component.scss View File


+ 4
- 0
styles/bs/index.scss View File

@ -0,0 +1,4 @@
@import './bs.scss';
@import './component.scss';
@import './layout.scss';
@import './ui.scss';

+ 45
- 0
styles/bs/layout.scss View File

@ -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;
}
}

+ 98
- 0
styles/bs/ui.scss View File

@ -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);
}
}

+ 13
- 0
styles/core/area.scss View File

@ -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;
}
}
}
}

+ 58
- 0
styles/core/border.scss View File

@ -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);
}
}
}

+ 46
- 0
styles/core/color.scss View File

@ -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;
}
}
}
}

+ 69
- 0
styles/core/flex.scss View File

@ -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;
}
}
}
}

+ 17
- 0
styles/core/font.scss View File

@ -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;
}
}
}
}

+ 28
- 0
styles/core/full.scss View File

@ -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;
}
}
}

+ 39
- 0
styles/core/height.scss View File

@ -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;
}
}
}

+ 10
- 0
styles/core/index.scss View File

@ -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';

+ 47
- 0
styles/core/pm.scss View File

@ -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;
}
}
}
}
}

+ 82
- 0
styles/core/pos.scss View File

@ -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;
}
}
}

+ 25
- 0
styles/core/width.scss View File

@ -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;
}
}
}

+ 4
- 0
styles/index.scss View File

@ -0,0 +1,4 @@
@import './core/index.scss';
@import './out/index.scss';
@import './bs/index.scss';
@import './theme/index.scss';

+ 39
- 0
styles/mixin/color.scss View File

@ -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;

+ 33
- 0
styles/mixin/flex.scss View File

@ -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;
}

+ 20
- 0
styles/mixin/scrollbar.scss View File

@ -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;
// }
}

+ 21
- 0
styles/out/base.scss View File

@ -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;
}

+ 33
- 0
styles/out/btn.scss View File

@ -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;
}
}
}

+ 75
- 0
styles/out/common.scss View File

@ -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;
}
}
}

+ 7
- 0
styles/out/index.scss View File

@ -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';

+ 88
- 0
styles/out/input.scss View File

@ -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;
}
}

+ 52
- 0
styles/out/shape.scss View File

@ -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;
}
}
}
}
}

+ 92
- 0
styles/out/text.scss View File

@ -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;
}
}
}

+ 61
- 0
styles/out/transition.scss View File

@ -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%));
}
}

+ 57
- 0
styles/theme/black.scss View File

@ -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);
}
}
}
}

+ 2
- 0
styles/theme/color.scss View File

@ -0,0 +1,2 @@
// @import './black.scss';
@import './white.scss';

+ 1
- 0
styles/theme/index.scss View File

@ -0,0 +1 @@
@import './color.scss';

+ 63
- 0
styles/theme/white.scss View File

@ -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);
}
}
}
}

+ 14
- 0
uni.scss View File

@ -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;
}

+ 7
- 0
uni_modules/uv-action-sheet/changelog.md View File

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

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save