1263428893@qq.com 10 months ago
commit
6100efca91
486 changed files with 46810 additions and 0 deletions
  1. +2
    -0
      .gitignore
  2. +16
    -0
      .hbuilderx/launch.json
  3. +17
    -0
      App.vue
  4. +21
    -0
      LICENSE
  5. +2
    -0
      README.md
  6. +12
    -0
      common/api.js
  7. +5
    -0
      common/config.js
  8. +7
    -0
      common/mixin.js
  9. +2
    -0
      common/props.js
  10. +235
    -0
      components/cityselect/index.vue
  11. +1
    -0
      components/cityselect/utils/area.js
  12. +1
    -0
      components/cityselect/utils/city.js
  13. +1
    -0
      components/cityselect/utils/province.js
  14. +53
    -0
      config.js
  15. +17
    -0
      index.html
  16. +39
    -0
      main.js
  17. +152
    -0
      manifest.json
  18. +1484
    -0
      package-lock.json
  19. +14
    -0
      package.json
  20. +201
    -0
      pages.json
  21. +117
    -0
      pages/auth/index.vue
  22. +179
    -0
      pages/home/index.vue
  23. +55
    -0
      pages/identity/index.vue
  24. +138
    -0
      pages/login/index.vue
  25. +86
    -0
      pages/reservation/index.vue
  26. +193
    -0
      pages/user/index.vue
  27. +147
    -0
      pages_subpack/apply/index.vue
  28. +152
    -0
      pages_subpack/business/index.vue
  29. +88
    -0
      pages_subpack/category/index.vue
  30. +173
    -0
      pages_subpack/detail/index.vue
  31. +42
    -0
      pages_subpack/invite/index.vue
  32. +26
    -0
      pages_subpack/news/detail.vue
  33. +38
    -0
      pages_subpack/news/index.vue
  34. +139
    -0
      pages_subpack/person/index.vue
  35. +53
    -0
      pages_subpack/recommend/index.vue
  36. +314
    -0
      pages_subpack/release/index.vue
  37. +43
    -0
      pages_subpack/success/index.vue
  38. +17
    -0
      pages_subpack/version/index.vue
  39. BIN
      static/image/470868.png
  40. BIN
      static/image/482011.png
  41. BIN
      static/image/482012.png
  42. BIN
      static/image/482013.png
  43. BIN
      static/image/482014.png
  44. BIN
      static/image/7525121.png
  45. BIN
      static/image/7525122.png
  46. BIN
      static/image/aed60x.png
  47. BIN
      static/image/header.png
  48. BIN
      static/image/home.png
  49. BIN
      static/image/home_selected.png
  50. BIN
      static/image/logo.png
  51. BIN
      static/image/nav1.png
  52. BIN
      static/image/nav2.png
  53. BIN
      static/image/nav3.png
  54. BIN
      static/image/nav4.png
  55. BIN
      static/image/nav5.png
  56. BIN
      static/image/nav6.png
  57. BIN
      static/image/pencil.png
  58. BIN
      static/image/user.png
  59. BIN
      static/image/user_selected.png
  60. BIN
      static/image/wechat.png
  61. +1
    -0
      store/getters.js
  62. +15
    -0
      store/index.js
  63. +17
    -0
      store/modules/data.js
  64. +35
    -0
      store/modules/user.js
  65. +12
    -0
      styles/bs/bs.scss
  66. +0
    -0
      styles/bs/component.scss
  67. +4
    -0
      styles/bs/index.scss
  68. +45
    -0
      styles/bs/layout.scss
  69. +98
    -0
      styles/bs/ui.scss
  70. +13
    -0
      styles/core/area.scss
  71. +58
    -0
      styles/core/border.scss
  72. +46
    -0
      styles/core/color.scss
  73. +69
    -0
      styles/core/flex.scss
  74. +17
    -0
      styles/core/font.scss
  75. +28
    -0
      styles/core/full.scss
  76. +39
    -0
      styles/core/height.scss
  77. +10
    -0
      styles/core/index.scss
  78. +47
    -0
      styles/core/pm.scss
  79. +82
    -0
      styles/core/pos.scss
  80. +25
    -0
      styles/core/width.scss
  81. +4
    -0
      styles/index.scss
  82. +39
    -0
      styles/mixin/color.scss
  83. +33
    -0
      styles/mixin/flex.scss
  84. +20
    -0
      styles/mixin/scrollbar.scss
  85. +65
    -0
      styles/out/base.scss
  86. +33
    -0
      styles/out/btn.scss
  87. +75
    -0
      styles/out/common.scss
  88. +7
    -0
      styles/out/index.scss
  89. +88
    -0
      styles/out/input.scss
  90. +52
    -0
      styles/out/shape.scss
  91. +92
    -0
      styles/out/text.scss
  92. +61
    -0
      styles/out/transition.scss
  93. +57
    -0
      styles/theme/black.scss
  94. +2
    -0
      styles/theme/color.scss
  95. +1
    -0
      styles/theme/index.scss
  96. +63
    -0
      styles/theme/white.scss
  97. +69
    -0
      tree.md
  98. +151
    -0
      uni.scss
  99. +21
    -0
      uni_modules/uview-ui/LICENSE
  100. +66
    -0
      uni_modules/uview-ui/README.md

+ 2
- 0
.gitignore View File

@ -0,0 +1,2 @@
/node_modules
/unpackage

+ 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"
}
]
}

+ 17
- 0
App.vue View File

@ -0,0 +1,17 @@
<script>
export default {
onLaunch: function() {
},
onShow: function() {
},
onHide: function() {
}
}
</script>
<style lang="scss">
@import "@/uni_modules/uview-ui/index.scss";
@import './styles/index.scss';
</style>

+ 21
- 0
LICENSE View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 www.uviewui.com
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.

+ 2
- 0
README.md View File

@ -0,0 +1,2 @@
# employ-front

+ 12
- 0
common/api.js View File

@ -0,0 +1,12 @@
const { http } = uni.$u
console.info(http)
// 获取菜单
export const fetchMenu = (params, config = {}) => http.post('/ebapi/public_api/index', params, config)
/**
* 登录的接口
*/
// 微信登录接口
export const wxLogin = (params) => http.get('/api/login/login', {params:params})

+ 5
- 0
common/config.js View File

@ -0,0 +1,5 @@
module.exports = {
baseUrl: 'https://employadmin.augcl.com/employ-api',
// baseUrl: 'http://augcl.natapp1.cc/employ-api'
}

+ 7
- 0
common/mixin.js View File

@ -0,0 +1,7 @@
export default {
data() {
return {
}
}
}

+ 2
- 0
common/props.js View File

@ -0,0 +1,2 @@
uni.$u.props.gap.bgColor = '#f3f4f6'
uni.$u.props.gap.height = '10'

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

@ -0,0 +1,235 @@
<template>
<u-popup :show="value" mode="bottom" :popup="false" :mask="true" :closeable="true" :safe-area-inset-bottom="true"
close-icon-color="#ffffff" :z-index="uZIndex" :maskCloseAble="maskCloseAble" @close="close">
<u-tabs v-if="value" :list="genTabsList" :is-scroll="true" :current="tabsIndex" @change="tabsChange" ref="tabs"></u-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%">
<u-cell-group>
<u-cell v-for="(item,index) in provinces" :title="item.label" :arrow="false" :name="index" :key="index"
@click="provinceChange">
<u-icon v-if="isChooseP&&province===index" slot="right-icon" size="34" name="checkbox-mark"></u-icon>
</u-cell>
</u-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%">
<u-cell-group v-if="isChooseP">
<u-cell v-for="(item,index) in citys" :title="item.label" :arrow="false" :name="index" :key="index"
@click="cityChange">
<u-icon v-if="isChooseC&&city===index" slot="right-icon" size="34" name="checkbox-mark"></u-icon>
</u-cell>
</u-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%">
<u-cell-group v-if="isChooseC">
<u-cell v-for="(item,index) in areas" :title="item.label" :arrow="false" :name="index" :key="index"
@click="areaChange">
<u-icon v-if="isChooseA&&area===index" slot="right-icon" size="34" name="checkbox-mark"></u-icon>
</u-cell>
</u-cell-group>
</scroll-view>
</view>
</view>
</view>
</view>
</u-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: false
},
// ["", "", ""]
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 : this.$u.zIndex.popup;
}
},
methods: {
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.$emit('input', false);
},
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;

+ 53
- 0
config.js View File

@ -0,0 +1,53 @@
import Vue from 'vue'
import utils from './utils/utils.js'
// 当前环境
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.$u.setConfig({
// 修改$uv.config对象的属性
config: {
// 修改默认单位为rpx,相当于执行 uni.$uv.config.unit = 'rpx'
unit: 'px'
},
})
Vue.prototype.$config = utils.deepMergeObject(defaultConfig, config[type])
// Vue.prototype.$api = api
export default Vue.prototype.$config

+ 17
- 0
index.html View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
</body>
</html>

+ 39
- 0
main.js View File

@ -0,0 +1,39 @@
import Vue from 'vue'
import App from './App'
// vuex
import store from './store'
// 引入全局uView
import uView from '@/uni_modules/uview-ui'
import mixin from './common/mixin'
Vue.prototype.$store = store
Vue.config.productionTip = false
App.mpType = 'app'
Vue.use(uView)
// #ifdef MP
// 引入uView对小程序分享的mixin封装
const mpShare = require('@/uni_modules/uview-ui/libs/mixin/mpShare.js')
Vue.mixin(mpShare)
// #endif
import './config'
import './utils/index.js'
Vue.mixin(mixin)
const app = new Vue({
store,
...App
})
// 引入请求封装
require('./util/request/index')(app)
app.$mount()

+ 152
- 0
manifest.json View File

@ -0,0 +1,152 @@
{
"name" : "protection-wechat-uniapp",
"appid" : "__UNI__900BBCB",
"description" : "",
"versionName" : "2.0.37",
"versionCode" : 1,
"transformPx" : false,
"app-plus" : {
"optimization" : {
"subPackages" : true
},
"safearea" : {
"bottom" : {
"offset" : "none"
}
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
"usingComponents" : true,
"nvueCompiler" : "uni-app",
"compilerVersion" : 3,
"modules" : {
"Webview-x5" : {}
},
"distribute" : {
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
},
"ios" : {
"idfa" : 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"
}
}
}
}
},
"quickapp" : {},
"mp-weixin" : {
"appid" : "wxecec2f505129f162",
"setting" : {
"urlCheck" : false,
"es6" : false,
"minified" : true,
"postcss" : true
},
"optimization" : {
"subPackages" : true
},
"usingComponents" : true,
"mergeVirtualHostAttributes" : true
},
"mp-alipay" : {
"usingComponents" : true,
"component2" : true
},
"mp-qq" : {
"optimization" : {
"subPackages" : true
},
"appid" : "15646153"
},
"mp-baidu" : {
"usingComponents" : true,
"appid" : ""
},
"mp-toutiao" : {
"usingComponents" : true,
"appid" : ""
},
"h5" : {
"template" : "index.html",
"router" : {
"mode" : "history",
"base" : ""
},
"optimization" : {
"treeShaking" : {
"enable" : false
}
},
"title" : "uView UI",
"sdkConfigs" : {
"maps" : {
"qqmap" : {
"key" : ""
}
}
},
"domain" : ""
},
"vueVersion" : "2"
}

+ 1484
- 0
package-lock.json
File diff suppressed because it is too large
View File


+ 14
- 0
package.json View File

@ -0,0 +1,14 @@
{
"id": "uview-ui",
"scripts": {
"test": "eslint . --fix"
},
"dependencies": {
"ali-oss": "^6.21.0",
"dayjs": "^1.11.12"
},
"devDependencies": {
"eslint": "^8.2.0",
"eslint-config-airbnb": "^19.0.0"
}
}

+ 201
- 0
pages.json View File

@ -0,0 +1,201 @@
{
"pages": [
{
"path": "pages/user/index",
"style": {
"navigationBarTitleText": "我的",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/home/index",
"style": {
"navigationBarTitleText": "环卫车",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/identity/index",
"style": {
"navigationBarTitleText": "选择身份",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/auth/index",
"style": {
"navigationBarTitleText": "微信登录",
"navigationStyle":"custom",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/login/index",
"style": {
"navigationStyle":"custom"
}
},
{
"path": "pages/reservation/index",
"style": {
"navigationBarTitleText": "我的预约",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
}
],
"subPackages": [
{
"root": "pages_subpack",
"pages": [
{
"path": "apply/index",
"style": {
"navigationBarTitleText": "我的寻车申请",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "category/index",
"style": {
"navigationBarTitleText": "新车商城",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "news/index",
"style": {
"navigationBarTitleText": "新闻",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "news/detail",
"style": {
"navigationBarTitleText": "详情",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "detail/index",
"style": {
"navigationBarTitleText": "详情",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "success/index",
"style": {
"navigationBarTitleText": "发布成功",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "version/index",
"style": {
"navigationBarTitleText": "关于本程序",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "recommend/index",
"style": {
"navigationBarTitleText": "我的推荐",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "release/index",
"style": {
"navigationBarTitleText": "发布订单",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "invite/index",
"style": {
"navigationBarTitleText": "邀请",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "business/index",
"style": {
"navigationBarTitleText": "企业注册",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
},
{
"path": "person/index",
"style": {
"navigationBarTitleText": "个人注册",
"navigationStyle":"default",
"navigationBarBackgroundColor": "#669A32",
"navigationBarTextStyle": "white"
}
}
]
}
],
"preloadRule": {
},
"globalStyle": {
"navigationBarBackgroundColor": "#669A32",
"backgroundColor": "#f5f5f5",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "环卫车",
"backgroundColorTop": "#f5f5f5",
"backgroundColorBottom": "#f5f5f5"
},
"tabBar": {
"color": "#666666",
"selectedColor": "#669A32",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/home/index",
"iconPath": "static/image/home.png",
"selectedIconPath": "static/image/home_selected.png",
"text": "首页"
}, {
"pagePath": "pages/user/index",
"iconPath": "static/image/user.png",
"selectedIconPath": "static/image/user_selected.png",
"text": "我的"
}
]
}
}

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

@ -0,0 +1,117 @@
<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">
<u-checkbox-group @change="checkboxChange" v-model="checked">
<u-checkbox name="1" activeColor="#669A32" label-size="12" shape="circle" label="阅读并同意"></u-checkbox>
</u-checkbox-group>
<text class="se-c-green" @click="show=true">隐私政策</text>
<text class="se-c-green" @click="show=true">服务条款</text>
</view>
</view>
<u-popup :show="show" :custom-style="{alignItems:'center'}" mode="center" bg-color="transparent">
<view class="se-w-600 se-bgc-white se-br-40 se-p-40">
<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>
</u-popup>
</view>
</template>
<script>
import { fetchMenu,wxLogin } from "@/common/api.js"
export default {
name : 'Auth',
data() {
return {
checked:[],
show:false
}
},
methods: {
checkboxChange(n) {
console.log('change', n);
},
onCancel(){
this.show=false;
this.checked=[];
},
onAgree(){
this.show=false;
this.checked=['1'];
},
onLogin(){
let that = this
if(that.checked.length==0){
return uni.showToast({
icon: "none",
title: "请勾选隐私协议"
})
}
uni.showLoading({
title: '登录中...'
})
uni.navigateTo({
url:"/pages/login/index"
})
// 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>

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

@ -0,0 +1,179 @@
<template>
<view>
<view class="se-pos se-pos-lt" style="z-index: -1;width: 750rpx;height: 388rpx;
background: linear-gradient(168deg,#669a32 0%, #669a32 72%);
border-radius: 0rpx 0rpx 80rpx 80rpx;">
</view>
<view class="se-flex se-flex-h-sb se-px-20 se-pb-10 se-pt-10 se-zi-s" style="background-color: transparent;">
<view class="se-c-white se-fs-28">
<view class="se-c-white se-py-5 se-px-10 se-fw-6 se-br-12 se-fs-28 se-display-ib">
环保
</view>
<text class="se-ml-10 se-fw-6 se-fs-22">寻找你想要的</text>
</view>
</view>
<view class="se-px-40 se-py-20">
<view class=" se-br-50 se-c-black se-px-20 se-py-5 se-flex se-flex-h-sb se-fs-26">
<view class="se-pl-10 se-pr-20 se-flex se-flex-h se-h-40 se-lh-40 " @click="handleAreaChange()">
<text class="se-pr-20 se-c-white nobreak">{{city?city:'未知'}}</text>
<u-icon name="arrow-down-fill" color="#ffffff"></u-icon>
</view>
<view class="se-ml-20 se-w-p-100">
<u-search :disabled="true" @click="onSearch()" :showAction="false" bgColor="#ffffff" placeholder="搜索" v-model="keyword"></u-search>
</view>
</view>
</view>
<view class="se-pb-20 se-pt-40 se-zi-s">
<view class="se-px-20">
<u-swiper height="300rpx" style="background-color: transparent;height: 300rpx;" :list="list" @click="swiperClick"></u-swiper>
</view>
<!-- <view class="se-pt-10 se-bgc-white se-px-0 se-py-10 se-ta-l se-c-orange se-flex se-flex-ai-c se-fs-26">
<image class="se-a-80" src="@/static/image/aed60x.png" mode=""></image>
<text class="se-ml-10">今日有6个工作息新发布....</text>
</view> -->
</view>
<view class="se-my-20 se-pt-20 se-bgc-white se-grid">
<navigator :url="item.url" v-for="(item, index) in nav" :key="index" class="se-flex-v-c se-pt-10 se-mb-10">
<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>
<view class="se-px-30 se-py-30 se-bgc-white se-c-black">
精品二手车
</view>
<view class="se-grid-2">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in 10" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-py-5" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
HOUS环卫车
</view>
<view class="se-flex se-mt-10">
<view class="se-tag">
品牌名
</view>
<view class="se-tag">
品牌名
</view>
<view class="se-tag">
品牌名
</view>
</view>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib">
<text class="se-c-orange se-fs-30 se-fw-6"><text class="se-fs-24"></text>6000<text class="se-fs-24"></text></text>
</view>
<view class="se-display-ib se-bgc-orange se-px-15 se-br-40 se-flex-h-c se-h-40 se-lh-40 se-ta-c se-fs-22 se-c-white se-b">
<text>查看详情</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
components:{
},
data(){
return {
city:"",
list: [
"https://cdn.uviewui.com/uview/swiper/swiper1.png"
],
nav:[
{
img:"../../static/image/nav1.png",
name:"新车商城",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav2.png",
name:"二手车商城",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav3.png",
name:"环卫设备及配件",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav4.png",
name:"车辆租赁",
url:"/pages_subpack/category/index"
},
{
img:"../../static/image/nav5.png",
name:"新闻资讯",
url:"/pages_subpack/news/index"
},
{
img:"../../static/image/nav6.png",
name:"帮助寻车",
url:"/pages_subpack/category/index"
}
],
}
},
mounted() {
},
methods:{
handleAreaChange(){
console.info("获取地址")
},
swiperClick(event){
console.info(event)
},
onDetail(event){
uni.navigateTo({
url:"/pages_subpack/detail/index"
})
}
}
}
</script>
<style>
.nobreak {
white-space: nowrap;
}
page{
background-color: #f5f5f5;
}
.enterprise{
background: #ff7a31;
border: 4rpx solid rgba(255,255,255,0.50);
border-radius: 14rpx;
}
.master{
background: #f0b744;
border: 4rpx solid rgba(255,255,255,0.50);
border-radius: 14rpx;
}
.items-box{
background: #ffffff;
border-radius: 8rpx;
box-shadow: 0rpx 4rpx 16rpx 0rpx rgba(0,0,0,0.05);
padding: 20rpx;
}
.se-tag{
padding: 5rpx 10rpx;
background: #fff2df;
border-radius: 4rpx;
border: 2rpx solid rgba(0,0,0,0.00);
font-size: 16rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #fab143;
margin-left: 10rpx;
}
.se-tag:first-child{
margin-left: 0rpx;
}
</style>

+ 55
- 0
pages/identity/index.vue View File

@ -0,0 +1,55 @@
<template>
<view>
<view class="se-fs-40 se-fw-6 se-ta-c se-pt-120">
请选择您的身份
</view>
<view @click="onBusiness" class="business se-mt-80 se-br-10 se-mx-35 se-bgc-red se-flex se-flex-h-sb se-w-680 se-h-240 se-fs-48 se-c-white">
<text class="se-ml-80">企业</text>
<image class="se-a-170 se-br-p-50 se-mr-80" src="@/static/image/7525122.png" mode=""></image>
</view>
<view @click="onPerson" class="master se-mt-80 se-br-10 se-mx-35 se-bgc-orange se-flex se-flex-h-sb se-w-680 se-h-240 se-fs-48 se-c-white">
<text class="se-ml-80">个人</text>
<image class="se-a-170 se-br-p-50 se-mr-80" src="@/static/image/7525121.png" mode=""></image>
</view>
</view>
</template>
<script>
export default{
data(){
return{
}
},
methods:{
onBusiness(){
uni.navigateTo({
url:"/pages_subpack/business/index"
})
},
onPerson(){
uni.navigateTo({
url:"/pages_subpack/person/index"
})
}
}
}
</script>
<style>
.business{
width: 690rpx;
height: 240rpx;
background: #f0a921;
border: 8rpx solid rgba(255,255,255,0.64);
border-radius: 16rpx;
}
.master{
width: 690rpx;
height: 240rpx;
background: #87bf53;
border: 8rpx solid rgba(255,255,255,0.64);
border-radius: 16rpx;
}
</style>

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

@ -0,0 +1,138 @@
<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>
<button class="se-w-100 se-h-100 se-p-0 se-m-0" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<image v-if="imagUrl" class="se-w-100 se-h-100" :src="imagUrl"></image>
<image v-else class="se-w-100 se-h-100" src="@/static/image/header.png" mode=""></image>
</button>
</view>
<view class=" se-b-b se-flex se-h-140 se-lh-140 se-flex-h-sb">
<text>昵称</text>
<input type="nickname" placeholder="请输入昵称" v-model="nameUser"
@blur="bindblur" class="se-h-80 se-lh-80 se-w-320 se-fs-24 se-ta-r" placeholder-class="se-fs-24 se-ta-r" />
</view>
<!-- <view class=" se-b-b se-flex se-h-140 se-lh-140 se-flex-h-sb">
<text>手机号</text>
<button v-if="phone" class="default-btn se-h-100 se-p-0 se-m-0" open-type="getPhoneNumber" @getphonenumber="onPhonenumber">{{phone}}</button>
<button v-else class="se-w-140 se-h-60 se-lh-60 se-fs-20 se-bgc-green se-c-white se-py-0 se-br-30 se-px-20 se-m-0" open-type="getPhoneNumber" @getphonenumber="onPhonenumber">
获取手机号
</button>
</view> -->
</view>
<view class="se-mx-40">
<view @click="onUpdateInfo" 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>
// import { UpdateInfo,bindPhone } from "@/common/api.js"
export default {
name : 'Login',
data() {
return {
nameUser:"",
imagUrl:"",
phone:"",
back:0
}
},
onLoad(options) {
// if(options.back==1){
// this.imagUrl = uni.getStorageSync('userInfo').headImage
// this.nameUser = uni.getStorageSync('userInfo').nickName
// this.phone = uni.getStorageSync('userInfo').phone
// this.back = options.back
// }
},
methods: {
bindblur(event) {
this.nameUser = event.target.value
},
onChooseAvatar(res) {
let self = this
self.$Oss.ossUpload(res.target.avatarUrl).then(url => {
self.imagUrl = url
})
},
onPhonenumber(event){
let that = this
var detail = event.detail;
if(detail.errMsg=='getPhoneNumber:ok'){
let params={
code : detail.code,
encryptedData: detail.encryptedData,
iv:detail.iv,
sessionKey: uni.getStorageSync('sessionKey'),
openid:uni.getStorageSync('userInfo').appletOpenid
}
bindPhone(params).then((response) => {
console.info(response)
that.phone = response.result
}).catch(error=>{
})
}
},
onUpdateInfo(){
let that = this
let params={
avatarUrl:that.imagUrl,
nickName:that.nameUser,
// phone:that.phone
}
uni.navigateTo({
url:"/pages/identity/index"
})
// &&that.phone
// if(that.imagUrl&&that.nameUser){
// UpdateInfo(params).then((response) => {
// if(this.back==1){
// uni.navigateBack({
// delta:1
// })
// }else{
// uni.switchTab({
// url:"/pages/home/index"
// })
// }
// }).catch((error) =>{
// })
// }else{
// return uni.showToast({
// icon:"none",
// title:""
// })
// }
}
}
}
</script>
<style scoped lang="scss">
.default-btn{
background-color: #fff;
}
.default-btn::after{
content: "";
border: none;
}
</style>

+ 86
- 0
pages/reservation/index.vue View File

@ -0,0 +1,86 @@
<template>
<view>
<u-sticky bgColor="#ffffff">
<u-tabs :list="nav" :current="current" lineColor="#669A32" :activeStyle="{
color: '#669A32',
transform: 'scale(1.05)'
}" :scrollable="true" itemStyle="padding-left: 20rpx; padding-right: 20rpx;font-size:22rpx; height: 80rpx;"
@click="tabClick"></u-tabs>
</u-sticky>
<view class="se-p-40">
<view class="se-px-40 se-mb-30 se-py-30 se-bgc-white se-br-40 se-bs-b" v-for="(items,indexs) in 20"
:key="indexs">
<view class="se-flex se-flex-h-sb se-fw-6 se-fs-32 se-pb-20">
<view class="se-flex">
<text>环卫车租赁</text>
</view>
<view class="se-c-green se-fw-4">
已预约
</view>
</view>
<view class="se-flex">
<view class="se-w-160 se-h-160">
<image class="se-w-160 se-h-160 se-br-10" src="https://cdn.uviewui.com/uview/album/1.jpg"
mode=""></image>
</view>
<view class="se-ml-20 se-flex se-flex-v-sa se-flex-ai-fs">
<view class="se-fw-6 se-c-black se-fs-30 se-display-ib">客户名称李先生</view>
<view class="se-fs-24 se-c-text-third se-display-ib">电话:1318969845</view>
<view class="se-fs-24 se-c-text-third se-display-ib">租赁地址:广东省广州市番禺区石桥镇</view>
</view>
</view>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
<view class="se-fs-24 se-display-ib"></view>
<view
class="se-display-ib se-px-20 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-bgc-green se-ta-c se-fs-24 se-fs-24 se-c-white se-b">
<text>电话联系</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
components: {
},
data() {
return {
current: 0,
nav: [{
name: '全部',
}, {
name: '新车',
}, {
name: '二手车'
}, {
name: '租赁车辆'
},
{
name: '环卫设备及配件'
}
],
list: [{},
{},
{},
{},
{},
{},
{},
{},
{},
]
}
},
methods: {
tabClick(event) {
this.current = event.index
}
}
}
</script>
<style>
</style>

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

@ -0,0 +1,193 @@
<template>
<view class="u-page">
<view class="se-pt-50 se-pb-40 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-100 se-h-100" 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-mt-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" @click="onReservation()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482011.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">预约信息</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onRelease">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482014.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的发布</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onApply()">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482013.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的寻车申请</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onInvite">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482012.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的邀请</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onRecommend">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/482012.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">我的推荐</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onCustomerService">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/470868.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">在线客服</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb se-b-b" @click="onVersion">
<view class="se-flex se-flex-ai-c">
<image class="se-a-30" src="@/static/image/470868.png" mode=""></image>
<text class="se-ml-20 se-fs-24 se-fw-5">关于我们</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="se-py-30 se-px-20 se-flex se-flex-h-sb" @click="onLogOut">
<view class="se-flex se-flex-ai-c">
<text class="se-fs-24 se-fw-5">退出登录</text>
</view>
<view class="se-flex se-flex-ai-c">
<u-icon name="arrow-right"></u-icon>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
onInvite(){
uni.navigateTo({
url:"/pages_subpack/invite/index"
})
},
onRecommend(){
uni.navigateTo({
url:"/pages_subpack/recommend/index"
})
},
onRelease(){
uni.navigateTo({
url:"/pages_subpack/release/index"
})
},
onApply(){
uni.navigateTo({
url:"/pages_subpack/apply/index"
})
},
onSystem(){
uni.navigateTo({
url:"/pages_subpack/system/index"
})
},
onReservation(){
uni.navigateTo({
url:"/pages/reservation/index"
})
},
onVersion(){
uni.navigateTo({
url:"/pages_subpack/version/index"
})
},
onLogOut(){
uni.showModal({
title:"温馨提示",
content:"确定退出当前登录",
cancelText:"取消",
confirmText:"确定",
success:(res)=> {
console.info(res)
if(res.confirm==true){
uni.removeStorageSync("userInfo")
uni.removeStorageSync("token")
uni.removeStorageSync("sessionKey")
uni.navigateTo({
url:"/pages/auth/index"
})
}
}
})
},
onCustomerService(){
let that = this
// let obj = that.$utils.getkeyContent('phone')
if (uni.canIUse('makePhoneCall')) {
uni.makePhoneCall({
phoneNumber: "13156957887", //
success: function () {
console.log('拨打电话成功');
},
fail: function () {
console.log('拨打电话失败');
}
});
} else {
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>

+ 147
- 0
pages_subpack/apply/index.vue View File

@ -0,0 +1,147 @@
<template>
<view class="se-m-20 se-p-20 se-br-10">
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<u-form-item label="类型" prop="type">
<u--input v-model="form.type" placeholder="请填写类型"></u--input>
</u-form-item>
<u-form-item label="车辆型号" prop="model">
<u--input v-model="form.model" placeholder="请填写车辆型号"></u--input>
</u-form-item>
<u-form-item label="年限" prop="date">
<u--input v-model="form.date" placeholder="请填写年限"></u--input>
</u-form-item>
<u-form-item label="公里数" prop="distance">
<u--input v-model="form.distance" placeholder="请填写公里数"></u--input>
</u-form-item>
<u-form-item label="联系人" prop="contacts">
<u--input v-model="form.contacts" placeholder="请填写联系人"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="phone">
<u--input v-model="form.phone" placeholder="请填写联系电话"></u--input>
</u-form-item>
<u-form-item label="备注" labelPosition="top" prop="remark">
<u--textarea class="se-mt-20" v-model="form.remark" count
placeholder="请填写备注"></u--textarea>
</u-form-item>
<u-form-item>
<view class="se-px-20 se-pt-20">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="onSubmit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认申请</text>
</view>
</view>
</view>
</u-form-item>
</u--form>
</view>
</template>
<script>
export default {
components:{
},
data() {
return {
form: {
type:"",//
model:"",//
date:"",//
distance:"",//
price:"",//
contacts:"",//
phone:"",//
remark:"",//
},
rules: {
type:[
{
type: 'string',
required: true,
message: '请填写类型',
trigger: ['blur', 'change']
}
],
model:[
{
type: 'string',
required: true,
message: '请选择车辆型号',
trigger: ['blur', 'change']
}
],
date:[
{
type: 'string',
required: true,
message: '请填写时间',
trigger: ['blur', 'change']
}
],
distance:[
{
type: 'string',
required: true,
message: '请填写公里数',
trigger: ['blur', 'change']
}
],
price:[
{
type: 'string',
required: true,
message: '请填写价格',
trigger: ['blur', 'change']
}
],
contacts:[
{
type: 'string',
required: true,
message: '请填写联系人',
trigger: ['blur', 'change']
}
],
phone:[
{
type: 'string',
required: true,
message: '请填写联系电话',
trigger: ['blur', 'change']
}
],
}
}
},
onLoad(options) {
},
watch: {
},
methods: {
onSubmit() {
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
}).catch(errors => {
// uni.$u.toast('')
})
}
},
onReady() {
this.$refs.uForm.setRules(this.rules)
}
}
</script>
<style>
page {
background-color: #f5f5f5 !important;
}
</style>

+ 152
- 0
pages_subpack/business/index.vue View File

@ -0,0 +1,152 @@
<template>
<view>
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<view class="se-p-20">
<view class="se-p-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item label="公司名称" prop="company">
<u--input v-model="form.company" placeholder="请输入公司名称"></u--input>
</u-form-item>
<u-form-item label="联系人" prop="name">
<u--input v-model="form.name" placeholder="请输入姓名名称"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="mobile">
<u--input v-model="form.mobile" placeholder="请输入联系方式"></u--input>
</u-form-item>
<u-form-item label="公司地址" prop="address">
<u--input v-model="form.address" placeholder="请输入公司地址"></u--input>
</u-form-item>
</view>
</view>
<view class="se-p-20">
<view class="se-px-20 se-pb-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item prop="file" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
<view class="line-green"></view>
<view class="se-ml-10">
营业执照上传
</view>
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1"
multiple :maxCount="10"></u-upload>
</view>
</view>
</u-form-item>
</view>
</view>
<view class="se-px-20 se-pt-20">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="submit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认</text>
</view>
</view>
</view>
</u--form>
</view>
</template>
<script>
export default{
data(){
return{
form: {
name: '',
mobile: '',
company:'',
address:'',
fileList:[],
file: ''
},
rules: {
name: [{
type: 'string',
required: true,
message: '请输入姓名名称',
trigger: ['blur', 'change']
}],
mobile: [
{
required: true,
message: '请输入手机号',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
return uni.$u.test.mobile(value);
},
message: '手机号码不正确',
trigger: ['change','blur'],
},
],
company: [{
type: 'string',
required: true,
message: '请输入公司名称',
trigger: ['blur', 'change']
}],
address: [{
type: 'string',
required: true,
message: '请输入公司地址',
trigger: ['blur', 'change']
}],
file: [{
type: 'string',
required: true,
message: '请选择营业执照',
trigger: ['blur', 'change']
}]
},
}
},
watch: {
fileList(newValue, oldValue) {
if (newValue.length > 0) {
this.form.file = '有'
} else {
this.form.file = ''
}
}
},
onReady() {
this.$refs.uForm.setRules(this.rules)
},
methods: {
submit() {
uni.switchTab({
url:"/pages/home/index"
})
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
}).catch(errors => {
// uni.$u.toast('')
})
},
deletePic(event) {
this.form.fileList.splice(event.index, 1)
},
async afterRead(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.form.fileList.push({
url
})
})
})
}
}
}
</script>
<style lang="scss" scoped>
.line-green {
width: 8rpx;
height: 32rpx;
background: #669A32;
border-radius: 4rpx;
}
</style>

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

@ -0,0 +1,88 @@
<template>
<view>
<view class="se-flex se-bgc-white se-fs-26 se-h-80 se-b-b">
<view class="se-flex-1 se-flex se-flex-h-c">
<text class="se-mr-10">分类</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
<view class="se-flex-1 se-b-l se-b-r se-flex se-flex-h-c">
<text class="se-mr-10">时间</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
<view class="se-flex-1 se-flex se-flex-h-c">
<text class="se-mr-10">公里数</text>
<u-icon name="arrow-down-fill" color="#666666"></u-icon>
</view>
</view>
<view class="se-grid-2">
<view class="items-box se-br-5 se-px-10" v-for="(items,indexs) in 10" :key="indexs" @click="onDetail(items)">
<image class="se-w-p-100 se-h-200 se-py-5" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<view class="se-c-black se-fs-24 se-fw-6 se-mt-10">
HOUS环卫车
</view>
<view class="se-flex se-mt-10">
<view class="se-tag">
品牌名
</view>
<view class="se-tag">
品牌名
</view>
<view class="se-tag">
品牌名
</view>
</view>
<view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20" style="align-items: flex-end;">
<view class="se-fs-24 se-flex se-flex-v-c" style="align-items: flex-start;">
<text class="se-c-orange se-fs-30 se-fw-6 se-pb-10"><text class="se-fs-24"></text>6000<text class="se-fs-24"></text></text>
<text class="se-c-66">浏览量999+</text>
</view>
<view class="se-display-ib se-bgc-orange se-px-15 se-br-40 se-flex-h-c se-h-40 se-lh-40 se-ta-c se-fs-22 se-c-white se-b">
<text>查看详情</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
}
},
methods:{
onDetail(event){
uni.navigateTo({
url:"/pages_subpack/detail/index"
})
}
}
}
</script>
<style>
.items-box{
background: #ffffff;
border-radius: 8rpx;
box-shadow: 0rpx 4rpx 16rpx 0rpx rgba(0,0,0,0.05);
padding: 20rpx;
}
.se-tag{
padding: 5rpx 10rpx;
background: #fff2df;
border-radius: 4rpx;
border: 2rpx solid rgba(0,0,0,0.00);
font-size: 16rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #fab143;
margin-left: 10rpx;
}
.se-tag:first-child{
margin-left: 0rpx;
}
</style>

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

@ -0,0 +1,173 @@
<template>
<view>
<view class="se-w-vw-100 se-h-500">
<u-swiper :radius="0" :list="list" :height="250" :autoplay="false"></u-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">
环卫车
</view>
<view class="se-display-ib se-c-red se-fs-32 se-br-8 se-px-10 se-py-5">
3600
</view>
</view>
<view class="se-pr-30 se-flex se-flex-v-c">
<text>浏览量1000+</text>
<!-- <button style="justify-content: center;" class="se-w-140 se-flex se-flex-ai-c se-h-60 se-lh-60 se-fs-22 se-bgc-green se-c-white se-py-0 se-br-30 se-px-20 se-m-0" open-type="share">
<uv-icon name="share" color="#fff"></uv-icon>
<text class="se-fs-20 se-pl-5">分享</text>
</button> -->
</view>
</view>
<view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
<text>型号:</text>
<text class="se-ml-10">阿萨德防守打法2水岸东方</text>
</view>
<view class="se-pt-20">
<view class="se-p-20 se-c-black se-fs-28">
产品参数
</view>
<view>
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
</view>
</view>
<view class="se-pos-fixed se-bgc-white se-b-ts se-w-vw-100 se-h-160" style="bottom: 0px;left: 0rpx;">
<view class=" se-flex se-flex-h-sb se-py-20">
<button style="justify-content: center;" class="default-btn se-w-140 se-flex se-flex-v-c se-fs-22 se-c-black se-py-0 se-br-30 se-px-20 se-m-0" open-type="share">
<u-icon name="share" color="#000"></u-icon>
<text class="se-fs-20 se-pl-5 se-c-black">分享</text>
</button>
<view class="se-flex se-flex-ai-c se-px-40 se-py-20">
<view @click="onCustomerService()" class="se-flex se-flex-ai-c se-px-60 se-h-60 se-c-green se-fs-24 se-c-black se-b" style="border-radius: 30rpx 0 0 30rpx;">
联系电话
</view>
<view @click="open()" class="se-flex se-flex-ai-c se-px-60 se-h-60 se-bgc-green se-fs-24 se-c-white se-b" style="border-radius: 0 30rpx 30rpx 0;">
预约看车
</view>
</view>
</view>
</view>
<u-popup :show="show" @close="close" @open="open">
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<view class="se-bgc-white se-py-30">
<view class="se-px-40 se-py-20 se-c-black se-fs-30 se-fw-6">
预约租车
</view>
<view class="se-px-20 se-pb-20 se-mx-20 se-bgc-white se-br-20">
<u-form-item label="联系姓名" prop="name" borderBottom>
<u--input v-model="form.name" border="none" placeholder="请输入联系姓名"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="mobile" borderBottom>
<u--input v-model="form.mobile" type="number" border="none" placeholder="请输入联系电话"></u--input>
</u-form-item>
<u-form-item label="所在地区" prop="address" borderBottom>
<u--input v-model="form.address" type="text" border="none" placeholder="请输入所在地区"></u--input>
</u-form-item>
<u-form-item>
<view @click="submit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认</text>
</view>
</u-form-item>
</view>
</view>
</u--form>
</u-popup>
</view>
</template>
<script>
export default{
data(){
return{
show:false,
list:[
'https://cdn.uviewui.com/uview/swiper/swiper1.png',
'https://cdn.uviewui.com/uview/swiper/swiper2.png',
'https://cdn.uviewui.com/uview/swiper/swiper3.png',
],
form:{
name:"",
mobile:"",
address: ''
},
rules:{
name: [
{
required: true,
message: '请输入联系姓名',
trigger: ['blur', 'change']
}
],
mobile:[
{
required: true,
message: '请输入联系电话',
trigger: ['blur', 'change']
}
],
address: [
{
required: true,
message: '请选择地址',
trigger: ['blur', 'change']
}
]
}
}
},
methods:{
submit() {
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
}).catch(errors => {
uni.$u.toast('校验失败')
})
},
onCustomerService(){
let that = this
// let obj = that.$utils.getkeyContent('phone')
if (uni.canIUse('makePhoneCall')) {
uni.makePhoneCall({
// phoneNumber: obj.keyContent, //
phoneNumber:"13189698115",
success: function () {
console.log('拨打电话成功');
},
fail: function () {
console.log('拨打电话失败');
}
});
} else {
console.log('你的设备不支持拨打电话功能');
}
},
open() {
this.show = true
},
close() {
this.show = false
}
}
}
</script>
<style>
page{
background-color: #f5f5f5;
}
</style>
<style lang="scss" scoped>
.default-btn{
background-color: transparent;
}
.default-btn::after{
content: "";
border: none;
}
</style>

+ 42
- 0
pages_subpack/invite/index.vue View File

@ -0,0 +1,42 @@
<template>
<view class="se-p-60">
<view class="se-p-40 se-flex se-bgc-white se-br-20 se-bs se-flex-v-sa">
<text class="se-pb-50 se-pt-100">邀请好友</text>
<image class="se-a-300 se-br-20" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<text class="se-pt-50 se-pb-80">邀请码TKAFGED</text>
</view>
<view class="se-px-100 se-pt-80 se-fs-20 se-flex">
<view @click="onSubmit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>保存到本地</text>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
watch: {
},
methods: {
onSubmit(){
console.info("保存成功")
}
},
onReady() {
},
}
</script>
<style>
page {
background-color: #f5f5f5;
}
</style>

+ 26
- 0
pages_subpack/news/detail.vue View File

@ -0,0 +1,26 @@
<template>
<view class="se-p-20">
<view class="se-c-black se-fw-6 se-fs-28">
我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件
</view>
<view class="se-mt-20">
<image class="se-w-p-100" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode="widthFix"></image>
</view>
</view>
</template>
<script>
export default{
data(){
return{
}
},
methods:{
}
}
</script>
<style>
</style>

+ 38
- 0
pages_subpack/news/index.vue View File

@ -0,0 +1,38 @@
<template>
<view >
<view class="se-flex se-bgc-white se-m-20 se-p-20 se-br-20" v-for="(items,indexs) in 20" :key="indexs" @click="onDetail(items)">
<image class="se-w-240 se-h-180 se-br-20" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<view class="se-flex se-flex-v se-flex-1 se-px-20">
<view class="se-c-black se-fw-6 se-fs-28 se-toe-1 se-pt-5">
我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件
</view>
<view class="se-c-33 se-fs-24 se-lh-40 se-toe-3 se-pt-10">
我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件我国将加快改善农村生活条件
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
}
},
methods:{
onDetail(event){
uni.navigateTo({
url:"/pages_subpack/news/detail"
})
}
}
}
</script>
<style>
page{
background-color: #f5f5f5;
}
</style>

+ 139
- 0
pages_subpack/person/index.vue View File

@ -0,0 +1,139 @@
<template>
<view>
<u--form labelPosition="top" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<view class="se-p-20">
<view class="se-p-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item label="姓名" prop="name">
<u--input v-model="form.name" placeholder="请输入姓名名称"></u--input>
</u-form-item>
<u-form-item label="身份证号码" prop="idCard">
<u--input v-model="form.idCard" placeholder="请输入详细地址"></u--input>
</u-form-item>
<u-form-item label="联系电话" prop="mobile">
<u--input v-model="form.mobile" placeholder="请输入联系方式"></u--input>
</u-form-item>
</view>
</view>
<view class="se-p-20">
<view class="se-px-20 se-pb-20 se-bgc-white se-br-10 se-fs-20">
<u-form-item prop="file" labelWidth="2">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
<view class="line-green"></view>
<view class="se-ml-10">
身份证上传(正反面)
</view>
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="1"
multiple :maxCount="10"></u-upload>
</view>
</view>
</u-form-item>
</view>
</view>
<view class="se-px-20 se-pt-20">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="submit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认</text>
</view>
</view>
</view>
</u--form>
</view>
</template>
<script>
export default{
data(){
return{
fileList: [],
form: {
name: '',
idCard:'',
mobile: '',
file: ''
},
rules: {
name: [{
type: 'string',
required: true,
message: '请输入姓名名称',
trigger: ['blur', 'change']
}],
mobile: [
{
required: true,
message: '请输入手机号',
trigger: ['change','blur'],
},
{
validator: (rule, value, callback) => {
return uni.$u.test.mobile(value);
},
message: '手机号码不正确',
trigger: ['change','blur'],
},
],
file: [{
type: 'string',
required: true,
message: '请选择身份证照片',
trigger: ['blur', 'change']
}]
},
}
},
watch: {
fileList(newValue, oldValue) {
if (newValue.length > 0) {
this.form.file = '有'
} else {
this.form.file = ''
}
}
},
onReady() {
this.$refs.uForm.setRules(this.rules)
},
methods: {
submit() {
uni.switchTab({
url:"/pages/home/index"
})
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
}).catch(errors => {
// uni.$u.toast('')
})
},
deletePic(event) {
this.fileList.splice(e.index, 1)
},
async afterRead(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.fileList.push({
url
})
})
})
}
}
}
</script>
<style>
page{
background-color: #ffffff;
}
</style>
<style lang="scss" scoped>
.line-green {
width: 8rpx;
height: 32rpx;
background: #669A32;
border-radius: 4rpx;
}
</style>

+ 53
- 0
pages_subpack/recommend/index.vue View File

@ -0,0 +1,53 @@
<template>
<view>
<view class="se-px-20 se-py-20 se-bgc-white">
<u-tabs :activeStyle="{
color: '#669A32',
transform: 'scale(1.05)'
}" lineColor="#669A32" :list="list" @click="onClick"></u-tabs>
</view>
<view class="se-m-20">
<view class="se-bgc-white se-br-20 se-p-20 se-mb-20 se-flex" v-for="(items,indexs) in 20" :key="indexs">
<image class="se-a-80 se-br-p-50" src="https://cdn.uviewui.com/uview/swiper/swiper1.png" mode=""></image>
<view class="se-flex se-flex-v se-flex-1 se-px-20">
<view class="se-c-black se-fw-6 se-fs-26 se-toe-1 se-pt-5">
用户138400*******
</view>
<view class="se-c-33 se-fs-24 se-lh-40 se-toe-3 se-pt-10">
加入100天
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data(){
return{
list:[
{
name: '直接用户',
}, {
name: '间推用户',
}
]
}
},
watch: {
},
methods:{
onClick(index){
console.info(index)
}
}
}
</script>
<style>
page{
background-color: #f5f5f5;
}
</style>

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

@ -0,0 +1,314 @@
<template>
<view class="se-m-20 se-p-20 se-br-10">
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
<u-form-item labelWidth="0">
<view class="se-fs-26 se-c-black se-py-10">
请选择您要发布的车辆类型
</view>
<view class="se-flex se-flex-ai-c se-flex-ff-rw">
<view class="se-py-10 se-px-30 se-fs-22 se-br-10 se-mr-15 se-mt-10" :class="item.select ? 'se-bgc-green se-c-white se-b-green' : 'se-b se-c-text'" @click="handleType(index)" v-for="(item,index) in typeList" :key="index">
{{item.text}}
</view>
</view>
</u-form-item>
<u-form-item label="产品名称">
<view class="se-flex se-flex-h-c">
<u--input v-model="form.title" type="text" class="se-w-200" placeholder="请填写产品名称"></u--input>
</view>
</u-form-item>
<u-form-item label="区域" prop="area">
<u--input readonly v-model="form.area" placeholder="请选择地址" border="bottom"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="时间" prop="date">
<u--input v-model="form.date" placeholder="请填写时间"></u--input>
</u-form-item>
<u-form-item label="公里数" prop="distance">
<u--input v-model="form.distance" placeholder="请填写时间"></u--input>
</u-form-item>
<u-form-item label="租赁价格" prop="price">
<u--input v-model="form.price" placeholder="请填写价格"></u--input>
<div slot="right" class="se-c-green">/</div>
</u-form-item>
<u-form-item label="联系人" prop="contacts">
<u--input v-model="form.contacts" placeholder="请填写联系人"></u--input>
</u-form-item>
<u-form-item label="联系人电话" prop="phone">
<u--input v-model="form.phone" placeholder="请填写电话"></u--input>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileFrontList" @afterRead="afterFront" @delete="delFront" :maxCount="1"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileBackList" @afterRead="afterBack" @delete="delBack" :maxCount="1"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileLeftList" @afterRead="afterLeft" @delete="delLeft" :maxCount="1"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片()
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileRightList" @afterRead="afterRight" @delete="delRight" :maxCount="1"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item prop="file" labelWidth="0">
<view class="se-flex se-flex-v-sa">
<view class="se-py-20 se-w-p-100 se-flex">
车辆照片(驾驶室)
</view>
<view class="se-py-20 se-w-p-100">
<u-upload :fileList="form.fileCabList" @afterRead="afterCab" @delete="delCab" :maxCount="1"></u-upload>
</view>
</view>
</u-form-item>
<u-form-item label="车辆介绍" labelPosition="top" prop="introduce">
<u--textarea v-model="form.introduce" class="se-mt-20" count
placeholder="请填写车辆介绍"></u--textarea>
</u-form-item>
<u-form-item>
<view class="se-px-20 se-pt-20">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="onSubmit"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>发布订单</text>
</view>
</view>
</view>
</u-form-item>
</u--form>
</view>
</template>
<script>
export default {
components:{
},
data() {
return {
typeList:[
{
text:"新车",
value:"xin",
select:true
},
{
text:"二手车",
value:"ershouche",
select:false
},
{
text:"租赁车辆",
value:"all",
select:false
}
],
form: {
title:"",//
area:"",//
address:'',
date:"",//
distance:"",//
price:"",//
contacts:"",//
phone:"",//
fileFrontList:[],//
fileBackList:[],//
fileLeftList:[],//
fileRightList:[],//
fileCabList:[],//
introduce:"",//
},
rules: {
title:[
{
type: 'string',
required: true,
message: '请填写产品名称',
trigger: ['blur', 'change']
}
],
area:[
{
type: 'string',
required: true,
message: '请选择所在地区',
trigger: ['blur', 'change']
}
],
date:[
{
type: 'string',
required: true,
message: '请填写时间',
trigger: ['blur', 'change']
}
],
distance:[
{
type: 'string',
required: true,
message: '请填写公里数',
trigger: ['blur', 'change']
}
],
price:[
{
type: 'string',
required: true,
message: '请填写价格',
trigger: ['blur', 'change']
}
],
contacts:[
{
type: 'string',
required: true,
message: '请填写联系人',
trigger: ['blur', 'change']
}
],
phone:[
{
type: 'string',
required: true,
message: '请填写联系电话',
trigger: ['blur', 'change']
}
],
}
}
},
onLoad(options) {
},
watch: {
},
methods: {
handleType(index){
this.typeList.forEach(items=>{
items.select = false
})
this.typeList[index].select = !this.typeList[index].select
},
//
delFront(event) {
this.form.fileFrontList.splice(event.index, 1)
},
async afterFront(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.form.fileFrontList.push({
url
})
})
})
},
//
delBack(event) {
this.form.fileBackList.splice(event.index, 1)
},
async afterBack(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.form.fileBackList.push({
url
})
})
})
},
//
delLeft(event) {
this.form.fileLeftList.splice(event.index, 1)
},
async afterLeft(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.form.fileLeftList.push({
url
})
})
})
},
//
delRight(event) {
this.form.fileRightList.splice(event.index, 1)
},
async afterRight(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.form.fileRightList.push({
url
})
})
})
},
// ()
delCab(event) {
this.form.fileCabList.splice(event.index, 1)
},
async afterCab(e) {
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.form.fileCabList.push({
url
})
})
})
},
onSubmit() {
console.info(this.form)
uni.navigateTo({
url:"/pages_subpack/success/index"
})
this.$refs.uForm.validate().then(res => {
uni.$u.toast('校验通过')
}).catch(errors => {
// uni.$u.toast('')
})
}
},
onReady() {
this.$refs.uForm.setRules(this.rules)
}
}
</script>
<style>
page {
background-color: transparent;
forced-color-adjust: none;
}
</style>

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

@ -0,0 +1,43 @@
<template>
<view class="u-page">
<view class="se-flex se-flex-v-sa se-pt-140">
<u-icon name="checkmark-circle-fill" color="#31a836" size="50"></u-icon>
<view class="se-c-black se-fw-6 se-fs-32 se-ta-c se-mt-20">
发布成功
</view>
</view>
<view class="se-px-40 se-mt-140">
<view class="se-px-20 se-pb-80 se-fs-20 se-flex">
<view @click="onOrderDetail()"
class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
<text>确认</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
}
},
methods:{
onOrderDetail(){
uni.navigateTo({
url:"/pages_subpack/order-detail/index"
})
},
onCancel(){
uni.navigateBack({
delta:1
})
}
}
}
</script>
<style lang="scss" scoped>
</style>

+ 17
- 0
pages_subpack/version/index.vue View File

@ -0,0 +1,17 @@
<template>
<view>
<view class="se-flex se-flex-v-c se-pt-180">
<image class="se-a-150" src="@/static/image/logo.png" mode=""></image>
<text class="se-c-black se-fs-28 se-pt-30">8.12.1</text>
</view>
</view>
</template>
<script>
export default{
}
</script>
<style>
</style>

BIN
static/image/470868.png View File

Before After
Width: 26  |  Height: 26  |  Size: 1.0 KiB

BIN
static/image/482011.png View File

Before After
Width: 27  |  Height: 26  |  Size: 984 B

BIN
static/image/482012.png View File

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

BIN
static/image/482013.png View File

Before After
Width: 22  |  Height: 24  |  Size: 997 B

BIN
static/image/482014.png View File

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

BIN
static/image/7525121.png View File

Before After
Width: 178  |  Height: 178  |  Size: 2.6 KiB

BIN
static/image/7525122.png View File

Before After
Width: 178  |  Height: 178  |  Size: 3.0 KiB

BIN
static/image/aed60x.png View File

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

BIN
static/image/header.png View File

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

BIN
static/image/home.png View File

Before After
Width: 47  |  Height: 43  |  Size: 1.4 KiB

BIN
static/image/home_selected.png View File

Before After
Width: 47  |  Height: 43  |  Size: 2.3 KiB

BIN
static/image/logo.png View File

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

BIN
static/image/nav1.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.7 KiB

BIN
static/image/nav2.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.8 KiB

BIN
static/image/nav3.png View File

Before After
Width: 82  |  Height: 82  |  Size: 8.1 KiB

BIN
static/image/nav4.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.2 KiB

BIN
static/image/nav5.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.7 KiB

BIN
static/image/nav6.png View File

Before After
Width: 82  |  Height: 82  |  Size: 7.6 KiB

BIN
static/image/pencil.png View File

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

BIN
static/image/user.png View File

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

BIN
static/image/user_selected.png View File

Before After
Width: 40  |  Height: 40  |  Size: 960 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 200 {
@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: #669A32;
$green-lg: linear-gradient(to right, #669A32, #669A32);
$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;
// }
}

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

@ -0,0 +1,65 @@
* {
-webkit-overflow-scrolling: touch;
-webkit-touch-callout: text;
-webkit-user-select: text;
user-select: text;
// touch-action: pan-y;
}
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
* {
&:hover,
&:focus,
&:active {
outline: none;
}
}
html {
height: 100%;
// overflow: hidden;
}
body {
height: 100%;
background-color: #f5f5f5;
color: #333333;
}
ul,
li,
ol {
list-style: none;
}
img,
button,
input,
textarea {
border: none;
outline: none;
resize: none;
}
img {
display: block;
}
a {
text-decoration: none;
}
// iframe {
// display: 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: #669A32;
$text-orange: #EB553B;
$page: #f5f5f5;
$area: #ffffff;
$area-l: #f5f5f5;
$select: #f5f5f5;
$dialog: #ffffff;
$green: #669A32;
$orange: #EB553B;
$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);
}
}
}
}

+ 69
- 0
tree.md View File

@ -0,0 +1,69 @@
```
.
├── common #演示需要的一些文件
│ ├── api.js
│ ├── config.js
│ ├── demo.scss
│ ├── mixin.js
│ └── props.js
├── components #演示项目封装的组件
│ └── page-nav
│ └── page-nav.vue
├── pages #页面
│ ├── componentsA #分包A
│ │ ├── ...
│ │ ├── ...
│ ├── componentsB #分包B
│ │ ├── ...
│ │ ├── ...
│ ├── componentsC #分包C
│ │ ├── ...
│ │ ├── ...
│ └── example #演示项目首页
│ ├── components.config.js #演示页面数据
│ └── components.nvue #主演示页面
├── static #演示项目需要的一些文件
│ ├── app-plus
│ │ └── mp-html
│ ├── common
│ │ └── js
│ └── uview
│ ├── common
│ └── example
├── store
│ └── index.js
├── uni_modules
│ └── uview-ui #uView2.0主包
│ ├── LICENSE
│ ├── README.md
│ ├── changelog.md
│ ├── components #所有的组件
│ ├── index.js
│ ├── index.scss
│ ├── libs
│ ├── package.json
│ └── theme.scss
├── unpackage
│ └── res
│ └── icons
├── util
│ └── request
│ ├── index.js
│ ├── requestInterceptors.js
│ └── responseInterceptors.js
├── App.vue
├── LICENSE
├── main.js
├── manifest.json
├── package-lock.json
├── pages.json #页面配置
├── package.json
├── README.md
├── template.h5.html #h5模板
├── tree.md
├── uni.scss
└── vue.config.js
created by beiqiao.
```

+ 151
- 0
uni.scss View File

@ -0,0 +1,151 @@
/**
* 下方引入的为uView UI的集成样式文件为scss预处理器其中包含了一些"u-"开头的自定义变量
* 使用的时候请将下面的一行复制到您的uniapp项目根目录的uni.scss中即可
* uView自定义的css类名和scss变量均以"u-"开头不会造成冲突请放心使用
*/
/* 行为相关颜色 */
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;
/* 文字基本颜色 */
$uni-text-color: #333; //基本色
$uni-text-color-inverse: #fff; //反色
$uni-text-color-grey: #999; //辅助灰色如加载更多的提示信息
$uni-text-color-placeholder: #808080;
$uni-text-color-disable: #c0c0c0;
/* 背景颜色 */
$uni-bg-color: #ffffff;
$uni-bg-color-grey: #f8f8f8;
$uni-bg-color-hover: #f1f1f1; //点击状态颜色
$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色
/* 边框颜色 */
$uni-border-color: #c8c7cc;
/* 尺寸变量 */
/* 文字尺寸 */
$uni-font-size-sm: 12px;
$uni-font-size-base: 14px;
$uni-font-size-lg: 16px;
/* 图片尺寸 */
$uni-img-size-sm: 20px;
$uni-img-size-base: 26px;
$uni-img-size-lg: 40px;
/* Border Radius */
$uni-border-radius-sm: 2px;
$uni-border-radius-base: 3px;
$uni-border-radius-lg: 6px;
$uni-border-radius-circle: 50%;
/* 水平间距 */
$uni-spacing-row-sm: 5px;
$uni-spacing-row-base: 10px;
$uni-spacing-row-lg: 15px;
/* 垂直间距 */
$uni-spacing-col-sm: 4px;
$uni-spacing-col-base: 8px;
$uni-spacing-col-lg: 12px;
/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title: #2c405a; // 文章标题颜色
$uni-font-size-title: 20px;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle: 26px;
$uni-color-paragraph: #3f536e; // 文章段落颜色
$uni-font-size-paragraph: 15px;
@import '@/uni_modules/uview-ui/theme.scss';
.line-orange {
width: 8rpx;
height: 32rpx;
background: #ff7a31;
border-radius: 4rpx;
}
.se-bgc-ffd{
background-color: #FFDFDB;
}
/* fix uview */
$u-primary: #1678ff;
uni-modal {
z-index: 9999;
.uni-modal {
max-width: 600rpx;
width: 600rpx;
border-radius: 15.38rpx;
padding: 20rpx 20rpx 50rpx 20rpx;
.uni-modal__hd {
font-weight: 500;
padding: 20rpx 10rpx 30rpx 10rpx;
color: #666666;
.uni-modal__title{
font-size: 32rpx;
}
}
.uni-modal__bd {
padding:0rpx 10rpx 60rpx 10rpx;
color: #000000;
line-height: 38rpx;
font-size: 24rpx;
}
.uni-modal__ft{
height: 70rpx;
line-height: 65rpx;
padding: 0rpx 20rpx 0rpx 20rpx;
.uni-modal__btn {
font-size: 24rpx;
border: 2rpx solid $u-primary;
color: $u-primary;
border-radius: 12rpx;
&::after {
border-left: 0px solid #ffffff;
}
}
.uni-modal__btn_default{
color: $u-primary !important;
}
.uni-modal__btn_primary{
color: #ffffff !important;
background-color: $u-primary;
}
.uni-modal__btn+.uni-modal__btn{
margin-left: 30rpx;
}
}
.uni-modal__ft:after {
border-top: 0rpx solid #fff;
}
.uni-modal__textarea{
margin: 20rpx;
font-size: 14px;
height: 140px;
border-radius: 10px;
background: #f5f5f5;
}
}
}
.se-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10rpx;
}
.se-grid-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20rpx;
padding: 20rpx;
}

+ 21
- 0
uni_modules/uview-ui/LICENSE View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 www.uviewui.com
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.

+ 66
- 0
uni_modules/uview-ui/README.md View File

@ -0,0 +1,66 @@
<p align="center">
<img alt="logo" src="https://uviewui.com/common/logo.png" width="120" height="120" style="margin-bottom: 10px;">
</p>
<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView 2.0</h3>
<h3 align="center">多平台快速开发的UI框架</h3>
[![stars](https://img.shields.io/github/stars/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0)
[![forks](https://img.shields.io/github/forks/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0)
[![issues](https://img.shields.io/github/issues/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0/issues)
[![Website](https://img.shields.io/badge/uView-up-blue?style=flat-square)](https://uviewui.com)
[![release](https://img.shields.io/github/v/release/umicro/uView2.0?style=flat-square)](https://gitee.com/umicro/uView2.0/releases)
[![license](https://img.shields.io/github/license/umicro/uView2.0?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
## 说明
uView UI,是[uni-app](https://uniapp.dcloud.io/)全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
## [官方文档:https://uviewui.com](https://uviewui.com)
## 预览
您可以通过**微信**扫码,查看最佳的演示效果。
<br>
<br>
<img src="https://uviewui.com/common/weixin_mini_qrcode.png" width="220" height="220" >
## 链接
- [官方文档](https://www.uviewui.com/)
- [更新日志](https://www.uviewui.com/components/changelog.html)
- [升级指南](https://www.uviewui.com/components/changeGuide.html)
- [关于我们](https://www.uviewui.com/cooperation/about.html)
## 交流反馈
欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uviewui.com/components/addQQGroup.html)
## 关于PR
> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uView2.0是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。
> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢!
## 安装
#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593)
请通过[官网安装文档](https://www.uviewui.com/components/install.html)了解更详细的内容
## 快速上手
请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容
## 使用方法
配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
```html
<template>
<u-button text="按钮"></u-button>
</template>
```
## 版权信息
uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。

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

Loading…
Cancel
Save