commit 09831dce916aea4b60ca83173d925806c9cfffc3
Author: Augcl <1767466882@163.com>
Date: Thu Jul 24 15:31:45 2025 +0800
Initial commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e23bc12
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+.idea
+package-lock.json
+node_modules/
+unpackage/
+.hbuilderx
+.vite
\ No newline at end of file
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..cc1058b
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,23 @@
+
+
+
diff --git a/README.en.md b/README.en.md
new file mode 100644
index 0000000..fff4890
--- /dev/null
+++ b/README.en.md
@@ -0,0 +1,36 @@
+# uniapp项目开发模板
+
+#### Description
+{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Instructions
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Contribution
+
+1. Fork the repository
+2. Create Feat_xxx branch
+3. Commit your code
+4. Create Pull Request
+
+
+#### Gitee Feature
+
+1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4. The most valuable open source project [GVP](https://gitee.com/gvp)
+5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9a7916a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,411 @@
+# 商城项目文档
+
+## 项目概述
+本项目是一个基于uni-app开发的商城小程序,采用Vue框架开发,集成了完整的商城功能模块。
+
+## 目录结构
+```
+├── api # API接口目录
+│ ├── api.js # API统一出口
+│ ├── http.js # HTTP请求封装
+│ └── model # 业务模块API
+├── components # 公共组件
+├── mixins # 混入文件
+├── pages # 页面文件
+├── static # 静态资源
+├── store # Vuex状态管理
+├── utils # 工具函数
+└── uni_modules # uni-app插件模块
+```
+
+## 分包结构说明
+
+### pages_order分包
+分包是小程序优化加载性能的重要手段,pages_order作为独立分包,包含以下模块:
+
+```
+├── auth # 认证相关页面
+│ ├── loginAndRegisterAndForgetPassword.vue # 登录注册
+│ ├── wxLogin.vue # 微信登录
+│ └── wxUserInfo.vue # 微信用户信息
+├── components # 分包内公共组件
+│ ├── address/ # 地址选择组件
+│ ├── areaSelector/ # 区域选择器
+│ └── product/ # 商品相关组件
+├── home # 首页相关
+│ ├── addEnterprise.vue # 添加企业
+│ ├── contact.vue # 联系我们
+│ ├── introduce.vue # 介绍页面
+│ ├── journalism.vue # 新闻资讯
+│ └── notice.vue # 公告
+├── mine # 我的模块
+│ ├── address.vue # 收货地址
+│ ├── balance.vue # 余额
+│ ├── commission.vue # 佣金
+│ ├── coupon.vue # 优惠券
+│ ├── memberCenter.vue # 会员中心
+│ └── more... # 更多功能页面
+├── order # 订单模块
+│ ├── createOrder.vue # 创建订单
+│ ├── orderDetail.vue # 订单详情
+│ └── giftList.vue # 礼品列表
+├── product # 商品模块
+│ └── productDetail.vue # 商品详情
+└── static # 分包静态资源
+ ├── address/ # 地址相关图片
+ ├── auth/ # 认证相关图片
+ ├── coupon/ # 优惠券图片
+ └── more... # 其他静态资源
+```
+
+**分包特点:**
+- 静态资源就近原则:分包相关的图片等静态资源存放在分包目录下,避免主包体积过大
+- 模块化组织:按功能模块划分目录,便于维护和管理
+- 组件复用:分包内的通用组件集中管理,提高代码复用性
+
+## 配置文件说明
+
+### config.js
+项目核心配置文件,包含以下配置:
+
+**1. 环境配置**
+```javascript
+// 当前环境
+const type = 'prod'
+
+// 环境配置
+const config = {
+ dev: {
+ baseUrl: 'http://h5.xzaiyp.top/jewelry-admin',
+ },
+ prod: {
+ baseUrl: 'https://jewelry-admin.hhlm1688.com/jewelry-admin',
+ }
+}
+```
+
+**2. 默认配置**
+```javascript
+const defaultConfig = {
+ // 腾讯地图Key
+ mapKey: 'XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU',
+ // 阿里云OSS配置
+ aliOss: {
+ url: 'https://image.hhlm1688.com/',
+ config: {
+ region: 'oss-cn-guangzhou',
+ accessKeyId: '***',
+ accessKeySecret: '***',
+ bucket: 'hanhaiimage',
+ endpoint: 'oss-cn-shenzhen.aliyuncs.com',
+ }
+ }
+}
+```
+
+**3. UI框架配置**
+```javascript
+uni.$uv.setConfig({
+ config: {
+ unit: 'rpx' // 设置默认单位
+ },
+})
+
+// UI文档地址 https://www.uvui.cn/
+```
+
+## 核心模块详解
+
+### 1. Mixins 混入
+
+#### 1.1 list.js - 列表数据加载混入
+提供列表数据的加载、分页、下拉刷新、上拉加载更多等功能。
+
+**主要功能:**
+- 统一的分页参数处理
+- 下拉刷新和上拉加载更多
+- 数据加载状态管理
+
+**使用示例:**
+```javascript
+// 在页面中使用list混入
+import listMixin from '@/mixins/list.js'
+
+export default {
+ mixins: [listMixin],
+ data() {
+ return {
+ // 指定API接口
+ mixinsListApi: 'productList'
+ }
+ }
+}
+```
+
+#### 1.2 configList.js - 全局配置混入
+已全局引入的配置管理混入,无需手动引入即可使用。
+
+**主要功能:**
+- 统一的分享配置
+- 全局配置管理
+- 用户信息关联
+
+**配置参数:**
+```javascript
+// 分享配置示例
+this.Gshare.title = '分享标题'
+this.Gshare.path = '分享路径'
+```
+
+### 2. API 模块
+
+#### 2.1 http.js - 请求封装
+统一的HTTP请求处理,包含:
+- 请求拦截器
+- 响应拦截器
+- 统一的错误处理
+- Token管理
+
+#### 2.2 api.js - 接口管理
+统一管理API接口,支持模块化组织。API模块采用分层结构,便于维护和扩展。
+
+**目录结构:**
+```
+api/
+├── api.js # API统一出口
+├── http.js # HTTP请求封装
+└── model/ # 业务模块API
+ ├── product.js # 商品相关接口
+ ├── order.js # 订单相关接口
+ └── user.js # 用户相关接口
+```
+
+**接口定义示例:**
+```javascript
+// api/model/product.js
+export default {
+ // GET请求示例
+ list: {
+ url: '/api/product/list',
+ method: 'GET',
+ loading: true // 显示加载提示
+ },
+
+ // POST请求示例
+ create: {
+ url: '/api/product/create',
+ method: 'POST',
+ loading: true // 显示加载提示
+ auth : true,//效验登录
+ debounce : 1000,//接口防抖,1s
+ limit : 500,//接口限流,0.5s
+ },
+}
+```
+
+**调用接口示例:**
+```javascript
+// 第一种写法:callback方式处理响应
+this.$api('product.list', {
+ pageNo: 1,
+ pageSize: 10,
+ categoryId: '123'
+}, res => {
+ // 处理列表数据
+})
+
+// 第二种写法:Promise方式处理响应
+this.$api('product.create', {
+ name: '商品名称',
+ price: 99.99,
+ description: '商品描述'
+}).then(res => {
+ if (res.code === 200) {
+ // 创建成功
+ uni.showToast({ title: '创建成功' })
+ }
+})
+```
+
+
+### 3. 公共代码
+
+#### 3.1 工具函数 (utils)
+- authorize.js: 授权处理
+- pay.js: 微信网页支付相关
+- utils.js: 通用工具函数
+- timeUtils.js: 时间处理
+- position.js: 定位与位置计算
+- oss-upload: 阿里云OSS上传模块
+
+
+**使用示例:**
+```javascript
+
+// 授权处理
+async preservationImg(img) {
+ await this.$authorize('scope.writePhotosAlbum')
+ //在执行$authorize之后,await下面的代码都是确保授权完成的情况下执行
+},
+
+// 时间格式化
+const formattedTime = this.$timeUtils.formatTime(new Date())
+
+// 项目中在Vue集成了dayjs >>,可以直接使用
+// 在utils/index中Vue.prototype.$dayjs
+this.$dayjs()
+
+// 微信网页支付调用
+import { wxPay } from '@/utils/pay'
+wxPay(orderData)
+```
+
+#### 3.2 公共组件
+- navbar.vue: 自定义导航栏
+- tabbar.vue: 底部导航栏
+
+**使用示例:**
+```html
+
+
+
+
+
+```
+
+
+#### 3.3 OSS上传模块
+
+**配置说明:**
+项目使用阿里云OSS进行文件存储,相关配置位于config.js中:
+
+
+**使用示例:**
+
+1. 单文件上传
+```javascript
+export default {
+ methods: {
+ onUpload(file) {
+ this.$Oss.ossUpload(file.path).then(url => {
+ this.filePath = url
+ })
+ }
+ }
+}
+```
+
+2. 在uv-upload组件中使用
+```html
+
+
+
+
+
+```
+
+**注意事项:**
+1. 上传前请确保OSS配置正确
+2. 建议对上传文件大小进行限制
+3. 支持的文件类型:图片、视频、文档等
+4. 上传失败时会抛出异常,请做好错误处理
+
+## 最佳实践
+
+### 1. 列表页面开发
+```javascript
+// pages/product/list.vue
+import listMixin from '@/mixins/list.js'
+
+export default {
+ mixins: [listMixin],
+ data() {
+ return {
+ mixinsListApi: 'productList',
+ }
+ },
+ methods: {
+ // 分类切换
+ onCategoryChange(categoryId) {
+ this.queryParams.categoryId = categoryId
+ this.getData()
+ }
+ }
+}
+```
+
+### 2. 详情页面开发
+```javascript
+// pages/product/detail.vue
+import configMixin from '@/mixins/configList.js'
+
+export default {
+ mixins: [configMixin],
+ data() {
+ return {
+ productId: '',
+ detail: {}
+ }
+ },
+ onLoad(options) {
+ this.productId = options.id
+ this.getDetail()
+ },
+ methods: {
+ getDetail() {
+ this.$api('productDetail', {
+ id: this.productId
+ }, res => {
+ this.detail = res.result
+ // 设置分享信息
+ this.Gshare.title = this.detail.name
+ this.Gshare.path = `/pages/product/detail?id=${this.productId}`
+ })
+ }
+ }
+}
+```
+
+## 注意事项
+1. 使用mixins时注意命名冲突
+2. API调用建议统一使用this.$api方式
+3. 页面开发建议继承相应的混入来复用通用功能
+
+## 常见问题
+1. 列表加载失败
+ - 检查mixinsListApi是否正确配置
+ - 确认网络请求是否正常
+ - 查看请求参数格式是否正确
+
diff --git a/api/api.js b/api/api.js
new file mode 100644
index 0000000..d566315
--- /dev/null
+++ b/api/api.js
@@ -0,0 +1,105 @@
+import http from './http.js'
+import utils from '../utils/utils.js'
+
+
+let limit = {}
+let debounce = {}
+
+const models = ['login', 'index', 'vip', 'info']
+
+const config = {
+ // 示例
+ // wxLogin : {url : '/api/wxLogin', method : 'POST',
+ // auth : false, showLoading : true, loadingTitle : '加载中...',
+ // limit : 1000
+ // },
+
+ getConfig : {url : '/config_common/getConfig', method : 'GET', limit : 500},
+}
+
+
+export function api(key, data, callback, loadingTitle) {
+ let req = config[key]
+
+ if (!req) {
+ console.error('无效key' + key);
+ return Promise.reject()
+ }
+
+ if (typeof callback == 'string') {
+ loadingTitle = callback
+ }
+
+ if (typeof data == 'function') {
+ callback = data
+ data = {}
+ }
+
+ // 接口限流
+ if (req.limit) {
+ let storageKey = req.url
+ let storage = limit[storageKey]
+ if (storage && new Date().getTime() - storage < req.limit) {
+ return Promise.reject()
+ }
+ limit[storageKey] = new Date().getTime()
+ }
+
+ //必须登录
+ if (req.auth) {
+ if (!uni.getStorageSync('token')) {
+ utils.toLogin()
+ console.error('需要登录', req.url)
+ return Promise.reject()
+ }
+ }
+
+ // 接口防抖
+ if(req.debounce){
+
+ let storageKey = req.url
+ let storage = debounce[storageKey]
+
+ if (storage) {
+ clearTimeout(storage)
+ }
+
+ debounce[storageKey] = setTimeout(() => {
+
+ clearTimeout(storage)
+
+ delete debounce[storageKey]
+
+ http.http(req.url, data, callback, req.method,
+ loadingTitle || req.showLoading, loadingTitle || req.loadingTitle)
+ }, req.debounce)
+
+ return Promise.reject()
+ }
+
+ return http.http(req.url, data, callback, req.method,
+ loadingTitle || req.showLoading, loadingTitle || req.loadingTitle)
+}
+
+
+function addApiModel(model, key){
+ for(let k in model){
+ if(config[`${k}`]){
+ console.error(`重名api------model=${key},key=${k}`);
+ uni.showModal({
+ title: `重名api`,
+ content: `model=${key},key=${k}`
+ })
+ continue
+ }
+ config[`${k}`] = model[k]
+ // config[`${key}_${k}`] = model[k]
+ }
+}
+
+models.forEach(key => {
+ addApiModel(require(`./model/${key}.js`).default, key)
+})
+
+
+export default api
\ No newline at end of file
diff --git a/api/http.js b/api/http.js
new file mode 100644
index 0000000..6c3da63
--- /dev/null
+++ b/api/http.js
@@ -0,0 +1,77 @@
+
+import Vue from 'vue'
+import utils from '../utils/utils.js'
+import store from '../store/store.js'
+
+function http(uri, data, callback, method = 'GET', showLoading, title) {
+
+ if(showLoading){
+ uni.showLoading({
+ title: title || '加载中...'
+ });
+ }
+
+ let reject, resolve;
+
+ let promise = new Promise((res, rej) => {
+ reject = rej
+ resolve = res
+ })
+
+ uni.request({
+ url: Vue.prototype.$config.baseUrl + uri,
+ data,
+ method: method,
+ header: {
+ 'X-Access-Token': uni.getStorageSync('token'),
+ 'Content-Type' : 'application/x-www-form-urlencoded'
+ },
+ success: (res) => {
+ // console.log(res,'res')
+ if(showLoading){
+ uni.hideLoading();
+ }
+
+ if(res.statusCode == 401 ||
+ res.data.message == '操作失败,token非法无效!' ||
+ res.data.message == '操作失败,用户不存在!'){
+ store.commit('logout')
+ console.error('登录过期');
+ utils.toLogin()
+ }
+
+ if(res.statusCode == 200 && res.data.code != 200
+ && res.data.code != 902){
+ uni.showToast({
+ mask: true,
+ duration: 1000,
+ title: res.data.message,
+ icon:'none'
+ });
+ }
+
+ callback && callback(res.data)
+ resolve(res.data)
+ },
+
+ fail: () => {
+ reject('api fail')
+ uni.showLoading({})
+ setTimeout(()=>{
+ uni.hideLoading()
+ uni.showToast({icon:"none", title:"网络异常"})
+ }, 3000)
+
+ if(showLoading){
+ uni.hideLoading();
+ }
+ }
+ });
+
+ return promise
+}
+
+
+export default {
+ http: http,
+}
\ No newline at end of file
diff --git a/api/model/index.js b/api/model/index.js
new file mode 100644
index 0000000..3bd6c97
--- /dev/null
+++ b/api/model/index.js
@@ -0,0 +1,215 @@
+// 首页相关接口
+
+const api = {
+ // 获取首页轮播图
+ getRiceBanner: {
+ url: '/index_common/getRiceBanner',
+ method: 'GET',
+ },
+ // 获取首页常规产品【废弃】
+ // getRiceCommonProductList: {
+ // url: '/index_common/getRiceCommonProductList',
+ // method: 'GET',
+ // },
+ // 获取首页跳转图标
+ getRiceIconList: {
+ url: '/index_common/getRiceIconList',
+ method: 'GET',
+ },
+ // 获取首页新闻详情
+ getRiceNewsDetail: {
+ url: '/index_common/getCommonNewsDetail',
+ method: 'GET',
+ },
+ // 获取首页新闻列表
+ getRiceNewsList: {
+ url: '/index_common/getRiceNewsList',
+ method: 'GET',
+ },
+ // 获取首页公告列表
+ getRiceNoticeList: {
+ url: '/index_common/getRiceNoticeList',
+ method: 'GET',
+ },
+ // 获取首页商品详情
+ getRiceProductDetail: {
+ url: '/index_common/getRiceProductDetail',
+ method: 'GET',
+ },
+ // 获取首页体验产品
+ getRiceProductList: {
+ url: '/index_common/getRiceProductList',
+ method: 'GET',
+ },
+ // 查询分类接口
+ getCategoryList: {
+ url: '/index_common/getCategoryList',
+ method: 'GET',
+ },
+ // 新查询分类以及商品数据接口
+ getCategoryPidList: {
+ url: '/index_common/getCategoryPidList',
+ method: 'GET',
+ debounce : 250,
+ },
+ // 查询一级分类接口
+ getPidList: {
+ url: '/index_common/getCategoryPidList',
+ method: 'GET',
+ },
+ // 获取分类分页商品列表接口
+ getClassShopPageList: {
+ url: '/index_common/getClassShopPageList',
+ method: 'GET',
+ },
+ // 加入购物车
+ addCart: {
+ url: '/index_common/addCart',
+ method: 'GET',
+ auth: true,
+ showLoading: true,
+ limit : 500,
+ },
+ // 删除购物车信息
+ deleteCart: {
+ url: '/index_common/deleteCart',
+ method: 'DELETE',
+ auth: true,
+ showLoading: true,
+ },
+ // 修改购物车信息数量
+ updateCartNum: {
+ url: '/index_common/updateCartNum',
+ method: 'POST',
+ auth: true,
+ debounce: 300,
+ },
+ // 创建订单
+ createOrder: {
+ url: '/index_common/createOrder',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 创建订单-再次支付
+ createOrderTwo: {
+ url: '/index_common/createOrderTwo',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 多商品创建订单
+ createSumOrder: {
+ url: '/index_common/createSumOrder',
+ method: 'POST',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 多商品订单再次支付
+ createSumOrderAgain: {
+ url: '/index_common/createSumOrderAgain',
+ method: 'POST',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 确认收货
+ confirmOrder: {
+ url: '/index_common/confirmOrder',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 取消订单
+ cancelOrder: {
+ url: '/index_common/cancelOrder',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 获取首页广告列表
+ getRiceProductList: {
+ url: '/index_common/getRiceAdList',
+ method: 'GET',
+ },
+ // 获取首页广告列表
+ getRiceAdDetail: {
+ url: '/index_common/getRiceAdDetail',
+ method: 'GET',
+ },
+ //获取优惠券信息
+ getRiceCouponList: {
+ url: '/info_common/getRiceCouponList',
+ method: 'GET',
+ },
+ //增加或者修改合伙人申请信息
+ addOrUpdateCommonUser: {
+ url: '/index_common/addOrUpdateCommonUser',
+ method: 'POST',
+ },
+ //根据用户查询渠合伙人申请信息表单
+ getCommonUser: {
+ url: '/index_common/getCommonUser',
+ method: 'GET'
+ },
+ //提交反馈信息
+ addFeedback: {
+ url: '/info_common/addFeedback',
+ method: 'POST'
+ },
+ // 获取我的直接推荐间接推荐用户列表带分页
+ getHanHaiMemberUser: {
+ url: '/info_common/getHanHaiMemberUser',
+ method: 'GET'
+ },
+ // 获取祝福背景图
+ getRiceBlessing: {
+ url: '/index_common/getRiceBlessing',
+ method: 'GET'
+ },
+ // 随机获取祝福语
+ getRiceBlessingWords: {
+ url: '/index_common/getRiceBlessingWords',
+ method: 'GET'
+ },
+ // 根据订单标识修改订单祝福语背景
+ updateOrderBlessing: {
+ url: '/index_common/updateOrderBlessing',
+ method: 'POST',
+ auth : true,
+ limit : 1000,
+ },
+ // 1.收礼流程 =》点击收礼
+ getGiveShop: {
+ url: '/index_common/getGiveShop',
+ method: 'GET',
+ auth : true,
+ limit : 1000,
+ },
+ // 2.点击抽奖 =》抽奖
+ getGiveShopLottery: {
+ url: '/index_common/getGiveShopLottery',
+ method: 'GET',
+ auth : true,
+ limit : 1000,
+ },
+ // 获取我的礼品订单
+ getMyGiftOrder: {
+ url: '/index_common/getMyGiftOrder',
+ method: 'GET',
+ auth : true,
+ },
+ // 获取我的礼品订单详情
+ getMyGiftOrderDetail: {
+ url: '/index_common/getMyGiftOrderDetail',
+ method: 'GET',
+ auth : true,
+ },
+}
+
+export default api
\ No newline at end of file
diff --git a/api/model/info.js b/api/model/info.js
new file mode 100644
index 0000000..a695abd
--- /dev/null
+++ b/api/model/info.js
@@ -0,0 +1,115 @@
+// 个人相关接口
+
+const api = {
+ // 充值
+ recharge: {
+ url: '/info_common/withdraw',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 提现
+ withdraw: {
+ url: '/info_common/withdraw',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ showLoading: true,
+ },
+ // 获取地址列表带分页
+ getAddressPageList: {
+ url: '/info_common/getAddressPageList',
+ method: 'GET',
+ auth: true,
+ },
+ // 增加或修改地址信息
+ addOrUpdateAddress: {
+ url: '/info_common/addOrUpdateAddress',
+ method: 'POST',
+ limit: 500,
+ auth: true,
+ showLoading: true,
+ },
+ // 删除地址
+ deleteAddress: {
+ url: '/info_common/deleteAddress',
+ method: 'GET',
+ limit: 500,
+ auth: true,
+ showLoading: true,
+ },
+ // 修改默认地址
+ updateDefaultAddress: {
+ url: '/info_common/updateDefaultAddress',
+ method: 'GET',
+ auth: true,
+ limit: 1000,
+ },
+ // 获取粉丝列表带分页
+ getFansPageList: {
+ url: '/info_common/getFansPageList',
+ method: 'GET',
+ auth: true,
+ },
+ // 获取相关介绍
+ getInfoIntroduce: {
+ url: '/info_common/getInfoIntroduce',
+ method: 'GET',
+ auth: true,
+ },
+ // 获取个人邀请码
+ getInviteCode: {
+ url: '/info_common/getInviteCode',
+ method: 'GET',
+ auth: true,
+ },
+ // 获取订单列表带分页
+ getOrderPageList: {
+ url: '/info_common/getOrderPageList',
+ method: 'GET',
+ auth: true,
+ },
+ // 获取订单详情
+ getOrderDetail: {
+ url: '/info_common/getOrderDetail',
+ method: 'GET',
+ auth: true,
+ },
+ // 获取流水记录带分页
+ getWaterPageList: {
+ url: '/info_common/getWaterPageList',
+ method: 'GET',
+ auth: true,
+ },
+ // 获取相关介绍
+ getInfoIntroduce: {
+ url: '/info_common/getInfoIntroduce',
+ method: 'GET',
+ },
+ // 获取相关介绍详情
+ getInfoIntroduceDetail: {
+ url: '/info_common/getRiceNewsDetail',
+ method: 'GET',
+ },
+ // 查询个人信息相关
+ getRiceInfo: {
+ url: '/info_common/getRiceInfo',
+ method: 'GET',
+ limit: 500,
+ },
+ // 获取购物车信息列表带分页
+ getCartPageList: {
+ url: '/info_common/getCartPageList',
+ method: 'GET',
+ },
+ // 领取新人优惠券
+ getRiceCoupon: {
+ url: '/info_common/getRiceCoupon',
+ method: 'GET',
+ limit: 500,
+ auth: true,
+ },
+}
+
+export default api
\ No newline at end of file
diff --git a/api/model/login.js b/api/model/login.js
new file mode 100644
index 0000000..c818a04
--- /dev/null
+++ b/api/model/login.js
@@ -0,0 +1,35 @@
+
+
+// 登录相关接口
+
+const api = {
+ // 微信登录接口
+ wxLogin: {
+ url: '/login_common/appletLogin',
+ method: 'GET',
+ limit : 500,
+ showLoading : true,
+ },
+ // 获取绑定手机号码
+ bindPhone: {
+ url: '/login_common/bindPhone',
+ method: 'GET',
+ auth: true,
+ },
+ // 修改个人信息接口
+ updateInfo: {
+ url: '/info_common/updateInfo',
+ method: 'POST',
+ auth: true,
+ limit : 500,
+ showLoading : true,
+ },
+ // 获取个人信息
+ getInfo: {
+ url: '/info_common/getInfo',
+ method: 'GET',
+ auth: true,
+ },
+}
+
+export default api
\ No newline at end of file
diff --git a/api/model/vip.js b/api/model/vip.js
new file mode 100644
index 0000000..c2d4b7b
--- /dev/null
+++ b/api/model/vip.js
@@ -0,0 +1,20 @@
+
+// vip相关接口
+
+const api = {
+ // 获取会员权益列表
+ getRiceVipList: {
+ url: '/index_common/getVipInfoList',
+ method: 'GET',
+ },
+ // 申请成为会员
+ applyRiceVip: {
+ url: '/rice_vip/applyRiceVip',
+ method: 'POST',
+ limit : 500,
+ auth : true,
+ showLoading : true,
+ },
+}
+
+export default api
\ No newline at end of file
diff --git a/common.scss b/common.scss
new file mode 100644
index 0000000..5fd3072
--- /dev/null
+++ b/common.scss
@@ -0,0 +1,40 @@
+
+// 文字益处处理
+.text-ellipsis{
+ overflow:hidden; //超出的文本隐藏
+ text-overflow:ellipsis; //溢出用省略号显示
+ white-space:nowrap; //溢出不换行
+}
+.text-ellipsis-2{
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display:-webkit-box; //作为弹性伸缩盒子模型显示。
+ -webkit-box-orient:vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列
+ -webkit-line-clamp:2; //显示的行
+}
+.text-ellipsis-3{
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display:-webkit-box; //作为弹性伸缩盒子模型显示。
+ -webkit-box-orient:vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列
+ -webkit-line-clamp:3; //显示的行
+}
+
+
+.share{
+ padding: 0;
+ margin: 0;
+ background-color: #fff;
+ display: flex !important;
+ flex-direction: column !important;
+ justify-content: center !important;
+ align-items: center !important;
+ font-size: 26rpx;
+}
+.share::after{
+ border: none;
+ padding: 0;
+ margin: 0;
+ width: 0;
+ height: 0;
+}
\ No newline at end of file
diff --git a/components/base/navbar.vue b/components/base/navbar.vue
new file mode 100644
index 0000000..34d6fee
--- /dev/null
+++ b/components/base/navbar.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+ {{ moreText }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/base/tabbar.vue b/components/base/tabbar.vue
new file mode 100644
index 0000000..e86c4b1
--- /dev/null
+++ b/components/base/tabbar.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/config/PrivacyAgreementPoup.vue b/components/config/PrivacyAgreementPoup.vue
new file mode 100644
index 0000000..6eda2c6
--- /dev/null
+++ b/components/config/PrivacyAgreementPoup.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/config/configPopup.vue b/components/config/configPopup.vue
new file mode 100644
index 0000000..ef2d21c
--- /dev/null
+++ b/components/config/configPopup.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/config/customerServicePopup.vue b/components/config/customerServicePopup.vue
new file mode 100644
index 0000000..4937467
--- /dev/null
+++ b/components/config/customerServicePopup.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+ 联系{{ bTitle || title }}
+ 确定拨打{{ bTitle || title }}电话?
+
+
+ 取消
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/user/productList.vue b/components/user/productList.vue
new file mode 100644
index 0000000..ad16f79
--- /dev/null
+++ b/components/user/productList.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ 桌布租赁
+
+
+ ¥58元/起
+
+
+
+ 限时优惠
+
+
+ ¥48
+
+
+
+ 已售卖5000+件
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/userShop/userShopCommission.vue b/components/userShop/userShopCommission.vue
new file mode 100644
index 0000000..be66e89
--- /dev/null
+++ b/components/userShop/userShopCommission.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+ 总佣金(元)
+
+
+ 7890.34元
+
+
+
+
+
+
+ 提现
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..4175d2b
--- /dev/null
+++ b/config.js
@@ -0,0 +1,56 @@
+
+import Vue from 'vue'
+import api from '@/api/api.js'
+import utils from './utils/utils.js'
+
+import uvUI from '@/uni_modules/uv-ui-tools'
+Vue.use(uvUI);
+
+// 当前环境
+const type = 'dev'
+
+
+// 环境配置
+const config = {
+ dev : {
+ baseUrl : 'http://www.gcosc.fun:82',
+ },
+ prod : {
+ baseUrl : 'http://xxx.xxx.xxx/xxx',
+ }
+}
+
+
+// 默认配置
+const defaultConfig = {
+ mapKey : 'XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU',
+ aliOss: {
+ url: 'https://image.hhlm1688.com/',
+ config: {
+ //桶的地址
+ region: 'oss-cn-guangzhou',
+ //id
+ accessKeyId: 'LTAI5tQSs47izVy8DLVdwUU9',
+ //密钥
+ accessKeySecret: 'qHI7C3PaXYZySr84HTToviC71AYlFq',
+ //桶的名字
+ bucket: 'hanhaiimage',
+ endpoint: 'oss-cn-shenzhen.aliyuncs.com',
+ }
+ },
+}
+
+
+uni.$uv.setConfig({
+ // 修改$uv.config对象的属性
+ config: {
+ // 修改默认单位为rpx,相当于执行 uni.$uv.config.unit = 'rpx'
+ unit: 'rpx'
+ },
+})
+
+Vue.prototype.$config = utils.deepMergeObject(defaultConfig, config[type])
+
+Vue.prototype.$api = api
+
+export default Vue.prototype.$config
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c3ff205
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..f971a7f
--- /dev/null
+++ b/main.js
@@ -0,0 +1,45 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+
+import './uni.promisify.adaptor'
+
+Vue.config.productionTip = false
+
+App.mpType = 'app'
+
+import store from '@/store/store'
+
+import './config'
+import './utils/index.js'
+
+import mixinConfigList from '@/mixins/configList.js'
+
+Vue.mixin(mixinConfigList)
+
+//组件注册
+import configPopup from '@/components/config/configPopup.vue'
+import navbar from '@/components/base/navbar.vue'
+
+Vue.component('configPopup',configPopup)
+Vue.component('navbar',navbar)
+
+const app = new Vue({
+ ...App,
+ store,
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import {
+ createSSRApp
+} from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..ea42a21
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,105 @@
+{
+ "name" : "unapp模板",
+ "appid" : "__UNI__197A38F",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {},
+ /* SDK配置 */
+ "sdkConfigs" : {
+ "maps" : {}
+ }
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "wxe7ae8cbe1673834c",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true,
+ "permission" : {
+ "scope.userLocation" : {
+ "desc" : "你的位置信息将用于小程序位置接口的效果展示"
+ },
+ "scope.userFuzzyLocation" : {
+ "desc" : "你的位置信息将用于小程序位置接口的效果展示"
+ }
+ },
+ "requiredPrivateInfos" : [ "chooseLocation", "getLocation" ]
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "2",
+ "h5" : {
+ "sdkConfigs" : {
+ "maps" : {
+ "qqmap" : {
+ "key" : "XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU"
+ }
+ }
+ },
+ "devServer" : {
+ "https" : false,
+ "proxy" : {
+ "/ws/geocoder/v1/" : {
+ "target" : "https://apis.map.qq.com",
+ "changeOrigin" : true
+ },
+ "/ws/location/v1/" : {
+ "target" : "https://apis.map.qq.com",
+ "changeOrigin" : true
+ }
+ }
+ }
+ }
+}
diff --git a/mixins/configList.js b/mixins/configList.js
new file mode 100644
index 0000000..a79666f
--- /dev/null
+++ b/mixins/configList.js
@@ -0,0 +1,47 @@
+
+
+import { mapState } from 'vuex'
+export default {
+ data() {
+ return {
+ // 默认的全局分享内容
+ Gshare: {
+ // title: '三只青蛙',
+ path: '/pages/index/index', // 全局分享的路径,比如 首页
+ // imageUrl: '/static/image/login/logo.png', // 全局分享的图片(可本地可网络)
+ }
+ }
+ },
+ computed: {
+ ...mapState(['configList', 'userInfo', 'riceInfo']),
+ },
+ // 定义全局分享
+ // 1.发送给朋友
+ onShareAppMessage(res) {
+ let o = {
+ title : this.configList.logo_name,
+ ...this.Gshare,
+ }
+ if(this.userInfo.id){
+ if(this.Gshare.path.includes('?')){
+ o.path += '&shareId=' + this.userInfo.id
+ }else{
+ o.path += '?shareId=' + this.userInfo.id
+ }
+ }
+ return o
+ },
+ //2.分享到朋友圈
+ onShareTimeline(res) {
+ let o = {
+ ...this.Gshare,
+ title : this.configList.logo_name,
+ }
+ if(this.userInfo.id){
+ o.path = this.Gshare.path + '?shareId=' + this.userInfo.id
+ }
+ return o
+ },
+ methods: {
+ }
+}
\ No newline at end of file
diff --git a/mixins/list.js b/mixins/list.js
new file mode 100644
index 0000000..23bb70e
--- /dev/null
+++ b/mixins/list.js
@@ -0,0 +1,78 @@
+/**
+ * 处理查询参数
+ * @param {Object} self - 组件实例
+ * @param {Object} queryParams - 额外的查询参数
+ * @returns {Object} 合并后的查询参数
+ */
+function query(self, queryParams){
+ // 深度合并对象
+ return self.$utils.deepMergeObject(
+ self.$utils.deepMergeObject(self.queryParams,
+ (self.beforeGetData && self.beforeGetData()) || {}),
+ queryParams)
+}
+
+/**
+ * 列表数据加载混入
+ * 提供列表数据的加载、分页、下拉刷新、上拉加载更多等功能
+ */
+export default {
+ data() {
+ return {
+ queryParams: {
+ pageNo: 1,
+ pageSize: 10,
+ },
+ total : 0,
+ list : [],
+ }
+ },
+ // 下拉刷新
+ onPullDownRefresh() {
+ this.getData()
+ },
+ // 上拉加载更多
+ onReachBottom() {
+ this.loadMoreData()
+ },
+ // 页面显示时加载数据
+ onShow() {
+ this.getData()
+ },
+ methods: {
+ /**
+ * 获取列表数据
+ * @param {Object} queryParams - 查询参数
+ * @returns {Promise} 返回Promise对象
+ */
+ getData(queryParams){
+ return new Promise((success, error) => {
+ if(!this.mixinsListApi){
+ return console.error('mixinsListApi 缺失');
+ }
+ this.$api(this.mixinsListApi,
+ query(this, queryParams), res => {
+ uni.stopPullDownRefresh()
+ if(res.code == 200){
+ success(res.result)
+ // 更新列表数据
+ this[this.mixinsListKey || 'list'] = res.result.records || res.result
+ // 更新总数
+ this.total = res.result.total || res.result.length
+ // 调用数据加载完成的回调
+ this.getDataThen && this.getDataThen(res.result.records, res.result.total, res.result)
+ }
+ })
+ })
+ },
+ /**
+ * 加载更多数据
+ */
+ loadMoreData(){
+ if(this.queryParams.pageSize < this.total){
+ this.queryParams.pageSize += 10
+ this.getData()
+ }
+ },
+ }
+}
\ No newline at end of file
diff --git a/mixins/order.js b/mixins/order.js
new file mode 100644
index 0000000..b1650dd
--- /dev/null
+++ b/mixins/order.js
@@ -0,0 +1,70 @@
+
+
+export default {
+ data() {
+ return {
+ }
+ },
+ computed: {
+ },
+ methods: {
+ // 立即支付
+ toPayOrder(item){
+ let api = ''
+
+ // if([0, 1].includes(item.shopState)){
+ // api = 'createOrderTwo'
+ // }else{
+ api = 'createSumOrderAgain'
+ // }
+
+ this.$api(api, {
+ orderId : item.id,
+ addressId : item.addressId
+ }, res => {
+ if(res.code == 200){
+ uni.requestPaymentWxPay(res)
+ .then(res => {
+ uni.showToast({
+ title: '支付成功',
+ icon: 'none'
+ })
+ this.getData()
+ }).catch(n => {
+ this.getData()
+ })
+ }
+ })
+ },
+ // 确认收货
+ confirmOrder(item){
+ uni.showModal({
+ title: '您收到货了吗?',
+ success : e => {
+ if(e.confirm){
+ this.$api('confirmOrder', {
+ orderId : item.id,
+ }, res => {
+ this.getData()
+ })
+ }
+ }
+ })
+ },
+ // 取消订单
+ cancelOrder(item){
+ uni.showModal({
+ title: '确认取消订单吗?',
+ success : e => {
+ if(e.confirm){
+ this.$api('cancelOrder', {
+ orderId : item.id,
+ }, res => {
+ this.getData()
+ })
+ }
+ }
+ })
+ },
+ }
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..136edbc
--- /dev/null
+++ b/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "uniapp-project-templates",
+ "version": "1.0.0",
+ "description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}",
+ "main": "main.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://gitee.com/huliyong/uniapp-project-templates.git"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "ali-oss": "^6.21.0",
+ "dayjs": "^1.11.12"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..11693b1
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,84 @@
+{
+ "pages": [{
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "pages/index/order",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "pages/index/category",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "pages/index/center",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "pages/index/cart",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ }
+ ],
+ "preloadRule": {
+ "pages/index/index": {
+ "network": "all",
+ "packages": ["pages_order"]
+ }
+ },
+ "subPackages": [{
+ "root": "pages_order",
+ "pages": [{
+ "path": "order/orderDetail"
+ },
+ {
+ "path": "mine/purse"
+ },
+ {
+ "path": "mine/runningWater"
+ },
+ {
+ "path": "mine/address"
+ },
+ {
+ "path": "product/productDetail"
+ },
+ {
+ "path": "order/refundsOrExchange"
+ },
+ {
+ "path": "auth/wxLogin"
+ },
+ {
+ "path": "auth/wxUserInfo"
+ },
+ {
+ "path": "auth/loginAndRegisterAndForgetPassword"
+ },
+ {
+ "path": "mine/help"
+ },
+ {
+ "path": "mine/promotion"
+ }
+ ]
+ }],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "酒店桌布",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8",
+ "navigationStyle": "custom"
+ },
+ "uniIdRouter": {}
+}
\ No newline at end of file
diff --git a/pages/index/cart.vue b/pages/index/cart.vue
new file mode 100644
index 0000000..381c5b0
--- /dev/null
+++ b/pages/index/cart.vue
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+ 规格:{{ item.unit }}
+
+
+
+ ¥{{ item.price }}元
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ checkboxValue.length }}
+
+
+
+
+ 合计
+
+ ¥{{ totalPrice }}
+
+
+
+ 共{{ checkboxValue.length }}件,已享受更低优惠
+
+
+
+ 去结算
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/category.vue b/pages/index/category.vue
new file mode 100644
index 0000000..a4a64b0
--- /dev/null
+++ b/pages/index/category.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+ 租赁
+
+
+
+
+
+
+
+ {{item.unit}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/center.vue b/pages/index/center.vue
new file mode 100644
index 0000000..4d30c46
--- /dev/null
+++ b/pages/index/center.vue
@@ -0,0 +1,353 @@
+
+
+
+
+
+
+
+
+
+
+
+ 倾心.
+
+
+
+ 今天是您来的的第32天
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我的用户
+
+
+
+
+ 客户:王生
+
+
+ 剩余水洗布:198
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 余额¥3000
+
+
+
+
+
+
+
+ 押金¥30000
+
+
+
+
+
+ 常用功能
+
+
+
+
+
+ 地址管理
+
+
+
+
+ 订单管理
+
+
+
+
+ 换货
+
+
+
+
+ 退货
+
+
+
+
+
+
+
+
+ 联系客服
+
+
+
+
+ 我的租赁
+
+
+
+
+ 租赁车
+
+
+
+
+ 申请成为水洗店
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..65effe5
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,412 @@
+
+
+
+
+
+
+
+
+
+ {{ area }}
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我的客户
+
+
+ {{ 30 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HOUS水洗店
+
+
+
+ 桌布水洗
+
+
+ 桌布租赁
+
+
+
+ 9:00-18:00
+
+
+ 长沙市天心区桂花坪街道231号
+
+
+
+
+ 我要水洗
+
+
+
+
+ 关联门店:主信门店
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/order.vue b/pages/index/order.vue
new file mode 100644
index 0000000..24bdbb6
--- /dev/null
+++ b/pages/index/order.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.projectId_dictText}}
+ {{item.type_dictText}}
+
+
+ {{item.state_dictText}}
+
+
+
+
+
+
+
+
+
+
+
+ 客户姓名:{{item.name}}
+
+
+ 产品规格:{{item.unit}}
+
+
+ 租赁地址:{{item.address}}
+
+
+
+
+
+
+
+
+
+ 总价格:{{item.money}}元
+
+
+ 查看物流
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/auth/loginAndRegisterAndForgetPassword.vue b/pages_order/auth/loginAndRegisterAndForgetPassword.vue
new file mode 100644
index 0000000..7de7898
--- /dev/null
+++ b/pages_order/auth/loginAndRegisterAndForgetPassword.vue
@@ -0,0 +1,514 @@
+
+
+
+
+
+
+
+
+
+ {{titleList[titleIndex]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{tips}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请你阅读并同意我们的《隐私条款》和《服务协议》
+
+
+
+
+
+
+
+
+
+
+ {{titleList[titleIndex]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请你阅读并同意我们的《隐私条款》和《服务协议》
+
+
+
+
+
+
+
+
+
+
+
+
+ {{titleList[titleIndex]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{tips}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注册账号
+ |
+ 账号登录
+ |
+ 忘记密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/auth/wxLogin.vue b/pages_order/auth/wxLogin.vue
new file mode 100644
index 0000000..292f9d1
--- /dev/null
+++ b/pages_order/auth/wxLogin.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+ 欢迎使用酒店桌布租赁平台
+
+
+
+
+
+
+ 微信授权登录
+
+
+
+
+ 取消登录
+
+
+
+
+
+
+
+
+
+
+ 阅读并同意我们的“服务协议与隐私条款”
+
+
+ 以及个人信息保护指引
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/auth/wxUserInfo.vue b/pages_order/auth/wxUserInfo.vue
new file mode 100644
index 0000000..50c988f
--- /dev/null
+++ b/pages_order/auth/wxUserInfo.vue
@@ -0,0 +1,133 @@
+
+
+
+ 酒店桌布租赁平台
+
+
+ 申请获取你的头像、昵称
+
+
+
+
+
+ 昵称
+
+
+
+
+
+
+ 确认
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/components/address/addressList.vue b/pages_order/components/address/addressList.vue
new file mode 100644
index 0000000..b75730b
--- /dev/null
+++ b/pages_order/components/address/addressList.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.phone }}
+ 默认
+
+
+
+ {{ item.address + " " + item.addressDetail }}
+
+
+
+
+
+
+
+
+ 默认地址
+
+
+
+
+
+ 编辑
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/components/address/redactAddress.vue b/pages_order/components/address/redactAddress.vue
new file mode 100644
index 0000000..e11d971
--- /dev/null
+++ b/pages_order/components/address/redactAddress.vue
@@ -0,0 +1,220 @@
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 定位
+
+
+
+
+
+
+
+
+
+
+ {{ addressDetail.id ? '修改地址' : '新增地址'}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/components/product/submit.vue b/pages_order/components/product/submit.vue
new file mode 100644
index 0000000..e874e59
--- /dev/null
+++ b/pages_order/components/product/submit.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+ 分享
+
+
+
+
+
+ 购物车
+
+
+
+ {{ submiitTitle }}
+
+
+
+
+
+
+
diff --git a/pages_order/components/product/submitUnitSelect.vue b/pages_order/components/product/submitUnitSelect.vue
new file mode 100644
index 0000000..8d228a5
--- /dev/null
+++ b/pages_order/components/product/submitUnitSelect.vue
@@ -0,0 +1,367 @@
+
+
+
+
+
+
+
+
+ {{ address.name }}
+
+
+ {{ address.addressDetail }}
+
+
+
+
+
+
+
+
+
+ 桌布租赁
+
+
+
+
+
+
+ ¥{{ unit.depositPrice }}元
+
+
+ 请选择规格
+
+
+
+
+
+
+
+
+
+
+
+ 规格选择
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+ 费用明细
+
+
+ 押金:¥{{ unit.depositPrice }}
+
+
+
+
+
+
+ 加入租赁车
+
+
+ {{ submiitTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/mine/address.vue b/pages_order/mine/address.vue
new file mode 100644
index 0000000..65f82d7
--- /dev/null
+++ b/pages_order/mine/address.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增地址
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/mine/help.vue b/pages_order/mine/help.vue
new file mode 100644
index 0000000..23dc94a
--- /dev/null
+++ b/pages_order/mine/help.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+ 问题和意见
+ *
+
+
+
+
+
+
+ 问题截图
+
+
+
+
+
+
+
+
+
+
+
+
+ 联系方式
+ *
+
+
+
+ 联系姓名
+
+
+
+
+
+ 联系电话
+
+
+
+
+
+
+ 确认
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/mine/promotion.vue b/pages_order/mine/promotion.vue
new file mode 100644
index 0000000..53cf18a
--- /dev/null
+++ b/pages_order/mine/promotion.vue
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/mine/purse.vue b/pages_order/mine/purse.vue
new file mode 100644
index 0000000..fe7dd19
--- /dev/null
+++ b/pages_order/mine/purse.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+ 我要提现
+
+
+
+
+
+
+
+
+
+
+
+
+ 提现说明
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/mine/runningWater.vue b/pages_order/mine/runningWater.vue
new file mode 100644
index 0000000..a14a621
--- /dev/null
+++ b/pages_order/mine/runningWater.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/order/orderDetail.vue b/pages_order/order/orderDetail.vue
new file mode 100644
index 0000000..8ca27b7
--- /dev/null
+++ b/pages_order/order/orderDetail.vue
@@ -0,0 +1,567 @@
+
+
+
+
+
+
+
+
+
+ 服务完成
+
+
+ 待送回
+
+
+
+ 快递寄回
+
+
+ 线下配送
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 服务项目
+
+
+
+
+
+
+
+
+
+
+
+
+ {{msgOrder.projectName}}
+
+
+
+
+ ¥{{msgOrder.money}}
+
+
+
+ 规格:{{msgOrder.unit}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{msgOrder.name}} {{msgOrder.phone}}
+ {{msgOrder.address}}
+
+
+
+
+
+
+
+ 实付款
+
+
+ ¥{{ msgOrder.money }}
+
+
+
+
+ 租赁费用
+
+
+ ¥{{ msgOrder.price }}
+
+
+
+
+ 水洗费用
+
+
+ ¥{{ msgOrder.price}}
+
+
+
+
+ 押金
+
+
+ ¥{{ msgOrder.price }}
+
+
+
+
+
+
+
+
+ 订单信息
+
+
+
+
+ 订单编号
+
+
+ {{msgOrder.id}}
+
+
+
+
+ 下单时间
+
+
+ {{msgOrder.createTime}}
+
+
+
+
+
+
+
+
+
+ 下单须知
+
+
+
+ {{msgShop.projectExplain}}
+
+
+
+ 联系客服
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/order/refundsOrExchange.vue b/pages_order/order/refundsOrExchange.vue
new file mode 100644
index 0000000..9ea20e6
--- /dev/null
+++ b/pages_order/order/refundsOrExchange.vue
@@ -0,0 +1,353 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ commodity.title }}
+ {{ commodity.smallTitle }}
+
+ ×{{ commodity.total }}
+
+
+
+
+
+
+
+
+ 申请类型
+ 退货退款
+
+
+
+ 申请原因
+
+
+
+
+
+
+
+
+
+ {{ titleIndex == 0 ? '退货数量' : '换货数量' }}
+
+
+
+
+
+
+ 申请原因
+
+
+
+
+
+
+
+
+ 申请说明(选填)
+
+
+
+
+
+
+
+
+
+
+
+
+ 联系电话
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_order/product/productDetail.vue b/pages_order/product/productDetail.vue
new file mode 100644
index 0000000..43d797e
--- /dev/null
+++ b/pages_order/product/productDetail.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+ 桌布租赁
+
+
+
+ ¥45.9起
+
+
+ 已售1000+
+
+
+
+
+
+ 专业设备
+
+
+ 科学流程
+
+
+ 质量保证
+
+
+
+
+
+
+
+ 桌布
+
+
+
+
+
+ 规格
+
+
+
+
+
+ 上门取件·送货上门
+
+
+
+
+
+
+ 商品详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages_order/static/address/icon.png b/pages_order/static/address/icon.png
new file mode 100644
index 0000000..6395501
Binary files /dev/null and b/pages_order/static/address/icon.png differ
diff --git a/pages_order/static/address/selectIcon.png b/pages_order/static/address/selectIcon.png
new file mode 100644
index 0000000..1251474
Binary files /dev/null and b/pages_order/static/address/selectIcon.png differ
diff --git a/pages_order/static/auth/headImage.png b/pages_order/static/auth/headImage.png
new file mode 100644
index 0000000..7d9bdd0
Binary files /dev/null and b/pages_order/static/auth/headImage.png differ
diff --git a/pages_order/static/auth/wx.png b/pages_order/static/auth/wx.png
new file mode 100644
index 0000000..38858c0
Binary files /dev/null and b/pages_order/static/auth/wx.png differ
diff --git a/pages_order/static/help/uploading.png b/pages_order/static/help/uploading.png
new file mode 100644
index 0000000..d558b9e
Binary files /dev/null and b/pages_order/static/help/uploading.png differ
diff --git a/pages_order/static/order/icon.png b/pages_order/static/order/icon.png
new file mode 100644
index 0000000..a8deeda
Binary files /dev/null and b/pages_order/static/order/icon.png differ
diff --git a/pages_order/static/product/like.png b/pages_order/static/product/like.png
new file mode 100644
index 0000000..fecdaef
Binary files /dev/null and b/pages_order/static/product/like.png differ
diff --git a/static/image/PrivacyAgreementPoup/icon.png b/static/image/PrivacyAgreementPoup/icon.png
new file mode 100644
index 0000000..5592c61
Binary files /dev/null and b/static/image/PrivacyAgreementPoup/icon.png differ
diff --git a/static/image/cart/1.png b/static/image/cart/1.png
new file mode 100644
index 0000000..9807f34
Binary files /dev/null and b/static/image/cart/1.png differ
diff --git a/static/image/cart/2.png b/static/image/cart/2.png
new file mode 100644
index 0000000..64b1c45
Binary files /dev/null and b/static/image/cart/2.png differ
diff --git a/static/image/center/1.png b/static/image/center/1.png
new file mode 100644
index 0000000..264e553
Binary files /dev/null and b/static/image/center/1.png differ
diff --git a/static/image/center/10.png b/static/image/center/10.png
new file mode 100644
index 0000000..151633f
Binary files /dev/null and b/static/image/center/10.png differ
diff --git a/static/image/center/11.svg b/static/image/center/11.svg
new file mode 100644
index 0000000..99950a8
--- /dev/null
+++ b/static/image/center/11.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/image/center/2.png b/static/image/center/2.png
new file mode 100644
index 0000000..5e0bedc
Binary files /dev/null and b/static/image/center/2.png differ
diff --git a/static/image/center/3.png b/static/image/center/3.png
new file mode 100644
index 0000000..8b521ac
Binary files /dev/null and b/static/image/center/3.png differ
diff --git a/static/image/center/4.png b/static/image/center/4.png
new file mode 100644
index 0000000..5ad41ea
Binary files /dev/null and b/static/image/center/4.png differ
diff --git a/static/image/center/5.png b/static/image/center/5.png
new file mode 100644
index 0000000..4f4a8ac
Binary files /dev/null and b/static/image/center/5.png differ
diff --git a/static/image/center/6.png b/static/image/center/6.png
new file mode 100644
index 0000000..9208b06
Binary files /dev/null and b/static/image/center/6.png differ
diff --git a/static/image/center/7.png b/static/image/center/7.png
new file mode 100644
index 0000000..ea1a427
Binary files /dev/null and b/static/image/center/7.png differ
diff --git a/static/image/center/8.png b/static/image/center/8.png
new file mode 100644
index 0000000..856616c
Binary files /dev/null and b/static/image/center/8.png differ
diff --git a/static/image/center/9.png b/static/image/center/9.png
new file mode 100644
index 0000000..5a4b2bd
Binary files /dev/null and b/static/image/center/9.png differ
diff --git a/static/image/home/0.png b/static/image/home/0.png
new file mode 100644
index 0000000..e221211
Binary files /dev/null and b/static/image/home/0.png differ
diff --git a/static/image/home/1.png b/static/image/home/1.png
new file mode 100644
index 0000000..0b7d3dc
Binary files /dev/null and b/static/image/home/1.png differ
diff --git a/static/image/home/2.png b/static/image/home/2.png
new file mode 100644
index 0000000..8ba997f
Binary files /dev/null and b/static/image/home/2.png differ
diff --git a/static/image/home/3.png b/static/image/home/3.png
new file mode 100644
index 0000000..a7f85f3
Binary files /dev/null and b/static/image/home/3.png differ
diff --git a/static/image/home/address-icon.png b/static/image/home/address-icon.png
new file mode 100644
index 0000000..51a11d2
Binary files /dev/null and b/static/image/home/address-icon.png differ
diff --git a/static/image/home/arrow-icon.png b/static/image/home/arrow-icon.png
new file mode 100644
index 0000000..9f3431a
Binary files /dev/null and b/static/image/home/arrow-icon.png differ
diff --git a/static/image/home/search-icon.png b/static/image/home/search-icon.png
new file mode 100644
index 0000000..58bde8a
Binary files /dev/null and b/static/image/home/search-icon.png differ
diff --git a/static/image/product/favorable.png b/static/image/product/favorable.png
new file mode 100644
index 0000000..edae056
Binary files /dev/null and b/static/image/product/favorable.png differ
diff --git a/static/image/tabbar/cart-a.png b/static/image/tabbar/cart-a.png
new file mode 100644
index 0000000..b48261c
Binary files /dev/null and b/static/image/tabbar/cart-a.png differ
diff --git a/static/image/tabbar/cart.png b/static/image/tabbar/cart.png
new file mode 100644
index 0000000..d211ea1
Binary files /dev/null and b/static/image/tabbar/cart.png differ
diff --git a/static/image/tabbar/category-a.png b/static/image/tabbar/category-a.png
new file mode 100644
index 0000000..6dd7bc6
Binary files /dev/null and b/static/image/tabbar/category-a.png differ
diff --git a/static/image/tabbar/category.png b/static/image/tabbar/category.png
new file mode 100644
index 0000000..f667e88
Binary files /dev/null and b/static/image/tabbar/category.png differ
diff --git a/static/image/tabbar/center-a.png b/static/image/tabbar/center-a.png
new file mode 100644
index 0000000..61df5ef
Binary files /dev/null and b/static/image/tabbar/center-a.png differ
diff --git a/static/image/tabbar/center.png b/static/image/tabbar/center.png
new file mode 100644
index 0000000..74f685c
Binary files /dev/null and b/static/image/tabbar/center.png differ
diff --git a/static/image/tabbar/home-a.png b/static/image/tabbar/home-a.png
new file mode 100644
index 0000000..5388253
Binary files /dev/null and b/static/image/tabbar/home-a.png differ
diff --git a/static/image/tabbar/home.png b/static/image/tabbar/home.png
new file mode 100644
index 0000000..6f7accb
Binary files /dev/null and b/static/image/tabbar/home.png differ
diff --git a/static/image/tabbar/order-a.png b/static/image/tabbar/order-a.png
new file mode 100644
index 0000000..6192093
Binary files /dev/null and b/static/image/tabbar/order-a.png differ
diff --git a/static/image/tabbar/order.png b/static/image/tabbar/order.png
new file mode 100644
index 0000000..df9eeb8
Binary files /dev/null and b/static/image/tabbar/order.png differ
diff --git a/static/logo.png b/static/logo.png
new file mode 100644
index 0000000..b5771e2
Binary files /dev/null and b/static/logo.png differ
diff --git a/store/store.js b/store/store.js
new file mode 100644
index 0000000..3b6d27d
--- /dev/null
+++ b/store/store.js
@@ -0,0 +1,110 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex); //vue的插件机制
+
+import api from '@/api/api.js'
+
+//Vuex.Store 构造器选项
+const store = new Vuex.Store({
+ state: {
+ configList: {}, //配置列表
+ shop : false,//身份判断如果不需要,可以删除
+ userInfo : {}, //用户信息
+ },
+ getters: {
+ // 角色 true为水洗店 false为酒店 : 身份判断如果不需要,可以删除
+ userShop(state){
+ return state.shop
+ }
+ },
+ mutations: {
+ // 初始化配置
+ initConfig(state){
+ api('getConfig', res => {
+ const configList = {
+ ...state.configList,
+ }
+ if (res.code == 200) {
+ res.result.forEach(n => {
+ configList[n.keyName] = n.keyContent;
+ configList[n.keyName + '_keyValue'] = n.keyValue;
+ });
+ }
+ state.configList = configList
+ uni.$emit('initConfig', state.configList)
+ })
+
+ // let config = ['getPrivacyPolicy', 'getUserAgreement']
+ // config.forEach(k => {
+ // api(k, res => {
+ // if (res.code == 200) {
+ // state.configList[k] = res.result
+ // }
+ // })
+ // })
+ },
+ // 微信登录
+ login(state){
+ uni.showLoading({
+ title: '登录中...'
+ })
+ uni.login({
+ success(res) {
+ if(res.errMsg != "login:ok"){
+ return
+ }
+
+ api('wxLogin', {
+ code : res.code
+ }, res => {
+
+ uni.hideLoading()
+
+ if(res.code != 200){
+ return
+ }
+
+ state.userInfo = res.result.userInfo
+ uni.setStorageSync('token', res.result.token)
+
+ if(!state.userInfo.nickName || !state.userInfo.headImage){
+ uni.navigateTo({
+ url: '/pages_order/auth/wxUserInfo'
+ })
+ }else{
+ uni.navigateBack(-1)
+ }
+ })
+ }
+ })
+ },
+ // 获取用户个人信息
+ getUserInfo(state){
+ api('getInfo', res => {
+ if(res.code == 200){
+ state.userInfo = res.result
+ }
+ })
+ },
+ // 退出登录
+ logout(state){
+ uni.showModal({
+ title: '确认退出登录吗',
+ success(r) {
+ if(r.confirm){
+ state.userInfo = {}
+ state.role = false
+ uni.removeStorageSync('token')
+ uni.reLaunch({
+ url: '/pages/index/index'
+ })
+ }
+ }
+ })
+ },
+ },
+ actions: {},
+})
+
+export default store
\ No newline at end of file
diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js
new file mode 100644
index 0000000..47fbce1
--- /dev/null
+++ b/uni.promisify.adaptor.js
@@ -0,0 +1,10 @@
+uni.addInterceptor({
+ returnValue (res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
+ });
+ },
+});
\ No newline at end of file
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..5dcc31f
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,96 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+$uni-color: #FD5100;
+
+/* 行为相关颜色 */
+$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;
+
+
+.uni-color-btn{
+ border-radius: 40rpx;
+ padding: 20rpx;
+ margin: 40rpx;
+ background: $uni-color;
+ color: #fff;
+ text-align: center;
+ font-size: 28rpx;
+}
+.uni-uncolor-btn{
+ border-radius: 40rpx;
+ padding: 20rpx;
+ margin: 40rpx;
+ border: 1px solid $uni-color;
+ color: $uni-color;
+ text-align: center;
+ font-size: 28rpx;
+}
\ No newline at end of file
diff --git a/uni_modules/uv-action-sheet/changelog.md b/uni_modules/uv-action-sheet/changelog.md
new file mode 100644
index 0000000..ab3545e
--- /dev/null
+++ b/uni_modules/uv-action-sheet/changelog.md
@@ -0,0 +1,7 @@
+## 1.0.2(2023-07-02)
+uv-action-sheet 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/actionSheet.html
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-action-sheet 底部操作菜单
diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js
new file mode 100644
index 0000000..8adffee
--- /dev/null
+++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js
@@ -0,0 +1,50 @@
+export default {
+ props: {
+ // 标题,有值则显示,同时会显示关闭按钮
+ title: {
+ type: String,
+ default: ''
+ },
+ // 选项上方的描述信息
+ description: {
+ type: String,
+ default: ''
+ },
+ // 数据
+ actions: {
+ type: Array,
+ default: () => []
+ },
+ // 取消按钮的文字,不为空时显示按钮
+ cancelText: {
+ type: String,
+ default: ''
+ },
+ // 点击某个菜单项时是否关闭弹窗
+ closeOnClickAction: {
+ type: Boolean,
+ default: true
+ },
+ // 处理底部安全区(默认true)
+ safeAreaInsetBottom: {
+ type: Boolean,
+ default: true
+ },
+ // 小程序的打开方式
+ openType: {
+ type: String,
+ default: ''
+ },
+ // 点击遮罩是否允许关闭 (默认true)
+ closeOnClickOverlay: {
+ type: Boolean,
+ default: true
+ },
+ // 圆角值
+ round: {
+ type: [Boolean, String, Number],
+ default: 0
+ },
+ ...uni.$uv?.props?.actionSheet
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue
new file mode 100644
index 0000000..edca089
--- /dev/null
+++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+ {{description}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{cancelText}}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uv-action-sheet/package.json b/uni_modules/uv-action-sheet/package.json
new file mode 100644
index 0000000..e7b6173
--- /dev/null
+++ b/uni_modules/uv-action-sheet/package.json
@@ -0,0 +1,92 @@
+{
+ "id": "uv-action-sheet",
+ "displayName": "uv-action-sheet 底部操作菜单 全面兼容小程序、nvue、vue2、vue3等多端",
+ "version": "1.0.2",
+ "description": "该组件用于从底部弹出一个操作菜单,供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。",
+ "keywords": [
+ "action-sheet",
+ "uvui",
+ "uv-ui",
+ "操作菜单",
+ "菜单选择"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools",
+ "uv-popup",
+ "uv-icon",
+ "uv-line",
+ "uv-loading-icon",
+ "uv-gap"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-action-sheet/readme.md b/uni_modules/uv-action-sheet/readme.md
new file mode 100644
index 0000000..9ea5487
--- /dev/null
+++ b/uni_modules/uv-action-sheet/readme.md
@@ -0,0 +1,13 @@
+## ActionSheet 操作菜单
+
+> **组件名:uv-action-sheet**
+
+本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。
+
+本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。
+
+### 查看文档
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群
diff --git a/uni_modules/uv-album/changelog.md b/uni_modules/uv-album/changelog.md
new file mode 100644
index 0000000..42ab5e2
--- /dev/null
+++ b/uni_modules/uv-album/changelog.md
@@ -0,0 +1,10 @@
+## 1.0.4(2023-12-06)
+1. 阻止事件冒泡处理
+## 1.0.3(2023-10-23)
+1. 修复报错的BUG
+## 1.0.2(2023-10-23)
+1. 修复设置singleSize、multipleSize、space等值带单位,存在不显示的BUG
+## 1.0.1(2023-09-13)
+1. 添加依赖
+## 1.0.0(2023-08-30)
+1. 新增uv-album相册组件
diff --git a/uni_modules/uv-album/components/uv-album/uv-album.vue b/uni_modules/uv-album/components/uv-album/uv-album.vue
new file mode 100644
index 0000000..835d792
--- /dev/null
+++ b/uni_modules/uv-album/components/uv-album/uv-album.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uv-album/package.json b/uni_modules/uv-album/package.json
new file mode 100644
index 0000000..700602f
--- /dev/null
+++ b/uni_modules/uv-album/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uv-album",
+ "displayName": "uv-album 相册 全面兼容vue3+2、app、h5、小程序等多端",
+ "version": "1.0.4",
+ "description": "本组件提供一个类似相册的功能,让开发者开发起来更加得心应手,功能齐全,灵活配置可以,开箱即用。减少重复的模板代码",
+ "keywords": [
+ "album",
+ "uv-ui",
+ "uvui",
+ "相册",
+ "图片"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools",
+ "uv-text"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-album/readme.md b/uni_modules/uv-album/readme.md
new file mode 100644
index 0000000..edd2f0b
--- /dev/null
+++ b/uni_modules/uv-album/readme.md
@@ -0,0 +1,21 @@
+# Album 相册
+
+> **组件名:uv-album**
+
+本组件提供一个类似相册的功能,让开发者开发起来更加得心应手。
+
+功能齐全,灵活配置可以,开箱即用。减少重复的模板代码。
+
+# 查看文档
+
+## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP)
+
+### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+
+
+
+
+
+
+#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群
\ No newline at end of file
diff --git a/uni_modules/uv-alert/changelog.md b/uni_modules/uv-alert/changelog.md
new file mode 100644
index 0000000..71cca03
--- /dev/null
+++ b/uni_modules/uv-alert/changelog.md
@@ -0,0 +1,7 @@
+## 1.0.2(2023-06-01)
+1. 修复点击触发两次实践的BUG
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-alert 警告提示组件
diff --git a/uni_modules/uv-alert/components/uv-alert/props.js b/uni_modules/uv-alert/components/uv-alert/props.js
new file mode 100644
index 0000000..cc8edc1
--- /dev/null
+++ b/uni_modules/uv-alert/components/uv-alert/props.js
@@ -0,0 +1,45 @@
+export default {
+ props: {
+ // 显示文字
+ title: {
+ type: String,
+ default: ''
+ },
+ // 主题,success/warning/info/error
+ type: {
+ type: String,
+ default: 'warning'
+ },
+ // 辅助性文字
+ description: {
+ type: String,
+ default: ''
+ },
+ // 是否可关闭
+ closable: {
+ type: Boolean,
+ default: false
+ },
+ // 是否显示图标
+ showIcon: {
+ type: Boolean,
+ default: false
+ },
+ // 浅或深色调,light-浅色,dark-深色
+ effect: {
+ type: String,
+ default: 'light'
+ },
+ // 文字是否居中
+ center: {
+ type: Boolean,
+ default: false
+ },
+ // 字体大小
+ fontSize: {
+ type: [String, Number],
+ default: 14
+ },
+ ...uni.$uv?.props?.alert
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-alert/components/uv-alert/uv-alert.vue b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue
new file mode 100644
index 0000000..ba3965e
--- /dev/null
+++ b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+ {{ title }}
+ {{ description }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uv-alert/package.json b/uni_modules/uv-alert/package.json
new file mode 100644
index 0000000..34bec20
--- /dev/null
+++ b/uni_modules/uv-alert/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uv-alert",
+ "displayName": "uv-alert 警告提示 全面兼容小程序、nvue、vue2、vue3等多端",
+ "version": "1.0.2",
+ "description": "uv-alert 警告提示,展现需要关注的信息。灵活配置,功能齐全,兼容全端",
+ "keywords": [
+ "alert",
+ "uvui",
+ "uv-ui",
+ "警告提示"
+ ],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools",
+ "uv-transition",
+ "uv-icon"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-alert/readme.md b/uni_modules/uv-alert/readme.md
new file mode 100644
index 0000000..63dda76
--- /dev/null
+++ b/uni_modules/uv-alert/readme.md
@@ -0,0 +1,15 @@
+## Alert 警告提示
+
+> **组件名:uv-alert**
+
+警告提示,展现需要关注的信息。
+
+当某个页面需要向用户显示警告的信息时。
+
+非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。
+
+### 查看文档
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群
diff --git a/uni_modules/uv-avatar/changelog.md b/uni_modules/uv-avatar/changelog.md
new file mode 100644
index 0000000..8631c86
--- /dev/null
+++ b/uni_modules/uv-avatar/changelog.md
@@ -0,0 +1,13 @@
+## 1.0.5(2023-12-06)
+1. 优化
+## 1.0.4(2023-12-06)
+1. 优化
+## 1.0.3(2023-12-06)
+1. 阻止事件冒泡处理,单个头像模式
+## 1.0.2(2023-12-06)
+1. 阻止事件冒泡处理
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-avatar 头像组件
diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/props.js b/uni_modules/uv-avatar/components/uv-avatar-group/props.js
new file mode 100644
index 0000000..a610ab4
--- /dev/null
+++ b/uni_modules/uv-avatar/components/uv-avatar-group/props.js
@@ -0,0 +1,53 @@
+export default {
+ props: {
+ // 头像图片组
+ urls: {
+ type: Array,
+ default: () => []
+ },
+ // 最多展示的头像数量
+ maxCount: {
+ type: [String, Number],
+ default: 5
+ },
+ // 头像形状
+ shape: {
+ type: String,
+ default: 'circle'
+ },
+ // 图片裁剪模式
+ mode: {
+ type: String,
+ default: 'scaleToFill'
+ },
+ // 超出maxCount时是否显示查看更多的提示
+ showMore: {
+ type: Boolean,
+ default: true
+ },
+ // 头像大小
+ size: {
+ type: [String, Number],
+ default: 40
+ },
+ // 指定从数组的对象元素中读取哪个属性作为图片地址
+ keyName: {
+ type: String,
+ default: ''
+ },
+ // 头像之间的遮挡比例
+ gap: {
+ type: [String, Number],
+ validator(value) {
+ return value >= 0 && value <= 1
+ },
+ default: 0.5
+ },
+ // 需额外显示的值
+ extraValue: {
+ type: [Number, String],
+ default: 0
+ },
+ ...uni.$uv?.props?.avatarGroup
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue
new file mode 100644
index 0000000..59481f6
--- /dev/null
+++ b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uv-avatar/components/uv-avatar/props.js b/uni_modules/uv-avatar/components/uv-avatar/props.js
new file mode 100644
index 0000000..6c8d725
--- /dev/null
+++ b/uni_modules/uv-avatar/components/uv-avatar/props.js
@@ -0,0 +1,80 @@
+import { range } from '@/uni_modules/uv-ui-tools/libs/function/test.js'
+export default {
+ props: {
+ // 头像图片路径(不能为相对路径)
+ src: {
+ type: String,
+ default: ''
+ },
+ // 头像形状,circle-圆形,square-方形
+ shape: {
+ type: String,
+ default: 'circle'
+ },
+ // 头像尺寸
+ size: {
+ type: [String, Number],
+ default: 40
+ },
+ // 裁剪模式
+ mode: {
+ type: String,
+ default: 'scaleToFill'
+ },
+ // 显示的文字
+ text: {
+ type: String,
+ default: ''
+ },
+ // 背景色
+ bgColor: {
+ type: String,
+ default: '#c0c4cc'
+ },
+ // 文字颜色
+ color: {
+ type: String,
+ default: '#fff'
+ },
+ // 文字大小
+ fontSize: {
+ type: [String, Number],
+ default: 18
+ },
+ // 显示的图标
+ icon: {
+ type: String,
+ default: ''
+ },
+ // 显示小程序头像,只对百度,微信,QQ小程序有效
+ mpAvatar: {
+ type: Boolean,
+ default: false
+ },
+ // 是否使用随机背景色
+ randomBgColor: {
+ type: Boolean,
+ default: false
+ },
+ // 加载失败的默认头像(组件有内置默认图片)
+ defaultUrl: {
+ type: String,
+ default: ''
+ },
+ // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
+ colorIndex: {
+ type: [String, Number],
+ // 校验参数规则,索引在0-19之间
+ validator(n) {
+ return range(n, [0, 19]) || n === ''
+ },
+ default: ''
+ },
+ // 组件标识符
+ name: {
+ type: String,
+ default: ''
+ },
+ ...uni.$uv?.props?.avatar
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue
new file mode 100644
index 0000000..0959d6a
--- /dev/null
+++ b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uv-avatar/package.json b/uni_modules/uv-avatar/package.json
new file mode 100644
index 0000000..e77ab68
--- /dev/null
+++ b/uni_modules/uv-avatar/package.json
@@ -0,0 +1,89 @@
+{
+ "id": "uv-avatar",
+ "displayName": "uv-avatar 头像 全面兼容小程序、nvue、vue2、vue3等多端",
+ "version": "1.0.5",
+ "description": "uv-avatar 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。",
+ "keywords": [
+ "uv-avatar",
+ "uvui",
+ "uv-ui",
+ "avatar",
+ "头像"
+ ],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools",
+ "uv-icon",
+ "uv-text"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-avatar/readme.md b/uni_modules/uv-avatar/readme.md
new file mode 100644
index 0000000..1f068eb
--- /dev/null
+++ b/uni_modules/uv-avatar/readme.md
@@ -0,0 +1,11 @@
+## Avatar 头像
+
+> **组件名:uv-avatar**
+
+本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。
+
+### 查看文档
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群
diff --git a/uni_modules/uv-back-top/changelog.md b/uni_modules/uv-back-top/changelog.md
new file mode 100644
index 0000000..9772262
--- /dev/null
+++ b/uni_modules/uv-back-top/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.2(2023-07-03)
+1. 优化插槽自定义内容部分
+2. 增加backToTop方法说明
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-back-top 返回顶部
diff --git a/uni_modules/uv-back-top/components/uv-back-top/props.js b/uni_modules/uv-back-top/components/uv-back-top/props.js
new file mode 100644
index 0000000..74daff4
--- /dev/null
+++ b/uni_modules/uv-back-top/components/uv-back-top/props.js
@@ -0,0 +1,58 @@
+export default {
+ props: {
+ // 返回顶部的形状,circle-圆形,square-方形
+ mode: {
+ type: String,
+ default: 'circle'
+ },
+ // 自定义图标
+ icon: {
+ type: String,
+ default: 'arrow-upward'
+ },
+ // 提示文字
+ text: {
+ type: String,
+ default: ''
+ },
+ // 返回顶部滚动时间
+ duration: {
+ type: [String, Number],
+ default: 100
+ },
+ // 滚动距离
+ scrollTop: {
+ type: [String, Number],
+ default: 0
+ },
+ // 距离顶部多少距离显示,单位px
+ top: {
+ type: [String, Number],
+ default: 400
+ },
+ // 返回顶部按钮到底部的距离,单位px
+ bottom: {
+ type: [String, Number],
+ default: 100
+ },
+ // 返回顶部按钮到右边的距离,单位px
+ right: {
+ type: [String, Number],
+ default: 20
+ },
+ // 层级
+ zIndex: {
+ type: [String, Number],
+ default: 9
+ },
+ // 图标的样式,对象形式
+ iconStyle: {
+ type: Object,
+ default: () => ({
+ color: '#909399',
+ fontSize: '19px'
+ })
+ },
+ ...uni.$uv?.props?.backtop
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue
new file mode 100644
index 0000000..fad73d4
--- /dev/null
+++ b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+ {{text}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uv-back-top/package.json b/uni_modules/uv-back-top/package.json
new file mode 100644
index 0000000..a2035a5
--- /dev/null
+++ b/uni_modules/uv-back-top/package.json
@@ -0,0 +1,89 @@
+{
+ "id": "uv-back-top",
+ "displayName": "uv-back-top 返回顶部 全面兼容小程序、nvue、vue2、vue3等多端",
+ "version": "1.0.2",
+ "description": "返回顶部 组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。",
+ "keywords": [
+ "uv-back-top",
+ "uvui",
+ "uv-ui",
+ "avatar",
+ "返回顶部"
+ ],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools",
+ "uv-icon",
+ "uv-transition"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-back-top/readme.md b/uni_modules/uv-back-top/readme.md
new file mode 100644
index 0000000..d6a2aec
--- /dev/null
+++ b/uni_modules/uv-back-top/readme.md
@@ -0,0 +1,11 @@
+## BackTop 返回顶部
+
+> **组件名:uv-back-top**
+
+该组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。
+
+### 查看文档
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群
diff --git a/uni_modules/uv-badge/changelog.md b/uni_modules/uv-badge/changelog.md
new file mode 100644
index 0000000..b0ba104
--- /dev/null
+++ b/uni_modules/uv-badge/changelog.md
@@ -0,0 +1,7 @@
+## 1.0.2(2023-06-04)
+1. 修复type等属性为null的时候不显示徽标的BUG
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-badge 徽标数,数字角标
diff --git a/uni_modules/uv-badge/components/uv-badge/props.js b/uni_modules/uv-badge/components/uv-badge/props.js
new file mode 100644
index 0000000..c6369c3
--- /dev/null
+++ b/uni_modules/uv-badge/components/uv-badge/props.js
@@ -0,0 +1,73 @@
+export default {
+ props: {
+ // 是否显示圆点
+ isDot: {
+ type: Boolean,
+ default: false
+ },
+ // 显示的内容
+ value: {
+ type: [Number, String],
+ default: ''
+ },
+ // 是否显示
+ show: {
+ type: Boolean,
+ default: true
+ },
+ // 最大值,超过最大值会显示 '{max}+'
+ max: {
+ type: [Number, String],
+ default: 999
+ },
+ // 主题类型,error|warning|success|primary
+ type: {
+ type: [String,undefined,null],
+ default: 'error'
+ },
+ // 当数值为 0 时,是否展示 Badge
+ showZero: {
+ type: Boolean,
+ default: false
+ },
+ // 背景颜色,优先级比type高,如设置,type参数会失效
+ bgColor: {
+ type: [String, null],
+ default: null
+ },
+ // 字体颜色
+ color: {
+ type: [String, null],
+ default: null
+ },
+ // 徽标形状,circle-四角均为圆角,horn-左下角为直角
+ shape: {
+ type: [String,undefined,null],
+ default: 'circle'
+ },
+ // 设置数字的显示方式,overflow|ellipsis|limit
+ // overflow会根据max字段判断,超出显示`${max}+`
+ // ellipsis会根据max判断,超出显示`${max}...`
+ // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
+ numberType: {
+ type: [String,undefined,null],
+ default: 'overflow'
+ },
+ // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
+ offset: {
+ type: Array,
+ default: () => []
+ },
+ // 是否反转背景和字体颜色
+ inverted: {
+ type: Boolean,
+ default: false
+ },
+ // 是否绝对定位
+ absolute: {
+ type: Boolean,
+ default: false
+ },
+ ...uni.$uv?.props?.badge
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-badge/components/uv-badge/uv-badge.vue b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue
new file mode 100644
index 0000000..f7d3911
--- /dev/null
+++ b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue
@@ -0,0 +1,176 @@
+
+ {{ isDot ? '' :showValue }}
+
+
+
+
+
diff --git a/uni_modules/uv-badge/package.json b/uni_modules/uv-badge/package.json
new file mode 100644
index 0000000..5a81386
--- /dev/null
+++ b/uni_modules/uv-badge/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uv-badge",
+ "displayName": "uv-badge 徽标数,数字角标 全面兼容小程序、nvue、vue2、vue3等多端",
+ "version": "1.0.2",
+ "description": "徽标数一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。",
+ "keywords": [
+ "uv-badge",
+ "uvui",
+ "uv-ui",
+ "徽标数",
+ "数字角标"
+ ],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-badge/readme.md b/uni_modules/uv-badge/readme.md
new file mode 100644
index 0000000..cf597eb
--- /dev/null
+++ b/uni_modules/uv-badge/readme.md
@@ -0,0 +1,11 @@
+## Badge 徽标数
+
+> **组件名:uv-badge**
+
+该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。
+
+### 查看文档
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群
diff --git a/uni_modules/uv-button/changelog.md b/uni_modules/uv-button/changelog.md
new file mode 100644
index 0000000..11e954e
--- /dev/null
+++ b/uni_modules/uv-button/changelog.md
@@ -0,0 +1,33 @@
+## 1.0.15(2023-12-20)
+1. 优化
+## 1.0.14(2023-12-06)
+1. 优化
+## 1.0.13(2023-12-06)
+1. 阻止事件冒泡处理
+## 1.0.12(2023-10-19)
+1. 增加后置插槽
+## 1.0.11(2023-09-21)
+1. 修复通过customStyle修改按钮宽度,组件中最外层节点不改变的问题
+## 1.0.10(2023-09-15)
+1. 按钮支持open-type="agreePrivacyAuthorization"
+## 1.0.9(2023-09-11)
+1. 增加参数iconSize,用于控制图标的大小
+## 1.0.8(2023-09-10)
+1. 修复多个按钮在一行宽度不正常的BUG
+## 1.0.7(2023-09-07)
+1. 修复warning颜色对应错误的BUG
+## 1.0.6(2023-07-25)
+1. 增加customTextStyle属性,方便自定义文字样式
+## 1.0.5(2023-07-20)
+1. 解决微信小程序动态设置hover-class点击态不消失的BUG
+## 1.0.4(2023-06-29)
+1. 修改上次更新出现nvue报错异常
+## 1.0.3(2023-06-28)
+ 修复:设置open-type="chooseAvatar"等值不生效的BUG
+## 1.0.2(2023-06-01)
+1. 修复按钮点击触发两次的BUG
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-button 按钮
diff --git a/uni_modules/uv-button/components/uv-button/nvue.scss b/uni_modules/uv-button/components/uv-button/nvue.scss
new file mode 100644
index 0000000..be6c16e
--- /dev/null
+++ b/uni_modules/uv-button/components/uv-button/nvue.scss
@@ -0,0 +1,46 @@
+$uv-button-active-opacity:0.75 !default;
+$uv-button-loading-text-margin-left:4px !default;
+$uv-button-text-color: #FFFFFF !default;
+$uv-button-text-plain-error-color:$uv-error !default;
+$uv-button-text-plain-warning-color:$uv-warning !default;
+$uv-button-text-plain-success-color:$uv-success !default;
+$uv-button-text-plain-info-color:$uv-info !default;
+$uv-button-text-plain-primary-color:$uv-primary !default;
+.uv-button {
+ &--active {
+ opacity: $uv-button-active-opacity;
+ }
+
+ &--active--plain {
+ background-color: rgb(217, 217, 217);
+ }
+
+ &__loading-text {
+ margin-left:$uv-button-loading-text-margin-left;
+ }
+
+ &__text,
+ &__loading-text {
+ color:$uv-button-text-color;
+ }
+
+ &__text--plain--error {
+ color:$uv-button-text-plain-error-color;
+ }
+
+ &__text--plain--warning {
+ color:$uv-button-text-plain-warning-color;
+ }
+
+ &__text--plain--success{
+ color:$uv-button-text-plain-success-color;
+ }
+
+ &__text--plain--info {
+ color:$uv-button-text-plain-info-color;
+ }
+
+ &__text--plain--primary {
+ color:$uv-button-text-plain-primary-color;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-button/components/uv-button/props.js b/uni_modules/uv-button/components/uv-button/props.js
new file mode 100644
index 0000000..6275ad5
--- /dev/null
+++ b/uni_modules/uv-button/components/uv-button/props.js
@@ -0,0 +1,163 @@
+export default {
+ props: {
+ // 是否细边框
+ hairline: {
+ type: Boolean,
+ default: true
+ },
+ // 按钮的预置样式,info,primary,error,warning,success
+ type: {
+ type: String,
+ default: 'info'
+ },
+ // 按钮尺寸,large,normal,small,mini
+ size: {
+ type: String,
+ default: 'normal'
+ },
+ // 按钮形状,circle(两边为半圆),square(带圆角)
+ shape: {
+ type: String,
+ default: 'square'
+ },
+ // 按钮是否镂空
+ plain: {
+ type: Boolean,
+ default: false
+ },
+ // 是否禁止状态
+ disabled: {
+ type: Boolean,
+ default: false
+ },
+ // 是否加载中
+ loading: {
+ type: Boolean,
+ default: false
+ },
+ // 加载中提示文字
+ loadingText: {
+ type: [String, Number],
+ default: ''
+ },
+ // 加载状态图标类型
+ loadingMode: {
+ type: String,
+ default: 'spinner'
+ },
+ // 加载图标大小
+ loadingSize: {
+ type: [String, Number],
+ default: 14
+ },
+ // 开放能力,具体请看uniapp稳定关于button组件部分说明
+ // https://uniapp.dcloud.io/component/button
+ openType: {
+ type: String,
+ default: ''
+ },
+ // 用于