diff --git a/README.md b/README.md
index 64def89f..51cf5972 100644
--- a/README.md
+++ b/README.md
@@ -32,10 +32,15 @@
li-ji-weapp
├── LICENSE.txt
├── README.md
-├── /miniprogram/--小程序
+├── /miniprogram/--小程序目录
+│ ├── /alicloud/--阿里云 Serverless服务
+│ ├── /config/--MP-CU配置文件
+│ ├── /mp-cu/--ColorUi主框架的文件夹,不建议修改这里面的文件,以免后续升级时,被覆盖。
+│ ├── /mp-sdk/--ColorUi框架的辅助文件夹,封装了一些常用的方法函数、扩展图标库等,按需使用,如不需要,可删除此文件夹。
│ ├── /components/--自定义组件
-│ ├── /images/--图片
│ ├── /pages/--页面
+│ ├── /static/--资源文件
+│ ├── /utils/
│ ├── app.js
│ ├── app.json
│ ├── app.wxss
@@ -57,12 +62,14 @@ li-ji-weapp
### 鸣谢
+- [MP-CU](https://github.com/Color-UI/MP-CU):colorUI3.x 微信小程序原生版
- [Vant weapp](https://github.com/youzan/vant-weapp):轻量、可靠的小程序 UI 组件库
- [wl-pinyin](https://www.npmjs.com/package/wl-pinyin):汉字转拼音库
- [dayjs](https://github.com/iamkun/dayjs):Moment.js 的 2kB 轻量化方案,拥有同样强大的 API
- [wx-calendar](https://github.com/lspriv/wx-calendar):借鉴了MIUI 12日历的部分设计,制作适合微信小程序的日历
- 腾讯云(涨价了,负担不起,已迁移至阿里云)
-- [阿里云 Serverless](https://serverless.aliyun.com/):阿里云 Serverless
+- [阿里云 Serverless](https://serverless.aliyun.com):阿里云 Serverless
+- [今日诗词 API](https://www.jinrishici.com):![今日诗词](https://v2.jinrishici.com/one.svg)
[license-url]: https://github.com/chadwuo/li-ji-weapp/blob/master/LICENSE.txt
diff --git a/miniprogram/alicloud/services/giftReceive.js b/miniprogram/alicloud/services/giftReceive.js
index dfb2e84b..bcea8126 100644
--- a/miniprogram/alicloud/services/giftReceive.js
+++ b/miniprogram/alicloud/services/giftReceive.js
@@ -70,7 +70,7 @@ exports.getGiftReceivePage = async (parameter) => {
},
{
$sort: {
- date: -1
+ money: -1
}
},
{
diff --git a/miniprogram/app.js b/miniprogram/app.js
index 87093fca..10bb34e8 100644
--- a/miniprogram/app.js
+++ b/miniprogram/app.js
@@ -1,24 +1,35 @@
const {
- getUserInfo
+ getUserInfo
} = require('./alicloud/services/user');
+import {
+ colorUI
+} from './config/ColorUI'
+import {
+ colorUISdk
+} from './config/mp-sdk'
+
+
App({
- userInfo: null,
- async onLaunch() {
- // 查询缓存中用户信息
- this.userInfo = wx.getStorageSync('user')
- if (!this.userInfo) {
- // 如果缓存中没有,去数据库中 查询
- const res = await getUserInfo()
- if (res.success) {
- //TODO 这里有问题 此处为 app.onLaunch与page.onLoad异步问题 导致 index page的onLoad方法 无法拿到userInfo
- this.userInfo = res.data
- wx.setStorageSync('user', res.data)
- }
+ colorUI, //挂载到app上
+ colorUISdk,
+ userInfo: null,
+ async onLaunch() {
+ console.log("软件版本", colorUISdk.version)
+ // 查询缓存中用户信息
+ this.userInfo = wx.getStorageSync('user')
+ if (!this.userInfo) {
+ // 如果缓存中没有,去数据库中 查询
+ const res = await getUserInfo()
+ if (res.success) {
+ //TODO 这里有问题 此处为 app.onLaunch与page.onLoad异步问题 导致 index page的onLoad方法 无法拿到userInfo
+ this.userInfo = res.data
+ wx.setStorageSync('user', res.data)
+ }
- // wx.navigateTo({
- // url: '/pages/login/index',
- // })
- }
- },
+ // wx.navigateTo({
+ // url: '/pages/login/index',
+ // })
+ }
+ },
});
\ No newline at end of file
diff --git a/miniprogram/app.json b/miniprogram/app.json
index ac276583..9de28766 100644
--- a/miniprogram/app.json
+++ b/miniprogram/app.json
@@ -1,95 +1,103 @@
{
- "pages": [
- "pages/index/index",
- "pages/book/details/index",
- "pages/book/edit/index",
- "pages/book/select/index",
- "pages/giftOut/index",
- "pages/giftOut/edit/index",
- "pages/giftReceive/edit/index",
- "pages/friend/index",
- "pages/friend/details/index",
- "pages/friend/edit/index",
- "pages/friend/select/index",
- "pages/mine/index",
- "pages/profile/index",
- "pages/login/index",
- "pages/about/index",
- "pages/issue/index",
- "pages/question/index",
- "pages/sponsor/index",
- "pages/family/index",
- "pages/calendar/index"
- ],
- "window": {
- "backgroundColor": "#F76664",
- "backgroundTextStyle": "light",
- "navigationBarBackgroundColor": "#F76664",
- "navigationBarTitleText": "礼记",
- "navigationBarTextStyle": "white"
- },
- "tabBar": {
- "color": "#7A7E83",
- "selectedColor": "#F76664",
- "borderStyle": "black",
- "backgroundColor": "#ffffff",
- "list": [{
- "pagePath": "pages/index/index",
- "text": "礼记",
- "iconPath": "./images/book_gray.png",
- "selectedIconPath": "./images/book_red.png"
- },
- {
- "text": "送礼",
- "pagePath": "pages/giftOut/index",
- "iconPath": "./images/icon_post.png",
- "selectedIconPath": "./images/icon_post_red.png"
- },
- {
- "pagePath": "pages/friend/index",
- "text": "亲友",
- "iconPath": "./images/contact_gray.png",
- "selectedIconPath": "./images/contact_red.png"
- },
- {
- "pagePath": "pages/mine/index",
- "text": "我的",
- "iconPath": "./images/mine_gray.png",
- "selectedIconPath": "./images/mine_red.png"
- }
- ]
- },
- "sitemapLocation": "sitemap.json",
- "usingComponents": {
- "footer": "/components/footer/index",
- "van-action-sheet": "@vant/weapp/action-sheet/index",
- "van-button": "@vant/weapp/button/index",
- "van-row": "@vant/weapp/row/index",
- "van-col": "@vant/weapp/col/index",
- "van-cell": "@vant/weapp/cell/index",
- "van-cell-group": "@vant/weapp/cell-group/index",
- "van-divider": "@vant/weapp/divider/index",
- "van-dialog": "@vant/weapp/dialog/index",
- "van-empty": "@vant/weapp/empty/index",
- "van-field": "@vant/weapp/field/index",
- "van-grid": "@vant/weapp/grid/index",
- "van-grid-item": "@vant/weapp/grid-item/index",
- "van-icon": "@vant/weapp/icon/index",
- "van-index-bar": "@vant/weapp/index-bar/index",
- "van-index-anchor": "@vant/weapp/index-anchor/index",
- "van-image": "@vant/weapp/image/index",
- "van-notify": "@vant/weapp/notify/index",
- "van-notice-bar": "@vant/weapp/notice-bar/index",
- "van-radio": "@vant/weapp/radio/index",
- "van-radio-group": "@vant/weapp/radio-group/index",
- "van-popup": "@vant/weapp/popup/index",
- "van-picker": "@vant/weapp/picker/index",
- "van-sticky": "@vant/weapp/sticky/index",
- "van-search": "@vant/weapp/search/index",
- "van-swipe-cell": "@vant/weapp/swipe-cell/index",
- "van-tab": "@vant/weapp/tab/index",
- "van-tabs": "@vant/weapp/tabs/index",
- "van-tag": "@vant/weapp/tag/index",
- "van-transition": "@vant/weapp/transition/index"
- }
+ "pages": [
+ "pages/index/index",
+ "pages/book/details/index",
+ "pages/book/edit/index",
+ "pages/book/select/index",
+ "pages/giftOut/index",
+ "pages/giftOut/edit/index",
+ "pages/giftReceive/edit/index",
+ "pages/friend/index",
+ "pages/friend/details/index",
+ "pages/friend/edit/index",
+ "pages/friend/select/index",
+ "pages/mine/index",
+ "pages/profile/index",
+ "pages/login/index",
+ "pages/about/index",
+ "pages/issue/index",
+ "pages/question/index",
+ "pages/family/index",
+ "pages/set/index",
+ "pages/calendar/index"
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#FFFFFF",
+ "navigationBarTitleText": "礼记",
+ "navigationBarTextStyle": "black",
+ "navigationStyle": "custom"
+ },
+ "tabBar": {
+ "color": "#DA372A",
+ "selectedColor": "#DA372A",
+ "borderStyle": "white",
+ "backgroundColor": "#fff",
+ "list": [{
+ "pagePath": "pages/index/index",
+ "text": "礼记"
+ },
+ {
+ "text": "送礼",
+ "pagePath": "pages/giftOut/index"
+ },
+ {
+ "pagePath": "pages/friend/index",
+ "text": "亲友"
+ },
+ {
+ "pagePath": "pages/mine/index",
+ "text": "我的"
+ }
+ ]
+ },
+ "sitemapLocation": "sitemap.json",
+ "usingComponents": {
+ "ui-sys": "mp-cu/colorUI/components/ui-sys/ui-sys",
+ "ui-title": "mp-cu/colorUI/components/ui-title/ui-title",
+ "ui-code": "mp-cu/colorUI/components/ui-code/ui-code",
+ "ui-loading": "mp-cu/colorUI/components/ui-loading/ui-loading",
+ "ui-menu": "mp-cu/colorUI/components/ui-menu/ui-menu",
+ "ui-menu-item": "mp-cu/colorUI/components/ui-menu-item/ui-menu-item",
+ "ui-avatar": "mp-cu/colorUI/components/ui-avatar/ui-avatar",
+ "ui-avatar-stack": "mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack",
+ "ui-modal": "mp-cu/colorUI/components/ui-modal/ui-modal",
+ "ui-toast": "mp-cu/colorUI/components/ui-toast/ui-toast",
+ "ui-switch": "mp-cu/colorUI/components/ui-switch/ui-switch",
+ "ui-radio-group": "mp-cu/colorUI/components/ui-radio-group/ui-radio-group",
+ "ui-radio": "mp-cu/colorUI/components/ui-radio/ui-radio",
+ "ui-card": "mp-cu/colorUI/components/ui-card/ui-card",
+ "ui-fixed": "mp-cu/colorUI/components/ui-fixed/ui-fixed",
+ "ui-img": "mp-cu/colorUI/components/ui-img/ui-img",
+ "ui-navbar": "/mp-cu/colorUI/components/ui-navbar/ui-navbar",
+ "ui-swiper": "/mp-cu/colorUI/components/ui-swiper/ui-swiper",
+ "ui-text-size": "/mp-cu/colorUI/components/ui-text-size/ui-text-size",
+ "ui-tag": "/mp-cu/colorUI/components/ui-tag/ui-tag",
+ "ui-progress": "/mp-cu/colorUI/components/ui-progress/ui-progress",
+ "ui-tab": "/mp-cu/colorUI/components/ui-tab/ui-tab",
+ "ui-popover": "/mp-cu/colorUI/components/ui-popover/ui-popover",
+ "ui-steps": "/mp-cu/colorUI/components/ui-steps/ui-steps",
+ "ui-form": "/mp-cu/colorUI/components/ui-form/ui-form",
+ "ui-form-group": "/mp-cu/colorUI/components/ui-form-group/ui-form-group",
+ "ui-input-box": "/mp-cu/colorUI/components/ui-input-box/ui-input-box",
+ "ui-checkbox": "/mp-cu/colorUI/components/ui-checkbox/ui-checkbox",
+ "ui-checkbox-group": "/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group",
+ "ui-change-theme": "/mp-cu/colorUI/components/ui-change-theme/ui-change-theme",
+ "ui-parameter": "/mp-sdk/components/ui-parameter/ui-parameter",
+ "van-action-sheet": "@vant/weapp/action-sheet/index",
+ "van-row": "@vant/weapp/row/index",
+ "van-col": "@vant/weapp/col/index",
+ "van-cell": "@vant/weapp/cell/index",
+ "van-cell-group": "@vant/weapp/cell-group/index",
+ "van-dialog": "@vant/weapp/dialog/index",
+ "van-empty": "@vant/weapp/empty/index",
+ "van-index-bar": "@vant/weapp/index-bar/index",
+ "van-index-anchor": "@vant/weapp/index-anchor/index",
+ "van-notify": "@vant/weapp/notify/index",
+ "van-notice-bar": "@vant/weapp/notice-bar/index",
+ "van-search": "@vant/weapp/search/index",
+ "van-tab": "@vant/weapp/tab/index",
+ "van-swipe-cell": "@vant/weapp/swipe-cell/index",
+ "van-tabs": "@vant/weapp/tabs/index"
+ }
}
\ No newline at end of file
diff --git a/miniprogram/app.scss b/miniprogram/app.scss
new file mode 100644
index 00000000..914c6151
--- /dev/null
+++ b/miniprogram/app.scss
@@ -0,0 +1,3 @@
+/* 整个页面的布局 */
+@import './mp-cu/colorUI/scss/ui';
+@import './mp-sdk/icon/doc';
diff --git a/miniprogram/app.wxss b/miniprogram/app.wxss
deleted file mode 100644
index 10adc649..00000000
--- a/miniprogram/app.wxss
+++ /dev/null
@@ -1,12 +0,0 @@
-/* 整个页面的布局 */
-page {
- display: flex;
- flex-direction: column;
- min-height: 100%;
- background-color: #f6f6f6;
-}
-
-/* footer置底 */
-footer {
- margin-top: auto;
-}
\ No newline at end of file
diff --git a/miniprogram/components/footer/index.js b/miniprogram/components/footer/index.js
deleted file mode 100644
index e64ba646..00000000
--- a/miniprogram/components/footer/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// components/footer.js
-Component({
- /**
- * 组件的属性列表
- */
- properties: {
- innerText: {
- type: String,
- value: '每一份人情都值得礼记',
- },
- loading:{
- type: Boolean,
- value: false,
- }
- },
-
- /**
- * 组件的初始数据
- */
- data: {
-
- },
-
- /**
- * 组件的方法列表
- */
- methods: {
-
- }
-})
\ No newline at end of file
diff --git a/miniprogram/components/footer/index.json b/miniprogram/components/footer/index.json
deleted file mode 100644
index 6d293cfd..00000000
--- a/miniprogram/components/footer/index.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "component": true,
- "usingComponents": {
- "van-loading": "@vant/weapp/loading/index"}
-}
\ No newline at end of file
diff --git a/miniprogram/components/footer/index.wxml b/miniprogram/components/footer/index.wxml
deleted file mode 100644
index 401b9f39..00000000
--- a/miniprogram/components/footer/index.wxml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- 加载中...
-
-
- {{innerText}}
-
-
\ No newline at end of file
diff --git a/miniprogram/components/footer/index.wxss b/miniprogram/components/footer/index.wxss
deleted file mode 100644
index 5b6d03c7..00000000
--- a/miniprogram/components/footer/index.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* components/footer/index.wxss */
\ No newline at end of file
diff --git a/miniprogram/config/ColorUI.js b/miniprogram/config/ColorUI.js
new file mode 100644
index 00000000..4025999d
--- /dev/null
+++ b/miniprogram/config/ColorUI.js
@@ -0,0 +1,41 @@
+//框架核心配置
+import ColorUI from '../mp-cu/main'
+export const colorUI = new ColorUI({
+ config: {
+ theme: 'auto',
+ main: 'red',
+ text: 1,
+ footer: true,
+ share: false,
+ shareTitle: '可能是东半球最好用的人情记账工具',
+ homePath: '/pages/index/index',
+ tabBar: [{
+ title: '礼记',
+ icon: 'cicon-home-o',
+ curIcon: 'cicon-home-o',
+ url: '/pages/index/index',
+ type: 'tab'
+ },
+ {
+ title: '送礼',
+ icon: 'cicon-redpacket-o',
+ curIcon: 'cicon-redpacket-o',
+ url: '/pages/giftOut/index',
+ type: 'tab'
+ },
+ {
+ title: '亲友',
+ icon: 'cicon-accounts-o',
+ curIcon: 'cicon-accounts-o',
+ url: '/pages/friend/index',
+ type: 'tab'
+ },
+ {
+ title: '我的',
+ icon: 'cicon-my-o',
+ curIcon: 'cicon-my-o',
+ url: '/pages/mine/index',
+ type: 'tab'
+ }],
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/config/mp-sdk.js b/miniprogram/config/mp-sdk.js
new file mode 100644
index 00000000..3704d4a3
--- /dev/null
+++ b/miniprogram/config/mp-sdk.js
@@ -0,0 +1,25 @@
+//扩展方法函数配置
+import ColorUISdk from '../mp-sdk/index'
+export const colorUISdk = new ColorUISdk({
+ //当前环境,produce,dev,host
+ env: 'dev',
+ //实际项目版本
+ version: '2.1.0',
+ api: {
+ //生产环境
+ produce: {
+ url: '请求域名'
+ },
+ //开发环境
+ dev: {
+ url: '请求域名'
+ },
+ //本地环境
+ host: {
+ url: '请求域名'
+ },
+ header: {
+ "Content-Type": "application/json"
+ },
+ },
+})
diff --git a/miniprogram/envList.js b/miniprogram/envList.js
deleted file mode 100644
index e511efd9..00000000
--- a/miniprogram/envList.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const envList = [{
- "envId": "liji-1gzjub9o9bdf6d00",
- "alias": "liji"
-}]
-const isMac = false
-module.exports = {
- envList,
- isMac
-}
\ No newline at end of file
diff --git a/miniprogram/images/home_gray.png b/miniprogram/images/home_gray.png
deleted file mode 100644
index f35aa212..00000000
Binary files a/miniprogram/images/home_gray.png and /dev/null differ
diff --git a/miniprogram/images/home_red.png b/miniprogram/images/home_red.png
deleted file mode 100644
index 8ae6f374..00000000
Binary files a/miniprogram/images/home_red.png and /dev/null differ
diff --git a/miniprogram/images/icon_post.png b/miniprogram/images/icon_post.png
deleted file mode 100644
index 70371d30..00000000
Binary files a/miniprogram/images/icon_post.png and /dev/null differ
diff --git a/miniprogram/images/icon_post_red.png b/miniprogram/images/icon_post_red.png
deleted file mode 100644
index 61aff5f1..00000000
Binary files a/miniprogram/images/icon_post_red.png and /dev/null differ
diff --git a/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.js b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.js
new file mode 100644
index 00000000..6e3e14e8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.js
@@ -0,0 +1,15 @@
+Component({
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ text: {
+ type: String,
+ value: '',
+ },
+ loading: {
+ type: Boolean,
+ value: false,
+ }
+ },
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.json b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.scss b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.scss
new file mode 100644
index 00000000..b99c35a4
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.scss
@@ -0,0 +1,10 @@
+.page-footer {
+ opacity: 0.5;
+ width: 495rpx;
+ height: 150rpx;
+}
+.mp-cu-text {
+ font-size: 20rpx;
+ color: #cecece;
+ margin-top: 12rpx;
+}
diff --git a/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.wxml b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.wxml
new file mode 100644
index 00000000..f80d6f6e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-footer/app-footer.wxml
@@ -0,0 +1,5 @@
+
+
+ {{text}}
+ Copyright © Chadwuo Design. All Rights Reserved
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.js b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.js
new file mode 100644
index 00000000..fb94994d
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.js
@@ -0,0 +1,15 @@
+Component({
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ navBg: {
+ type: String,
+ value: 'bg-blur'
+ },
+ title: {
+ type: String,
+ value: ''
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.json b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.json
new file mode 100644
index 00000000..778b94ce
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-navbar": "../ui-navbar/ui-navbar"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.scss b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.wxml b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.wxml
new file mode 100644
index 00000000..f43127fc
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/app-navbar/app-navbar.wxml
@@ -0,0 +1,3 @@
+
+ {{ title }}
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.js b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.js
new file mode 100644
index 00000000..836237a3
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.js
@@ -0,0 +1,19 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ //multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ reverse: {
+ type: Boolean,
+ value: false
+ }
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.json b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.scss b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.scss
new file mode 100644
index 00000000..9b19837d
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.scss
@@ -0,0 +1,7 @@
+.ui-avatar-stack {
+ display: inline-block;
+ &.reverse {
+ direction: rtl;
+ unicode-bidi: bidi-override;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.wxml b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.wxml
new file mode 100644
index 00000000..e86e4880
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar-stack/ui-avatar-stack.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.js b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.js
new file mode 100644
index 00000000..45d81468
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.js
@@ -0,0 +1,43 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ //multipleSlots: true
+ },
+ properties: {
+ bg: {
+ type: String,
+ value: 'ui-BG'
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ src: {
+ type: String,
+ value: ''
+ },
+ srcs: {
+ type: Array,
+ value: []
+ },
+ icon: {
+ type: String,
+ value: ''
+ },
+ stack: {
+ type: Boolean,
+ value: false
+ },
+ reverse: {
+ type: Boolean,
+ value: false
+ },
+ first: {
+ type: Boolean,
+ value: false
+ },
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.json b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.scss b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.scss
new file mode 100644
index 00000000..3ab67b2e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.scss
@@ -0,0 +1,199 @@
+@import '../../scss/var';
+
+.ui-avatar {
+ position: relative;
+ text-align: center;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+ margin: 0 0.14em;
+ padding: 0;
+ color: var(--text-a);
+ background-color: var(--ui-BG-3);
+ white-space: nowrap;
+ width: 64rpx;
+ height: 64rpx;
+ background-size: cover;
+ background-position: center;
+ vertical-align: middle;
+ font-size: 22rpx;
+ border-radius: $radius;
+ &::after {
+ border-radius: calc(#{$radius} * 2);
+ }
+
+ &.round::after {
+ border-radius: $round-pill;
+ }
+ &.sm {
+ width: 48rpx;
+ height: 48rpx;
+ font-size: 16rpx;
+ }
+ &.lg {
+ width: 80rpx;
+ height: 80rpx;
+ font-size: 28rpx;
+ }
+
+ &.xl {
+ width: 96rpx;
+ height: 96rpx;
+ font-size: 34rpx;
+ }
+ &.xxl {
+ width: 112rpx;
+ height: 112rpx;
+ font-size: 40rpx;
+ }
+
+ &.sl {
+ width: 128rpx;
+ height: 128rpx;
+ font-size: 46rpx;
+ }
+
+ &.ellipse {
+ mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjE5NjMxNjI4MjE3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE0MzAyIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTEwMDcuMzI3NjgxODQgNTEwLjQ3NzQyODU0Yy0xLjYwNDMxNTM3IDQxLjcxMjIxMTc1LTIuNDk1NjAyNDMgODMuNjAyNjgyMjgtNS4xNjk0NjIyNiAxMjUuMzE0ODk0MDUtMy43NDM0MDQzNSA1Ny43NTUzNzA4NS0xMi4yOTk3NTQ3OCAxMTQuNjE5NDU2MDEtMzAuNDgyMDAxNDkgMTcwLjA1NzQ4MDQ0LTI2LjU2MDMzOTcxIDgwLjU3MjMwNzYtODAuNzUwNTY1MDMgMTMzLjE1ODIxNjE4LTE1OS4xODM3ODUwMiAxNjIuNzQ4OTMxOTQtMzEuNzI5ODAyIDExLjk0MzIzOTkyLTY0LjcwNzQwNTkyIDE4LjAwMzk4OTI5LTk3Ljg2MzI2NzI2IDIzLjUyOTk2NjQyLTYwLjI1MDk3MzMgMTAuMTYwNjY3MTQtMTIxLjIxNDk3NjIzIDEyLjI5OTc1NDc4LTE4Mi4xNzg5Nzc3OCAxMi4yOTk3NTQ3OC00My42NzMwNDMzIDAtODcuMzQ2MDg1MjUtMC4zNTY1MTQ4Mi0xMzEuMDE5MTI5OTQtMi42NzM4NTk4Ny02MS42NzcwMzI1OC0zLjIwODYzMjEtMTIyLjgxOTI5MTU5LTEwLjMzODkyNDU5LTE4Mi4xNzg5Nzc4Mi0yOS41OTA3MTU3Ny00Ny41OTQ3MDM2OS0xNS4zMzAxMjk0NS04OC43NzIxNDQ1Ny00MC4xMDc4OTYzOC0xMjEuMjE0OTc2MjMtNzguNjExNDc2MDNDNzIuMDExNTM1MTkgODYyLjcxMzg4ODIgNTQuNzIwNTc1NTggODI3LjA2MjQyNDQxIDQzLjg0Njg3ODc1IDc4OC41NTg4NDM0MWMtNy42NjUwNjQ3Mi0yNy4yNzMzNjkzOS0xMy45MDQwNzAxNC01NS4yNTk3Njg0MS0xNy40NjkyMTcwNi04My40MjQ0MjQ4OS00Ljk5MTIwNDg4LTM5LjM5NDg2Njc0LTcuODQzMzIyMTQtNzguOTY3OTkyMjQtMTAuMTYwNjY3MTUtMTE4LjU0MTExNjM2LTEuNzgyNTcyNzgtMzEuMTk1MDMxMTMtMS40MjYwNTc5NS02Mi4zOTAwNjA4Ny0xLjQyNjA1Nzk1LTkzLjU4NTA5MDY4LTAuMTc4MjU3NC01MS4xNTk4NTA2MiAyLjEzOTA4NzYxLTEwMi4zMTk2OTk4NiA3LjQ4NjgwNzMyLTE1My4zMDEyOTQ0NCA0LjgxMjk0NzQ2LTQ0LjU2NDMyODk5IDEzLjE5MTA0MTgzLTg4LjQxNTYyOTc0IDI3LjgwODE0MTYzLTEzMC42NjI2MTM3NCAyNi41NjAzMzk3MS03Ni4xMTU4NzUgNzcuNzIwMTkwMzUtMTI4Ljg4MDA0MDk2IDE1My4zMDEyOTMwOC0xNTcuNDAxMjEwODUgMzMuNjkwNjMzNTctMTIuNjU2MjY5NTkgNjguNjI5MDY3NjYtMjEuMDM0MzYzOTcgMTA0LjI4MDUzMTQtMjYuMjAzODI2MjYgODQuNjcyMjI1MzktMTIuNDc4MDEyMTggMTY5Ljg3OTIyNDQzLTEzLjcyNTgxNDEgMjU1LjI2NDQ3ODExLTExLjU4NjcyNTA5IDMzLjY5MDYzMzU3IDAuODkxMjg3MDggNjcuMzgxMjY1NzcgMi42NzM4NTk4NCAxMDAuODkzNjQxOTEgNS41MjU5NzU3MyA1NS45NzI3OTgwOCA0Ljk5MTIwNDg4IDExMC44NzYwNTE2NyAxNS4zMzAxMjk0NSAxNjMuNjQwMjE3NjMgMzYuMTg2MjM2IDczLjc5ODUyOTk2IDI5LjQxMjQ1Njk3IDEyMC4xNDU0MzE3NSA4My45NTkxOTcxIDE0NC45MjMyMDAwNyAxNTcuOTM1OTgzMTIgMTEuNTg2NzI1MSAzNC41ODE5MTkyNyAxOS4yNTE3ODk4NCA3MC4wNTUxMjU2MSAyMy43MDgyMjM4NSAxMDYuMjQxMzYxNjEgNy44NDMzMjIxNCA2My40NTk2MDU0IDEwLjg3MzY5NjgzIDEyNi45MTkyMTA3NiAxMS4yMzAyMTAyNSAxOTAuNzM1MzMwOTh6IiBwLWlkPSIxNDMwMyI+PC9wYXRoPjwvc3ZnPg==);
+ mask-size: cover;
+ }
+ .avatar-sm-text {
+ font-size: 0.8em;
+ }
+
+ .ui-avatar-image {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ }
+ .view, .text {
+ position: relative;
+ z-index: 2;
+ }
+ .ui-avatar-icon {
+ font-size: 150%;
+ }
+ &.stack {
+ margin-left: -1em;
+ background-color: inherit;
+ z-index: 1;
+ &.isFirstChild {
+ margin-left: 0px;
+ }
+ &.reverse {
+ margin: 0 -1em 0 0.14em;
+ }
+ &::after {
+ content: '';
+ background-color: inherit;
+ transform: scale(1.1);
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+ }
+ &::after {
+ border-radius: #{$radius};
+ }
+
+ &.round::after {
+ border-radius: $round-pill;
+ }
+
+ &.ellipse::after {
+ border-radius: 0px;
+ mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjE5NjMxNjI4MjE3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE0MzAyIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTEwMDcuMzI3NjgxODQgNTEwLjQ3NzQyODU0Yy0xLjYwNDMxNTM3IDQxLjcxMjIxMTc1LTIuNDk1NjAyNDMgODMuNjAyNjgyMjgtNS4xNjk0NjIyNiAxMjUuMzE0ODk0MDUtMy43NDM0MDQzNSA1Ny43NTUzNzA4NS0xMi4yOTk3NTQ3OCAxMTQuNjE5NDU2MDEtMzAuNDgyMDAxNDkgMTcwLjA1NzQ4MDQ0LTI2LjU2MDMzOTcxIDgwLjU3MjMwNzYtODAuNzUwNTY1MDMgMTMzLjE1ODIxNjE4LTE1OS4xODM3ODUwMiAxNjIuNzQ4OTMxOTQtMzEuNzI5ODAyIDExLjk0MzIzOTkyLTY0LjcwNzQwNTkyIDE4LjAwMzk4OTI5LTk3Ljg2MzI2NzI2IDIzLjUyOTk2NjQyLTYwLjI1MDk3MzMgMTAuMTYwNjY3MTQtMTIxLjIxNDk3NjIzIDEyLjI5OTc1NDc4LTE4Mi4xNzg5Nzc3OCAxMi4yOTk3NTQ3OC00My42NzMwNDMzIDAtODcuMzQ2MDg1MjUtMC4zNTY1MTQ4Mi0xMzEuMDE5MTI5OTQtMi42NzM4NTk4Ny02MS42NzcwMzI1OC0zLjIwODYzMjEtMTIyLjgxOTI5MTU5LTEwLjMzODkyNDU5LTE4Mi4xNzg5Nzc4Mi0yOS41OTA3MTU3Ny00Ny41OTQ3MDM2OS0xNS4zMzAxMjk0NS04OC43NzIxNDQ1Ny00MC4xMDc4OTYzOC0xMjEuMjE0OTc2MjMtNzguNjExNDc2MDNDNzIuMDExNTM1MTkgODYyLjcxMzg4ODIgNTQuNzIwNTc1NTggODI3LjA2MjQyNDQxIDQzLjg0Njg3ODc1IDc4OC41NTg4NDM0MWMtNy42NjUwNjQ3Mi0yNy4yNzMzNjkzOS0xMy45MDQwNzAxNC01NS4yNTk3Njg0MS0xNy40NjkyMTcwNi04My40MjQ0MjQ4OS00Ljk5MTIwNDg4LTM5LjM5NDg2Njc0LTcuODQzMzIyMTQtNzguOTY3OTkyMjQtMTAuMTYwNjY3MTUtMTE4LjU0MTExNjM2LTEuNzgyNTcyNzgtMzEuMTk1MDMxMTMtMS40MjYwNTc5NS02Mi4zOTAwNjA4Ny0xLjQyNjA1Nzk1LTkzLjU4NTA5MDY4LTAuMTc4MjU3NC01MS4xNTk4NTA2MiAyLjEzOTA4NzYxLTEwMi4zMTk2OTk4NiA3LjQ4NjgwNzMyLTE1My4zMDEyOTQ0NCA0LjgxMjk0NzQ2LTQ0LjU2NDMyODk5IDEzLjE5MTA0MTgzLTg4LjQxNTYyOTc0IDI3LjgwODE0MTYzLTEzMC42NjI2MTM3NCAyNi41NjAzMzk3MS03Ni4xMTU4NzUgNzcuNzIwMTkwMzUtMTI4Ljg4MDA0MDk2IDE1My4zMDEyOTMwOC0xNTcuNDAxMjEwODUgMzMuNjkwNjMzNTctMTIuNjU2MjY5NTkgNjguNjI5MDY3NjYtMjEuMDM0MzYzOTcgMTA0LjI4MDUzMTQtMjYuMjAzODI2MjYgODQuNjcyMjI1MzktMTIuNDc4MDEyMTggMTY5Ljg3OTIyNDQzLTEzLjcyNTgxNDEgMjU1LjI2NDQ3ODExLTExLjU4NjcyNTA5IDMzLjY5MDYzMzU3IDAuODkxMjg3MDggNjcuMzgxMjY1NzcgMi42NzM4NTk4NCAxMDAuODkzNjQxOTEgNS41MjU5NzU3MyA1NS45NzI3OTgwOCA0Ljk5MTIwNDg4IDExMC44NzYwNTE2NyAxNS4zMzAxMjk0NSAxNjMuNjQwMjE3NjMgMzYuMTg2MjM2IDczLjc5ODUyOTk2IDI5LjQxMjQ1Njk3IDEyMC4xNDU0MzE3NSA4My45NTkxOTcxIDE0NC45MjMyMDAwNyAxNTcuOTM1OTgzMTIgMTEuNTg2NzI1MSAzNC41ODE5MTkyNyAxOS4yNTE3ODk4NCA3MC4wNTUxMjU2MSAyMy43MDgyMjM4NSAxMDYuMjQxMzYxNjEgNy44NDMzMjIxNCA2My40NTk2MDU0IDEwLjg3MzY5NjgzIDEyNi45MTkyMTA3NiAxMS4yMzAyMTAyNSAxOTAuNzM1MzMwOTh6IiBwLWlkPSIxNDMwMyI+PC9wYXRoPjwvc3ZnPg==);
+ mask-size: cover;
+ }
+ }
+}
+.ui-avatar-group {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
+ height: 100%;
+ padding: 1px;
+ .ui-avatar-image {
+ position: relative;
+ float: left;
+ border-radius: #{$radius};
+ margin: 1px;
+ display: block;
+ }
+ /*1个*/
+ &.nth-1 .ui-avatar-image {
+ width: calc(100% - 2px);
+ height: calc(100% - 2px);
+ }
+ /*2个*/
+ &.nth-2 .ui-avatar-image {
+ width: calc((100% - 5px) / 2);
+ height: calc((100% - 5px) / 2);
+ }
+ &.nth-2 .ui-avatar-image:last-child {
+ margin-left: calc(50% + 1px);
+ }
+ /*3个*/
+ &.nth-3 .ui-avatar-image {
+ width: calc((100% - 5px) / 2);
+ height: calc((100% - 5px) / 2);
+ float: left;
+ }
+ &.nth-3 .ui-avatar-image:first-child {
+ margin-left: calc(25% + 1px);
+ }
+ /*4个*/
+ &.nth-4 .ui-avatar-image {
+ width: calc(50% - 2px);
+ height: calc(50% - 2px);
+ float: left;
+ }
+ /*5/6个*/
+ &.nth-5 .ui-avatar-image,
+ &.nth-6 .ui-avatar-image {
+ width: calc((100% - 6px) / 3);
+ height: calc((100% - 6px) / 3);
+ border-radius: #{$radius - 2};
+ }
+ &.nth-5 .ui-avatar-image:first-child,
+ &.nth-6 .ui-avatar-image:first-child {
+ width: calc((100% - 6px) / 3 * 2 + 2px);
+ height: calc((100% - 6px) / 3 * 2 + 2px);
+ border-radius: #{$radius};
+ }
+ &.nth-5 .ui-avatar-image:last-child {
+ top: -33.33%;
+ }
+ &.nth-6 .ui-avatar-image:last-child {
+ top: -66.66%;
+ left: 66.66%;
+ }
+ // &.nth-5 .ui-avatar-image:nth-last-child(1),&.nth-5 .ui-avatar-image:nth-last-child(2),&.nth-5 .ui-avatar-image:nth-last-child(3),
+ // &.nth-6 .ui-avatar-image:nth-last-child(1),&.nth-6 .ui-avatar-image:nth-last-child(2),&.nth-6 .ui-avatar-image:nth-last-child(3),{
+ // margin-top: 2px;
+ // }
+ /* 7个 8个 9个 */
+ &.nth-7 .ui-avatar-image:first-child {
+ margin-left: calc(100% / 3 + 1px);
+ margin-right: calc(100% / 3 + 1px);
+ }
+ &.nth-8 .ui-avatar-image:first-child {
+ margin-left: calc(100% / 3 / 2 + 1px);
+ }
+ &.nth-7,
+ &.nth-8,
+ &.nth-9 {
+ display: flex;
+ flex-wrap: wrap;
+ .ui-avatar-image {
+ width: calc((100% - 6px) / 3);
+ height: calc((100% - 6px) / 3);
+ border-radius: #{$radius - 2};
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.wxml b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.wxml
new file mode 100644
index 00000000..097044c5
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-avatar/ui-avatar.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.js b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.js
new file mode 100644
index 00000000..e9f3bb28
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.js
@@ -0,0 +1,42 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ img: {
+ type: String
+ },
+ imgHeight: {
+ type: String,
+ value: 'auto'
+ },
+ title: {
+ type: String
+ },
+ fixedTitle: {
+ type: Boolean,
+ value: false
+ },
+ desc: {
+ type: String
+ },
+ ui: {
+ type: String
+ },
+ imgUi: {
+ type: String
+ },
+ isTitle: {
+ type: Boolean,
+ value: true
+ },
+ isTag: {
+ type: Boolean,
+ value: false
+ },
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.json b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.scss b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.scss
new file mode 100644
index 00000000..887c33e7
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.scss
@@ -0,0 +1,51 @@
+.ui-card {
+ position: relative;
+ background-color: var(--ui-BG);
+ overflow: hidden;
+ margin: 2em 0;
+ .ui-card-title {
+ padding: 0.5em 1em 0;
+ }
+ .ui-card-desc {
+ padding: 0.5em 1em 0;
+ height: 3.7em;
+ line-height: 1.6;
+ }
+ .ui-card-main {
+ width: 100%;
+ position: relative;
+ .ui-card-tag{
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ z-index: 2;
+ border-radius: inherit;
+ }
+ .ui-card-fixedTitle {
+ padding: 1.5em 1em 1em;
+ position: absolute;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ z-index: 2;
+ &::before{
+ opacity: .6;
+ }
+ }
+ .ui-card-image {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 1;
+ }
+ }
+ .ui-card-other {
+ padding: 0.5em 1em;
+ }
+ .ui-card-other:first-child {
+ padding: 0;
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.wxml b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.wxml
new file mode 100644
index 00000000..d66bc374
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-card/ui-card.wxml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+ {{ desc }}
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.js b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.js
new file mode 100644
index 00000000..9f32b993
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.js
@@ -0,0 +1,44 @@
+Component({
+ data: {
+ color: ['red', 'orange', 'yellow', 'olive', 'green', 'cyan', 'blue', 'purple', 'mauve', 'pink', 'brown', 'grey'],
+ target: '',
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true,
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ },
+ lifetimes: {
+ created() {
+
+ },
+ attached() {
+
+ },
+ ready() {
+
+ },
+ },
+ methods: {
+ tapAutoThemeChange(e) {
+ let val = e.currentTarget.dataset.value;
+ this.setTheme( val === 'auto'?'light':'auto')
+ },
+ tapThemeChange(e) {
+ this.setTheme(e.currentTarget.dataset.value)
+ },
+ tapColorPicker() {
+ this.setData({
+ target: 'colorPicker'
+ })
+ },
+ tapChooseColor(e) {
+ this.setMain(e.currentTarget.dataset.value)
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.json b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.json
new file mode 100644
index 00000000..185462a4
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-switch": "../ui-switch/ui-switch",
+ "ui-modal": "../ui-modal/ui-modal",
+ "ui-radio": "../ui-radio/ui-radio"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.scss b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.scss
new file mode 100644
index 00000000..f371b2b7
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.scss
@@ -0,0 +1,38 @@
+.mobile-phone {
+ width: 170rpx;
+ height: 305rpx;
+ border-radius: 10px;
+ padding: 10rpx 15rpx;
+ background-color: #ffffff;
+ margin-bottom: 10px;
+
+ &:after {
+ display: none;
+ }
+
+ &.cur:after {
+ display: block;
+ border: 10rpx solid var(--ui-BG-Main) !important;
+ border-radius: 20px;
+ }
+
+ .ui-BG-Main {
+ height: 100rpx;
+ margin-top: 10px;
+ background-color: rgba(122, 122, 122, 0.5) !important;
+ }
+
+ &.cur .ui-BG-Main {
+ background-color: var(--ui-BG-Main) !important;
+ }
+
+ .bg-gray,
+ .bg-dark-4 {
+ height: 40rpx;
+ margin-top: 10rpx;
+ }
+
+ &.dark {
+ background-color: #232323;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.wxml b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.wxml
new file mode 100644
index 00000000..8ed568e1
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-change-theme/ui-change-theme.wxml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.js b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.js
new file mode 100644
index 00000000..681f9f6e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.js
@@ -0,0 +1,123 @@
+Component({
+ relations: {
+ '../ui-checkbox/ui-checkbox': {
+ type: 'child', // 关联的目标节点应为子节点
+ linked(target) {
+ // 每次有子组件被插入时执行,target是该节点实例对象,触发在该节点attached生命周期之后
+ },
+ linkChanged(target) {
+ // 每次有子组件被移动后执行,target是该节点实例对象,触发在该节点moved生命周期之后
+ },
+ unlinked(target) {
+ // 每次有子组件被移除时执行,target是该节点实例对象,触发在该节点detached生命周期之后
+ }
+ }
+ },
+ data: {
+ group:[],
+ all:[],
+ isAllChecked:false,
+ isIndeterminate:false
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ value: {
+ type: String,
+ optionalTypes: Array,
+ value: ''
+ },
+ disabled: {
+ type: Boolean,
+ value: false
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ clearable: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ ready() {
+ this._deepSetValue()
+ },
+ },
+ observers: {
+ 'value'(val) {
+ this.setData({
+ all: [],
+ group: val
+ });
+ this._deepSetValue()
+ },
+ 'group'(val) {
+ let {all, group} = this.data;
+ this.setData({
+ isAllChecked: all.length === group.length,
+ isIndeterminate: group.length > 0
+ });
+ }
+ },
+ methods: {
+ _deepSetValue() {
+ let _this = this, all = this.data.all;
+ let nodes = this.getRelationNodes('../ui-checkbox/ui-checkbox');
+ if (Array.isArray(nodes)) {
+ nodes.forEach((child) => {
+ if(!child.data.all) {
+ all.push(child.data.value);
+ _this.setData({
+ all: all
+ });
+ }
+ if (typeof child._setValue == 'function') {
+ child._setValue(_this.data.value)
+ }
+ });
+ }
+ },
+ _onCheckboxChange(value) {
+ let group = this.data.group;
+ let index = group.indexOf(value);
+ if(index === -1){
+ group.push(value)
+ } else {
+ group.splice(index,1)
+ }
+ this.setData({
+ group: group
+ });
+ this._onChangeEvent(group);
+ },
+ _onCheckboxAll(isAll){
+ let {group, all} = this.data;
+ if(isAll){
+ group = all;
+ } else {
+ group = [];
+ }
+ this.setData({
+ group: group
+ });
+ this._onChangeEvent(group);
+ },
+ _onChangeEvent(val) {
+ let {isAllChecked, isIndeterminate} = this.data;
+ this.triggerEvent('input', val);
+ this.triggerEvent('change', val);
+ this.triggerEvent('all', {
+ value: isAllChecked,
+ indeterminate: isIndeterminate
+ });
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.json b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.scss b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.wxml b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.wxml
new file mode 100644
index 00000000..08f1c722
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox-group/ui-checkbox-group.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.js b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.js
new file mode 100644
index 00000000..5819a537
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.js
@@ -0,0 +1,144 @@
+Component({
+ relations: {
+ '../ui-checkbox-group/ui-checkbox-group': {
+ type: 'parent'
+ }
+ },
+ data: {
+ currentValue: null,
+ isIndeterminate:false,
+ isGroup: null,
+ isDisabled: null,
+ isChecked: null,
+ hasUiCard: null
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ value: {
+ type: String,
+ optionalTypes: [Number, Boolean],
+ value: ''
+ },
+ disabled: {
+ type: Boolean,
+ value: false
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ unbg: {
+ type: String,
+ value: 'borderss'
+ },
+ indeterminate: {
+ type: Boolean,
+ value: false
+ },
+ all: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ ready() {
+ let parent = this._nodesSetValue();
+ if (parent) {
+ this._setValue(parent.data.value);
+ }
+ },
+ },
+ observers: {
+ 'value'(val) {
+ this.setData({
+ currentValue: val
+ });
+ this.isComputed();
+ },
+ 'indeterminate'(val) {
+ this.setData({
+ isIndeterminate: val
+ });
+ this.isComputed();
+ }
+ },
+ methods: {
+ _nodesSetValue() {
+ let radioNodes = this.getRelationNodes('../ui-checkbox-group/ui-checkbox-group');
+ if (Array.isArray(radioNodes) && radioNodes.length > 0) {
+ return radioNodes[0];
+ } else {
+ return false;
+ }
+ },
+ isComputed() {
+ let {disabled, currentValue, value, ui} = this.data;
+ let parent = this._nodesSetValue();
+ //isGroup
+ let isGroup = !!parent;
+ //isDisabled
+ let isDisabled = isGroup?parent.data.disabled:disabled;
+ //isChecked
+ let isChecked;
+ if (typeof currentValue == 'boolean') {
+ isChecked = currentValue;
+ } else {
+ isChecked = isGroup && parent.data.group.indexOf(value) !== -1;
+ }
+ //_has
+ let hasUiCard = ui.indexOf('card') !== -1;
+
+ //isAllChecked="{{isAllChecked}}"
+ //isIndeterminate="{{isIndeterminate}}"
+
+ //设置数据
+ this.setData({
+ isGroup: isGroup,
+ isDisabled: isDisabled,
+ isChecked: isChecked,
+ hasUiCard: hasUiCard
+ });
+ },
+ _onCheckboxClick() {
+ let {isGroup, isDisabled, isChecked} = this.data;
+ if (isGroup && !isDisabled) {
+ this._choose();
+ }
+ if (!isGroup && !isDisabled) {
+ this.triggerEvent('input', !isChecked);
+ this.triggerEvent('change', !isChecked);
+ }
+ },
+ _choose() {
+ let {isGroup, isChecked, value, all} = this.data;
+ this.triggerEvent('input', !isChecked);
+ this.triggerEvent('change', !isChecked);
+ if (isGroup) {
+ let parent = this._nodesSetValue();
+ if(all) {
+ parent._onCheckboxAll(!isChecked);
+ } else {
+ parent._onCheckboxChange(value);
+ }
+ } else {
+ this.setData({
+ isIndeterminate: false
+ });
+ }
+ },
+ _setValue(val) {
+ let value = this.data.value;
+ this.setData({
+ currentValue: val.indexOf(value) !== -1
+ });
+ this.isComputed();
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.json b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.scss b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.scss
new file mode 100644
index 00000000..81941cc4
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.scss
@@ -0,0 +1,60 @@
+@import '../../scss/var';
+
+.ui-checkbox {
+ display: inline-flex;
+ align-items: center;
+ margin: 0 1em 0 0.14286em;
+ cursor: pointer;
+ .ui-checkbox-input {
+ margin: 0 0.5em 0 0.14286em;
+ display: inline-block;
+ width: 1.2em;
+ height: 1.2em;
+ vertical-align: middle;
+ position: relative;
+ &::before {
+ font-family: 'colorui';
+ content: '\e69f';
+ width: 1em;
+ height: 1em;
+ font-size: 0%;
+ background-color: transparent;
+ position: absolute !important;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: auto;
+ }
+ &.indeterminate::before {
+ content: '\e768';
+ width: 1em;
+ height: 1em;
+ font-size: 80%;
+ }
+ }
+
+ &.round {
+ .ui-checkbox-input,
+ .ui-checkbox-input::after {
+ border-radius: $round-pill !important;
+ }
+ }
+ .ui-checkbox-input.cur {
+ &::before {
+ content: '\e69f';
+ width: 1em;
+ height: 1em;
+ font-size: 80%;
+ }
+ }
+
+ &:last-child {
+ margin: 0 0.14286em;
+ }
+ &.lg {
+ .ui-checkbox-input {
+ font-size: 18px;
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.wxml b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.wxml
new file mode 100644
index 00000000..1a88a31f
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-checkbox/ui-checkbox.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.js b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.js
new file mode 100644
index 00000000..8da9f34e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.js
@@ -0,0 +1,91 @@
+import Prism from '../../../lib/prism'
+
+Component({
+ data: {
+ nodes: [],
+ rich: false
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ title: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ content: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG'
+ },
+ text: {
+ type: String,
+ value: 'ui-TC-Main'
+ },
+ tag: {
+ type: String,
+ value: 'code'
+ },
+ lang: {
+ type: String,
+ value: 'null'
+ },
+ scroll: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ attached() {
+ this.initCode();
+ }
+ },
+ observers: {
+ 'content'(res) {
+ this.initCode();
+ }
+ },
+ methods: {
+ initCode() {
+ let langArr = [], nodes, content = this.data.content, lang = this.data.lang;
+ if (this.data.tag === 'pre') {
+ langArr = this.SupportList();
+ if (langArr.indexOf(lang) === -1) {
+ nodes = content;
+ } else {
+ nodes = Prism.highlight(content, Prism.languages[lang], lang);
+ this.setData({ rich: true })
+ }
+ }
+ if (this.data.tag === 'code') {
+ nodes = content;
+ }
+ this.setData({
+ nodes: nodes
+ })
+ },
+ SupportList() {
+ let langs = [], i = 0;
+ for (let language in Prism.languages) {
+ if (Object.prototype.toString.call(Prism.languages[language]) !== '[object Function]') {
+ langs[i] = language;
+ i++;
+ }
+ }
+ return langs;
+ },
+ copyCode() {
+ wx.setClipboardData({
+ data: this.data.content
+ });
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.json b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.scss b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.wxml b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.wxml
new file mode 100644
index 00000000..1ba72aea
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-code/ui-code.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+ {{ nodes }}
+
+
+
+
+
+ {{title==true?'示例代码:':title}}
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.js b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.js
new file mode 100644
index 00000000..670424f6
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.js
@@ -0,0 +1,151 @@
+Component({
+ data: {
+ _uid: '',
+ content: {},
+ fixed: true
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ noNav: {
+ type: Boolean,
+ value: false
+ },
+ noSafe: {
+ type: Boolean,
+ value: false
+ },
+ bottom: {
+ type: Boolean,
+ value: false
+ },
+ bg: {
+ type: String,
+ value: 'bg-none'
+ },
+ val: {
+ type: Number,
+ value: 0
+ },
+ width: {
+ type: Number,
+ optionalTypes: String,
+ value: 0
+ },
+ opacity: {
+ type: Boolean,
+ value: false
+ },
+ opacityVal: {
+ type: Number,
+ value: 0
+ },
+ zIndex: {
+ type: Number,
+ optionalTypes: String,
+ value: 12
+ },
+ placeholder: {
+ type: Boolean,
+ value: false
+ },
+ sticky: {
+ type: Boolean,
+ value: false
+ },
+ noFixed: {
+ type: Boolean,
+ value: false
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ clickTo: {
+ type: Boolean,
+ value: false
+ },
+ scrollTop: {
+ type: Number,
+ optionalTypes: String,
+ value: 0
+ }
+ },
+ lifetimes: {
+ created() {
+
+ },
+ attached() {
+ let _uid = this.getRandom(8);
+ this.setData({_uid: _uid})
+ },
+ ready() {
+ if (this.data.sticky) {
+ this.setData({fixed: false})
+ }
+ this._computedQuery();
+ },
+ },
+ observers: {
+ 'scrollTop'(val) {
+ if (this.data.sticky) {
+ this._setFixed(val);
+ }
+ },
+ 'noFixed'(val) {
+ if (val) {
+ this.setData({fixed: false})
+ }
+ }
+ },
+ methods: {
+ //生成随机字符串
+ getRandom(num) {
+ let chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ let maxPos = chars.length, value = '';
+ for (let i = 0; i < num; i++) {
+ value += chars.charAt(Math.floor(Math.random() * maxPos));
+ }
+ return value;
+ },
+ _computedQuery() {
+ let _this = this;
+ wx.createSelectorQuery()
+ .in(_this)
+ .select('#fixed-' + _this.data._uid)
+ .boundingClientRect(data => {
+ if (data != null) {
+ //this.$emit('getHeight', data.height);
+ //this.$emit('update:height', data.height);
+ _this.setData({content: data})
+ if (_this.data.sticky) {
+ _this._setFixed(_this.data.scrollTop);
+ }
+ } else {
+ console.log('fixed-' + _this.data._uid + ' data error');
+ }
+ })
+ .exec();
+ },
+ _setFixed(value) {
+ let {bottom, content, noNav, val, sys_navBar} = this.data;
+ if (bottom) {
+ let fixed = value >= content.bottom - wx.getSystemInfoSync().windowHeight + content.height + val;
+ this.setData({fixed: fixed})
+ } else {
+ let fixed = value >= content.top - (noNav ? this.data.val : val + sys_navBar);
+ this.setData({fixed: fixed})
+ }
+ },
+ _toTop() {
+ let {clickTo, content} = this.data;
+ if (clickTo) {
+ wx.pageScrollTo({
+ scrollTop: content.top,
+ duration: 100
+ });
+ }
+ }
+ },
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.json b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.scss b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.scss
new file mode 100644
index 00000000..5920a8f2
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.scss
@@ -0,0 +1,25 @@
+.ui-fixed {
+ .ui-fixed-box {
+ position: relative;
+ width: 100%;
+ &.fixed {
+ position: fixed;
+ }
+ .ui-fixed-content {
+ position: relative;
+ //z-index: 11;
+ }
+ .ui-fixed-bg {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ z-index: 1;
+ pointer-events: none;
+ }
+ .ui-fixed-bottom{
+ height: calc(constant(safe-area-inset-bottom) / 5 * 3);
+ height: calc(env(safe-area-inset-bottom) / 5 * 3);
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.wxml b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.wxml
new file mode 100644
index 00000000..134e211a
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-fixed/ui-fixed.wxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.js b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.js
new file mode 100644
index 00000000..5561d99f
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.js
@@ -0,0 +1,57 @@
+Component({
+ data: {
+ slots: {},
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ contentui: {
+ type: String,
+ value: ''
+ },
+ icon: {
+ type: String,
+ value: ''
+ },
+ disabled: {
+ type: Boolean,
+ value: false
+ },
+ required: {
+ type: Boolean,
+ value: false
+ },
+ titleTop: {
+ type: Boolean,
+ value: false
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ isAction: {
+ type: Boolean,
+ value: false
+ },
+ },
+ lifetimes: {
+ attached() {
+
+ },
+ ready() {
+
+ },
+ },
+ observers: {
+
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.json b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.scss b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.scss
new file mode 100644
index 00000000..a8cd2ccc
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.scss
@@ -0,0 +1,68 @@
+@import '../../scss/var';
+.ui-form-group {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ position: relative;
+ padding: .5em 30rpx;
+ &.disabled {
+ .ui-form-title,
+ .ui-form-content,
+ .ui-form-action {
+ pointer-events: none;
+ }
+ }
+ .ui-form-title {
+ text-align: justify;
+ font-size: 1.1em;
+ position: relative;
+ padding-left: 0;
+ display: flex;
+ align-items: center;
+ margin-right: 30rpx;
+ &.self-start{
+ min-height: 2.6572em;
+ align-self: flex-start;
+ }
+ .ui-form-icon {
+ margin: 0 0.28572em 0 0;
+ transform: scale(1.2);
+ }
+ .ui-form-required {
+ position: relative;
+ color: $red;
+ font-size: 20px;
+ top: -0.4em;
+ right: 0em;
+ }
+ }
+ .ui-form-content {
+ flex: 1;
+ // background-color: var(--ui-BG-1);
+ // padding: 0 1em;
+ border-radius: $radius;
+ display: flex;
+ align-items: center;
+ min-height: 3em;
+ }
+ .ui-form-action {
+ margin-left: 1em;
+ }
+ &::after {
+ content: ' ';
+ width: 200%;
+ left: 0rpx;
+ position: absolute;
+ top: 0;
+ box-sizing: border-box;
+ height: 200%;
+ border-top: 1px solid var(--ui-Border);
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ }
+ &.first-item::after {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.wxml b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.wxml
new file mode 100644
index 00000000..42dd84f9
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form-group/ui-form-group.wxml
@@ -0,0 +1,13 @@
+
+
+
+ {{ title }}
+ *
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.js b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.js
new file mode 100644
index 00000000..09cb6d11
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.js
@@ -0,0 +1,18 @@
+Component({
+ data: {
+ titleWidth: 0
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ }
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.json b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.scss b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.wxml b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.wxml
new file mode 100644
index 00000000..9a1bc707
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-form/ui-form.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.js b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.js
new file mode 100644
index 00000000..00424145
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.js
@@ -0,0 +1,141 @@
+Component({
+ data: {
+ _uid: '',
+ isLoad: true,
+ error: false,
+ detail: {},
+ imgW: '',
+ imgH: ''
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ src: {
+ type: String,
+ value: ''
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ mode: {
+ type: String,
+ value: 'cover' //width cover self
+ },
+ width: {
+ type: String,
+ value: ''
+ },
+ height: {
+ type: String,
+ value: ''
+ },
+ preview: {
+ type: Boolean,
+ value: false
+ },
+ urls: {
+ type: Array,
+ value: []
+ },
+ current: {
+ type: Number,
+ value: 0
+ },
+ //加载本地图片
+ local: {
+ type: Boolean,
+ value: false
+ },
+ },
+ lifetimes: {
+ ready() {
+ let _uid = this.getRandom(8);
+ this.setData({_uid: _uid})
+ this._computed(this.data.detail);
+ },
+ },
+ observers: {
+ 'width'(val) {
+ this.setData({imgW: val})
+ },
+ 'height'(val) {
+ this.setData({imgH: val})
+ }
+ },
+ methods: {
+ //生成随机字符串
+ getRandom(num) {
+ let chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ let maxPos = chars.length, value = '';
+ for (let i = 0; i < num; i++) {
+ value += chars.charAt(Math.floor(Math.random() * maxPos));
+ }
+ return value;
+ },
+ _computed({ is_width, is_height }) {
+ let _this = this, {width, height} = this.data;
+ if (width==='' && height==='') {
+ wx.createSelectorQuery()
+ .in(this)
+ .select('#image-' + _this.data._uid)
+ .boundingClientRect(data => {
+ if (data != null) {
+ //let imgH = (data.width * is_height) / is_width + 'px';
+ //console.log(data.height,is_height,is_width)
+ _this.setData({imgH: data.height + 'px'})
+ } else {
+ console.log('image-' + _this.data._uid + ' data error');
+ }
+ })
+ .exec();
+ return false;
+ }
+ if (width!=='' && height==='') {
+ let imgH = (width * is_height) / is_width + 'px';
+ _this.setData({imgH: imgH})
+ return false;
+ }
+ if (width==='' && height!=='') {
+ let imgW = (height * is_width) / is_height + 'px';
+ _this.setData({imgW: imgW})
+ return false;
+ }
+ },
+ _computedWidth(width) {
+ return width + 'px';
+ },
+ _computedHeight(height) {
+ return height + 'px';
+ },
+ _load(e) {
+ this.setData({
+ detail: e.detail,
+ isLoad: false
+ })
+ this._computed(e.detail);
+ },
+ _error(e) {
+ this.setData({error: true})
+ },
+ _preview() {
+ if (this.data.preview) {
+ let _this = this;
+ wx.previewImage({
+ urls: _this.data.urls.length<1?[_this.data.src]:_this.data.urls,
+ current: _this.data.current,
+ longPressActions: {
+ itemList: ['发送给朋友', '保存图片', '收藏'],
+ success(data) {
+ console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
+ },
+ fail(err) {
+ console.log(err.errMsg);
+ }
+ }
+ });
+ }
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.json b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.json
new file mode 100644
index 00000000..b669b1b6
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-loading": "../ui-loading/ui-loading"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.scss b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.scss
new file mode 100644
index 00000000..b4e48653
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.scss
@@ -0,0 +1,35 @@
+.mp-ui-img-box {
+ position: relative;
+ .ui-img-box {
+ position: relative;
+ width: 100%;
+ height: 280rpx;
+ max-width: 100%;
+ .ui-img-load {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+ z-index: 1;
+ background-color: var(--ui-BG-4);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .ui-img {
+ border-radius: inherit;
+ display: none;
+ }
+ &.cover {
+ background-size: cover;
+ }
+ }
+ .ui-img-box.mp-img-local {
+ position: relative;
+ .ui-img {
+ display: block;
+ width: 100%;
+ height: 100%;
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.wxml b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.wxml
new file mode 100644
index 00000000..3b570000
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-img/ui-img.wxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.js b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.js
new file mode 100644
index 00000000..27484161
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.js
@@ -0,0 +1,67 @@
+Component({
+ data: {
+ isVisible: false
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ isType: {
+ type: String,
+ value: 'text'
+ },
+ value: {
+ type: String,
+ optionalTypes: Number,
+ value: ''
+ },
+ showTag: {
+ type: Boolean,
+ value: false
+ },
+ maxlength: {
+ type: Number,
+ optionalTypes: String,
+ value: 140
+ },
+ clear: {
+ type: Boolean,
+ value: false
+ },
+ isDisabled: {
+ type: Boolean,
+ value: false
+ },
+ },
+ lifetimes: {
+ attached() {
+ //let _uid = this.getRandom(8);
+ //this.setData({_uid: _uid})
+ },
+ ready() {
+ //this._computedQuery();
+ },
+ },
+ observers: {
+ /*'value'(val) {
+ this._setCurValue(val);
+ },*/
+ },
+ methods: {
+ _clear() {
+ this.triggerEvent('clear');
+ },
+ _toggleVisible() {
+ let isVisible = this.data.isVisible;
+ this.triggerEvent('visible',!isVisible);
+ this.setData({
+ isVisible: !isVisible
+ })
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.json b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.scss b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.scss
new file mode 100644
index 00000000..6ba99c52
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.scss
@@ -0,0 +1,57 @@
+.ui-form-input {
+ position: relative;
+ display: inline-flex;
+ width: 100%;
+ border-radius: inherit;
+ align-items: center;
+ .ui-input-wrapper,.ui-textarea-wrapper {
+ border-radius: inherit;
+ color: var(--ui-TC-1);
+ padding: 0.8em 0;
+ font-size: 28rpx;
+ width: 100%;
+ /* #ifdef H5 */
+ background-color: transparent;
+ border: none;
+ /* #endif */
+ &:focus-visible {
+ outline: none;
+ }
+ }
+ .ui-input-wrapper {
+ display: flex;
+ align-items: center;
+ }
+ .ui-textarea-wrapper {
+ min-height: 3.2em;
+ line-height: 1.4em;
+ }
+ .ui-textarea-wrapper.show-tag {
+ min-height: 5.6em;
+ padding-bottom: 2.4em;
+ }
+ .ui-textarea-tag{
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ }
+ .ui-input-visible {
+ font-size: 16px;
+ text-align: center;
+ }
+ .ui-input-icon {
+ width: 2em;
+ height: 2.6em;
+ line-height: 2.6em;
+ font-size: 28rpx;
+ text-align: center;
+ right: 0;
+ top: 0;
+ z-index: 3;
+ padding-left: .6em;
+ }
+ .tips-text {
+ height: 1em;
+ margin-top: 0.3em;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.wxml b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.wxml
new file mode 100644
index 00000000..4a3ef07e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-input-box/ui-input-box.wxml
@@ -0,0 +1,14 @@
+
+
+
+ {{value.length}} / {{maxlength}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.js b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.js
new file mode 100644
index 00000000..2fadfdfe
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.js
@@ -0,0 +1,32 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ size: {
+ type: String,
+ value: ''
+ },
+ img: {
+ type: String,
+ value: ''
+ },
+ color: {
+ type: String,
+ optionalTypes: Boolean,
+ value: ''
+ },
+ isSlot: {
+ type: Boolean,
+ value: false
+ },
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.json b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.scss b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.scss
new file mode 100644
index 00000000..990e9f24
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.scss
@@ -0,0 +1,113 @@
+@import '../../scss/var';
+
+.ui-loading-box {
+ display: inline-block;
+ vertical-align: middle;
+ .ui-loading {
+ width: 1em;
+ height: 1em;
+ margin: 0 0.5em;
+ animation: loading_spin 0.7s linear infinite;
+ .ui-loading-cut {
+ //position: relative;
+ width: 0.5em;
+ height: 1em;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ .ui-loading-loop {
+ box-sizing: border-box;
+ width: 1em;
+ height: 1em;
+ color: var(--ui-TC-3);
+ border: 4rpx solid currentColor;
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-bottom-color: transparent;
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: none;
+ margin: 0;
+ &.default {
+ animation: loop_spin 2s cubic-bezier(0.4, 0, 0.22, 1) infinite;
+ }
+ &.color {
+ animation: loop_spin_color 2s cubic-bezier(0.4, 0, 0.22, 1) infinite;
+ }
+ }
+ }
+ }
+
+ &.loop {
+ position: relative;
+ .ui-loading {
+ position: relative;
+ z-index: 1;
+ width: 6em;
+ height: 6em;
+ margin: 0;
+ .ui-loading-cut {
+ width: 3em;
+ height: 6em;
+ .ui-loading-loop {
+ width: 6em;
+ height: 6em;
+ }
+ }
+ }
+
+ .ui-loading-content {
+ position: absolute;
+ border-radius: 50%;
+ width: 6em;
+ height: 6em;
+ left: 0;
+ top: 0;
+ border: 4rpx solid var(--ui-BG-4);
+ .ui-loading-image,.ui-loading-icon {
+ width: 80% !important;
+ height: 80% !important;
+ margin: 10%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+}
+
+@keyframes loading_spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@keyframes loop_spin {
+ 0% {
+ transform: rotate(0);
+ }
+ 50% {
+ transform: rotate(-140deg);
+ }
+ 100% {
+ transform: rotate(0);
+ }
+}
+@keyframes loop_spin_color {
+ 0% {
+ transform: rotate(0);
+ color: $green;
+ }
+ 50% {
+ transform: rotate(-140deg);
+ color: $blue;
+ }
+ 100% {
+ transform: rotate(0);
+ color: $red;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.wxml b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.wxml
new file mode 100644
index 00000000..d0b67348
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-loading/ui-loading.wxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.js b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.js
new file mode 100644
index 00000000..4cb73b6b
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.js
@@ -0,0 +1,36 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ icon: {
+ type: String,
+ value: ''
+ },
+ arrow: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ isIcon: {
+ type: Boolean,
+ value: false
+ },
+ isAction: {
+ type: Boolean,
+ value: false
+ }
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.json b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.scss b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.wxml b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.wxml
new file mode 100644
index 00000000..1f7607e0
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-menu-item/ui-menu-item.wxml
@@ -0,0 +1,19 @@
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.js b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.js
new file mode 100644
index 00000000..25b4a90f
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.js
@@ -0,0 +1,39 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ //multipleSlots: true
+ },
+ properties: {
+ ui:{
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG'
+ },
+ border: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ smBorder: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ shadow: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ radius: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.json b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.scss b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.wxml b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.wxml
new file mode 100644
index 00000000..86a38b17
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-menu/ui-menu.wxml
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.js b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.js
new file mode 100644
index 00000000..3012ca47
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.js
@@ -0,0 +1,170 @@
+Component({
+ data: {
+ touch: false,
+ showKey: false
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ show: {
+ type: Boolean,
+ value: false
+ },
+ noNav: {
+ type: Boolean,
+ value: false
+ },
+ target: {
+ type: String,
+ value: ''
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ content: {
+ type: String,
+ value: ''
+ },
+ iconCancel: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ showCancel: {
+ type: Boolean,
+ optionalTypes: String,
+ value: true
+ },
+ option: {
+ type: Boolean,
+ optionalTypes: String,
+ value: true
+ },
+ cancelText: {
+ type: String,
+ value: '取消'
+ },
+ confirmText: {
+ type: String,
+ value: '确定'
+ },
+ name: {
+ type: String,
+ value: ''
+ },
+ align: {
+ type: String,
+ value: ''
+ },
+ dialog: {
+ type: String,
+ value: ''
+ },
+ tpl: {
+ type: String,
+ value: 'default'
+ },
+ transparent: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ mask: {
+ type: Boolean,
+ optionalTypes: String,
+ value: true
+ },
+ duration: {
+ type: Number,
+ value: 0
+ },
+ top: {
+ type: Number,
+ value: 0
+ }
+ },
+ lifetimes: {
+ created() {
+ //this.opacityStatus();
+
+ },
+ attached() {
+ /*this.setData({
+ isFristPage: app.cu_tools.sys_isFirstPage()
+ });*/
+ },
+ ready() {
+
+ },
+ },
+ observers: {
+ show(res) {
+ if (res) {
+ this.setData({
+ showKey : true
+ })
+ if (this.data.duration != 0) {
+ setTimeout(() => {
+ this.hide();
+ }, this.data.duration);
+ }
+ setTimeout(() => {
+ this.setData({
+ touch: true,
+ })
+ }, 500);
+ }else{
+ this.setData({
+ showKey : false
+ })
+ }
+ },
+ },
+ methods: {
+ hide() {
+ if (this.data.touch) {
+ this.setData({
+ showKey : false
+ })
+ this.closeModal()
+ }
+ },
+ _cancel() {
+ this.hide();
+ if(typeof this.successBack == 'function') this.successBack( { 'cancel': true,'confirm': false})
+ this.triggerEvent("success", { 'cancel': true,'confirm': false });
+ },
+ _confirm() {
+ this.hide();
+ if(typeof this.successBack == 'function') this.successBack( { 'confirm': true ,'cancel': false})
+ this.triggerEvent("success", { 'confirm': true ,'cancel': false});
+ },
+ _catchTap() {
+ //this.hide();
+ }
+ /*opacityStatus() {
+ let top = this.data.scrollTop;
+ let val = top > this.data.sys_navBar ? 1 : top * 0.01;
+ this.setData({
+ opacityVal: val
+ })
+ },
+ _navBack() {
+ if (this.stopBack) {
+ this.triggerEvent("navback");
+ } else {
+ app.cu_tools._backPage();
+ }
+ },
+ _navHome() {
+ app.cu_tools._toHome();
+ },*/
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.json b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.json
new file mode 100644
index 00000000..ee36a822
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-title": "../ui-title/ui-title"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.scss b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.scss
new file mode 100644
index 00000000..5542dbc3
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.scss
@@ -0,0 +1,142 @@
+.ui-modal {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 880;
+ opacity: 0;
+ outline: 0;
+ text-align: center;
+ transform: scale(1);
+ backface-visibility: hidden;
+ perspective: 2000rpx;
+ transition: 0.3s;
+ pointer-events: none;
+ .ui-dialog {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin-left: auto;
+ margin-right: auto;
+ width: 680rpx;
+ max-width: 100%;
+ background-color: var(--ui-BG);
+ border-radius: 10rpx;
+ overflow: hidden;
+ text-align: left;
+ color: var(--ui-TC);
+ .ui-modal-title {
+ // padding-top: 20rpx;
+ }
+ .ui-modal-content {
+ padding: 10rpx 50rpx 50rpx;
+ font-size: 32rpx;
+ color: var(--ui-TC-2);
+ }
+ .ui-modal-content:first-child {
+ padding: 50rpx;
+ color: var(--ui-TC);
+
+ }
+ .ui-modal-option {
+ display: flex;
+ padding: 15rpx 0;
+ justify-content: center;
+ .ui-modal-btn {
+ flex: 1;
+ padding: 15rpx 0;
+ text-align: center;
+ }
+ }
+ &.bg-none .ui-modal-option {
+ background: transparent;
+ color: #FFFFFF;
+ .ui-modal-btn{
+ border: 1px solid #FFFFFF;
+ border-radius: 500px;
+ margin: 0 40rpx;
+ color: #FFFFFF !important;
+ }
+ }
+ }
+
+ &.show {
+ opacity: 1;
+ transform: scale(1);
+ overflow-x: hidden;
+ overflow-y: auto;
+ pointer-events: auto;
+ }
+ &.show.bg-none {
+ pointer-events: none;
+ .ui-dialog {
+ pointer-events: auto;
+ }
+ }
+
+ &.bottom {
+ margin-bottom: -1000rpx;
+ &::after {
+ vertical-align: bottom;
+ }
+ .ui-dialog {
+ align-self: flex-end;
+ width: 100%;
+ border-radius: 0;
+ padding-bottom: calc(env(safe-area-inset-bottom) / 4 * 3);
+ }
+ &.show {
+ margin-bottom: 0;
+ }
+ }
+ &.top {
+ margin-top: -1000rpx;
+ &::after {
+ vertical-align: top;
+ }
+ .ui-dialog {
+ align-self: flex-start;
+ width: 100%;
+ border-radius: 0;
+ }
+ &.show {
+ margin-top: 0;
+ }
+ }
+
+ &.left,
+ &.right {
+ transform: scale(1);
+ display: flex;
+ }
+ &.right {
+ justify-content: flex-end;
+ }
+ &.left .ui-dialog,
+ &.right .ui-dialog {
+ height: 100%;
+ min-width: 200rpx;
+ border-radius: 0;
+ margin: initial;
+ transition: 0.3s;
+ width: auto;
+ padding-bottom: calc(env(safe-area-inset-bottom) / 4 * 3);
+ }
+
+ &.left .ui-dialog {
+ transform: translateX(-100%);
+ }
+
+ &.right .ui-dialog {
+ transform: translateX(100%);
+ }
+
+ &.left.show .ui-dialog,
+ &.right.show .ui-dialog {
+ transform: translateX(0%);
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.wxml b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.wxml
new file mode 100644
index 00000000..402d9421
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-modal/ui-modal.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+ {{ content }}
+
+ {{ cancelText }}
+ {{ confirmText }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.js b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.js
new file mode 100644
index 00000000..beb6e847
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.js
@@ -0,0 +1,116 @@
+Component({
+ data: {
+ statusCur: '',
+ capsuleStyle: {},
+ capsuleBack: {},
+ opacityVal: 0,
+ isFirstPage: true
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ back: {
+ //是否返回上一页
+ type: Boolean,
+ value: true
+ },
+ backtext: {
+ //返回文本
+ type: String,
+ value: ''
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'bg-blur'
+ },
+ status: {
+ //状态栏颜色 可以选择light dark/其他字符串视为黑色
+ type: String,
+ value: ''
+ },
+ opacity: {
+ //是否开启滑动渐变
+ type: Boolean,
+ value: false
+ },
+ opacityChange: {
+ //开启滑动渐变后 文本样式是否翻转
+ type: Boolean,
+ value: false
+ },
+ opacityBg: {
+ //开启滑动渐变后 返回按钮是否添加背景
+ type: Boolean,
+ value: false
+ },
+ noFixed: {
+ //是否浮动
+ type: Boolean,
+ value: false
+ },
+ capsule: {
+ //是否开启胶囊返回
+ type: Boolean,
+ value: false
+ },
+ stopBack: {
+ type: Boolean,
+ value: false
+ },
+ placeholder: {
+ type: Boolean,
+ value: true
+ },
+ isSlot: {
+ type: Boolean,
+ value: false
+ },
+ isCenter: {
+ type: Boolean,
+ value: false
+ },
+ isRight: {
+ type: Boolean,
+ value: false
+ },
+ scrollTop: {
+ type: Number,
+ value: 0
+ },
+ },
+ lifetimes: {
+ ready() {
+ const page = this.sys_isFirstPage();
+ this.setData({isFirstPage: page});
+ this.opacityStatus();
+ },
+ },
+ observers: {
+ 'scrollTop'() {
+ this.opacityStatus();
+ },
+ },
+ methods: {
+ opacityStatus() {
+ let {scrollTop, sys_navBar} = this.data;
+ let val = scrollTop > sys_navBar ? 1 : scrollTop * 0.01;
+ this.setData({opacityVal: val})
+ },
+ _navBack() {
+ if (this.data.stopBack) {
+ this.triggerEvent("navBack");
+ } else {
+ this._backPage();
+ }
+ },
+ _navHome() {
+ this._toHome();
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.json b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.json
new file mode 100644
index 00000000..15bd0943
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-fixed": "../ui-fixed/ui-fixed"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.scss b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.scss
new file mode 100644
index 00000000..d7d9842b
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.scss
@@ -0,0 +1,144 @@
+.ui-navbar-box {
+ background-color: transparent;
+ width: 100%;
+ .ui-bar {
+ position: relative;
+ z-index: 2;
+ white-space: nowrap;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .left {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex: 1;
+ .back {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .back-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 56rpx;
+ height: 56rpx;
+ margin: 0 10rpx;
+ &.opacityIcon {
+ position: relative;
+ border-radius: 50%;
+ background-color: rgba(127, 127, 127, 0.5);
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ height: 200%;
+ width: 200%;
+ left: 0;
+ top: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ opacity: 0.1;
+ border: 1px solid currentColor;
+ pointer-events: none;
+ }
+ &::before {
+ transform: scale(0.9);
+ }
+ }
+ }
+ }
+ .capsule {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-radius: 100px;
+ &.dark {
+ background-color: rgba(255, 255, 255, 0.5);
+ }
+ &.light {
+ background-color: rgba(0, 0, 0, 0.15);
+ }
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ height: 60%;
+ width: 1px;
+ left: 50%;
+ top: 20%;
+ background-color: currentColor;
+ opacity: 0.1;
+ pointer-events: none;
+ }
+ &::before {
+ content: '';
+ display: block;
+ position: absolute;
+ height: 200%;
+ width: 200%;
+ left: 0;
+ top: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ opacity: 0.1;
+ border: 1px solid currentColor;
+ pointer-events: none;
+ }
+ .capsule-back,
+ .capsule-home {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 1;
+ }
+ &.isFirstPage {
+ .capsule-back,
+ &::after {
+ display: none;
+ }
+ }
+ }
+ }
+ .right {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex: 1;
+ .right-content {
+ position: relative;
+ display: flex;
+ align-items: center;
+ flex-direction: row-reverse;
+ flex: 1;
+ }
+ }
+ .center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-overflow: ellipsis;
+ text-align: center;
+ flex: 2;
+ .image {
+ display: block;
+ height: 36px;
+ max-width: calc(100vw - 200px);
+ }
+ }
+ }
+ .ui-bar-bg {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ z-index: 1;
+ pointer-events: none;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.wxml b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.wxml
new file mode 100644
index 00000000..4df2bea8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-navbar/ui-navbar.wxml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+ {{ backtext }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.js b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.js
new file mode 100644
index 00000000..a56674be
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.js
@@ -0,0 +1,191 @@
+let button = {}
+Component({
+ name : 'UiPopover',
+ data: {
+ popover: false,
+ BoxStyle: '',
+ contentStyle: '',
+ arrowStyle: '',
+ content: {},
+ _uid: 0,
+ sys_layer: 0
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ tips: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG'
+ },
+ mask: {
+ type: Boolean,
+ value: false
+ },
+ show: {
+ type: Boolean,
+ optionalTypes: String,
+ value: 'change'
+ },
+ hover: {
+ type: Boolean,
+ value: false
+ },
+ index: {
+ type: Number,
+ value: 0
+ },
+ time: {
+ type: Number,
+ value: 0
+ },
+ bottom: {
+ type: Boolean,
+ value: false
+ },
+ isChange: {
+ type: Boolean,
+ value: false
+ },
+ zIndex: {
+ type: Number,
+ optionalTypes: String,
+ value: 0
+ },
+ },
+
+ lifetimes: {
+ attached() {
+ this.setData({
+ _uid: this.__wxWebviewId__
+ })
+ wx.nextTick(() => {
+ this._computedQuery(wx.getSystemInfoSync().windowWidth, wx.getSystemInfoSync().windowHeight);
+ })
+ },
+ },
+ observers: {
+ 'popover'(val) {
+ this._computedQuery(wx.getSystemInfoSync().windowWidth, wx.getSystemInfoSync().windowHeight);
+ if (val) {
+ if (this.data.tips != '' || this.data.time > 0) {
+ setTimeout(
+ () => {
+ this.setData({
+ popover: false
+ })
+ },
+ this.data.time == 0 ? 3000 : this.data.time
+ );
+ }
+ this.setData({
+ zIndex : this.data.zIndex + 600
+ })
+ }else{
+ this.setData({
+ zIndex : this.data.zIndex + 600
+ })
+ }
+ // this.$emit('update:show', val);
+ },
+ 'show'(val) {
+ this.setData({
+ popover : val
+ })
+ }
+ },
+ methods: {
+ closePopover(){
+ this.setData({
+ popover : false
+ })
+ },
+ _computedQuery(w, h) {
+ wx.createSelectorQuery()
+ .in(this)
+ .select('#popover-button-' + this.data._uid)
+ .boundingClientRect(res => {
+ if (res != null) {
+ button = res;
+ } else {
+ console.log('popover-button-' + this.data._uid + ' data error');
+ }
+ })
+ .select('#popover-content-' + this.data._uid)
+ .boundingClientRect(
+ content => {
+ if (content != null) {
+ this.setData({
+ content: content
+ })
+ let contentStyle = '';
+ let arrowStyle = '';
+ this.setData({
+ BoxStyle: `width:${w}px; left:-${button.left}px;z-index: ${this.data.zIndex + 102}`
+ })
+ // 判断气泡在上面还是下面
+ if (button.bottom < h / 2 || this.data.bottom) {
+ // '下';
+ contentStyle = contentStyle + `top:10px;`;
+ arrowStyle = arrowStyle + `top:${-5}px;`;
+ } else {
+ // '上';
+ contentStyle = contentStyle + `bottom:${button.height + 10}px;`;
+ arrowStyle = arrowStyle + `bottom:${-5}px;`;
+ }
+
+ // 判断气泡箭头在左中右
+ let btnCenter = button.right - button.width / 2;
+ let contentCenter = content.right - content.width / 2;
+ if ((btnCenter < w / 3 && content.width > btnCenter) || (content.width > w / 2 &&
+ btnCenter < w / 2)) {
+ // '左';
+ contentStyle = contentStyle + `left:10px;`;
+ arrowStyle = arrowStyle + `left:${btnCenter - 17}px;`;
+ } else if ((btnCenter > (w / 6) * 4 && content.width > w - btnCenter) || (content.width >
+ w / 2 && btnCenter > w / 2)) {
+ // '右';
+ contentStyle = contentStyle + `right:10px;`;
+ arrowStyle = arrowStyle + `right:${w - btnCenter - 17}px;`;
+ } else {
+ // '中';
+ contentStyle = contentStyle +
+ `left:${button.left - content.width / 2 + button.width / 2}px;`;
+ arrowStyle = arrowStyle + `left:0px;right:0px;margin:auto;`;
+ }
+ this.setData({
+ arrowStyle: arrowStyle + `z-index:${this.data.zIndex + 1};`,
+ contentStyle: contentStyle + `z-index:${this.data.zIndex + 2};`
+ })
+ } else {
+ console.log('popover-content-' + this.data._uid + ' data error');
+ }
+ }
+ )
+ .exec()
+ },
+ popoverClick() {
+ if (this.data.isChange) {
+ return false
+ }
+ if (this.data.tips == '') {
+ this.setData({
+ popover: !this.data.popover
+ })
+ } else {
+ this.setData({
+ popover: true
+ })
+ }
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.json b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.scss b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.scss
new file mode 100644
index 00000000..2ca04e07
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.scss
@@ -0,0 +1,82 @@
+.ui-popover {
+ position: relative;
+ display: inline-block;
+
+ .ui-popover-button {
+ position: relative;
+ }
+
+ .ui-popover-box {
+ position: absolute;
+
+ .ui-popover-content-box {
+ position: absolute;
+
+ .ui-popover-content {
+ position: relative;
+ }
+
+ .ui-popover-arrow {
+ position: absolute;
+ height: 15px;
+ width: 15px;
+ border-radius: 2px;
+ transform: rotate(45deg);
+ }
+
+ &::after {
+ content: '';
+ width: 100%;
+ height: 110%;
+ position: absolute;
+ background-color: #000000;
+ top: 5%;
+ left: 0;
+ filter: blur(15px);
+ opacity: 0.15;
+ }
+ }
+ }
+
+ .ui-popover-mask {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ }
+
+ &.show {
+ .ui-popover-button {}
+
+ .ui-popover-content-box {
+ opacity: 1;
+ pointer-events: auto;
+ }
+
+ .ui-popover-arrow {
+ display: block;
+ }
+
+ .ui-popover-mask {
+ display: block;
+ }
+ }
+
+ &.hide {
+ .ui-popover-button {}
+
+ .ui-popover-content-box {
+ opacity: 0;
+ pointer-events: none;
+ }
+
+ .ui-popover-arrow {
+ display: none;
+ }
+
+ .ui-popover-mask {
+ display: none;
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.wxml b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.wxml
new file mode 100644
index 00000000..9be03f77
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-popover/ui-popover.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ {{ tips }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.js b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.js
new file mode 100644
index 00000000..e26dae04
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.js
@@ -0,0 +1,65 @@
+Component({
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ progress: {
+ type: Number,
+ optionalTypes: String,
+ value: 0
+ },
+ progressArray: {
+ type: Array,
+ value: []
+ },
+ bg: {
+ type: String,
+ optionalTypes: Array,
+ value: 'ui-BG-Main'
+ },
+ bgArray: {
+ type: Array,
+ value: ['ui-BG-Main', 'ui-BG-Main-1', 'ui-BG-Main-2', 'ui-BG-Main-3']
+ },
+ active: {
+ type: Boolean,
+ value: false
+ },
+ striped: {
+ type: Boolean,
+ value: false
+ },
+ radius: {
+ type: Boolean,
+ value: true
+ },
+ round: {
+ type: Boolean,
+ value: false
+ },
+ border: {
+ type: Boolean,
+ value: false
+ },
+ lg: {
+ type: Boolean,
+ value: false
+ },
+ sm: {
+ type: Boolean,
+ value: false
+ },
+ shadow: {
+ type: String,
+ optionalTypes: Boolean,
+ value: ''
+ }
+ },
+ methods: {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.json b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.json
new file mode 100644
index 00000000..15bd0943
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-fixed": "../ui-fixed/ui-fixed"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.scss b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.scss
new file mode 100644
index 00000000..c54f4e28
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.scss
@@ -0,0 +1,84 @@
+.ui-progress {
+ height: 1em;
+ margin: 0.14286em 0;
+ background-color: var(--ui-BG-4);
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+ font-size: 32rpx;
+
+ &.lg {
+ font-size: 40rpx;
+ }
+
+ &.sm {
+ font-size: 24rpx;
+ height: 0.7em;
+ margin: 0.5em 0;
+ }
+
+ .ui-progress-bar {
+ width: 0;
+ height: 100%;
+ align-items: center;
+ display: flex;
+ justify-items: flex-end;
+ justify-content: space-around;
+ font-size: 20rpx;
+ color: var(--white);
+ transition: width 0.6s ease;
+ position: relative;
+ z-index: 1;
+
+ &:first-child {
+ border-top-left-radius: inherit;
+ border-bottom-left-radius: inherit;
+ }
+
+ &:last-child {
+ border-top-right-radius: inherit;
+ border-bottom-right-radius: inherit;
+ }
+ }
+
+ .ui-progress-text {
+ align-items: center;
+ display: flex;
+ font-size: 0.75em;
+ position: relative;
+ z-index: 2;
+ text-indent: 10rpx;
+ flex: 1;
+ justify-content: center;
+ }
+
+ &.text-progress {
+ padding-right: 60rpx;
+ }
+
+ &.striped .ui-progress-bar {
+ background-image: linear-gradient(45deg,
+ rgba(255, 255, 255, 0.15) 25%,
+ transparent 25%,
+ transparent 50%,
+ rgba(255, 255, 255, 0.15) 50%,
+ rgba(255, 255, 255, 0.15) 75%,
+ transparent 75%,
+ transparent);
+ background-size: 72rpx 72rpx;
+ }
+
+ &.active .view {
+ animation: progress-stripes 2s linear infinite;
+ }
+}
+
+@keyframes progress-stripes {
+ from {
+ background-position: 72rpx 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.wxml b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.wxml
new file mode 100644
index 00000000..619a2f26
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-progress/ui-progress.wxml
@@ -0,0 +1,10 @@
+
+
+
+ {{ item }}%
+
+
+
+ {{ progress }}%
+
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.js b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.js
new file mode 100644
index 00000000..a70147c6
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.js
@@ -0,0 +1,74 @@
+Component({
+ relations: {
+ '../ui-radio/ui-radio': {
+ type: 'child', // 关联的目标节点应为子节点
+ linked(target) {
+ // 每次有子组件被插入时执行,target是该节点实例对象,触发在该节点attached生命周期之后
+ },
+ linkChanged(target) {
+ // 每次有子组件被移动后执行,target是该节点实例对象,触发在该节点moved生命周期之后
+ },
+ unlinked(target) {
+ // 每次有子组件被移除时执行,target是该节点实例对象,触发在该节点detached生命周期之后
+ }
+ }
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ value: {
+ type: String,
+ optionalTypes: [Number, Boolean],
+ value: ''
+ },
+ label: {
+ type: String,
+ optionalTypes: [Number, Boolean],
+ value: ''
+ },
+ disabled: {
+ type: Boolean,
+ value: false
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ clearable: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ ready() {
+ //this._deepSetValue()
+ },
+ },
+ observers: {
+ 'value'(res) {
+ this._deepSetValue()
+ }
+ },
+ methods: {
+ _deepSetValue() {
+ let _this = this;
+ let nodes = this.getRelationNodes('../ui-radio/ui-radio');
+ if (Array.isArray(nodes)) {
+ nodes.forEach((child) => {
+ if (typeof child._setValue == 'function') {
+ child._setValue(_this.data.value)
+ }
+ });
+ }
+ },
+ _onRadioChange(label) {
+ this.triggerEvent('input', label);
+ this.triggerEvent('change', label);
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.json b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.scss b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.wxml b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.wxml
new file mode 100644
index 00000000..3cc4bf17
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio-group/ui-radio-group.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.js b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.js
new file mode 100644
index 00000000..e0531230
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.js
@@ -0,0 +1,138 @@
+Component({
+ relations: {
+ '../ui-radio-group/ui-radio-group': {
+ type: 'parent'
+ }
+ },
+ data: {
+ currentValue: null,
+ isGroup: null,
+ isDisabled: null,
+ isClearable: null,
+ isChecked: null,
+ hasUiCard: null
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ value: {
+ type: String,
+ optionalTypes: [Number, Boolean],
+ value: ''
+ },
+ label: {
+ type: String,
+ optionalTypes: [Number, Boolean],
+ value: ''
+ },
+ disabled: {
+ type: Boolean,
+ value: false
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ unbg: {
+ type: String,
+ value: 'borderss'
+ },
+ src: {
+ type: String,
+ value: ''
+ },
+ clearable: {
+ type: Boolean,
+ value: false
+ },
+ none: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ ready() {
+ let parent = this._nodesSetValue();
+ if (parent) {
+ this._setValue(parent.data.value);
+ }
+ },
+ },
+ observers: {
+ 'value'(val) {
+ this._setValue(val);
+ }
+ },
+ methods: {
+ _nodesSetValue() {
+ let radioNodes = this.getRelationNodes('../ui-radio-group/ui-radio-group');
+ if (Array.isArray(radioNodes) && radioNodes.length > 0) {
+ return radioNodes[0];
+ } else {
+ return false;
+ }
+ },
+ isComputed() {
+ let {disabled, clearable, label, currentValue, ui} = this.data;
+ let parent = this._nodesSetValue();
+ let isGroup = !!parent;
+ //isDisabled
+ let isDisabled = isGroup?parent.data.disabled:disabled;
+ //isClearable
+ let isClearable = isGroup?parent.data.clearable:clearable;
+ //isChecked
+ let isChecked = (isGroup && parent.data.value == label) || (!isGroup && currentValue == label);
+ //_has
+ let hasUiCard = ui.indexOf('card') !== -1;
+ //设置数据
+ this.setData({
+ isGroup: isGroup,
+ isDisabled: isDisabled,
+ isClearable: isClearable,
+ isChecked: isChecked,
+ hasUiCard: hasUiCard
+ });
+ },
+ _onRadioClick() {
+ let {isGroup, isDisabled, label} = this.data;
+ if (isGroup && !isDisabled) {
+ this._choose();
+ }
+ if (!isGroup && !isDisabled) {
+ this.triggerEvent('input', label);
+ this.triggerEvent('change', label);
+ }
+ },
+ _choose() {
+ let {currentValue, label, isGroup, isClearable} = this.data;
+ if (currentValue != label) {
+ this.setData({currentValue: label});
+ this.triggerEvent('input', label);
+ this.triggerEvent('change', label);
+ if (isGroup) {
+ let parent = this._nodesSetValue();
+ parent._onRadioChange(label);
+ }
+ } else if (isClearable) {
+ this.setData({currentValue: null});
+ this.triggerEvent('input', null);
+ this.triggerEvent('change', null);
+ if (isGroup) {
+ let parent = this._nodesSetValue();
+ parent._onRadioChange(null);
+ }
+ }
+ },
+ _setValue(groupValue) {
+ this.setData({
+ currentValue: groupValue
+ });
+ this.isComputed();
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.json b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.scss b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.scss
new file mode 100644
index 00000000..eed6a866
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.scss
@@ -0,0 +1,169 @@
+@import '../../scss/var';
+
+.ui-radio {
+ display: inline-flex;
+ align-items: center;
+ margin: 0 1em 0 0.14286em;
+
+ .ui-radio-input {
+ margin: 0 0.5em 0 0.14286em;
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+ vertical-align: middle;
+ &::before {
+ content: '';
+ position: absolute;
+ width: 0%;
+ height: 0%;
+ background-color: currentColor;
+ border-radius: 50%;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: auto;
+ }
+ }
+
+ .ui-radio-input.cur {
+ position: relative;
+ &::before {
+ width: 10px;
+ height: 10px;
+ transition: $transition-base;
+ }
+ }
+ &.check {
+ .ui-radio-input {
+ &::before {
+ font-family: 'colorui';
+ content: '\e69f';
+ width: 18px;
+ height: 18px;
+ font-size: 0%;
+ background-color: transparent;
+ }
+ }
+ .ui-radio-input.cur {
+ &::before {
+ width: 18px;
+ height: 18px;
+ font-size: 1em;
+ transform: scale(0.8);
+ text-align: center;
+ line-height: 18px;
+ }
+ }
+ }
+ &.line {
+ .ui-radio-input.cur {
+ &::before {
+ width: calc(100% - 2px);
+ height: calc(100% - 2px);
+ background-color: var(--ui-BG);
+ }
+ &::after {
+ content: '';
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ background-color: inherit;
+ border-radius: 50%;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: auto;
+ }
+ }
+ }
+ &.lg {
+ .ui-radio-input {
+ font-size: 18px;
+ }
+ }
+ &.img {
+ position: relative;
+ margin: 0 0.28572em 0 0.28572em;
+ .ui-radio-input {
+ width: 42px;
+ height: 42px;
+ border-radius: 0px;
+ position: absolute;
+ margin: 0;
+ left: -1px;
+ top: -1px;
+ // opacity: 0;
+ &::before {
+ width: 40px;
+ height: 40px;
+ border-radius: $radius;
+ }
+ &.cur {
+ width: 44px;
+ height: 44px;
+ top: -2px;
+ left: -2px;
+ border-radius: 7px !important;
+ opacity: 0.8;
+ }
+ }
+ .ui-radio-img {
+ position: relative;
+ width: 40px;
+ height: 40px;
+ display: block;
+ overflow: hidden;
+ border-radius: 10px;
+ }
+ }
+ &.card {
+ display: flex;
+ margin: 30rpx;
+ padding: 30rpx;
+ position: relative;
+ border-radius: $radius !important;
+ flex-direction: row-reverse;
+ justify-content: space-between;
+ .ui-radio-bg {
+ content: '';
+ position: absolute;
+ width: 200%;
+ height: 200%;
+ transform: scale(0.5);
+ border-radius: #{$radius * 2} !important;
+ z-index: 0;
+ left: 0;
+ top: 0;
+ transform-origin: 0 0;
+ background-color: var(--ui-BG);
+ }
+ .ui-radio-input {
+ position: relative;
+ z-index: 1;
+ margin-right: 0;
+ }
+ .ui-radio-bg::after {
+ content: '';
+ position: absolute;
+ width: calc(200% - 16px);
+ height: calc(200% - 16px);
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ // border: 1px solid inherit;
+ background-color: var(--ui-BG) !important;
+ left: 4px;
+ top: 4px;
+ border-radius: #{$radius * 2 + 8} !important;
+ z-index: 0;
+ }
+ .ui-radio-content {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ flex: 1;
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.wxml b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.wxml
new file mode 100644
index 00000000..d618c508
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-radio/ui-radio.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.js b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.js
new file mode 100644
index 00000000..66c5f34a
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.js
@@ -0,0 +1,43 @@
+Component({
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ direction: {
+ type: String,
+ value: 'row'
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ arrow: {
+ type: Boolean,
+ value: false
+ },
+ number: {
+ type: Boolean,
+ value: false
+ },
+ column: {
+ type: Boolean,
+ value: false
+ },
+ cur: {
+ type: Number,
+ value: 0
+ },
+ curStyle: {
+ type: String,
+ value: 'ui-TC-Main'
+ },
+ err: {
+ type: Number,
+ value: 0
+ },
+ info: {
+ type: Array,
+ value: []
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.json b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.scss b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.wxml b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.wxml
new file mode 100644
index 00000000..ac1c2eb8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-steps/ui-steps.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ {{ item.title }}
+ {{ item.desc }}
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.js b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.js
new file mode 100644
index 00000000..349744de
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.js
@@ -0,0 +1,73 @@
+Component({
+ data: {
+ cur: 0,
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ circular: {
+ type: Boolean,
+ value: true
+ },
+ autoplay: {
+ type: Boolean,
+ value: true
+ },
+ interval: {
+ type: Number,
+ value: 3000
+ },
+ duration: {
+ type: Number,
+ value: 800
+ },
+ info: {
+ type: Array,
+ value: []
+ },
+ swiperCss: {
+ type: String,
+ value: 'bg-none'
+ },
+ mode: {
+ type: String,
+ value: 'default'
+ },
+ dotStyle: {
+ type: String,
+ value: 'default'
+ },
+ dotCur: {
+ type: String,
+ value: 'bg-black'
+ },
+ height: {
+ type: String,
+ value: '272rpx'
+ },
+ imgHeight: {
+ type: String,
+ value: '272rpx'
+ },
+ imgName: {
+ type: String,
+ value: 'img'
+ }
+ },
+ methods: {
+ swiperChange(e) {
+ this.setData({cur: e.detail.current})
+ this.triggerEvent("change",e.detail.current);
+ },
+ toTap(e) {
+ let item = e.currentTarget.dataset.item;
+ //如果类型、url为空,或者类型为eve时,以事件返回。
+ if (!item.type || !item.url || item.type === 'eve') {
+ this.triggerEvent("uiTap", item);
+ } else {
+ this._toPath(item.url,item.type);
+ }
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.json b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.scss b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.scss
new file mode 100644
index 00000000..606587e2
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.scss
@@ -0,0 +1,201 @@
+.ui-swiper {
+ position: relative;
+ .ui-swiper-main {
+ width: 100%;
+ height: 100%;
+ }
+ .ui-swiper-main .image {
+ width: 100%;
+ height: 100%;
+ }
+ .ui-swiper-dot {
+ position: absolute;
+ width: 100%;
+ bottom: 20rpx;
+ height: 30rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ &.default .view {
+ display: inline-flex;
+ border-radius: 50rpx;
+ width: 6px;
+ height: 6px;
+ border: 2px solid transparent;
+ margin: 0 10rpx;
+ opacity: 0.3;
+ position: relative;
+ justify-content: center;
+ align-items: center;
+ &.cur {
+ width: 8px;
+ height: 8px;
+ opacity: 1;
+ border: 0px solid transparent;
+ }
+ &.cur::after {
+ content: '';
+ border-radius: 50rpx;
+ width: 4px;
+ height: 4px;
+ background-color: #fff;
+ }
+ }
+ &.long .view {
+ display: inline-block;
+ border-radius: 100rpx;
+ width: 6px;
+ height: 6px;
+ margin: 0 10rpx;
+ opacity: 0.3;
+ position: relative;
+ &.cur {
+ width: 24rpx;
+ opacity: 1;
+ }
+ &.cur::after {
+ }
+ }
+ &.line {
+ bottom: 20rpx;
+ .view {
+ display: inline-block;
+ width: 30px;
+ height: 3px;
+ opacity: 0.3;
+ position: relative;
+ &.cur {
+ opacity: 1;
+ }
+ }
+ }
+ &.tag {
+ justify-content: flex-end;
+ position: absolute;
+ bottom: 20rpx;
+ right: 20rpx;
+ }
+ }
+ &.card {
+ .swiper-item {
+ width: 610rpx !important;
+ left: 70rpx;
+ box-sizing: border-box;
+ padding: 20rpx 0rpx 60rpx;
+ overflow: initial;
+ }
+ .swiper-item .ui-swiper-main {
+ width: 100%;
+ display: block;
+ height: 100%;
+ border-radius: 10rpx;
+ transform: scale(0.9);
+ transition: all 0.2s ease-in 0s;
+ position: relative;
+ background-size: cover;
+ .image {
+ height: 100%;
+ border-radius: inherit;
+ }
+ }
+ .swiper-item .ui-swiper-main::before {
+ content: '';
+ display: block;
+ background: inherit;
+ filter: blur(5px);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 10rpx;
+ left: 10rpx;
+ z-index: -1;
+ opacity: 0.3;
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+ }
+ .swiper-item.cur .ui-swiper-main {
+ transform: scale(1);
+ transition: all 0.2s ease-in 0s;
+ }
+ .ui-swiper-dot.tag {
+ position: absolute;
+ bottom: 85rpx;
+ right: 75rpx;
+ }
+ }
+ &.hotelCard {
+ .swiper-item {
+ width: 650rpx !important;
+ left: 30rpx;
+ box-sizing: border-box;
+ padding: 0rpx 0rpx 50rpx;
+ overflow: initial;
+ }
+ .swiper-item .ui-swiper-main {
+ width: 100%;
+ display: block;
+ height: 100%;
+ border-radius: 10rpx;
+ transform: scale(0.9);
+ opacity: 0.8;
+ transition: all 0.2s ease-in 0s;
+ position: relative;
+ background-size: cover;
+ .image {
+ width: 100%;
+ height: 400rpx;
+ border-radius: 10rpx 10rpx 0 0;
+ }
+ }
+ .swiper-item .ui-swiper-main::before {
+ content: '';
+ display: block;
+ background: inherit;
+ filter: blur(5px);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 10rpx;
+ left: 10rpx;
+ z-index: -1;
+ opacity: 0.3;
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+ }
+ .swiper-item.cur .ui-swiper-main {
+ transform: scale(1);
+ transition: all 0.2s ease-in 0s;
+ opacity: 1;
+ }
+ .ui-swiper-dot {
+ display: none;
+ }
+ }
+ &.hotelDetail {
+ .swiper-item {
+ width: 690rpx !important;
+ left: 30rpx;
+ box-sizing: border-box;
+ padding: 20rpx 0rpx;
+ overflow: initial;
+ }
+ .swiper-item .ui-swiper-main {
+ width: 100%;
+ display: block;
+ height: 100%;
+ transform: scale(0.96);
+ transition: all 0.2s ease-in 0s;
+ position: relative;
+ background-size: cover;
+ .image {
+ height: 100%;
+ }
+ }
+ .swiper-item.cur .ui-swiper-main {
+ transform: scale(0.96);
+ transition: all 0.2s ease-in 0s;
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.wxml b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.wxml
new file mode 100644
index 00000000..cdb5b765
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-swiper/ui-swiper.wxml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cur + 1 }} / {{ info.length }}
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.js b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.js
new file mode 100644
index 00000000..697718f5
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.js
@@ -0,0 +1,64 @@
+Component({
+ data: {
+ tempChecked: false
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ text: {
+ type: String,
+ value: ''
+ },
+ checked: {
+ type: Boolean,
+ value: false
+ },
+ size: {
+ type: String,
+ value: 'sm'
+ },
+ disabled: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ created() {
+ let checked = this.data.checked;
+ this.setData({
+ tempChecked: checked
+ });
+ },
+ attached() {
+
+ },
+ ready() {
+
+ },
+ },
+ observers: {
+ 'checked'(res) {
+ this.setData({
+ tempChecked: res
+ });
+ }
+ },
+ methods: {
+ clickSwitch() {
+ let val = !this.data.tempChecked;
+ this.setData({
+ tempChecked: val
+ });
+ this.triggerEvent('change', val);
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.json b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.scss b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.scss
new file mode 100644
index 00000000..6f1276a9
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.scss
@@ -0,0 +1,43 @@
+.ui-switch {
+ display: inline-block;
+ cursor: pointer;
+ .ui-switch-wrapper {
+ display: inline-flex;
+ align-items: center;
+ vertical-align: middle;
+ }
+ .ui-switch-input {
+ appearance: none;
+ position: relative;
+ width: 47px;
+ height: 26px;
+ outline: 0;
+ border-radius: 16px;
+ box-sizing: border-box;
+ background-color: rgba(119,119,119,.3);
+ transition: background-color 0.1s, border 0.1s;
+ &:after {
+ content: ' ';
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 200px;
+ transition: transform 0.3s;
+ width: 20px;
+ height: 20px;
+ margin: 3px;
+ background-color: #fff;
+ }
+ &.ui-switch-input-checked {
+ &:after {
+ transform: translateX(21px);
+ }
+ }
+ }
+ &.disabled {
+ cursor: not-allowed;
+ .ui-switch-input {
+ opacity: 0.7;
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.wxml b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.wxml
new file mode 100644
index 00000000..8c80971b
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-switch/ui-switch.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.js b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.js
new file mode 100644
index 00000000..8b39e0d8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.js
@@ -0,0 +1,141 @@
+Component({
+ data: {
+ isLoading: false,
+ tabBarIndex: 0,
+ isFooter: false,
+ },
+ options: {
+ addGlobalClass: true,
+ },
+ properties: {
+ bg: { //背景颜色
+ type: String,
+ value: 'ui-BG-2'
+ },
+ ui: { //其他class
+ type: String,
+ value: ''
+ },
+ img: {
+ type: String,
+ value: ''
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ navBg: {
+ type: String,
+ value: 'bg-blur'
+ },
+ styles: { //样式
+ type: String,
+ value: ''
+ },
+ loading: { //是否加载
+ type: String,
+ optionalTypes: Boolean,
+ value: 'auto'
+ },
+ tabbar: {
+ type: Boolean,
+ value: false
+ },
+ footer: {
+ type: Boolean,
+ value: ''
+ },
+ footerText: {
+ type: String,
+ value: '每一份人情都值得礼记'
+ },
+ loadingIcon: {
+ type: String,
+ value: '_icon-loading'
+ },
+ },
+ lifetimes: {
+ created() {
+ this.setLoading();
+ },
+ attached() {
+ let loading = this.data.loading;
+ this.setData({
+ isLoading: loading
+ });
+ },
+ ready() {
+ this.setTabBar();
+ this.setFooterShow();
+ },
+ },
+ observers: {
+ 'tabbar'() {
+ this.setTabBar();
+ },
+ 'loading'(val) {
+ this.setData({
+ isLoading: val
+ })
+ this.setLoading();
+ },
+ 'footer'() {
+ this.setFooterShow();
+ },
+ },
+ methods: {
+ setTabBar() {
+ let tabBar = this.data.tabbar;
+ if (tabBar) {
+ wx.hideTabBar();
+ this._onPage();
+ }
+ },
+ setFooterShow() {
+ let footer = this.data.footer;
+ let cuFooter = this.data.$cuConfig.footer;
+ let isFooter = cuFooter;
+ if (footer === '') {
+ isFooter = cuFooter;
+ } else {
+ isFooter = footer;
+ }
+ this.setData({
+ isFooter: isFooter
+ })
+ },
+ _onPage() {
+ let page = getCurrentPages();
+ if (page.length > 0) {
+ let _this = this,
+ tabBar = this.data.$cuConfig.tabBar;
+ let url = page[page.length - 1].route
+ tabBar.map((item, index) => {
+ if (item.url === '/' + url) {
+ _this.setData({
+ tabBarIndex: index
+ })
+ }
+ })
+ } else {
+ this.setData({
+ tabBarIndex: 0
+ })
+ }
+ },
+ setLoading() {
+ let _this = this,
+ loading = this.data.loading;
+ setTimeout(() => {
+ if (loading === 'auto') {
+ _this.setData({
+ isLoading: false
+ })
+ }
+ }, 800);
+ },
+ modalSuccess() {
+ return this.data.$cuStore.$Modal
+ },
+ },
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.json b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.json
new file mode 100644
index 00000000..deb8104e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.json
@@ -0,0 +1,10 @@
+{
+ "component": true,
+ "usingComponents": {
+ "app-navbar": "../app-navbar/app-navbar",
+ "app-footer": "../app-footer/app-footer",
+ "ui-tabbar": "../ui-tabbar/ui-tabbar",
+ "ui-modal": "../ui-modal/ui-modal",
+ "ui-toast": "../ui-toast/ui-toast"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.scss b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.scss
new file mode 100644
index 00000000..84568929
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.scss
@@ -0,0 +1,39 @@
+.ui-page {
+ position: relative;
+ color: var(--ui-TC);
+ background-color: var(--ui-BG-1) !important;
+ z-index: 2;
+ display: flex;
+ .page-body {
+ flex: 1;
+ min-height: 100vh;
+ position: relative;
+ z-index: 1;
+ overflow: hidden;
+ .page-body-main {
+ position: relative;
+ z-index: 1;
+ }
+ .page-img {
+ height: 177vw;
+ width: 100vw;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 0;
+ }
+ }
+}
+.loading-body {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ z-index: 999;
+ // opacity: .98;
+}
diff --git a/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.wxml b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.wxml
new file mode 100644
index 00000000..5276d416
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-sys/ui-sys.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ 加载中
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.js b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.js
new file mode 100644
index 00000000..357fe0d9
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.js
@@ -0,0 +1,170 @@
+Component({
+ data: {
+ _uid: '',
+ curValue: 0,
+ tabNodeList: [],
+ scrollLeft: 0,
+ markLeft: 0,
+ markWidth: 0,
+ content: {
+ width: 100
+ },
+ over: false,
+ },
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ value: {
+ type: Number,
+ value: 0
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG'
+ },
+ tab: {
+ type: Array,
+ value: []
+ },
+ // line dot long
+ tpl: {
+ type: String,
+ value: 'line'
+ },
+ mark: {
+ type: String,
+ value: ''
+ },
+ align: {
+ type: String,
+ value: ''
+ },
+ curColor: {
+ type: String,
+ value: 'ui-TC'
+ },
+ scroll: {
+ type: Boolean,
+ value: false
+ },
+ inline: {
+ type: Boolean,
+ value: false
+ }
+ },
+ lifetimes: {
+ attached() {
+ let _uid = this.getRandom(8);
+ this.setData({_uid: _uid})
+ },
+ ready() {
+ this._computedQuery();
+ },
+ },
+ observers: {
+ 'tab'() {
+ this._computedChildQuery();
+ },
+ 'value'(val) {
+ if (val === this.data.curValue) {
+ return false;
+ } else {
+ this._setCurValue(val);
+ }
+ },
+ },
+ methods: {
+ //生成随机字符串
+ getRandom(num) {
+ let chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ let maxPos = chars.length, value = '';
+ for (let i = 0; i < num; i++) {
+ value += chars.charAt(Math.floor(Math.random() * maxPos));
+ }
+ return value;
+ },
+ _computedQuery() {
+ let _this = this, _uid = this.data._uid;
+ wx.createSelectorQuery().in(this).select('#ui-tab-' + _uid).boundingClientRect(data => {
+ if (data != null) {
+ if (data.left === 0 && data.right === 0) {
+ _this._computedQuery();
+ } else {
+ _this.setData({content: data})
+ _this._computedChildQuery();
+ setTimeout(() => {
+ _this.setData({over: true})
+ }, 300);
+ }
+ }
+ }).exec();
+ },
+ _computedChildQuery() {
+ let _this = this, {tab, _uid, tabNodeList, curValue} = this.data;
+ for (let i = 0; i < tab.length; i++) {
+ let item = '#ui-tab-item-' + _uid + '-' + i;
+ wx.createSelectorQuery().in(this).select(item).boundingClientRect(data => {
+ if (data != null) {
+ tabNodeList[i] = data;
+ _this.setData({
+ tabNodeList: tabNodeList
+ })
+ if (i === curValue) {
+ _this._computedMark();
+ }
+ }
+ }).exec();
+ }
+ },
+ _setCurValue(value) {
+ let curValue = this.data.curValue;
+ if (value === curValue) {
+ return false;
+ } else {
+ this.setData({curValue: value})
+ this._computedMark();
+ }
+ },
+ _click(e) {
+ let {index, item} = e.currentTarget.dataset;
+ this._setCurValue(index);
+ this.triggerEvent('input', index);
+ this.triggerEvent('change', { index: index, data: item });
+ },
+ _computedMark() {
+ let {tabNodeList, curValue, content} = this.data;
+ if (tabNodeList.length === 0) return;
+ let list = tabNodeList, cur = curValue;
+ let markLeft = list[cur].left - content.left;
+ let markWidth = list[cur].width;
+ this.setData({
+ markLeft: markLeft,
+ markWidth: markWidth
+ })
+ },
+ _computedScroll() {
+ let {tabNodeList, curValue} = this.data;
+ if (curValue === 0 || curValue === tabNodeList.length - 1) {
+ return false;
+ } else {
+ let i = 0, left = 0, list = tabNodeList;
+ for (i in list) {
+ if (i === curValue && i !== 0) {
+ left = left - list[i - 1].width;
+ break;
+ }
+ left = left + list[i].width;
+ }
+ this.setData({
+ scrollLeft: left
+ })
+ }
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.json b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.scss b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.scss
new file mode 100644
index 00000000..53215142
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.scss
@@ -0,0 +1,203 @@
+@import '../../scss/var';
+
+.ui-tab {
+ position: relative;
+ display: flex;
+ height: 4em;
+ align-items: center;
+ .ui-tab-item {
+ display: inline-flex;
+ align-items: center;
+ padding: 0 1em;
+ min-height: 1.5em;
+ line-height: 1.5em;
+ position: relative;
+ z-index: 1;
+ opacity: .6;
+ transition: opacity 0.3s;
+ .ui-tab-icon{
+ margin: 0 .25em;
+ font-size: 120%;
+ }
+ &.cur {
+ opacity: 1;
+ }
+ &.btn{
+ .ui-tab-text{
+ transform: scale(.9);
+ transition: color 0.3s;
+ }
+ }
+ }
+ &.ui-tab-scrolls {
+ width: 100%;
+ .ui-tab-scroll-warp {
+ overflow: hidden;
+ height: inherit;
+ width: 100%;
+ .ui-tab-scroll {
+ position: relative;
+ display: block;
+ white-space: nowrap;
+ overflow: auto;
+ height: calc(4em + 17px);
+ padding-bottom: 17px;
+ line-height: 4em;
+ width: 100% !important;
+ .ui-tab-mark-warp {
+ height: 4em;
+ }
+ }
+ }
+ }
+ .ui-tab-mark-warp {
+ color: inherit;
+ position: absolute;
+ top: 0;
+ height: 100%;
+ z-index: 0;
+ &.over {
+ transition: 0.3s;
+ }
+ .ui-tab-mark {
+ color: var(--ui-BG-Main);
+ height: 100%;
+ &.ui-btn {
+ .text {
+ opacity: 0;
+ }
+ }
+ }
+ }
+ &.line {
+ .ui-tab-mark {
+ border-bottom: 2px solid currentColor;
+ }
+ }
+ &.topline {
+ .ui-tab-mark {
+ border-top: 2px solid currentColor;
+ }
+ }
+ &.dot {
+ .ui-tab-mark::after {
+ content: '';
+ width: 0.5em;
+ height: 0.5em;
+ background-color: currentColor;
+ border-radius: 50%;
+ display: block;
+ position: absolute;
+ bottom: 0.3em;
+ left: 0;
+ right: 0;
+ margin: auto;
+ }
+ }
+ &.dot {
+ .ui-tab-mark::after {
+ content: '';
+ width: 0.5em;
+ height: 0.5em;
+ background-color: currentColor;
+ border-radius: 50%;
+ display: block;
+ position: absolute;
+ bottom: 0.5em;
+ left: 0;
+ right: 0;
+ margin: auto;
+ }
+ }
+ &.long {
+ .ui-tab-mark::after {
+ content: '';
+ width: 2em;
+ height: 0.35em;
+ background-color: currentColor;
+ border-radius: 5em;
+ display: block;
+ position: absolute;
+ bottom: 0.5em;
+ left: 0;
+ right: 0;
+ margin: auto;
+ }
+ }
+ &.trapezoid {
+ .ui-tab-mark::after {
+ content: '';
+ width: calc(100% - 2em);
+ height: 0.35em;
+ background-color: currentColor;
+ border-radius: 5em 5em 0 0;
+ display: block;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ margin: auto;
+ }
+ }
+ &.btn {
+ .ui-tab-mark-warp {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .ui-tab-mark.ui-btn {
+ height: calc(100% - 1.6em);
+ width: calc(100% - 0.6em);
+ }
+ }
+ &.sm .ui-tab-mark.ui-btn {
+ height: calc(100% - 2px);
+ width: calc(100% - 2px);
+ border-radius: #{$radius - 2};
+ }
+ }
+ &.ui-tab-inline {
+ display: inline-flex;
+ height: 3.5em;
+ &.ui-tab-scrolls {
+ .ui-tab-scroll {
+ height: calc(3.5em + 17px);
+ line-height: 3.5em;
+ .ui-tab-mark-warp {
+ height: 3.5em;
+ }
+ }
+ }
+ &.btn {
+ .ui-tab-mark-warp {
+ .ui-tab-mark.ui-btn {
+ height: calc(100% - 10px);
+ width: calc(100% - 10px);
+ }
+ }
+
+ }
+ }
+
+ &.sm {
+ height: 70rpx !important;
+
+ &.ui-tab-inline{
+ height: 70rpx;
+ &.ui-tab-scrolls {
+ .ui-tab-scroll {
+ height: calc(70rpx + 17px);
+ line-height: 70rpx;
+ .ui-tab-mark-warp {
+ height: 70rpx;
+ }
+ }
+ }
+ &.btn .ui-tab-mark.ui-btn {
+ height: calc(100% - 2px);
+ width: calc(100% - 2px);
+ border-radius: #{$radius - 2};
+ }
+ }
+ }
+}
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.wxml b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.wxml
new file mode 100644
index 00000000..1826e132
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tab/ui-tab.wxml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ {{ item.name?item.name:item }}
+ {{ item.tag }}
+
+
+
+
+
+ {{ tab[curValue].name ? tab[curValue].name : tab[curValue] }}
+
+
+
+
+
+
+
+
+ {{ item.name?item.name:item }}
+ {{ item.tag }}
+
+
+
+
+ {{ tab[curValue].name ? tab[curValue].name : tab[curValue] }}
+
+
+
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.js b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.js
new file mode 100644
index 00000000..81e85003
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.js
@@ -0,0 +1,80 @@
+Component({
+ data: {
+ //cur: 0
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ datas: {
+ type: Array,
+ value: []
+ },
+ cur: {
+ type: Number,
+ value: 0
+ },
+ tpl: {
+ type: String,
+ value: ''
+ },
+ icon: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'bg-blur'
+ },
+ ui: {
+ type: String,
+ value: ''
+ },
+ curText: {
+ type: String,
+ value: 'ui-TC-Main'
+ },
+ text: {
+ type: String,
+ value: 'text-c'
+ },
+ noFixed: {
+ type: Boolean,
+ value: false
+ },
+ main: { //主色
+ type: String,
+ value: 'blur'
+ },
+ },
+ lifetimes: {
+ created() {
+
+ },
+ attached() {
+
+ },
+ ready() {
+
+ },
+ },
+ methods: {
+ clickItem(e) {
+ let item = e.currentTarget.dataset.item;
+ if (item.type === 'tab') {
+ wx.switchTab({
+ url: item.url
+ });
+ this.setState({
+ sys_home_page : item.url
+ })
+ } else if (item.type === 'nav') {
+ wx.navigateTo({
+ url: item.url
+ });
+ } else if (item.type === 'tap') {
+ this.triggerEvent("tap",item);
+ }
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.json b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.json
new file mode 100644
index 00000000..15bd0943
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-fixed": "../ui-fixed/ui-fixed"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.scss b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.scss
new file mode 100644
index 00000000..5be790c6
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.scss
@@ -0,0 +1,60 @@
+.ui-tabbar-box {
+ .ui-tabbar {
+ padding: 10rpx;
+ display: flex;
+
+ .ui-tabbar-item {
+ text-align: center;
+ flex: 1;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ position: relative;
+ z-index: 10;
+
+ .ui-tabbar-icon {
+ height: 60rpx;
+ width: 60rpx;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 45rpx;
+
+ // background-color: #f1f1f1;
+ .ui-tabbar-image {
+ width: 50rpx;
+ height: 50rpx;
+ }
+
+ &.center {
+ background-color: var(--ui-BG-Main);
+ border-radius: 50%;
+ color: #ffffff;
+ font-size: 32rpx;
+ transform: scale(1.3) translateY(-6px);
+ }
+
+ .badge {
+ top: 0;
+ }
+ }
+
+ .ui-btn {
+ margin-top: -10px;
+ margin-bottom: 5px;
+ position: relative;
+ }
+
+ .ui-tabbar-text {
+ font-size: 24rpx;
+ color: var(--ui-TC-2);
+ }
+
+ &.cur .ui-tabbar-text {
+ color: var(--ui-TC-Main);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.wxml b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.wxml
new file mode 100644
index 00000000..3062847b
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tabbar/ui-tabbar.wxml
@@ -0,0 +1,25 @@
+
+ var indexOf = function (item) {
+ return item.indexOf('/') !== -1
+ }
+ module.exports = {
+ indexOf: indexOf
+ }
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.js b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.js
new file mode 100644
index 00000000..8292ab64
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.js
@@ -0,0 +1,36 @@
+Component({
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'ui-BG-3'
+ },
+ info: {
+ type: String,
+ value: ''
+ },
+ src: {
+ type: String,
+ value: ''
+ },
+ badge: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ icon: {
+ type: Boolean,
+ value: false
+ },
+ isSlot: {
+ type: Boolean,
+ value: false
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.json b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.scss b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.scss
new file mode 100644
index 00000000..f7fdb213
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.scss
@@ -0,0 +1,91 @@
+@import '../../scss/var';
+.ui-tag {
+ font-size: calc(28rpx + var(--textSize));
+ vertical-align: middle;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: .5833em .833em;
+ white-space: nowrap;
+ border-radius: $radius;
+ line-height: initial;
+ margin: 0 .14286em;
+ &.xs {
+ transform: scale(0.7);
+ padding: .2em .5em;
+ margin: 0;
+ }
+ &.sm {
+ transform: scale(0.8);
+ margin: 0 0.02em 0 0;
+ }
+ &.lg {
+ font-size: calc(#{map-get($fontsize, lg)}rpx + var(--textSize)) !important;
+ }
+ &.xl {
+ font-size: calc(#{map-get($fontsize, xl)}rpx + var(--textSize)) !important;
+ }
+ &.xxl {
+ font-size: calc(#{map-get($fontsize, xxl)}rpx + var(--textSize)) !important;
+ }
+ &.img {
+ padding: .5833em .833em .5833em .5em;
+ line-height: 1;
+ .tag-img {
+ margin: -.5833em .5em -.5833em -.5em;
+ width: 2.5666em;
+ height: 2.5666em;
+ border-radius: $radius 0 0 $radius;
+ }
+ }
+ &.badge {
+ border-radius: 200rpx;
+ position: absolute;
+ z-index: 1;
+ margin: 0;
+ font-size: 2em;
+ top: 0;
+ right: 0;
+ line-height: 1;
+ padding: 0.4em 0.6em 0.3em;
+ transform: scale(0.3) translateX(0.5em) translatey(-0.6em);
+ transform-origin: 100% 0;
+ &.badge-br{
+ top: auto;
+ bottom: 0;
+ right: 0;
+ transform: scale(0.3) translateX(0.5em) translatey(0.4em);
+ transform-origin: 100% 100%;
+ }
+ &.badge-bl{
+ top: auto;
+ bottom: 0;
+ right: auto;
+ left: 0;
+ transform: scale(0.3) translateX(-0.5em) translatey(0.4em);
+ transform-origin: 0 100%;
+ }
+ &.badge-tl{
+ right: auto;
+ left: 0;
+ transform: scale(0.3) translateX(-0.5em) translatey(-0.6em);
+ transform-origin: 0 0;
+ }
+ }
+
+ &.badge:not([class*='bg-']) {
+ background-color: $red !important;
+ color: $white;
+ }
+
+ &.empty {
+ padding: 0;
+ width: 40px;
+ height: 40px;
+ }
+ &.icon {
+ padding: 0.4em;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.wxml b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.wxml
new file mode 100644
index 00000000..69364c35
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-tag/ui-tag.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+ {{info}}
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.js b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.js
new file mode 100644
index 00000000..549003b3
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.js
@@ -0,0 +1,30 @@
+Component({
+ data: {
+ textSizeSet: false,
+ size: ['sm', 'df', 'lg', 'xl', 'xxl']
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ }
+ },
+ lifetimes: {
+ ready() {
+
+ },
+ },
+ methods: {
+ textSizeSetShow() {
+ this.setData({
+ textSizeSet: true
+ })
+ },
+ sliderChange(e) {
+ this.setText(e.detail.value)
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.json b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.json
new file mode 100644
index 00000000..e4951c37
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-modal": "../ui-modal/ui-modal",
+ "ui-menu": "../ui-menu/ui-menu",
+ "ui-menu-item": "../ui-menu-item/ui-menu-item"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.scss b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.wxml b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.wxml
new file mode 100644
index 00000000..80695a73
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-text-size/ui-text-size.wxml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ 选择合适的文字大小来动态调整界面布局。
+
+ 小
+
+
+
+ 大
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.js b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.js
new file mode 100644
index 00000000..e6143194
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.js
@@ -0,0 +1,70 @@
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true,
+ //sys_navBar: getApp().ColorUi.sys_navBar
+ },
+ properties: {
+ ui: {
+ type: String,
+ value: ''
+ },
+ bg: {
+ type: String,
+ value: 'bg-none'
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ desc: {
+ type: String,
+ value: ''
+ },
+ titleUi: {
+ type: String,
+ value: 'ui-TC'
+ },
+ descUi: {
+ type: String,
+ value: 'ui-TC-3'
+ },
+ depth: {
+ type: Number,
+ optionalTypes: String,
+ value: 0
+ },
+ dot: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ line: {
+ type: String,
+ value: 'ui-BG-Main'
+ },
+ isIcon: {
+ type: Boolean,
+ value: false
+ },
+ hasDot: {
+ type: Boolean,
+ value: false
+ },
+ hasLine: {
+ type: Boolean,
+ value: false
+ },
+ align: {
+ type: String,
+ value: 'left'
+ },
+ tpl: {
+ type: String,
+ value: 'default'
+ },
+ inLine: {
+ type: Boolean,
+ value: false
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.json b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.scss b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.scss
new file mode 100644
index 00000000..d478315d
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.scss
@@ -0,0 +1,277 @@
+@import '../../scss/var';
+
+.ui-title {
+ position: relative;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ // padding: 30rpx;
+ .anchor {
+ pointer-events: none;
+ position: absolute;
+ }
+ &.line {
+ padding: 0 30rpx;
+ }
+ .action-icon {
+ margin-left: -10rpx;
+ margin-right: 10rpx;
+ }
+ .action {
+ display: flex;
+ align-items: center;
+ &.hasLine {
+ position: relative;
+ z-index: 2;
+ .action-line {
+ position: absolute;
+ width: 68%;
+ height: 0.5em;
+ bottom: 0;
+ z-index: -1;
+ opacity: 0.7;
+ }
+ }
+ &.hasDot {
+ position: relative;
+ margin-left: 10rpx;
+ z-index: 2;
+ .action-dot {
+ position: absolute;
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ top: -0.3em;
+ z-index: -1;
+ margin-left: -0.5em;
+ opacity: 0.7;
+ }
+ }
+ .action-title {
+ font-weight: bold;
+ }
+ .action-desc {
+ margin-left: 10rpx;
+ text-transform: Capitalize;
+ }
+ }
+ &.center {
+ justify-content: center;
+ letter-spacing: 5rpx;
+ .hasLine {
+ .action-line {
+ left: 0;
+ right: 0;
+ margin: auto;
+ }
+ }
+ }
+ &.right {
+ justify-content: flex-end;
+ letter-spacing: 5rpx;
+ .hasDot {
+ .action-dot {
+ left: auto;
+ right: 0;
+ }
+ }
+ .hasLine {
+ .action-line {
+ left: auto;
+ right: 0;
+ }
+ }
+ }
+ &.stack {
+ .action {
+ position: relative;
+ &.hasLine {
+ .action-line {
+ width: 100%;
+ }
+ }
+ .action-title {
+ position: relative;
+ z-index: 2;
+ top: 10rpx;
+ }
+ .action-desc {
+ position: absolute;
+ z-index: 1;
+ left: 30rpx;
+ margin: 0;
+ font-size: 60rpx;
+ font-weight: bold;
+ opacity: 0.3;
+ top: -10rpx;
+ }
+ }
+ &.center,&.right {
+ position: relative;
+ z-index: 1;
+ .action {
+ position: initial;
+ }
+ .action-desc {
+ top: 10rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ text-align: center;
+ }
+ }
+ &.right {
+ .action-desc {
+ text-align: right;
+ }
+ }
+ }
+ &.center-column {
+ justify-content: center;
+ letter-spacing: 5rpx;
+ .action {
+ flex-direction: column;
+ .action-desc {
+ font-size: 24rpx;
+ margin: 0;
+ }
+ &.hasDot {
+ position: relative;
+ .action-dot {
+ height: 0px;
+ width: 100%;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ margin: auto;
+ .view {
+ height: 1px;
+ background: inherit;
+ width: 100rpx;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ &:first-child {
+ left: -500rpx;
+ right: 0;
+ transform: rotate(180deg);
+ }
+ &:last-child {
+ left: 0;
+ right: -500rpx;
+ }
+ &::after {
+ content: '';
+ width: 4px;
+ height: 12px;
+ border-radius: 20px;
+ background: inherit;
+ display: block;
+ position: absolute;
+ top: -5px;
+ left: -10px;
+ transform: rotate(30deg);
+ }
+ &::before {
+ content: '';
+ width: 4px;
+ height: 20px;
+ border-radius: 20px;
+ background: inherit;
+ display: block;
+ position: absolute;
+ top: -10px;
+ left: -20px;
+ transform: rotate(30deg);
+ }
+ }
+ }
+ }
+ &.hasLine {
+ position: relative;
+ .action-line {
+ height: 0px;
+ width: 100%;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ margin: auto;
+ .view {
+ height: 1px;
+ background: inherit;
+ width: 160rpx;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ &:first-child {
+ left: -480rpx;
+ right: 0;
+ transform: rotate(180deg);
+ }
+ &:last-child {
+ left: 0;
+ right: -480rpx;
+ }
+ &::after {
+ content: '';
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(to left, var(--ui-BG), rgba(255, 255, 255, 0));
+ display: block;
+ position: absolute;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+.heading-0 {
+ padding-top: #{map-get($spacers, 4)};
+ padding-bottom: #{map-get($spacers, 4)};
+ font-size: calc(#{map-get($fontsize, xl)}rpx + var(--textSize)) !important;
+ .action-desc{
+ font-size: calc(#{map-get($fontsize, df)}rpx + var(--textSize)) !important;
+ }
+}
+
+.heading-1 {
+ padding-top: #{map-get($spacers, 5)};
+ padding-bottom: #{map-get($spacers, 4)};
+ font-size: calc(#{map-get($fontsize, xxl)}rpx + var(--textSize)) !important;
+ .action-desc{
+ font-size: calc(#{map-get($fontsize, lg)}rpx + var(--textSize)) !important;
+ }
+}
+
+.heading-2 {
+ padding-top: #{map-get($spacers, 4)};
+ padding-bottom: #{map-get($spacers, 3)};
+ font-size: calc(#{map-get($fontsize, xl)}rpx + var(--textSize)) !important;
+ .action-desc{
+ font-size: calc(#{map-get($fontsize, df)}rpx + var(--textSize)) !important;
+ }
+}
+
+.heading-3 {
+ padding-top: #{map-get($spacers, 3)};
+ padding-bottom: #{map-get($spacers, 2)};
+ font-size: calc(#{map-get($fontsize, lg)}rpx + var(--textSize)) !important;
+ .action-desc{
+ font-size: calc(#{map-get($fontsize, sm)}rpx + var(--textSize)) !important;
+ }
+}
+
+.heading-4 {
+ padding-top: #{map-get($spacers, 2)};
+ padding-bottom: #{map-get($spacers, 1)};
+ font-size: calc(#{map-get($fontsize, df)}rpx + var(--textSize)) !important;
+ .action-desc{
+ font-size: calc(#{map-get($fontsize, xs)}rpx + var(--textSize)) !important;
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.wxml b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.wxml
new file mode 100644
index 00000000..cb9d75f4
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-title/ui-title.wxml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+ {{ desc }}
+
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.js b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.js
new file mode 100644
index 00000000..fff3b639
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.js
@@ -0,0 +1,72 @@
+Component({
+ data: {
+ touch: false,
+ },
+ options: {
+ addGlobalClass: true,
+ //multipleSlots: true
+ },
+ properties: {
+ title: {
+ type: String,
+ value: ''
+ },
+ icon: {
+ type: String,
+ value: ''
+ },
+ position: {
+ type: String,
+ value: ''
+ },
+ duration: {
+ type: Number,
+ value: 1500
+ },
+ mask: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ isLoading: {
+ type: Boolean,
+ optionalTypes: String,
+ value: false
+ },
+ },
+ lifetimes: {
+ created() {
+ //this.opacityStatus();
+ },
+ attached() {
+ /*this.setData({
+ isFristPage: app.cu_tools.sys_isFirstPage()
+ });*/
+ },
+ ready() {
+
+ },
+ },
+ observers: {
+ title(val) {
+ let _this = this;
+ if (val && !_this.data.isLoading) {
+ setTimeout(() => {
+ _this.hide();
+ }, _this.data.duration);
+ }
+ }
+ },
+ methods: {
+ hide(){
+ this.setState({
+ '$toast.title':'',
+ '$toast.icon':'',
+ '$toast.image':'',
+ '$toast.duration': 0,
+ '$toast.mask': false,
+ '$toast.isLoading': false,
+ })
+ }
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.json b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.scss b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.scss
new file mode 100644
index 00000000..48da1dc5
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.scss
@@ -0,0 +1,57 @@
+@import '../../scss/var';
+.ui-toast-box {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 880;
+ opacity: 0;
+ outline: 0;
+ text-align: center;
+ transform: scale(1);
+ backface-visibility: hidden;
+ perspective: 2000rpx;
+ pointer-events: none;
+ .ui-toast {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin-left: auto;
+ margin-right: auto;
+ background-color: var(--ui-BG);
+ //border-radius: 10rpx;
+ overflow: hidden;
+ text-align: left;
+ color: var(--ui-TC);
+ padding: 0.5em 1em;
+ border-radius: $radius;
+ max-width: 90vw;
+ &.hasIcon {
+ text-align: center;
+ padding: 0.5em 1em 1em;
+ .ui-toast-icon {
+ width: 170rpx;
+ height: 150rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 80rpx;
+ }
+ }
+ }
+ &::before {
+ content: '\200B';
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+ }
+
+ &.show {
+ opacity: 1;
+ transform: scale(1);
+ transition: 0.3s;
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.wxml b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.wxml
new file mode 100644
index 00000000..cee89186
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/components/ui-toast/ui-toast.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+ {{ title.length > 255 ? title + '...' : title }}
+
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/_main.scss b/miniprogram/mp-cu/colorUI/scss/_main.scss
new file mode 100644
index 00000000..dd8f510e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/_main.scss
@@ -0,0 +1,301 @@
+@import 'var';
+@import 'mixins';
+
+page {
+ font-size: 28rpx;
+ color: var(--text-a);
+ background-color: var(--ui-BG-1) !important;
+ -webkit-tap-highlight-color: transparent;
+ font-family: 'ui-num',system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+}
+
+/* ==================
+ 初始化
+ ==================== */
+view {
+ box-sizing: border-box;
+}
+.ui-link{
+ cursor: pointer;
+}
+navigator {
+ display: inline-flex;
+}
+navigator.navigator-hover {
+ background-color: inherit;
+ transform: translate(1rpx, 1rpx);
+}
+
+
+/* ==================
+ 辅助类
+ ==================== */
+.none {
+ display: none !important;
+}
+.inline {
+ display: inline !important;
+}
+.inline-block {
+ display: inline-block !important;
+}
+.block {
+ display: block !important;
+}
+.touch-none {
+ pointer-events: none;
+}
+.touch-all {
+ pointer-events: all;
+}
+.flex {
+ display: flex !important;
+}
+.inline-flex {
+ display: inline-flex !important;
+}
+.w-100{
+ width: 100%;
+}
+
+/* -- 浮动 -- */
+.cf::after,
+.cf::before {
+ content: '';
+ display: table;
+}
+.cf::after {
+ clear: both;
+}
+.fl {
+ float: left;
+}
+.fr {
+ float: right;
+}
+.position-center{
+ @include position-center;
+}
+.position-relative{
+ position: relative;
+}
+
+/* -- 工具类 -- */
+@function negativify-map($map) {
+ $result: ();
+ @each $key, $value in $map {
+ @if $key != 0 {
+ $result: map-merge($result, ("n" + $key: (-$value)));
+ }
+ }
+ @return $result;
+}
+
+$utilities: () !default;
+$utilities: map-merge(
+ (
+ 'margin': (
+ responsive: true,
+ property: margin,
+ class: m,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'margin-x': (
+ property: margin-right margin-left,
+ class: mx,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'margin-y': (
+ property: margin-top margin-bottom,
+ class: my,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'margin-top': (
+ property: margin-top,
+ class: mt,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'margin-right': (
+ property: margin-right,
+ class: mr,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'margin-bottom': (
+ property: margin-bottom,
+ class: mb,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'margin-left': (
+ property: margin-left,
+ class: ml,
+ values:
+ map-merge($spacers, (auto: auto))
+ ),
+ 'padding': (
+ responsive: true,
+ property: padding,
+ class: p,
+ values: $spacers
+ ),
+ 'padding-x': (
+ property: padding-right padding-left,
+ class: px,
+ values: $spacers
+ ),
+ 'padding-y': (
+ property: padding-top padding-bottom,
+ class: py,
+ values: $spacers
+ ),
+ 'padding-top': (
+ property: padding-top,
+ class: pt,
+ values: $spacers
+ ),
+ 'padding-right': (
+ property: padding-right,
+ class: pr,
+ values: $spacers
+ ),
+ 'padding-bottom': (
+ property: padding-bottom,
+ class: pb,
+ values: $spacers
+ ),
+ 'padding-left': (
+ property: padding-left,
+ class: pl,
+ values: $spacers
+ ),
+ 'font-weight': (
+ property: font-weight,
+ class: text,
+ values: (
+ light: $font-weight-light,
+ lighter: $font-weight-lighter,
+ normal: $font-weight-normal,
+ bold: $font-weight-bold,
+ bolder: $font-weight-bolder
+ )
+ ),
+ 'text-align': (
+ property: text-align,
+ class: text,
+ values: left right center
+ ),
+ 'font-color': (
+ property: color,
+ class: text,
+ values:
+ map-merge($colors, map-merge($grays, map-merge($darks, ('reset': inherit))))
+ ),
+ 'line-height': (
+ property: line-height,
+ class: lh,
+ values: (
+ 1: 1,
+ sm: $line-height-sm,
+ base: $line-height-base,
+ lg: $line-height-lg
+ )
+ ),
+ 'white-space': (
+ property: white-space,
+ class: text,
+ values: (nowrap: nowrap)
+ ),
+ 'radius': (
+ property: border-radius,
+ class: radius,
+ values: (
+ null: $radius,
+ sm: $radius-sm,
+ lg: $radius-lg,
+ 0: 0
+ )
+ ),
+ 'round': (
+ property: border-radius,
+ class: round,
+ values: (
+ null: $round-pill,
+ circle: 50%
+ )
+ ),
+ 'radius-top': (
+ property: border-top-left-radius border-top-right-radius,
+ class: radius-top,
+ values: (null: $radius)
+ ),
+ 'radius-right': (
+ property: border-top-right-radius border-bottom-right-radius,
+ class: radius-right,
+ values: (null: $radius)
+ ),
+ 'radius-bottom': (
+ property: border-bottom-right-radius border-bottom-left-radius,
+ class: radius-bottom,
+ values: (null: $radius)
+ ),
+ 'radius-left': (
+ property: border-bottom-left-radius border-top-left-radius,
+ class: radius-left,
+ values: (null: $radius)
+ ),
+ 'radius-lr': (
+ property: border-top-left-radius border-bottom-right-radius,
+ class: radius-lr,
+ values: (null: $radius)
+ ),
+ 'radius-lrs': (
+ property: border-top-right-radius border-bottom-left-radius,
+ class: radius-lr,
+ values: (null: 0)
+ ),
+ 'radius-rl': (
+ property: border-top-right-radius border-bottom-left-radius,
+ class: radius-rl,
+ values: (null: $radius)
+ ),
+ 'radius-rls': (
+ property: border-top-left-radius border-bottom-right-radius,
+ class: radius-rl,
+ values: (null: 0)
+ ),
+ ),
+ $utilities
+);
+@each $key, $utility in $utilities {
+ @if type-of($utility) == 'map' {
+ $values: map-get($utility, values);
+ @if type-of($values) == 'string' or type-of(nth($values, 1)) != 'list' {
+ $values: zip($values, $values);
+ }
+ @each $key, $value in $values {
+ $properties: map-get($utility, property);
+ @if type-of($properties) == 'string' {
+ $properties: append((), $properties);
+ }
+ $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));
+ $property-class: if($property-class == null, '', $property-class);
+ $property-class-modifier: if($key, if($property-class == '', '', '-') + $key, '');
+ .#{$property-class + $property-class-modifier} {
+ @each $property in $properties {
+ #{$property}: $value !important;
+ }
+ }
+ }
+ }
+}
+
+
+.flex-bar image.page-cur {
+ width: 50rpx;
+ height: 50rpx;
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/_mixins.scss b/miniprogram/mp-cu/colorUI/scss/_mixins.scss
new file mode 100644
index 00000000..3be9662f
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/_mixins.scss
@@ -0,0 +1,59 @@
+@mixin bg-square {
+ background: {
+ color: #fff;
+ image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%), linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%);
+ size: 40rpx 40rpx;
+ position: 0 0, 20rpx 20rpx;
+ }
+}
+
+@mixin flex {
+ position: relative;
+ display: flex;
+ align-items: center;
+}
+@mixin flex-bar {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+@mixin flex-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+@mixin arrow {
+ content: '';
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+@mixin arrow-top {
+ @include arrow;
+ // border-color: transparent transparent $ui-BG;
+ border-style: none solid solid;
+ border-width: 0 20rpx 20rpx;
+}
+
+@mixin arrow-right {
+ @include arrow;
+ // border-color: transparent $ui-BG transparent;
+ border-style: solid solid solid none;
+ border-width: 20rpx 20rpx 20rpx 0;
+}
+@mixin position-center {
+ position: absolute !important;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: auto;
+}
+
+@mixin blur {
+ -webkit-backdrop-filter: blur(20px);
+ backdrop-filter: blur(20px);
+ color: var(--ui-TC);
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/_var.scss b/miniprogram/mp-cu/colorUI/scss/_var.scss
new file mode 100644
index 00000000..38f1a7ff
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/_var.scss
@@ -0,0 +1,158 @@
+//颜色
+$yellow: #fbbd08;
+$orange: #f37b1d;
+$red: #F76664;
+$pink: #e03997;
+$mauve: #b745cb;
+$purple: #8044de;
+$blue: #0081ff;
+$cyan: #37c0fe;
+$green: #3eb93b;
+$olive: #8dc63f;
+$grey: #8799a3;
+$brown: #a5673f;
+
+$colors: ();
+$colors: map-merge(
+ (
+ 'yellow': $yellow,
+ 'orange': $orange,
+ 'red': $red,
+ 'pink': $pink,
+ 'mauve': $mauve,
+ 'purple': $purple,
+ 'violet': $purple,
+ 'blue': $blue,
+ 'cyan': $cyan,
+ 'green': $green,
+ 'olive': $olive,
+ 'grey': $grey,
+ 'brown': $brown,
+ ),
+ $colors
+);
+
+//灰度
+$white: #ffffff;
+$gray-f: #f8f9fa;
+$gray-e: #eeeeee;
+$gray-d: #dddddd;
+$gray-c: #cccccc;
+$gray-b: #bbbbbb;
+$gray-a: #aaaaaa;
+$dark-9: #999999;
+$dark-8: #888888;
+$dark-7: #777777;
+$dark-6: #666666;
+$dark-5: #555555;
+$dark-4: #444444;
+$dark-3: #333333;
+$dark-2: #222222;
+$dark-1: #111111;
+$black: #000000;
+
+$grays: ();
+$grays: map-merge(
+ (
+ 'white': $white,
+ 'gray-f': $gray-f,
+ 'gray-e': $gray-e,
+ 'gray-d': $gray-d,
+ 'gray-c': $gray-c,
+ 'gray-b': $gray-b,
+ 'gray-a': $gray-a,
+ 'gray': $gray-a,
+ ),
+ $grays
+);
+
+$darks: ();
+$darks: map-merge(
+ (
+ 'dark-9': $dark-9,
+ 'dark-8': $dark-8,
+ 'dark-7': $dark-7,
+ 'dark-6': $dark-6,
+ 'dark-5': $dark-5,
+ 'dark-4': $dark-4,
+ 'dark-3': $dark-3,
+ 'dark-2': $dark-2,
+ 'dark-1': $dark-1,
+ 'black': $black,
+ ),
+ $darks
+);
+
+
+// 边框
+$border-width: 1rpx !default; // 边框大小
+
+// 圆角
+$radius: 10rpx !default; // 默认圆角大小
+$radius-lg: 40rpx !default; // 大圆角
+$radius-sm: 6rpx !default; // 小圆角
+$round-pill: 1000rpx !default; // 半圆
+
+// 动画过渡
+$transition-base: all .2s ease-in-out !default; // 默认过渡
+$transition-base-out: all .04s ease-in-out !default; // 进场过渡
+$transition-fade: opacity .15s linear !default; // 透明过渡
+$transition-collapse: height .35s ease !default; // 收缩过渡
+
+// 间距
+$spacer: 20rpx !default;
+$spacers: () !default;
+$spacers: map-merge(
+ (
+ 0: 0,
+ 1: $spacer * 0.25,
+ 2: $spacer * .5,
+ 3: $spacer,
+ 4: $spacer * 1.5,
+ 5: $spacer * 3,
+ 6: $spacer * 5,
+ ),
+ $spacers
+);
+
+// 字形
+$font-weight-lighter: lighter !default;
+$font-weight-light: 300 !default;
+$font-weight-normal: 400 !default;
+$font-weight-bold: 700 !default;
+$font-weight-bolder: 900 !default;
+$fontsize: () !default;
+$fontsize: map-merge(
+ (
+ xs: 20,
+ sm: 24,
+ df: 28,
+ lg: 32,
+ xl: 36,
+ xxl: 44,
+ sl: 80,
+ xsl: 120
+ ),
+ $fontsize
+);
+
+// 段落
+$line-height-base: 1.5 !default;
+$line-height-lg: 2 !default;
+$line-height-sm: 1.25 !default;
+
+// 图标
+$iconsize: () !default;
+$iconsize: map-merge(
+ (
+ xs: 0.5,
+ sm: 0.75,
+ df: 1,
+ lg: 1.25,
+ xl: 1.5,
+ xxl: 2,
+ sl: 6,
+ xsl: 10
+ ),
+ $iconsize
+);
diff --git a/miniprogram/mp-cu/colorUI/scss/icon/_icon.scss b/miniprogram/mp-cu/colorUI/scss/icon/_icon.scss
new file mode 100644
index 00000000..acd60cd5
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/icon/_icon.scss
@@ -0,0 +1,178 @@
+@font-face {
+ font-family: 'colorui';
+ src: url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2');
+}
+
+[class*='_icon-'] {
+ font-family: 'colorui', serif !important;
+ display: inline-block;
+}
+
+@font-face {
+ font-family: 'ui-num';
+ src: url('data:application/x-font-ttf;base64,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')
+ format('woff2');
+ font-weight: normal;
+ font-style: normal;
+}
+
+._icon-checkbox:before {
+ content: "\e713";
+}
+
+._icon-box:before {
+ content: "\e714";
+}
+
+._icon-checkbox-o:before {
+ content: "\e715";
+}
+
+._icon-round:before {
+ content: "\e716";
+}
+
+._icon-home-o:before {
+ content: "\e70a";
+}
+
+._icon-home:before {
+ content: "\e70d";
+}
+
+._icon-edit:before {
+ content: "\e649";
+}
+
+._icon-close:before {
+ content: "\e6ed";
+}
+
+._icon-check-round:before {
+ content: "\e6f1";
+}
+
+._icon-check-round-o:before {
+ content: "\e6f2";
+}
+
+._icon-close-round:before {
+ content: "\e6f3";
+}
+
+._icon-close-round-o:before {
+ content: "\e6f4";
+}
+
+._icon-waiting:before {
+ content: "\e6f8";
+}
+
+._icon-waiting-o:before {
+ content: "\e6f9";
+}
+
+._icon-warn:before {
+ content: "\e662";
+}
+
+._icon-warn-o:before {
+ content: "\e675";
+}
+
+._icon-more:before {
+ content: "\e688";
+}
+
+._icon-delete:before {
+ content: "\e707";
+}
+
+._icon-delete-o:before {
+ content: "\e709";
+}
+
+._icon-add-round:before {
+ content: "\e717";
+}
+
+._icon-add-round-o:before {
+ content: "\e718";
+}
+
+._icon-add:before {
+ content: "\e6e4";
+}
+
+._icon-info:before {
+ content: "\e6ef";
+}
+
+._icon-info-o:before {
+ content: "\e705";
+}
+
+._icon-move:before {
+ content: "\e768";
+}
+
+._icon-title:before {
+ content: "\e82f";
+}
+
+._icon-titles:before {
+ content: "\e745";
+}
+
+._icon-loading:before {
+ content: "\e746";
+}
+
+._icon-copy-o:before {
+ content: "\e7bc";
+}
+
+._icon-copy:before {
+ content: "\e85c";
+}
+
+._icon-loader:before {
+ content: "\e76d";
+}
+
+._icon-search:before {
+ content: "\e782";
+}
+
+._icon-back:before {
+ content: "\e600";
+}
+
+._icon-forward:before {
+ content: "\e601";
+}
+
+._icon-arrow:before {
+ content: "\e608";
+}
+
+._icon-drop-down:before {
+ content: "\e61c";
+}
+
+._icon-drop-up:before {
+ content: "\e61d";
+}
+
+._icon-check:before {
+ content: "\e69f";
+}
+
+._icon-move-round:before {
+ content: "\e602";
+}
+
+._icon-move-round-o:before {
+ content: "\e603";
+}
+
diff --git a/miniprogram/mp-cu/colorUI/scss/icon/_style.scss b/miniprogram/mp-cu/colorUI/scss/icon/_style.scss
new file mode 100644
index 00000000..0aced73e
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/icon/_style.scss
@@ -0,0 +1,43 @@
+@import '../var';
+@import './icon'; //核心图标库
+
+.icon-spin {
+ animation: icon-spin 2s infinite linear;
+}
+
+.icon-pulse {
+ animation: icon-spin 1s infinite steps(8);
+}
+
+@keyframes icon-spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(359deg);
+ }
+}
+.icon-90 {
+ transform: rotate(90deg);
+}
+.icon-180 {
+ transform: rotate(180deg);
+}
+.icon-270 {
+ transform: rotate(270deg);
+}
+.icon-x {
+ transform: scale(-1, 1);
+}
+.icon-y {
+ transform: scale(1, -1);
+}
+.icon-fw {
+ width: (18em / 14);
+ text-align: center;
+}
+@each $class, $value in $iconsize {
+ .icon-#{$class} {
+ transform: scale(#{$value});
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_background.scss b/miniprogram/mp-cu/colorUI/scss/style/_background.scss
new file mode 100644
index 00000000..5e4dc0f4
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_background.scss
@@ -0,0 +1,219 @@
+/* ==================
+ 背景
+ ==================== */
+@import '../var';
+@import '../mixins';
+
+/* -- 基础色 -- */
+@each $color, $value in map-merge($colors, $darks) {
+ .bg-#{$color} {
+ background-color: $value !important;
+ @if $color == 'yellow' {
+ color: #333333 !important;
+ } @else {
+ color: #ffffff !important;
+ }
+ }
+ .bg-stripes-#{$color} {
+ background-color: #{mix(rgba(255, 255, 255, 0), desaturate($value, 45%), 93%)} !important;
+ background-image: linear-gradient( 225deg,
+ #{mix(rgba(255, 255, 255, 0), $value, 50%)} 10%,
+ transparent 0,transparent 50%,
+ #{mix(rgba(255, 255, 255, 0), $value, 50%)} 0,
+ #{mix(rgba(255, 255, 255, 0), $value, 50%)} 60%,
+ transparent 0,transparent
+ );
+ background-size: 7.07px 7.07px;
+ z-index: -1;
+ }
+}
+
+/* -- 浅色 -- */
+@each $color, $value in $colors {
+ .bg-#{$color}-light {
+ background-image: linear-gradient(45deg, white, mix(white, $value, 85%)) !important;
+ color: $value !important;
+ }
+
+ .bg-#{$color}-thin {
+ background-color: rgba($value, var(--ui-BG-opacity)) !important;
+ color: $value !important;
+ }
+}
+
+/* -- 渐变色 -- */
+
+@each $color, $value in $colors {
+ @each $colorsub, $valuesub in $colors {
+ @if $color != $colorsub {
+ .bg-#{$color}-#{$colorsub} {
+ // background-color: $value !important;
+ background-image: linear-gradient(130deg, $value, $valuesub) !important;
+ color: #ffffff !important;
+ }
+ }
+ }
+}
+.bg-yellow-gradient {
+ background-image: linear-gradient(45deg, #f5fe00, #ff6600) !important;
+ color: $dark-3 !important;
+}
+.bg-orange-gradient {
+ background-image: linear-gradient(45deg, #ff9700, #ed1c24) !important;
+ color: $white !important;
+}
+.bg-red-gradient {
+ background-image: linear-gradient(45deg, #f33a41, #ed0586) !important;
+ color: $white !important;
+}
+.bg-pink-gradient {
+ background-image: linear-gradient(45deg, #fea894, #ff1047) !important;
+ color: $white !important;
+}
+.bg-mauve-gradient {
+ background-image: linear-gradient(45deg, #c01f95, #7115cc) !important;
+ color: $white !important;
+}
+.bg-purple-gradient {
+ background-image: linear-gradient(45deg, #9829ea, #5908fb) !important;
+ color: $white !important;
+}
+.bg-blue-gradient {
+ background-image: linear-gradient(45deg, #00b8f9, #0166eb) !important;
+ color: $white !important;
+}
+.bg-cyan-gradient {
+ background-image: linear-gradient(45deg, #06edfe, #48b2fe) !important;
+ color: $white !important;
+}
+.bg-green-gradient {
+ background-image: linear-gradient(45deg, #3ab54a, #8cc63f) !important;
+ color: $white !important;
+}
+.bg-olive-gradient {
+ background-image: linear-gradient(45deg, #90e630, #39d266) !important;
+ color: $white !important;
+}
+.bg-grey-gradient {
+ background-image: linear-gradient(45deg, #9aadb9, #354855) !important;
+ color: $white !important;
+}
+.bg-brown-gradient {
+ background-image: linear-gradient(45deg, #ca6f2e, #cb1413) !important;
+ color: $white !important;
+}
+
+@each $color, $value in $grays {
+ .bg-#{$color} {
+ background-color: $value !important;
+ color: #333333 !important;
+ }
+}
+
+.bg-square {
+ @include bg-square;
+}
+.bg-none {
+ background: transparent !important;
+ color: inherit !important;
+}
+
+[class*='bg-mask'] {
+ position: relative;
+ //background: transparent !important;
+ color: #FFFFFF !important;
+ > view,
+ > text {
+ position: relative;
+ z-index: 1;
+ color: #ffffff;
+ }
+ &::before {
+ content: '';
+ border-radius: inherit;
+ width: 100%;
+ height: 100%;
+ @include position-center;
+ background-color: rgba(0, 0, 0, 0.4);
+ z-index: 0;
+ }
+ @at-root .bg-mask-80::before {
+ background: rgba(0, 0, 0, 0.8) !important;
+ }
+ @at-root .bg-mask-50::before {
+ background: rgba(0, 0, 0, 0.5) !important;
+ }
+ @at-root .bg-mask-20::before {
+ background: rgba(0, 0, 0, 0.2) !important;
+ }
+ @at-root .bg-mask-top::before {
+ background-color: rgba(0, 0, 0, 0);
+ background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.618), rgba(0, 0, 0, 0.01));
+ }
+ @at-root .bg-white-top {
+ background-color: rgba(0, 0, 0, 0);
+ background-image: linear-gradient(rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.3));
+ }
+ @at-root .bg-mask-bottom::before {
+ background-color: rgba(0, 0, 0, 0);
+ background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.618), rgba(0, 0, 0, 1));
+ }
+}
+.bg-img {
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+[class*='bg-blur'] {
+ position: relative;
+ > view,
+ > text {
+ position: relative;
+ z-index: 1;
+ }
+ &::before {
+ content: '';
+ width: 100%;
+ height: 100%;
+ @include position-center;
+ border-radius: inherit;
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ }
+}
+@supports (-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px)) {
+ .bg-blur::before {
+ @include blur;
+ background-color: var(--ui-Blur-1);
+ }
+ .bg-blur-1::before {
+ @include blur;
+ background-color: var(--ui-Blur-2);
+ }
+ .bg-blur-2::before {
+ @include blur;
+ background-color: var(--ui-Blur-3);
+ }
+}
+@supports not (backdrop-filter: blur(5px)) {
+ .bg-blur {
+ color: var(--ui-TC);
+ &::before {
+ background-color: var(--ui-BG);
+ }
+ }
+ .bg-blur-1 {
+ color: var(--ui-TC);
+ &::before {
+ background-color: var(--ui-BG-1);
+ }
+ }
+ .bg-blur-2 {
+ color: var(--ui-TC);
+ &::before {
+ background-color: var(--ui-BG-2);
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_border.scss b/miniprogram/mp-cu/colorUI/scss/style/_border.scss
new file mode 100644
index 00000000..ec0db1ed
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_border.scss
@@ -0,0 +1,141 @@
+/* ==================
+ 边框
+ ==================== */
+@import '../var';
+
+/* -- 实线 -- */
+.border {
+ overflow: initial !important;
+ @at-root [class*='border'],
+ [class*='dashed'] {
+ position: relative;
+ &.dline{
+ --ui-Border:var(--ui-BG-3)
+ }
+ &::after {
+ content: ' ';
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ z-index: 0;
+ top: 0;
+ left: 0;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border-radius: inherit;
+ }
+ &.radius::after {
+ border-radius: calc(#{$radius} * 2);
+ }
+ &.round::after {
+ border-radius: #{$round-pill};
+ }
+ }
+ &::after {
+ border: 1px solid var(--ui-Border);
+ }
+ &s::after {
+ border: 4rpx solid var(--ui-Border);
+ }
+ &ss::after {
+ border: 8rpx solid var(--ui-Border);
+ }
+ @each $value in (top, right, bottom, left) {
+ &-#{$value}::after {
+ border-#{$value}: 1px solid var(--ui-Border);
+ }
+ &s-#{$value}::after {
+ border-#{$value}: 4rpx solid var(--ui-Border);
+ }
+ &ss-#{$value}::after {
+ border-#{$value}: 8rpx solid var(--ui-Border);
+ }
+ }
+}
+/* -- 虚线 -- */
+.dashed {
+ &::after {
+ border: 4rpx dashed var(--ui-Border);
+ }
+ &s::after {
+ border: 6rpx dashed var(--ui-Border);
+ }
+ @each $value in (top, right, bottom, left) {
+ &-#{$value}::after {
+ border-#{$value}: 4rpx dashed var(--ui-Border);
+ }
+ &s-#{$value}::after {
+ border-#{$value}: 6rpx dashed var(--ui-Border);
+ }
+ }
+}
+@each $color, $value in map-merge($colors, map-merge($darks, $grays)) {
+ .border-#{$color}::after,.border-#{$color}[class*='-shine']::before {
+ border-color: $value !important;
+ }
+}
+@each $value in (a, b, c, d, e) {
+ .main-#{$value}-border::after,
+ .main-#{$value}-border[class*='-shine']::before {
+ border-color: var(--main-#{$value}) !important;
+ }
+}
+.dashed-shine,
+.dasheds-shine {
+ position: relative;
+ overflow: hidden;
+ &::after,
+ &::before {
+ border-style: dashed;
+ border-color: var(--ui-Border);
+ animation: shineafter 1s infinite linear;
+ width: calc(200% + 40px);
+ height: 200%;
+ border-width: 2px 0;
+ }
+ &::before {
+ content: ' ';
+ position: absolute;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ animation: shinebefore 1s infinite linear;
+ width: 200%;
+ height: calc(200% + 40px);
+ border-width: 0 2px;
+ }
+}
+.dasheds-shine {
+ &::after,
+ &::before {
+ border-width: 4px 0;
+ }
+ &::before {
+ border-width: 0 4px;
+ }
+}
+
+@keyframes shineafter {
+ 0% {
+ top: 0;
+ left: -22px;
+ }
+ 100% {
+ top: 0;
+ left: 0;
+ }
+}
+
+@keyframes shinebefore {
+ 0% {
+ top: -22px;
+ left: 0;
+ }
+ 100% {
+ top: 0;
+ left: 0;
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_button.scss b/miniprogram/mp-cu/colorUI/scss/style/_button.scss
new file mode 100644
index 00000000..d10c882a
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_button.scss
@@ -0,0 +1,91 @@
+@import '../var';
+
+
+.ui-btn-box {
+ display: inline-block;
+}
+.ui-btn {
+ position: relative;
+ border: 0rpx;
+ display: inline-block;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: .7857em 1.5em .7857em;
+ font-size: 28rpx;
+ line-height: 1em;
+ text-align: center;
+ text-decoration: none;
+ overflow: visible;
+ margin: 0 0.25em 0 0;
+ transform: translate(0, 0);
+ border-radius: $radius;
+ white-space: nowrap;
+ color: var(--text-a);
+ background-color: var(--ui-BG);
+ vertical-align: baseline;
+ &:first-child:last-child{
+ margin: 0;
+ }
+ &:not([class*='round'])::after {
+ border-radius: calc(#{$radius} * 2);
+ }
+ &:not([class*='border'])::after {
+ // content: ' ';
+ // width: 200%;
+ // height: 200%;
+ // display: block;
+ // position: absolute;
+ // z-index: 0;
+ // top: 0;
+ // left: 0;
+ // transform: scale(0.5);
+ // transform-origin: 0 0;
+ // pointer-events: none;
+ // box-sizing: border-box;
+ display: none;
+ }
+ &.round::after {
+ border-radius: #{$round-pill};
+ }
+ &.icon {
+ padding: 0.8em 0.8em;
+ }
+
+ &.sm {
+ font-size: 24rpx;
+ }
+
+ &.lg {
+ font-size: 32rpx;
+ }
+
+ &.xl {
+ font-size: 36rpx;
+ }
+
+ &.block {
+ width: 100%;
+ display: block;
+ font-size: 32rpx;
+ }
+ &:not([disabled]):not(.none-style):active {
+ transform: translate(.5px, .5px);
+ }
+ &[disabled] {
+ opacity: 0.6;
+ }
+ &.none-style {
+ background-color: transparent !important;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ display: flex;
+ }
+}
+
+.ui-btn:not(.icon) [class*='icon-'] {
+ margin: 0 .25em;
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_card.scss b/miniprogram/mp-cu/colorUI/scss/style/_card.scss
new file mode 100644
index 00000000..facd2cf2
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_card.scss
@@ -0,0 +1,353 @@
+/* ==================
+ 卡片
+ ==================== */
+
+.ui-cards {
+ display: block;
+ overflow: hidden;
+ & .ui-btn.badge {
+ top: 0;
+ right: 0;
+ font-size: 24rpx;
+ padding: 0rpx 15rpx;
+ height: 40rpx;
+ }
+ &.no-card > .ui-item {
+ margin: 0rpx;
+ border-radius: 0rpx;
+ }
+ & > .ui-item {
+ display: block;
+ overflow: hidden;
+ border-radius: 10rpx;
+ margin: 30rpx;
+ }
+ & > .ui-item.shadow-blur {
+ overflow: initial;
+ }
+ .grid.grid-square {
+ margin-bottom: -20rpx;
+ }
+ &.article {
+ display: block;
+ & > .ui-item {
+ padding: 30rpx;
+ background-color: var(--box-bg);
+ display: flex;
+ align-items: flex-start;
+ }
+ & > .time {
+ padding: 30rpx 0 0 30rpx;
+ }
+ & > .ui-item .title {
+ font-size: 30rpx;
+ font-weight: 900;
+ color: #333333;
+ }
+ & > .ui-item .content {
+ flex: 1;
+ }
+ & > .ui-item > image {
+ width: 240rpx;
+ height: 6.4em;
+ margin-left: 20rpx;
+ border-radius: 6rpx;
+ }
+ & > .ui-item .content .desc {
+ font-size: 12px;
+ color: var(--text-c);
+ }
+ & > .ui-item .content .text-content {
+ font-size: 28rpx;
+ color: #888;
+ }
+ }
+ &.case {
+ .image {
+ position: relative;
+ image {
+ width: 100%;
+ display: block;
+ }
+ .ui-tag {
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
+ .ui-bar {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ background-color: transparent;
+ padding: 0rpx 30rpx;
+ }
+ .bg-black {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ background-color: rgba(0, 0, 0, 0.6);
+ }
+ }
+ &.no-card .image {
+ margin: 30rpx 30rpx 0;
+ overflow: hidden;
+ border-radius: 10rpx;
+ }
+ }
+ &.dynamic {
+ display: block;
+ & > .ui-item {
+ display: block;
+ overflow: hidden;
+ & > .text-content {
+ padding: 0 30rpx 0;
+ font-size: 30rpx;
+ margin-bottom: 20rpx;
+ }
+ & .square-img {
+ width: 100%;
+ height: 200rpx;
+ border-radius: 6rpx;
+ }
+ & .only-img {
+ width: 100%;
+ height: 320rpx;
+ border-radius: 6rpx;
+ }
+ }
+ }
+ &.goods {
+ display: block;
+ & > .ui-item {
+ padding: 30rpx;
+ display: flex;
+ position: relative;
+ background-color: var(--ui-BG);
+ & + .ui-item {
+ border-top: 1rpx solid #eeeeee;
+ }
+ .content {
+ width: 410rpx;
+ padding: 0rpx;
+ }
+ .title {
+ font-size: 30rpx;
+ font-weight: 900;
+ color: #333333;
+ line-height: 1.4;
+ height: 1.4em;
+ overflow: hidden;
+ }
+ }
+ &.col-goods.col-twice {
+ display: flex;
+ flex-wrap: wrap;
+ padding-bottom: 30rpx;
+ & > .ui-item {
+ width: calc(50% - 30rpx);
+ margin: 20rpx 20rpx 0rpx 20rpx;
+ .content {
+ padding: 20rpx;
+ }
+ }
+ & > .ui-item:nth-child(2n) {
+ margin-left: 0rpx;
+ }
+ }
+ &.col-goods > .ui-item {
+ padding: 0rpx;
+ display: block;
+ border: 0px;
+ .content {
+ width: 100%;
+ padding: 30rpx;
+ }
+ }
+ &.no-card > .ui-item .content {
+ width: 470rpx;
+ padding: 0rpx;
+ }
+ &.no-card > .ui-item .title,
+ &.col-goods > .ui-item .title {
+ height: 3em;
+ overflow: hidden;
+ }
+ & > .ui-item .text-linecut-2 {
+ -webkit-line-clamp: 1;
+ }
+ &.no-card > .ui-item .text-linecut-2,
+ &.col-goods > .ui-item .text-linecut-2 {
+ -webkit-line-clamp: 2;
+ line-height: 1.6em;
+ height: 3.2em;
+ }
+ & > .ui-item > image {
+ width: 200rpx;
+ height: 200rpx;
+ margin-right: 20rpx;
+ border-radius: 6rpx;
+ }
+ &.no-card > .ui-item > image {
+ width: 220rpx;
+ height: 170rpx;
+ }
+ &.col-goods > .ui-item > image {
+ width: 100%;
+ height: 340rpx;
+ border-bottom-left-radius: 0rpx;
+ border-bottom-right-radius: 0rpx;
+ display: block;
+ }
+ &.col-goods.col-twice > .ui-item > image {
+ height: 236rpx;
+ }
+ }
+ &.loan {
+ display: block;
+ & > .ui-item {
+ padding: 30rpx 0 30rpx 30rpx;
+ display: flex;
+ position: relative;
+ background-color: var(--box-bg);
+
+ .content {
+ width: 450rpx;
+ padding: 0rpx;
+ .tag-list {
+ width: 450rpx;
+ display: flex;
+ flex-wrap: wrap;
+ font-size: 12px;
+ margin-top: 18rpx;
+ }
+ }
+ .action {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ }
+ }
+ }
+ &.houses {
+ display: block;
+ & > .ui-item {
+ padding: 20rpx;
+ display: flex;
+ position: relative;
+ background-color: var(--box-bg);
+ .image {
+ width: 230rpx;
+ height: 180rpx;
+ margin-right: 20rpx;
+ border-radius: 6rpx;
+ }
+ .content {
+ width: 400rpx;
+ padding: 0rpx;
+ .tag-list {
+ width: 400rpx;
+ display: flex;
+ flex-wrap: wrap;
+ font-size: 12px;
+ margin-top: 10rpx;
+ .ui-item {
+ height: 20px;
+ line-height: 20px;
+ }
+ }
+ }
+ .action {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ }
+ }
+ }
+
+ &.product {
+ display: flex;
+ flex-wrap: wrap;
+ padding-bottom: 30rpx;
+ & > .ui-item {
+ width: calc(100% - 15rpx);
+ margin: 20rpx 20rpx 0rpx 20rpx;
+ background-color: var(--box-bg);
+ position: relative;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+ // display: flex;
+ // flex-wrap: wrap;
+ .content {
+ padding: 20rpx;
+ // width: calc(100% - 345rpx);
+ .text-cut {
+ font-size: 16px;
+ }
+ }
+ .image {
+ width: 100%;
+ height: 240rpx;
+ border-radius: 6rpx 0 0 6rpx;
+ display: block;
+ }
+ .ui-progress-tag {
+ width: 4em;
+ text-align: right;
+ font-size: 12px;
+ }
+ .border-top {
+ width: 100%;
+ }
+ .ui-tag {
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: 6rpx 0 6rpx 0;
+ }
+ }
+ // & > .ui-item:nth-child(2n) {
+ // margin-left: 0rpx;
+ // }
+ }
+ &.shop {
+ display: flex;
+ flex-wrap: wrap;
+ padding-bottom: 30rpx;
+ & > .ui-item {
+ width: calc(50% - 30rpx);
+ margin: 20rpx 20rpx 0rpx 20rpx;
+ background-color: var(--box-bg);
+ padding: 20rpx;
+ .content {
+ margin-top: 15rpx;
+ }
+ .image {
+ width: 100%;
+ height: 285rpx;
+ border-radius: 6rpx;
+ display: block;
+ }
+ }
+ & > .ui-item:nth-child(2n) {
+ margin-left: 0rpx;
+ }
+ }
+
+ &.orders .ui-item {
+ margin-top: 30rpx;
+ .address-box {
+ padding: 15rpx;
+ margin: 0 30rpx 30rpx;
+ border: 1px solid;
+ border-color: var(--main-a);
+ border-radius: 10px;
+ position: relative;
+ .ui-form-group {
+ min-height: 10px;
+ }
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_code.scss b/miniprogram/mp-cu/colorUI/scss/style/_code.scss
new file mode 100644
index 00000000..76b21a7f
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_code.scss
@@ -0,0 +1,59 @@
+@import '../var';
+
+.ui-code {
+ font-family: Monaco, Menlo, Consolas, 'Courier New', serif;
+ font-size: 90%;
+ position: relative;
+ z-index: 1;
+ color: var(--ui-TC);
+ .ui-rich-text {
+ display: inline-block;
+ }
+
+ &.code {
+ display: inline-block;
+ padding: 0 10rpx;
+ margin: 0 10rpx;
+ border-radius: $radius-sm;
+ line-height: 1.6;
+ vertical-align: baseline;
+ }
+
+ &.pre {
+ display: block;
+ margin: 1em 0;
+ line-height: 1.6;
+ &.hasTitle {
+ margin: 3.2em 0 1em;
+ }
+ // border-radius: $radius-sm;
+ .ui-code-title {
+ position: absolute;
+ top: -2.2em;
+ color: var(--ui-TC-2);
+ left: 0;
+ }
+ .ui-rich-text {
+ padding: 40rpx;
+ white-space: pre-wrap;
+ word-break: break-all;
+ word-wrap: break-word;
+ }
+ .ui-scroll-view {
+ &.ui-scroll {
+ max-height: 500px;
+ white-space: pre;
+ }
+ }
+ .ui-copy-btn {
+ position: absolute;
+ z-index: 2;
+ top: 0;
+ right: 0;
+ padding: 0.8em;
+ border-radius: 0 $radius-sm 0 $radius-sm;
+ }
+ }
+}
+
+@import 'prism'; //代码高亮
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_flex.scss b/miniprogram/mp-cu/colorUI/scss/style/_flex.scss
new file mode 100644
index 00000000..75551dd7
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_flex.scss
@@ -0,0 +1,67 @@
+/* ==================
+ 弹性布局
+ ==================== */
+@import '../var';
+@import '../mixins';
+
+.flex {
+ display: flex !important;
+ &-sub {
+ flex: 1 !important;
+ }
+ &-twice {
+ flex: 2 !important;
+ }
+ &-treble {
+ flex: 3 !important;
+ }
+ &-column {
+ flex-direction: column !important;
+ }
+ &-row {
+ flex-direction: row !important;
+ }
+ &-column-reverse {
+ flex-direction: column-reverse !important;
+ }
+ &-row-reverse {
+ flex-direction: row-reverse !important;
+ }
+ &-wrap {
+ flex-wrap: wrap !important;
+ }
+ &-center {
+ @include flex-center;
+ }
+ &-bar {
+ @include flex-bar;
+ }
+}
+.basis {
+ @each $class, $value in (xs: 20%, sm: 40%, df: 50%, lg: 60%, xl: 80%) {
+ &-#{$class} {
+ flex-basis: $value !important;
+ }
+ }
+}
+.align {
+ @each $class, $value in (start: flex-start, end: flex-end, center: center, stretch: stretch, baseline: baseline) {
+ &-#{$class} {
+ align-items: $value !important;
+ }
+ }
+}
+.self {
+ @each $class, $value in (start: flex-start, end: flex-end, center: center, stretch: stretch, baseline: baseline) {
+ &-#{$class} {
+ align-self: $value !important;
+ }
+ }
+}
+.justify {
+ @each $class, $value in (start: flex-start, end: flex-end, center: center, between: space-between, around: space-around) {
+ &-#{$class} {
+ justify-content: $value !important;
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_form.scss b/miniprogram/mp-cu/colorUI/scss/style/_form.scss
new file mode 100644
index 00000000..e223137c
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_form.scss
@@ -0,0 +1,151 @@
+/* ==================
+ 表单
+ ==================== */
+.ui-form-groups {
+ padding: 1rpx 24rpx;
+ display: flex;
+ align-items: center;
+ min-height: 100rpx;
+ justify-content: space-between;
+ .title {
+ text-align: justify;
+ padding-right: 30rpx;
+ font-size: 30rpx;
+ position: relative;
+ height: 60rpx;
+ line-height: 60rpx;
+ }
+ .content {
+ flex: 1;
+ }
+ input {
+ flex: 1;
+ font-size: 30rpx;
+ color: #555;
+ padding-right: 20rpx;
+ }
+ text[class*='icon-'] {
+ font-size: 36rpx;
+ padding: 0;
+ box-sizing: border-box;
+ }
+ textarea {
+ margin: 32rpx 0 30rpx;
+ height: 4.6em;
+ width: 100%;
+ line-height: 1.2em;
+ flex: 1;
+ font-size: 28rpx;
+ padding: 0;
+ }
+ picker,
+ .arrow {
+ flex: 1;
+ padding-right: 40rpx;
+ overflow: hidden;
+ position: relative;
+ }
+ picker .picker,
+ .arrow > view {
+ line-height: 100rpx;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ width: 100%;
+ }
+ picker::after,
+ .arrow::after {
+ font-family: 'colorui';
+ display: block;
+ content: '\e601';
+ position: absolute;
+ font-size: 34rpx;
+ color: #8799a3;
+ line-height: 100rpx;
+ width: 60rpx;
+ text-align: center;
+ top: 0;
+ bottom: 0;
+ right: -20rpx;
+ margin: auto;
+ }
+ textarea[disabled],
+ textarea[disabled] .placeholder {
+ color: transparent;
+ }
+ &.align-start .title {
+ height: 1em;
+ margin-top: 32rpx;
+ line-height: 1em;
+ }
+ .grid-square {
+ > view {
+ background-color: #f8f8f8;
+ border-radius: 12rpx;
+ .mask {
+ background-color: rgba(0, 0, 0, 0.6);
+ position: absolute;
+ font-size: 20rpx;
+ color: #ffffff;
+ width: 100%;
+ bottom: 0;
+ text-align: center;
+ padding: 6rpx 0;
+ &.red-mask {
+ background-color: rgba(255, 80, 80, 0.6);
+ }
+ }
+ [class*='icon'] {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ transform: scale(1.5);
+ justify-content: center;
+ }
+ .text-gray {
+ position: absolute;
+ width: 100%;
+ font-size: 24rpx;
+ text-align: center;
+ bottom: 20rpx;
+ }
+ }
+ }
+}
+.disabled {
+ opacity: 0.6;
+ cursor: not-allowed !important;
+}
+
+//小程序的组件元素结构与uni-app不一样,需要特殊处理
+ui-form-group {
+ display: contents;
+}
+ui-input-box {
+ display: contents;
+ input {
+ width: 100%;
+ }
+}
+ui-form ui-form-group:first-child .ui-form-group:after {
+ display: none;
+}
+ui-form ui-form-group ui-input-box {
+ width: 100%;
+ position: relative;
+ display: flex;
+ align-items: center;
+ input {
+ flex: 1;
+ }
+ textarea {
+ flex: 1;
+ width: 100%;
+ }
+}
+
+ui-radio:last-child .ui-radio:not(.card) {
+ margin: 0 0.14286em;
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_grid.scss b/miniprogram/mp-cu/colorUI/scss/style/_grid.scss
new file mode 100644
index 00000000..a8116d06
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_grid.scss
@@ -0,0 +1,117 @@
+/* ==================
+ 栅栏
+ ==================== */
+
+.ui-container {
+ box-sizing: border-box;
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ width: 100%;
+ max-width: 1440px;
+ &-fluid{
+ max-width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+.ui-grid {
+ display: flex;
+ flex-wrap: wrap;
+ &.multi-column{
+ display: block;
+ column-count: 2;
+ column-width: 0px;
+ column-gap: 0px;;
+ > .ui-item {
+ break-inside: avoid;
+ padding: 0.001em;
+ }
+ }
+ &.grid-square {
+ overflow: hidden;
+ > .ui-item {
+ margin-right: 20rpx;
+ margin-bottom: 20rpx;
+ position: relative;
+ overflow: hidden;
+ }
+ @for $i from 1 through 12 {
+ &.ui-cols-#{$i} > .ui-item {
+ padding-bottom: calc((100% - #{20rpx * ($i - 1)}) / #{$i});
+ width: calc((100% - #{20rpx * ($i - 1)}) / #{$i});
+ height: 0;
+ }
+ }
+ @for $i from 1 through 12 {
+ &.ui-cols-#{$i} > .ui-item:nth-child(#{$i}n) {
+ margin-right: 0;
+ }
+ }
+ }
+}
+@for $i from 1 through 12 {
+ .ui-cols-#{$i} .ui-item {
+ width: calc(100% / #{$i});
+ }
+}
+@for $i from 1 through 12 {
+ .ui-col-#{$i} {
+ width: calc(100% / 12 * #{$i});
+ }
+}
+@for $i from 1 through 24 {
+ .ui-col-lg-#{$i} {
+ width: calc(100% / 24 * #{$i});
+ }
+}
+
+@mixin make_col($screen) {
+ @for $i from 1 through 12 {
+ .ui-col-#{$screen}-#{$i} {
+ width: calc(100% / 12 * #{$i});
+ }
+ .ui-cols-#{$screen}-#{$i} .ui-item {
+ width: calc(100% / #{$i});
+ }
+ }
+}
+
+// 小屏
+@media screen and (min-width: 0px) {
+ @include make_col('xs');
+}
+
+// 小屏
+@media screen and (min-width: 320px) {
+ @include make_col('sm');
+}
+
+// 中屏
+@media screen and (min-width: 768px) {
+ @include make_col('md');
+}
+
+// 普通屏
+@media screen and (min-width: 1025px) {
+ @include make_col('lg');
+}
+
+// 大屏
+@media screen and (min-width: 1440px) {
+ @include make_col('xl');
+}
+
+// 超大屏
+@media screen and (min-width: 1920px) {
+ @include make_col('xxl');
+}
+
+
+
+
+
+ui-col {
+ display: contents;
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_markdown.scss b/miniprogram/mp-cu/colorUI/scss/style/_markdown.scss
new file mode 100644
index 00000000..546ab419
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_markdown.scss
@@ -0,0 +1,62 @@
+.cu-markdown {
+ position: relative;
+ z-index: 1;
+ &.selectable {
+ cursor: auto;
+ user-select: text;
+ }
+ inline {
+ display: inline-block;
+ }
+
+ .list {
+ .list-item {
+ line-height: 1.8;
+ .list {
+ margin-left: 1.28571em;
+ .ui-title {
+ transform: scale(0.6);
+ &:before {
+ content: '\e716';
+ }
+ }
+ }
+ }
+ .list-item-p {
+ position: relative;
+ padding-left: 1.5em;
+ .list-item-t {
+ display: block;
+ width: 1.3em;
+ text-align: center;
+ position: absolute;
+ left: 0;
+ }
+ }
+ }
+ .md-table + .md-table {
+ margin-top: 30rpx;
+ }
+}
+
+.paragraph {
+ margin: 0 0 40rpx;
+ line-height: 1.8;
+}
+
+.blockquote {
+ @extend .paragraph;
+ padding: 20rpx 30rpx;
+ border-left-style: solid;
+ border-left-width: 10rpx;
+ border-color: var(--ui-Border);
+ background: none repeat scroll 0 0 rgba(102, 128, 153, 0.05);
+
+ .paragraph {
+ margin-bottom: 30rpx;
+ }
+
+ .paragraph:last-child {
+ margin-bottom: 0;
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_menu.scss b/miniprogram/mp-cu/colorUI/scss/style/_menu.scss
new file mode 100644
index 00000000..0b19c94f
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_menu.scss
@@ -0,0 +1,65 @@
+@import '../var';
+
+.ui-menu {
+ background-color: var(--ui-BG);
+}
+
+.ui-menu-item {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ min-height: 4em;
+ padding: 0 30rpx;
+ .ui-menu-item-icon {
+ width: 1.7em;
+ margin-right: 0.3em;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transform: scale(1.3);
+ }
+ .ui-menu-item-icon .ui-menu-item-image {
+ width: 1.2em;
+ height: 1.2em;
+ display: inline-block;
+ }
+ .ui-menu-item-content {
+ flex: 1;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ .ui-menu-item-arrow {
+ width: 1.6em;
+ text-align: center;
+ color: var(--ui-TC-3);
+ }
+ &:after {
+ content: ' ';
+ width: calc(200% - 120rpx);
+ left: 30rpx;
+ position: absolute;
+ top: 0;
+ box-sizing: border-box;
+ height: 200%;
+ border-top: 1px solid var(--ui-Border);
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ }
+ &.first-item:after {
+ display: none;
+ }
+ &:first-child:after{
+ //display: none;
+ }
+}
+
+ui-menu ui-menu-item:first-child .ui-menu-item:after {
+ display: none;
+ //border-top: 0;
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_prism.scss b/miniprogram/mp-cu/colorUI/scss/style/_prism.scss
new file mode 100644
index 00000000..32593384
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_prism.scss
@@ -0,0 +1,143 @@
+/* PrismJS 1.19.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+@import '../var';
+
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.comment,
+.prolog,
+.doctype,
+.cdata {
+ color: slategray;
+}
+
+.punctuation {
+ color: $grey;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.property,
+.tag,
+.boolean,
+.number,
+.constant,
+.symbol,
+.deleted {
+ color: $green;
+}
+
+.selector,
+.attr-name,
+.string,
+.char,
+.builtin,
+.inserted {
+ color: $blue;
+}
+
+.operator,
+.entity,
+.url,
+.language-css .string,
+.style .string {
+ color: $brown;
+}
+
+.atrule,
+.attr-value,
+.keyword {
+ color: $cyan;
+}
+
+.function,
+.class-name {
+ color: $red;
+}
+
+.regex,
+.important,
+.variable {
+ color: $orange;
+}
+
+.important,
+.bold {
+ font-weight: bold;
+}
+.italic {
+ font-style: italic;
+}
+
+.entity {
+ cursor: help;
+}
+
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_shadow.scss b/miniprogram/mp-cu/colorUI/scss/style/_shadow.scss
new file mode 100644
index 00000000..28da801b
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_shadow.scss
@@ -0,0 +1,91 @@
+/* ==================
+ 阴影
+ ==================== */
+@import '../var';
+
+.shadow {
+ box-shadow: var(--ui-Shadow);
+ &-sm {
+ box-shadow: var(--ui-Shadow-sm);
+ }
+ &-lg {
+ box-shadow: var(--ui-Shadow-lg);
+ }
+ &-inset {
+ box-shadow: var(--ui-Shadow-inset);
+ }
+ @each $color, $value in $colors {
+ @at-root .shadow-#{$color} {
+ box-shadow: 0 .5em 1em rgba($value, var(--ui-Shadow-opacity));
+ }
+ &-sm.shadow-#{$color} {
+ box-shadow: 0 .125em .25em rgba($value, var(--ui-Shadow-opacity));
+ }
+ &-lg.shadow-#{$color} {
+ box-shadow: 0 1em 3em rgba($value, var(--ui-Shadow-opacity-lg));
+ }
+ }
+
+ &-warp {
+ position: relative;
+ }
+ &-warp:before,
+ &-warp:after {
+ position: absolute;
+ content: '';
+ bottom: -10rpx;
+ left: 20rpx;
+ width: calc(50% - #{40rpx});
+ height: 30rpx;
+ transform: skew(0deg, -6deg);
+ transform-origin: 50% 50%;
+ background-color: rgba(0, 0, 0, var(--ui-Shadow-opacity));
+ filter: blur(20rpx);
+ z-index: -1;
+ opacity: 0.5;
+ }
+ &-warp:after {
+ right: 20rpx;
+ left: auto;
+ transform: skew(0deg, 6deg);
+ }
+ &-blur {
+ position: relative;
+ }
+ &-blur::before {
+ content: '';
+ display: block;
+ background: inherit;
+ filter: blur(20rpx);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: .5em;
+ left: .5em;
+ z-index: -1;
+ opacity: var(--ui-Shadow-opacity-lg);
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+ }
+}
+.drop-shadow {
+ filter: drop-shadow(0 0 30rpx rgba(0, 0, 0, 0.1));
+ &-sm {
+ filter: drop-shadow( 0 4rpx 4rpx rgba(0, 0, 0, 0.06));
+ }
+ &-lg {
+ filter: drop-shadow( 0 30rpx 60rpx rgba(0, 0, 0, 0.2));
+ }
+ @each $color, $value in $colors {
+ @at-root .drop-shadow-#{$color} {
+ filter: drop-shadow( 0 15rpx 15rpx rgba(darken($value, 10%), 0.3));
+ }
+ &-sm.drop-shadow-#{$color} {
+ filter: drop-shadow( 0 4rpx 4rpx rgba(darken($value, 10%), 0.3));
+ }
+ &-lg.drop-shadow-#{$color} {
+ filter: drop-shadow( 0 50rpx 100rpx rgba(darken($value, 10%), 0.2));
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_steps.scss b/miniprogram/mp-cu/colorUI/scss/style/_steps.scss
new file mode 100644
index 00000000..e5242f19
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_steps.scss
@@ -0,0 +1,166 @@
+.ui-steps {
+ display: flex;
+ width: 100%;
+ .ui-step {
+ flex: 1;
+ text-align: center;
+ position: relative;
+ min-width: 100rpx;
+ .ui-steps-icon,
+ .ui-steps-num {
+ display: block;
+ font-size: 40rpx;
+ line-height: 80rpx;
+ }
+ &:not([class*='text-']) {
+ color: #8799a3;
+ }
+
+ &::before,
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ height: 0;
+ width: calc(100% - 80rpx);
+ border-bottom: 1px solid #ccc;
+ left: calc(0px - (100% - 80rpx) / 2);
+ top: 40rpx;
+ z-index: 0;
+ }
+ &::after {
+ border-bottom: 1px solid currentColor;
+ width: 0;
+ transition: all 0.3s ease-in-out 0s;
+ }
+ &[class*='text-']::after {
+ width: calc(100% - 80rpx);
+ color: currentColor !important;
+ }
+
+ &:first-child::before,
+ &:first-child::after {
+ display: none;
+ }
+ }
+ &.steps-scroll {
+ display: block;
+ white-space: nowrap;
+ .ui-step {
+ display: inline-block;
+ }
+ }
+
+ &.steps-number {
+ .ui-step {
+ .ui-steps-num {
+ width: 40rpx;
+ height: 40rpx;
+ border-radius: 50%;
+ line-height: 40rpx;
+ margin: 20rpx auto;
+ font-size: 24rpx;
+ border: 1px solid currentColor;
+ position: relative;
+ overflow: hidden;
+
+ &::before,
+ &::after {
+ content: attr(data-index);
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ transition: all 0.3s ease-in-out 0s;
+ transform: translateY(0);
+ }
+
+ &::after {
+ transform: translateY(40rpx);
+ color: #ffffff;
+ transition: all 0.3s ease-in-out 0s;
+ }
+ }
+
+ &[class*='ui-TC-'] .ui-steps-num {
+ background-color: currentColor;
+ &::before {
+ transform: translateY(-40rpx);
+ color: #ffffff;
+ }
+ &::after {
+ content: "\e69f";
+ font-family: 'colorui';
+ color: #ffffff;
+ transform: translateY(0);
+ }
+ &.ui-steps-err::after {
+ content: "\e6ed";
+ }
+ }
+ }
+ }
+
+ &.steps-column {
+ flex-direction: column;
+ .ui-step {
+ display: flex;
+ flex: initial;
+ height: 60px;
+ .ui-steps-text{
+ padding-top: 10px;
+ text-align: left;
+ padding-left: 10px;
+ .ui-steps-title{
+ font-size: 16px;
+ }
+ .ui-steps-desc{
+ font-size: 12px;
+ opacity: .7;
+ }
+ }
+ .ui-steps-num{
+ margin: 20rpx 0;
+ }
+ &::before,
+ &::after {
+ width: 0;
+ height: 30px;
+ border-left: 1px solid #ccc;
+ top: -25px;
+ left: 10px;
+ z-index: 0;
+ }
+ &::after {
+ border-left: 1px solid currentColor;
+ height: 0;
+ transition: all 0.3s ease-in-out 0s;
+ }
+ &[class*='text-']::after {
+ height: 30px;
+ color: currentColor !important;
+ }
+ }
+ }
+
+ &.steps-arrow {
+ .ui-step {
+ &::before,
+ &::after {
+ width: calc(100% - 80rpx);
+ content: "\e601";
+ font-family: 'colorui';
+ height: 30rpx;
+ border-bottom-width: 0;
+ line-height: 30rpx;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ color: #ccc;
+ font-size: 40rpx;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_table.scss b/miniprogram/mp-cu/colorUI/scss/style/_table.scss
new file mode 100644
index 00000000..3da052fb
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_table.scss
@@ -0,0 +1,134 @@
+@import '../var';
+.ui-table {
+ background-color: var(--ui-BG);
+ max-width: 100%;
+ display: table;
+ &.table-full {
+ width: 100%;
+ }
+ &.table-radius{
+ border-radius: $radius;
+ .ui-table-header {
+ .ui-table-tr {
+ border-top-left-radius: $radius;
+ border-top-right-radius: $radius;
+ }
+ .ui-table-th {
+ &:first-child {
+ border-top-left-radius: $radius;
+ }
+ &:last-child {
+ border-top-right-radius: $radius;
+ }
+ }
+ }
+ }
+ .ui-table-header {
+ display: table-header-group;
+ .ui-table-th {
+ font-weight: bold;
+ border-bottom: 1px solid var(--ui-Border);
+ white-space: nowrap;
+
+ padding: 1em .8em;
+ }
+ }
+
+ .ui-table-tr {
+ display: table-row;
+ z-index: 1;
+ }
+
+ .ui-table-body {
+ display: table-row-group;
+ position: relative;
+ .ui-table-tr:hover {
+ background-color: var(--ui-BG-1) !important;
+ }
+ .ui-table-loading {
+ min-height: 300px;
+ position: absolute !important;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid var(--ui-Border);
+ }
+ }
+
+ .ui-table-td,
+ .ui-table-th {
+ display: table-cell;
+ text-align: unset;
+ padding: 0.5em .8em;
+ // font-size: 90%;
+ vertical-align: middle;
+ }
+}
+
+.ui-table.table-border {
+ &,
+ & .ui-table-td,
+ & .ui-table-th {
+ position: relative;
+ &::after {
+ content: ' ';
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border: 1px solid var(--ui-Border);
+ z-index: 1;
+ }
+ }
+ .ui-table-td,
+ .ui-table-th {
+ &::after {
+ border-width: 1px 1px 0 0;
+ }
+ &:last-child::after {
+ border-right: none;
+ }
+ }
+}
+.ui-table.table-radius {
+ &::after {
+ border-radius: calc(#{$radius} * 2);
+ }
+ & .ui-table-tr .ui-table-th:first-child{
+ border-top-left-radius: calc(#{$radius} * 2);
+ }
+ & .ui-table-tr .ui-table-th:last-child {
+ border-top-right-radius: calc(#{$radius} * 2);
+ }
+ & .ui-table-tr:last-child .ui-table-td:first-child{
+ border-bottom-left-radius: #{$radius};
+ }
+ & .ui-table-tr:last-child .ui-table-td:last-child {
+ border-bottom-right-radius: #{$radius};
+ }
+}
+.ui-table.table-striped > .ui-table-body > .ui-table-tr:nth-child(2n + 1),
+.ui-table.table-striped > .ui-table-body > .ui-table-tr:nth-child(2n + 1) {
+ background-color: var(--ui-BG-1);
+}
+
+.table-responsive {
+ width: inherit;
+ height: 100%;
+ max-width: 100%;
+ overflow: hidden;
+ box-sizing: border-box;
+ .table-responsive-box {
+ position: relative;
+ overflow: hidden;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_tag.scss b/miniprogram/mp-cu/colorUI/scss/style/_tag.scss
new file mode 100644
index 00000000..a8c1f1dd
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_tag.scss
@@ -0,0 +1,8 @@
+ui-tag {
+ &:first-child{
+ margin-left: 0;
+ }
+ &:last-child{
+ margin-right: 0;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/style/_text.scss b/miniprogram/mp-cu/colorUI/scss/style/_text.scss
new file mode 100644
index 00000000..c6fdf433
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/style/_text.scss
@@ -0,0 +1,134 @@
+/* ==================
+ 文本
+ ==================== */
+@import '../var';
+
+.font-0{
+ font-size: 24rpx;
+ --textSize:-4rpx;
+}
+.font-1{
+ font-size: 28rpx;
+ --textSize:0rpx;
+}
+.font-2{
+ font-size: 32rpx;
+ --textSize:4rpx;
+}
+.font-3{
+ font-size: 36rpx;
+ --textSize:8rpx;
+}
+.font-4{
+ font-size: 40rpx;
+ --textSize:12rpx;
+}
+.text {
+ @each $class, $value in $fontsize {
+ &-#{$class},
+ &-#{$value / 2} {
+ font-size: calc(#{$value}rpx + var(--textSize)) !important;
+ }
+ }
+ &-cut {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+ @at-root [class*='text-linecut'] {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ overflow: hidden;
+ word-break: break-all;
+ }
+ @for $i from 2 through 10 {
+ &-linecut-#{$i} {
+ -webkit-line-clamp: #{$i};
+ }
+ }
+ &-justify {
+ text-align: justify;
+ }
+ &-justify-line {
+ text-align: justify;
+ line-height: 0.5em;
+ margin-top: 0.5em;
+ &::after {
+ content: '.';
+ display: inline-block;
+ width: 100%;
+ }
+ }
+
+ &-Abc {
+ text-transform: Capitalize !important;
+ }
+ &-ABC {
+ text-transform: Uppercase !important;
+ }
+ &-abc {
+ text-transform: Lowercase !important;
+ }
+ &-del,
+ &-line {
+ text-decoration: line-through !important;
+ }
+ &-bottomline {
+ text-decoration: underline !important;
+ }
+ &-italic {
+ font-style: italic !important;
+ }
+ &-style-none {
+ text-decoration: none !important;
+ }
+ &-break {
+ word-break: break-word !important;
+ overflow-wrap: break-word !important;
+ }
+ &-reset {
+ color: inherit !important;
+ }
+ &-price::before {
+ content: '¥';
+ font-size: 80%;
+ margin-right: 4rpx;
+ }
+ &-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+ }
+}
+
+.heading-1 {
+ margin: 60rpx 0 30rpx;
+ font-size: #{map-get($fontsize, xxl)}rpx !important;
+}
+
+.heading-2 {
+ margin: 40rpx 0 20rpx;
+ font-size: #{map-get($fontsize, xl)}rpx !important;
+}
+
+.heading-3 {
+ margin: 30rpx 0 10rpx;
+ font-size: #{map-get($fontsize, lg)}rpx !important;
+}
+
+.heading-4 {
+ margin: 20rpx 0 10rpx;
+ font-size: #{map-get($fontsize, df)}rpx !important;
+}
+
+.heading-5 {
+ margin: 10rpx 0 10rpx;
+ font-size: #{map-get($fontsize, sm)}rpx !important;
+}
+
+.heading-6 {
+ font-size: #{map-get($fontsize, xs)}rpx !important;
+}
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/theme/_dark.scss b/miniprogram/mp-cu/colorUI/scss/theme/_dark.scss
new file mode 100644
index 00000000..aeb49987
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/theme/_dark.scss
@@ -0,0 +1,40 @@
+// 核心主题样式文件
+@mixin theme-dark {
+
+ // 背景色
+ --ui-BG: #393939;
+ --ui-BG-1: #333333;
+ --ui-BG-2: #2c2c2c;
+ --ui-BG-3: #292929;
+ --ui-BG-4: #222222;
+
+ // 文本色
+ --ui-TC: #ffffff;
+ --ui-TC-1: #d4d4d4;
+ --ui-TC-2: #919191;
+ --ui-TC-3: #6a6a6a;
+ --ui-TC-4: #474747;
+
+ // 模糊
+ --ui-Blur: rgba(38, 38, 38, 0.98);
+ --ui-Blur-1: rgba(38, 38, 38, 0.75);
+ --ui-Blur-2: rgba(38, 38, 38, 0.25);
+ --ui-Blur-3: rgba(38, 38, 38, 0.05);
+
+ // 边框
+ --ui-Border: rgba(119, 119, 119, 0.25);
+ --ui-Outline: rgba(255,255,255,0.1);
+ --ui-Line: rgba(119,119,119,0.25);
+
+ // 透明与阴影
+ --ui-Shadow: 0 .5em 1em rgba(0, 0, 0, 0.45);
+ --ui-Shadow-sm: 0 .125em .25em rgba(0, 0, 0, 0.475);
+ --ui-Shadow-lg: 0 1em 3em rgba(0, 0, 0, 0.475);
+ --ui-Shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.475);
+
+ --ui-Shadow-opacity: 0.55;
+ --ui-Shadow-opacity-sm: 0.175;
+ --ui-Shadow-opacity-lg: 0.75;
+
+ --ui-BG-opacity: .1;
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/theme/_light.scss b/miniprogram/mp-cu/colorUI/scss/theme/_light.scss
new file mode 100644
index 00000000..60bc2c66
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/theme/_light.scss
@@ -0,0 +1,41 @@
+// 核心主题样式文件
+@mixin theme-light {
+
+ // 背景色
+ --ui-BG: #ffffff;
+ --ui-BG-1: #f6f6f6;
+ --ui-BG-2: #f1f1f1;
+ --ui-BG-3: #e8e8e8;
+ --ui-BG-4: #e0e0e0;
+
+ // 文本色
+ --ui-TC: #303030;
+ --ui-TC-1: #525252;
+ --ui-TC-2: #777777;
+ --ui-TC-3: #9e9e9e;
+ --ui-TC-4: #c6c6c6;
+
+ // 模糊
+ --ui-Blur: rgba(255, 255, 255, 0.98);
+ --ui-Blur-1: rgba(255, 255, 255, 0.75);
+ --ui-Blur-2: rgba(255,255,255,0.25);
+ --ui-Blur-3: rgba(255,255,255,0.05);
+
+ // 边框
+ --ui-Border: rgba(119,119,119,0.25);
+ --ui-Outline: rgba(0,0,0,0.1);
+ --ui-Line: rgba(119,119,119,0.25);
+
+ // 透明与阴影
+ --ui-Shadow: 0 .5em 1em rgba(0, 0, 0, 0.15);
+ --ui-Shadow-sm: 0 .125em .25em rgba(0, 0, 0, 0.075);
+ --ui-Shadow-lg: 0 1em 3em rgba(0, 0, 0, 0.175);
+ --ui-Shadow-inset: inset 0 .1em .2em rgba(0, 0, 0, 0.075);
+
+ --ui-Shadow-opacity: 0.45;
+ --ui-Shadow-opacity-sm: 0.075;
+ --ui-Shadow-opacity-lg: 0.65;
+
+ --ui-BG-opacity: .1;
+}
+
\ No newline at end of file
diff --git a/miniprogram/mp-cu/colorUI/scss/theme/_style.scss b/miniprogram/mp-cu/colorUI/scss/theme/_style.scss
new file mode 100644
index 00000000..4bc3e017
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/theme/_style.scss
@@ -0,0 +1,53 @@
+@import '../var';
+@import '../mixins';
+@import './light'; //浅蓝主题
+@import './dark'; //深蓝主题
+
+// 多主题
+.theme-light {
+ @include theme-light;
+}
+.theme-dark {
+ @include theme-dark;
+}
+.theme-auto {
+ @include theme-light;
+}
+@media (prefers-color-scheme: dark) {
+ .theme-auto {
+ @include theme-dark;
+ }
+}
+
+@each $value in ('', '-1', '-2', '-3', '-4') {
+ .ui-BG#{$value} {
+ background-color: var(--ui-BG#{$value}) !important;
+ color: var(--ui-TC);
+ }
+ .ui-TC#{$value} {
+ color: var(--ui-TC#{$value}) !important;
+ }
+ .ui-BG-Main#{$value} {
+ background-color: var(--ui-BG-Main#{$value}) !important;
+ color: var(--ui-BG-Main-TC) !important;
+ }
+ .ui-TC-Main#{$value} {
+ color: var(--ui-BG-Main#{$value}) !important;
+ }
+}
+
+@each $color, $value in $colors {
+ .main-#{$color} {
+ --ui-BG-Main: #{$value};
+ --ui-BG-Main-1: #{mix(rgba(255, 255, 255, 0.7), desaturate($value, 20%), 10%)};
+ --ui-BG-Main-2: #{mix(rgba(255, 255, 255, 0.6), desaturate($value, 40%), 20%)};
+ --ui-BG-Main-3: #{mix(rgba(119, 119, 119, 0.2), desaturate($value, 40%), 40%)};
+ --ui-BG-Main-4: #{mix(rgba(119, 119, 119, 0.1), desaturate($value, 40%), 60%)};
+
+ @if $color == 'yellow' {
+ --ui-BG-Main-TC: #333333 !important;
+ } @else {
+ --ui-BG-Main-TC: #ffffff !important;
+ }
+ }
+}
diff --git a/miniprogram/mp-cu/colorUI/scss/ui.scss b/miniprogram/mp-cu/colorUI/scss/ui.scss
new file mode 100644
index 00000000..6648d89c
--- /dev/null
+++ b/miniprogram/mp-cu/colorUI/scss/ui.scss
@@ -0,0 +1,22 @@
+@import './var'; //主样式*
+@import './_mixins'; //主样式*
+
+@import './theme/style'; //系统主题
+@import './main'; //主样式*
+
+@import './style/background'; //背景
+@import './style/grid'; //列
+@import './style/flex'; //布局
+@import './style/border'; //边框
+@import './style/text'; //文本
+@import './style/shadow'; //阴影
+@import './icon/style'; //图标
+@import './style/tag'; //标签
+@import './style/button'; //按钮
+@import './style/form'; //表单
+@import './style/menu'; //菜单
+@import './style/markdown'; //文本
+@import './style/card'; //卡片
+@import './style/table'; //表格
+@import './style/code'; //代码片段
+@import './style/_steps'; //步骤条
diff --git a/miniprogram/mp-cu/lib/diff.js b/miniprogram/mp-cu/lib/diff.js
new file mode 100644
index 00000000..98624089
--- /dev/null
+++ b/miniprogram/mp-cu/lib/diff.js
@@ -0,0 +1,72 @@
+/**
+ * diff库
+ * @author Leisure
+ * @update 2019.11.27
+ * @param {object} current - 当前状态
+ * @param {object} prev - 之前状态
+ */
+const diff = function diff(current = {}, prev = {}) {
+ let result = {};
+ updateDiff(current, prev, "", result);
+ nullDiff(current, prev, "", result);
+ return result;
+};
+
+/**
+ * 判断是否为数组
+ * @param value
+ * @returns {boolean}
+ */
+const ifArray = (value) => {
+ return value instanceof Array || Object.prototype.toString.call(value) === '[object Array]';
+};
+
+/**
+ * 判断是否为对象
+ * @param value
+ * @returns {boolean}
+ */
+const ifObject = (value) => {
+ return Object.prototype.toString.call(value) === '[object Object]';
+};
+
+const updateDiff = function updateDiff(current = {}, prev = {}, root = "", result = {}) {
+ if(ifArray(current) && ((ifArray(prev) && current.length !== prev.length) || !ifArray(prev))){
+ result[root] = current
+ return;
+ }
+ Object.entries(current).forEach(item => {
+ let key = item[0], value = item[1], path = root === "" ? key : root + "." + key;
+ if (ifArray(current)) {
+ path = root === "" ? key : root + "[" + key + "]";
+ }
+ if (!prev.hasOwnProperty(key)) {
+ result[path] = value;
+ } else if ((ifObject(prev[key]) && ifObject(current[key])) || (ifArray(prev[key]) && ifArray(current[key]))) {
+ updateDiff(current[key], prev[key], path, result);
+ } else if (prev[key] !== current[key]) {
+ result[path] = value;
+ }
+ });
+ return result;
+};
+
+const nullDiff = function nullDiff(current = {}, prev = {}, root = "", result = {}) {
+ if(ifArray(current) && ((ifArray(prev) && current.length !== prev.length) || !ifArray(prev))){
+ return;
+ }
+ Object.entries(prev).forEach(item => {
+ let key = item[0], path = root === "" ? key : root + "." + key;
+ if (ifArray(current)) {
+ path = root === "" ? key : root + "[" + key + "]";
+ }
+ if (!current.hasOwnProperty(key)) {
+ result[path] = null;
+ } else if ((ifObject(prev[key]) && ifObject(current[key])) || (ifArray(prev[key]) && ifArray(current[key]))) {
+ nullDiff(current[key], prev[key], path, result);
+ }
+ });
+ return result;
+};
+
+export default diff;
\ No newline at end of file
diff --git a/miniprogram/mp-cu/lib/prism.js b/miniprogram/mp-cu/lib/prism.js
new file mode 100644
index 00000000..d8d12aba
--- /dev/null
+++ b/miniprogram/mp-cu/lib/prism.js
@@ -0,0 +1,484 @@
+/* PrismJS 1.19.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+var _self = "undefined" != typeof window ? window : "undefined" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ?
+ self : {},
+ Prism = function(u) {
+ var c = /\blang(?:uage)?-([\w-]+)\b/i,
+ n = 0,
+ C = {
+ manual: u.Prism && u.Prism.manual,
+ disableWorkerMessageHandler: u.Prism && u.Prism.disableWorkerMessageHandler,
+ util: {
+ encode: function(e) {
+ return e instanceof _ ? new _(e.type, C.util.encode(e.content), e.alias) : Array.isArray(e) ? e.map(C.util.encode) :
+ e.replace(/&/g, "&").replace(/ e.length) return;
+ if (!(k instanceof _)) {
+ if (h && y != n.length - 1) {
+ if (c.lastIndex = v, !(O = c.exec(e))) break;
+ for (var b = O.index + (f && O[1] ? O[1].length : 0), w = O.index + O[0].length, A = y, P = v, x = n.length; A <
+ x && (P < w || !n[A].type && !n[A - 1].greedy); ++A)(P += n[A].length) <= b && (++y, v = P);
+ if (n[y] instanceof _) continue;
+ S = A - y, k = e.slice(v, P), O.index -= v
+ } else {
+ c.lastIndex = 0;
+ var O = c.exec(k),
+ S = 1
+ }
+ if (O) {
+ f && (d = O[1] ? O[1].length : 0);
+ w = (b = O.index + d) + (O = O[0].slice(d)).length;
+ var j = k.slice(0, b),
+ N = k.slice(w),
+ E = [y, S];
+ j && (++y, v += j.length, E.push(j));
+ var L = new _(l, g ? C.tokenize(O, g) : O, m, O, h);
+ if (E.push(L), N && E.push(N), Array.prototype.splice.apply(n, E), 1 != S && C.matchGrammar(e, n, r, y, v,
+ !0, l + "," + u), i) break
+ } else if (i) break
+ }
+ }
+ }
+ }
+ },
+ tokenize: function(e, n) {
+ var r = [e],
+ t = n.rest;
+ if (t) {
+ for (var a in t) n[a] = t[a];
+ delete n.rest
+ }
+ return C.matchGrammar(e, r, n, 0, 0, !1), r
+ },
+ hooks: {
+ all: {},
+ add: function(e, n) {
+ var r = C.hooks.all;
+ r[e] = r[e] || [], r[e].push(n)
+ },
+ run: function(e, n) {
+ var r = C.hooks.all[e];
+ if (r && r.length)
+ for (var t, a = 0; t = r[a++];) t(n)
+ }
+ },
+ Token: _
+ };
+
+ function _(e, n, r, t, a) {
+ this.type = e, this.content = n, this.alias = r, this.length = 0 | (t || "").length, this.greedy = !!a
+ }
+ if (u.Prism = C, _.stringify = function(e, n) {
+ if ("string" == typeof e) return e;
+ if (Array.isArray(e)) return e.map(function(e) {
+ return _.stringify(e, n)
+ }).join("");
+ var r = {
+ type: e.type,
+ content: _.stringify(e.content, n),
+ tag: "span",
+ classes: ["token", e.type],
+ attributes: {},
+ language: n
+ };
+ if (e.alias) {
+ var t = Array.isArray(e.alias) ? e.alias : [e.alias];
+ Array.prototype.push.apply(r.classes, t)
+ }
+ C.hooks.run("wrap", r);
+ var a = Object.keys(r.attributes).map(function(e) {
+ return e + '="' + (r.attributes[e] || "").replace(/"/g, """) + '"'
+ }).join(" ");
+ return "<" + r.tag + ' class="' + r.classes.join(" ") + '"' + (a ? " " + a : "") + ">" + r.content + "" + r.tag +
+ ">"
+ }, !u.document) return u.addEventListener && (C.disableWorkerMessageHandler || u.addEventListener("message",
+ function(e) {
+ var n = JSON.parse(e.data),
+ r = n.language,
+ t = n.code,
+ a = n.immediateClose;
+ u.postMessage(C.highlight(t, C.languages[r], r)), a && u.close()
+ }, !1)), C;
+ var e = C.util.currentScript();
+
+ function r() {
+ C.manual || C.highlightAll()
+ }
+ if (e && (C.filename = e.src, e.hasAttribute("data-manual") && (C.manual = !0)), !C.manual) {
+ var t = document.readyState;
+ "loading" === t || "interactive" === t && e && e.defer ? document.addEventListener("DOMContentLoaded", r) : window.requestAnimationFrame ?
+ window.requestAnimationFrame(r) : window.setTimeout(r, 16)
+ }
+ return C
+ }(_self);
+"undefined" != typeof module && module.exports && (module.exports = Prism), "undefined" != typeof global && (global.Prism =
+ Prism);
+Prism.languages.markup = {
+ comment: //,
+ prolog: /<\?[\s\S]+?\?>/,
+ doctype: {
+ pattern: /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i,
+ greedy: !0
+ },
+ cdata: //i,
+ tag: {
+ pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,
+ greedy: !0,
+ inside: {
+ tag: {
+ pattern: /^<\/?[^\s>\/]+/i,
+ inside: {
+ punctuation: /^<\/?/,
+ namespace: /^[^\s>\/:]+:/
+ }
+ },
+ "attr-value": {
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,
+ inside: {
+ punctuation: [/^=/, {
+ pattern: /^(\s*)["']|["']$/,
+ lookbehind: !0
+ }]
+ }
+ },
+ punctuation: /\/?>/,
+ "attr-name": {
+ pattern: /[^\s>\/]+/,
+ inside: {
+ namespace: /^[^\s>\/:]+:/
+ }
+ }
+ }
+ },
+ entity: /?[\da-z]{1,8};/i
+ }, Prism.languages.markup.tag.inside["attr-value"].inside.entity = Prism.languages.markup.entity, Prism.hooks.add(
+ "wrap",
+ function(a) {
+ "entity" === a.type && (a.attributes.title = a.content.replace(/&/, "&"))
+ }), Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
+ value: function(a, e) {
+ var s = {};
+ s["language-" + e] = {
+ pattern: /(^$)/i,
+ lookbehind: !0,
+ inside: Prism.languages[e]
+ }, s.cdata = /^$/i;
+ var n = {
+ "included-cdata": {
+ pattern: //i,
+ inside: s
+ }
+ };
+ n["language-" + e] = {
+ pattern: /[\s\S]+/,
+ inside: Prism.languages[e]
+ };
+ var t = {};
+ t[a] = {
+ pattern: RegExp("(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g, a),
+ "i"),
+ lookbehind: !0,
+ greedy: !0,
+ inside: n
+ }, Prism.languages.insertBefore("markup", "cdata", t)
+ }
+ }), Prism.languages.xml = Prism.languages.extend("markup", {}), Prism.languages.html = Prism.languages.markup, Prism.languages
+ .mathml = Prism.languages.markup, Prism.languages.svg = Prism.languages.markup;
+! function(s) {
+ var e = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;
+ s.languages.css = {
+ comment: /\/\*[\s\S]*?\*\//,
+ atrule: {
+ pattern: /@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,
+ inside: {
+ rule: /^@[\w-]+/,
+ "selector-function-argument": {
+ pattern: /(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,
+ lookbehind: !0,
+ alias: "selector"
+ }
+ }
+ },
+ url: {
+ pattern: RegExp("url\\((?:" + e.source + "|[^\n\r()]*)\\)", "i"),
+ inside: {
+ function: /^url/i,
+ punctuation: /^\(|\)$/
+ }
+ },
+ selector: RegExp("[^{}\\s](?:[^{};\"']|" + e.source + ")*?(?=\\s*\\{)"),
+ string: {
+ pattern: e,
+ greedy: !0
+ },
+ property: /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,
+ important: /!important\b/i,
+ function: /[-a-z0-9]+(?=\()/i,
+ punctuation: /[(){};:,]/
+ }, s.languages.css.atrule.inside.rest = s.languages.css;
+ var t = s.languages.markup;
+ t && (t.tag.addInlined("style", "css"), s.languages.insertBefore("inside", "attr-value", {
+ "style-attr": {
+ pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,
+ inside: {
+ "attr-name": {
+ pattern: /^\s*style/i,
+ inside: t.tag.inside
+ },
+ punctuation: /^\s*=\s*['"]|['"]\s*$/,
+ "attr-value": {
+ pattern: /.+/i,
+ inside: s.languages.css
+ }
+ },
+ alias: "language-css"
+ }
+ }, t.tag))
+}(Prism);
+Prism.languages.clike = {
+ comment: [{
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+ lookbehind: !0
+ }, {
+ pattern: /(^|[^\\:])\/\/.*/,
+ lookbehind: !0,
+ greedy: !0
+ }],
+ string: {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: !0
+ },
+ "class-name": {
+ pattern: /(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,
+ lookbehind: !0,
+ inside: {
+ punctuation: /[.\\]/
+ }
+ },
+ keyword: /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
+ boolean: /\b(?:true|false)\b/,
+ function: /\w+(?=\()/,
+ number: /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,
+ operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
+ punctuation: /[{}[\];(),.:]/
+};
+Prism.languages.javascript = Prism.languages.extend("clike", {
+ "class-name": [Prism.languages.clike["class-name"], {
+ pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,
+ lookbehind: !0
+ }],
+ keyword: [{
+ pattern: /((?:^|})\s*)(?:catch|finally)\b/,
+ lookbehind: !0
+ }, {
+ pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
+ lookbehind: !0
+ }],
+ number: /\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,
+ function: /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
+ operator: /--|\+\+|\*\*=?|=>|&&|\|\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?[.?]?|[~:]/
+ }), Prism.languages.javascript["class-name"][0].pattern =
+ /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/, Prism.languages.insertBefore("javascript",
+ "keyword", {
+ regex: {
+ pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*[\s\S]*?\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,
+ lookbehind: !0,
+ greedy: !0
+ },
+ "function-variable": {
+ pattern: /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,
+ alias: "function"
+ },
+ parameter: [{
+ pattern: /(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,
+ lookbehind: !0,
+ inside: Prism.languages.javascript
+ }, {
+ pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,
+ inside: Prism.languages.javascript
+ }, {
+ pattern: /(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,
+ lookbehind: !0,
+ inside: Prism.languages.javascript
+ }, {
+ pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,
+ lookbehind: !0,
+ inside: Prism.languages.javascript
+ }],
+ constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/
+ }), Prism.languages.insertBefore("javascript", "string", {
+ "template-string": {
+ pattern: /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,
+ greedy: !0,
+ inside: {
+ "template-punctuation": {
+ pattern: /^`|`$/,
+ alias: "string"
+ },
+ interpolation: {
+ pattern: /((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,
+ lookbehind: !0,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\${|}$/,
+ alias: "punctuation"
+ },
+ rest: Prism.languages.javascript
+ }
+ },
+ string: /[\s\S]+/
+ }
+ }
+ }), Prism.languages.markup && Prism.languages.markup.tag.addInlined("script", "javascript"), Prism.languages.js =
+ Prism.languages.javascript;
diff --git a/miniprogram/mp-cu/main.js b/miniprogram/mp-cu/main.js
new file mode 100644
index 00000000..6f12fa28
--- /dev/null
+++ b/miniprogram/mp-cu/main.js
@@ -0,0 +1,396 @@
+import { CUStoreInit } from '/store/index'
+/**
+ * @author bypanghu@163.com (https://github.com/bypanghu)
+ * @author iZaiZaiA (https://github.com/iZaiZaiA)
+ */
+
+let version = '3.3.2';
+
+let store = {}, sys_info = wx.getSystemInfoSync();
+let baseMethod = {
+ //设置主题
+ setTheme(data) {
+ store.setState({'sys_theme': data})
+ wx.setStorageSync('sys_theme', data);
+ //跟随系统
+ if (data === 'auto') {
+ setStatusStyle(wx.getSystemInfoSync().theme === 'light' ? 'dark' : 'light');
+ } else {
+ setStatusStyle(data === 'light' ? 'dark' : 'light');
+ }
+ },
+ //设置主颜色
+ setMain(data) {
+ store.setState({sys_main: data});
+ wx.setStorageSync('sys_main', data);
+ },
+ //设置字号等级
+ setText(data) {
+ store.setState({sys_text: data});
+ wx.setStorageSync('sys_text', data);
+ },
+ $showDialog({title , content , showCancel , cancelText, confirmText , success}) {
+ store.$p.map(item =>{
+ if(item.is.indexOf('components/ui-modal/ui-modal') > -1 ){
+ //强制更新所有页面的successBack 为设定的success
+ item['successBack'] = success
+ }
+ })
+ store.setState({
+ '$Modal.show': true,
+ '$dialog.title' : title,
+ '$dialog.content' : content,
+ '$dialog.showCancel' : showCancel,
+ '$dialog.cancelText' : cancelText,
+ '$dialog.confirmText' : confirmText
+ });
+ },
+ setToast( data) {
+ let key ={}
+ Object.assign(key,data);
+ console.log(key)
+ // state.toast = Object.assign(state.toast,data);
+ },
+ $tips(res, duration = 1500, mask = false, icon= '') {
+ if(_object(res)) {
+ store.setState({
+ '$toast.title': res.title || '',
+ '$toast.duration': res.duration || duration,
+ '$toast.icon': res.icon || icon,
+ '$toast.mask': res.mask || mask
+ })
+ } else {
+ store.setState({
+ '$toast.title': res,
+ '$toast.duration': duration,
+ '$toast.icon': icon,
+ '$toast.mask': mask,
+ })
+ }
+ },
+ $success(_,title='成功',duration=1500){
+ store.setState({
+ '$toast.title': title,
+ '$toast.duration': duration,
+ '$toast.icon': '_icon-check'
+ })
+ },
+ $error(_,title='错误',duration=1500){
+ store.setState({
+ '$toast.title' : title,
+ '$toast.duration' : duration,
+ '$toast.icon' : '_icon-warn',
+
+ })
+ },
+ $loading(title = '加载中' , duration = 1500){
+ store.setState({
+ '$toast.title' : title ,
+ '$toast.duration' : duration,
+ '$toast.icon' : '_icon-loading',
+ '$toast.isLoading':true
+ })
+ },
+ $hideLoading(){
+ store.setState({
+ '$toast.title' : '',
+ '$toast.icon' : '',
+ '$toast.isLoading':false
+ })
+ },
+ closeModal(){
+ store.setState({
+ '$Modal.show': false,
+ });
+ },
+ _toHome() {
+ wx.switchTab({
+ url: this.data.$cuStore.sys_home_page
+ });
+ },
+ _toPath(url, type = '') {
+ switch (type) {
+ case 'switchTab':
+ wx.switchTab({
+ url: url,
+ fail(res) {
+ console.log(res);
+ }
+ });
+ break;
+ case 'reLaunch':
+ wx.reLaunch({
+ url: url,
+ success(res) {
+ console.log(res);
+ },
+ fail(res) {
+ console.log(res);
+ }
+ });
+ break;
+ case 'redirectTo':
+ wx.redirectTo({
+ url: url,
+ fail(res) {
+ console.log(res);
+ }
+ });
+ break;
+ default:
+ wx.navigateTo({
+ url: url,
+ fail(res) {
+ console.log(res);
+ }
+ })
+ break;
+ }
+ },
+ _backPage() {
+ if (this.sys_isFirstPage()) {
+ this._toHome();
+ } else {
+ wx.navigateBack({
+ delta: 1
+ });
+ }
+ },
+ //实例是否为路由栈的第一个页面
+ sys_isFirstPage() {
+ return getCurrentPages().length === 1
+ },
+}
+
+//是否为对象
+const _object = function (value) {
+ return Object.prototype.toString.call(value) === '[object Object]';
+};
+
+
+/**
+ * ColorUi 主Js文件
+ * config 下
+ * @param theme 设置默认主题
+ * @param main 设置默认强调色
+ * @param text 设置默认字号等级(0-4)
+ * @param footer 显示底部colorUI版权(如果属于开源作品,请带上ColorUI版权!!!)
+ * @param homePath 设置首页路径(一些组件会用到跳回主页,请每个项目设置好!)
+ * @param tabBar 配置系统tabBar
+ */
+export default class ColorUI {
+ constructor({config, data, state, methods}) {
+ //默认配置,防止没自定义配置时,出问题。
+ config.theme = config.theme||'auto'
+ config.main = config.main||'blue'
+ config.text = config.text||1
+ config.homePath = config.homePath||'/pages/index/index'
+ config.tabBar = config.tabBar||[]
+ config.shareTitle = config.shareTitle||''
+ //处理数据
+ this.config = config
+ this.data = data
+ this.methods = methods
+ this.state = state
+ this.$cuState = {};
+ this.colorUiInit()
+ }
+ //colorUi 主框架初始化
+ colorUiInit() {
+ //创建时,添加组件
+ const _create = function (r, o = {}) {
+ r.$cuStore = {};
+ const { useProp } = o;
+ if (o.hasOwnProperty("useProp")) {
+ if ((useProp && typeof useProp === "string") || Object.prototype.toString.call(useProp) === "[object Array]") {
+ r.$cuStore.useProp = [].concat(useProp);
+ } else {
+ r.$cuStore.useProp = [];
+ }
+ }
+ store.$p.push(r);
+ if (r.$cuStore.useProp) {
+ r.setData({
+ $cuStore: _filterKey(store.$cuStore, r.$cuStore.useProp, (key, useKey) => key === useKey),
+ });
+ } else {
+ r.setData({
+ $cuStore: store.state,
+ })
+ }
+ };
+ //销毁时,移除组件
+ const _destroy = function (r) {
+ let index = store.$p.findIndex((item) => item === r);
+ if (index > -1) {
+ store.$p.splice(index, 1);
+ }
+ };
+ store = CUStoreInit(this.config)
+ if (this.config.theme === 'auto') {
+ wx.onThemeChange((res) => {
+ store.setState({sys_theme: 'auto'})
+ wx.setStorageSync('sys_theme', 'auto');
+ setStatusStyle(wx.getSystemInfoSync().theme === 'light' ? 'dark' : 'light')
+ })
+ } else {
+ wx.setStorageSync('sys_theme', this.config.theme)
+ setStatusStyle(this.config.theme === 'light' ? 'dark' : 'light');
+ }
+ const originPage = Page
+ const originComponent = Component;
+ let that = this;
+ const _objData = function (o) {
+ return {
+ ...(o.data || {}),
+ sys_info: sys_info,
+ sys_navBar: sys_info.statusBarHeight + 50,
+ sys_statusBar: sys_info.statusBarHeight,
+ sys_capsule: sys_capsule(),
+ version: version,
+ $cuData: that.data,
+ $cuConfig: that.config,
+ $cuStore: store.state
+ }
+ };
+ App.Page = function (o = {}, ...args) {
+ //将config 和 data 组装进data 里面
+ o.data = _objData(o);
+ //注入colorUi 函数体
+ Object.keys(baseMethod).forEach(key => {
+ if (typeof baseMethod[key] === 'function') {
+ o[key] = baseMethod[key]
+ }
+ })
+ o['setState'] = store.setState
+ //如果有配置methods,就注入设定的methods
+ if (that.methods) {
+ let pageLife = [
+ "data", "onLoad", "onShow", "onReady", "onHide", "onUnload", "onPullDownRefresh",
+ "onReachBottom", "onShareAppMessage", "onPageScroll", "onTabItemTap", "setTheme",
+ "setMain", "setText", "_toHome", "_toPath", "_backPage", "sys_isFirstPage"
+ ]
+ Object.keys(that.methods).forEach((key) => {
+ if (typeof that.methods[key] === "function" && !pageLife.some((item) => item === key)) {
+ o[key] = that.methods[key];
+ }
+ });
+ }
+
+ const originCreate = o.onLoad;
+ o.onLoad = function () {
+ _create(this, o);
+ originCreate && originCreate.apply(this, arguments);
+ };
+
+ const originonDestroy = o.onUnload;
+ o.onUnload = function () {
+ _destroy(this);
+ originonDestroy && originonDestroy.apply(this, arguments);
+ };
+
+ //开启全局分享
+ if (that.config.share) {
+ //分享到朋友
+ //const onShareApp = o.onShareAppMessage;
+ o.onShareAppMessage = function () {
+ return {
+ title: that.config.shareTitle,
+ path: that.config.homePath
+ }
+ //_create(this, o);
+ //onShareApp && onShareApp.apply(this, arguments);
+ };
+ //分享到朋友圈
+ //const onShareTime = o.onShareTimeline;
+ o.onShareTimeline = function () {
+ return {
+ title: that.config.shareTitle,
+ query: that.config.homePath
+ }
+ //_create(this, o);
+ //onShareTime && onShareTime.apply(this, arguments);
+ };
+ }
+
+ originPage(o, ...args);
+ //console.log(o)
+ }
+ try {
+ Page = App.Page
+ } catch (e) { }
+
+ //重写组件
+ App.Component = function (o = {}, ...args) {
+ o.data = _objData(o);
+ o.methods || (o.methods = {})
+ o.methods['setState'] = store.setState
+ Object.keys(baseMethod).forEach(key => {
+ if (typeof baseMethod[key] === 'function') {
+ o.methods[key] = baseMethod[key]
+ }
+ })
+ const { lifetimes = {} } = o;
+ let originCreate = lifetimes.attached || o.attached, originonDestroy = lifetimes.detached || o.detached;
+ const attached = function () {
+ _create(this, o);
+ originCreate && originCreate.apply(this, arguments);
+ };
+ const detached = function () {
+ _destroy(this);
+ originonDestroy && originonDestroy.apply(this, arguments);
+ };
+ if (Object.prototype.toString.call(o.lifetimes) === "[object Object]") {
+ o.lifetimes.attached = attached;
+ o.lifetimes.detached = detached;
+ } else {
+ o.attached = attached;
+ o.detached = detached;
+ }
+ originComponent(o, ...args);
+ };
+ try {
+ Component = App.Component;
+ } catch (e) { }
+
+ console.log(
+ `%c colorUI 启动成功 %c 当前版本V` + version + `%c`,
+ 'background:#0081ff; padding: 1px; border-radius: 3px 0 0 3px; color: #fff',
+ 'background:#354855; padding: 1px 5px; border-radius: 0 3px 3px 0; color: #fff; font-weight: bold;',
+ 'background:transparent'
+ )
+ }
+}
+
+//设置系统颜色 版本
+export const setStatusStyle = (status) => {
+ if (status === 'light') {
+ wx.setNavigationBarColor({
+ frontColor: '#ffffff',
+ backgroundColor: '#000000',
+ animation: {
+ duration: 200,
+ timingFunc: 'easeIn'
+ }
+ });
+ } else {
+ wx.setNavigationBarColor({
+ frontColor: '#000000',
+ backgroundColor: '#ffffff',
+ animation: {
+ duration: 200,
+ timingFunc: 'easeIn'
+ }
+ });
+ }
+}
+
+//获取胶囊信息
+export const sys_capsule = () => {
+ let capsule = wx.getMenuButtonBoundingClientRect();
+ if (!capsule) {
+ console.error('getMenuButtonBoundingClientRect error');
+ capsule = { bottom: 56, height: 32, left: 278, right: 365, top: 24, width: 87 };
+ }
+ return capsule;
+}
diff --git a/miniprogram/mp-cu/store/index.js b/miniprogram/mp-cu/store/index.js
new file mode 100644
index 00000000..b450fa89
--- /dev/null
+++ b/miniprogram/mp-cu/store/index.js
@@ -0,0 +1,158 @@
+import diff from '../lib/diff'
+
+/***
+ * @author bypanghu@163.com (https://github.com/bypanghu)
+ * @author iZaiZaiA (https://github.com/iZaiZaiA)
+ * 此处参考 https://github.com/xiaoyao96/wxMiniStore
+ */
+
+/**
+ * 数组或对象深拷贝
+ * @param data
+ * @returns {any}
+ */
+const nextArr = (data) => {
+ return JSON.parse(JSON.stringify(data));
+};
+
+/**
+ * 判断是否为数组
+ * @param value
+ * @returns {boolean}
+ */
+const ifArray = (value) => {
+ return value instanceof Array || Object.prototype.toString.call(value) === '[object Array]';
+};
+
+/**
+ * 判断是否为对象
+ * @param value
+ * @returns {boolean}
+ */
+const ifObject = (value) => {
+ return Object.prototype.toString.call(value) === '[object Object]';
+};
+
+const setData = (obj, data) => {
+ let result = nextArr(data), origin = nextArr(obj);
+ Object.keys(origin).forEach((key) => {
+ dataHandler(key, origin[key], result);
+ });
+ return result;
+};
+const dataHandler = (key, result, data) => {
+ let arr = pathHandler(key),d = data;
+ for (let i = 0; i < arr.length - 1; i++) {
+ keyToData(arr[i], arr[i + 1], d);
+ d = d[arr[i]];
+ }
+ d[arr[arr.length - 1]] = result;
+};
+
+const pathHandler = (key) => {
+ let current = "", keyArr = [];
+ for (let i = 0, len = key.length; i < len; i++) {
+ if (key[0] === "[") {
+ throw new Error("key值不能以[]开头");
+ }
+ if (key[i].match(/\.|\[/g)) {
+ cleanAndPush(current, keyArr);
+ current = "";
+ }
+ current += key[i];
+ }
+ cleanAndPush(current, keyArr);
+ return keyArr;
+};
+
+const cleanAndPush = (key, arr) => {
+ let r = cleanKey(key);
+ if (r !== "") {
+ arr.push(r);
+ }
+};
+
+const keyToData = (prev, current, data) => {
+ if (prev === "") {
+ return;
+ }
+ if (typeof current === "number" && !ifArray(data[prev])) {
+ data[prev] = [];
+ } else if (typeof current === "string" && !ifObject(data[prev])) {
+ data[prev] = {};
+ }
+};
+
+const cleanKey = (key) => {
+ if (key.match(/\[\S+\]/g)) {
+ let result = key.replace(/\[|\]/g, "");
+ if (!Number.isNaN(parseInt(result))) {
+ return +result;
+ } else {
+ throw new Error(`[]中必须为数字`);
+ }
+ }
+ return key.replace(/\[|\.|\]| /g, "");
+};
+
+export const CUStoreInit = (config) => {
+ let $store = {
+ state: {},
+ $p: [],
+ setState(obj, fn = () => { }) {
+ if (!ifObject(obj)) {
+ throw new Error("setState的第一个参数须为object!");
+ }
+ let prev = $store.state;
+ let current = setData(obj, prev);
+ $store.state = current;
+ //如果有组件
+ if ($store.$p.length > 0) {
+ let diffObj = diff(current, prev);
+ let keys = Object.keys(diffObj);
+ if (keys.length > 0) {
+ const newObj = {};
+ keys.forEach((key) => {
+ newObj["$cuStore." + key] = diffObj[key];
+ });
+ let pros = $store.$p.map((r) => {
+ if (r.$cuStore.hasOwnProperty("useProp")) {
+ let useProps = _filterKey(newObj, r.$cuStore.useProp,
+ (key, useKey) => key === "$cuStore." + useKey ||
+ !!key.match(new RegExp("^[$]cuStore." + useKey + "[.|[]", "g"))
+ );
+ if (Object.keys(useProps).length > 0) {
+ return new Promise((resolve) => {
+ r.setData(useProps, resolve);
+ });
+ } else {
+ return Promise.resolve();
+ }
+ }
+ return new Promise((resolve) => {
+ r.setData(newObj, resolve);
+ });
+ });
+ Promise.all(pros).then(fn);
+ } else {
+ fn();
+ }
+ } else {
+ fn();
+ }
+ }
+ }
+ $store.state.sys_theme = wx.getStorageSync('sys_theme') ? wx.getStorageSync('sys_theme') : config.theme
+ $store.state.sys_main = wx.getStorageSync('sys_main') ? wx.getStorageSync('sys_main') : config.main
+ $store.state.sys_text = wx.getStorageSync('sys_text') ? wx.getStorageSync('sys_text') : config.text
+ $store.state.sys_home_page = config.homePath
+ const modal = {
+ show: false,
+ dialog: {title:'', content:'', showCancel:true, cancelText:'取消', cancelColor:'', confirmText:'确定', confirmColor:'', success : ()=>{}},
+ toast: {title:'', icon:'', image:'', duration:1500, mask:false, isLoading:false, success:()=>{}},
+ }
+ $store.state.$Modal = modal
+ $store.state.$dialog = modal.dialog
+ $store.state.$toast = modal.toast
+ return $store
+}
diff --git a/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.js b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.js
new file mode 100644
index 00000000..7969fb3e
--- /dev/null
+++ b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.js
@@ -0,0 +1,29 @@
+Component({
+ data: {
+ colorName: ''
+ },
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ data: {
+ type: Object,
+ optionalTypes: Array,
+ value: {}
+ }
+ },
+ lifetimes: {
+ attached() {
+ this.setData({
+ colorName: this.getColor()
+ });
+ }
+ },
+ methods:{
+ //随机生成库内颜色名
+ getColor() {
+ let colorArr = ['yellow', 'orange', 'red', 'pink', 'mauve', 'purple', 'blue', 'cyan', 'green', 'olive', 'grey', 'brown'];
+ return colorArr[Math.floor(Math.random() * colorArr.length)]
+ }
+ },
+})
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.json b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.json
new file mode 100644
index 00000000..e8cfaaf8
--- /dev/null
+++ b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.scss b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.scss
new file mode 100644
index 00000000..2ac2b4a7
--- /dev/null
+++ b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.scss
@@ -0,0 +1,113 @@
+.doc-card {
+ position: relative;
+ .doc-card-navigator {
+ position: relative;
+ z-index: 2;
+ overflow: hidden;
+ }
+ .doc-bg {
+ position: relative;
+ z-index: 2;
+ text-shadow: 2px 3px 5px rgba(0,0,0,.1);
+ }
+ .doc-title {
+ position: relative;
+ display: inline-block;
+ padding-bottom: 20rpx;
+ font-size: 34rpx;
+ &::after {
+ content: '';
+ position: absolute;
+ width: calc(100% + 20rpx);
+ height: 2px;
+ background-color: currentColor;
+ left: 0;
+ bottom: 0;
+ }
+ }
+ .doc-name {
+ position: relative;
+ display: block;
+ padding-top: 20rpx;
+ &::after {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 1px;
+ background-color: currentColor;
+ left: 0;
+ top: 0;
+ }
+ }
+ .doc-text{
+ position: relative;
+ z-index: 2;
+ padding-right: 50px !important;
+ }
+ .doc-icon{
+ position: absolute;
+ z-index: 2;
+ right: 0;
+ }
+ .doc-dot {
+ position: absolute;
+ z-index: 1;
+ border-radius: 50%;
+ transition: all 0.6s cubic-bezier(.08,.82,.17,1);
+ opacity: .3;
+ &.doc-dot1 {
+ width: 400rpx;
+ height: 400rpx;
+ left: 0;
+ top: auto;
+ right: auto;
+ bottom: -300rpx;
+ filter: hue-rotate(30deg) brightness(160%);
+ }
+ &.doc-dot2 {
+ left: -40px;
+ top: auto;
+ right: auto;
+ bottom: -20rpx;
+ width: 300rpx;
+ height: 300rpx;
+ filter: brightness(80%);
+ }
+ &.doc-dot3 {
+ top: -120rpx;
+ right: -120rpx;
+ opacity: 0.6;
+ width: 240rpx;
+ height: 240rpx;
+ filter: brightness(120%);
+ }
+ }
+ .doc-bg {
+ position: absolute;
+ z-index: 0;
+ width: calc(100% - 40rpx);
+ height: 30rpx;
+ bottom: -15rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ border-radius: 10rpx;
+ // filter: blur(10px);
+ opacity: 0.2;
+ }
+
+ &:hover {
+ .doc-dot1 {
+ transform: translateX(-100rpx) translatey(-360rpx);
+ filter: hue-rotate(-30deg) brightness(80%);
+ }
+ .doc-dot2 {
+ transform: translateX(300rpx) translatey(0px);
+ filter: brightness(120%);
+ }
+ .doc-dot3 {
+ filter: brightness(80%);
+ transform: translateX(-300rpx) translatey(240rpx);
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.wxml b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.wxml
new file mode 100644
index 00000000..13f6d305
--- /dev/null
+++ b/miniprogram/mp-sdk/components/app-nav-li/app-nav-li.wxml
@@ -0,0 +1,15 @@
+
+
+
+ {{ data.title }}
+ {{ data.name }}
+
+
+
+
+
+
+
+
+
+
diff --git a/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.js b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.js
new file mode 100644
index 00000000..9a898e2c
--- /dev/null
+++ b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.js
@@ -0,0 +1,15 @@
+Component({
+ options: {
+ addGlobalClass: true
+ },
+ properties: {
+ data: {
+ type: Array,
+ value: []
+ },
+ slots: {
+ type: Array,
+ value: []
+ },
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.json b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.json
new file mode 100644
index 00000000..4b353ee4
--- /dev/null
+++ b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ui-title": "/mp-cu/colorUI/components/ui-title/ui-title"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.scss b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.wxml b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.wxml
new file mode 100644
index 00000000..526dd3ff
--- /dev/null
+++ b/miniprogram/mp-sdk/components/ui-parameter/ui-parameter.wxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+ {{ item.name }}
+
+ [{{ item.type }}]
+ {{ item.default }}
+
+ {{ item.info }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.info }}
+
+
+
+
diff --git a/miniprogram/mp-sdk/icon/doc.scss b/miniprogram/mp-sdk/icon/doc.scss
new file mode 100644
index 00000000..5341ec0a
--- /dev/null
+++ b/miniprogram/mp-sdk/icon/doc.scss
@@ -0,0 +1,452 @@
+@font-face {
+ font-family: 'coloricon';
+ src: url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2');
+ font-weight: normal;
+ font-style: normal;
+}
+[class*='cicon-'] {
+ font-family: 'coloricon', serif;
+ display: inline-block;
+}
+
+.cicon-Aa:before {content: "\e7a1";}
+.cicon-accounts:before {content: "\e681";}
+.cicon-accounts-o:before {content: "\e686";}
+.cicon-add:before {content: "\e6e4";}
+.cicon-add-round:before {content: "\e717";}
+.cicon-add-round-o:before {content: "\e718";}
+.cicon-alarm:before {content: "\e61e";}
+.cicon-album:before {content: "\e759";}
+.cicon-alipay:before {content: "\e6e1";}
+.cicon-android:before {content: "\e6e2";}
+.cicon-angle:before {content: "\e605";}
+.cicon-apple:before {content: "\e8e7";}
+.cicon-apps:before {content: "\e737";}
+.cicon-archive:before {content: "\e7ae";}
+.cicon-archive-o:before {content: "\e7ad";}
+.cicon-arrow:before {content: "\e608";}
+.cicon-at-line:before {content: "\e75c";}
+.cicon-avatar:before {content: "\e663";}
+.cicon-avatar-o:before {content: "\e665";}
+.cicon-avatars:before {content: "\e67e";}
+.cicon-avatars-o:before {content: "\e680";}
+.cicon-back:before {content: "\e600";}
+.cicon-backspace:before {content: "\e6a9";}
+.cicon-backup:before {content: "\e61f";}
+.cicon-backup-restore:before {content: "\e62d";}
+.cicon-barcode:before {content: "\e71f";}
+.cicon-book:before {content: "\e6a2";}
+.cicon-bookmark:before {content: "\e6a3";}
+.cicon-bookmark-o:before {content: "\e697";}
+.cicon-bookmarks:before {content: "\e6a6";}
+.cicon-box:before {content: "\e714";}
+.cicon-box-block:before {content: "\e6ac";}
+.cicon-box-right:before {content: "\e6a0";}
+.cicon-brand:before {content: "\e726";}
+.cicon-brand-o:before {content: "\e727";}
+.cicon-building:before {content: "\e6c3";}
+.cicon-building-o:before {content: "\e6c7";}
+.cicon-camera:before {content: "\e6fa";}
+.cicon-camera-add:before {content: "\e736";}
+.cicon-camera-add-o:before {content: "\e735";}
+.cicon-camera-lens:before {content: "\e68f";}
+.cicon-camera-lens-o:before {content: "\e68e";}
+.cicon-camera-o:before {content: "\e6fb";}
+.cicon-camera-rotate:before {content: "\e71e";}
+.cicon-card:before {content: "\e744";}
+.cicon-cardboard:before {content: "\e7a9";}
+.cicon-cardboard-o:before {content: "\e7aa";}
+.cicon-cardboard-off-o:before {content: "\e7af";}
+.cicon-cart:before {content: "\e70b";}
+.cicon-cart-o:before {content: "\e708";}
+.cicon-chat:before {content: "\e739";}
+.cicon-chat-bubble:before {content: "\e69b";}
+.cicon-chat-bubble-o:before {content: "\e6a7";}
+.cicon-chat-list:before {content: "\e69d";}
+.cicon-chat-list-o:before {content: "\e6aa";}
+.cicon-chat-o:before {content: "\e73c";}
+.cicon-chat-smile:before {content: "\e779";}
+.cicon-chat-smile-o:before {content: "\e78e";}
+.cicon-chat-smiles:before {content: "\e76b";}
+.cicon-chat-smiles-o:before {content: "\e74a";}
+.cicon-check:before {content: "\e69f";}
+.cicon-checkbox:before {content: "\e713";}
+.cicon-checkbox-o:before {content: "\e715";}
+.cicon-check-round:before {content: "\e6f1";}
+.cicon-check-round-o:before {content: "\e6f2";}
+.cicon-choiceness:before {content: "\e728";}
+.cicon-choiceness-o:before {content: "\e729";}
+.cicon-chrome:before {content: "\e6e3";}
+.cicon-circle:before {content: "\e7b0";}
+.cicon-circle-o:before {content: "\e7b1";}
+.cicon-close:before {content: "\e6ed";}
+.cicon-close-round:before {content: "\e6f3";}
+.cicon-close-round-o:before {content: "\e6f4";}
+.cicon-clothes:before {content: "\e72a";}
+.cicon-clothes-o:before {content: "\e72b";}
+.cicon-cloud:before {content: "\e64e";}
+.cicon-cloud-done:before {content: "\e641";}
+.cicon-cloud-download:before {content: "\e647";}
+.cicon-cloud-o:before {content: "\e646";}
+.cicon-cloud-off:before {content: "\e64b";}
+.cicon-cloud-upload:before {content: "\e687";}
+.cicon-code-box:before {content: "\e7c3";}
+.cicon-coin:before {content: "\e78a";}
+.cicon-coin-o:before {content: "\e79d";}
+.cicon-comment:before {content: "\e738";}
+.cicon-comment-o:before {content: "\e70e";}
+.cicon-community:before {content: "\e742";}
+.cicon-community-o:before {content: "\e743";}
+.cicon-countdown:before {content: "\e722";}
+.cicon-countdown-o:before {content: "\e723";}
+.cicon-creative:before {content: "\e72c";}
+.cicon-creative-o:before {content: "\e72d";}
+.cicon-crop:before {content: "\e6d9";}
+.cicon-crown:before {content: "\e776";}
+.cicon-crown-o:before {content: "\e777";}
+.cicon-cut:before {content: "\e74b";}
+.cicon-DarkMode:before {content: "\e7c4";}
+.cicon-dashboard:before {content: "\e62e";}
+.cicon-delete:before {content: "\e6bd";}
+.cicon-delete-close:before {content: "\e6ae";}
+.cicon-delete-line:before {content: "\e707";}
+.cicon-delete-line-o:before {content: "\e709";}
+.cicon-delete-o:before {content: "\e69a";}
+.cicon-deliver:before {content: "\e7f7";}
+.cicon-deliver-o:before {content: "\e6ff";}
+.cicon-demo:before {content: "\e916";}
+.cicon-discover:before {content: "\e70c";}
+.cicon-discover-o:before {content: "\e702";}
+.cicon-discuss-fill:before {content: "\e790";}
+.cicon-discuss-line:before {content: "\e78f";}
+.cicon-dollar:before {content: "\e79f";}
+.cicon-dollar-o:before {content: "\e79e";}
+.cicon-done:before {content: "\e633";}
+.cicon-done-all:before {content: "\e62a";}
+.cicon-douyin:before {content: "\e6e7";}
+.cicon-drop-down:before {content: "\e61c";}
+.cicon-drop-up:before {content: "\e61d";}
+.cicon-eject:before {content: "\e63a";}
+.cicon-ellipse:before {content: "\e74c";}
+.cicon-emoji:before {content: "\e78d";}
+.cicon-emoji-o:before {content: "\e6ee";}
+.cicon-equalizer:before {content: "\e802";}
+.cicon-eraser:before {content: "\e770";}
+.cicon-eraser-o:before {content: "\e772";}
+.cicon-evaluate:before {content: "\e7f0";}
+.cicon-evaluate-o:before {content: "\e700";}
+.cicon-event-close:before {content: "\e6a5";}
+.cicon-event-done:before {content: "\e6b2";}
+.cicon-event-list:before {content: "\e6b8";}
+.cicon-explore:before {content: "\e628";}
+.cicon-explore-line:before {content: "\e719";}
+.cicon-explore-line-o:before {content: "\e710";}
+.cicon-explore-o:before {content: "\e626";}
+.cicon-extension:before {content: "\e620";}
+.cicon-extension-o:before {content: "\e63f";}
+.cicon-eye:before {content: "\e740";}
+.cicon-eye-favor:before {content: "\e7b4";}
+.cicon-eye-favor-o:before {content: "\e7b5";}
+.cicon-eye-o:before {content: "\e741";}
+.cicon-eye-off:before {content: "\e7b3";}
+.cicon-eye-off-o:before {content: "\e7b2";}
+.cicon-facebook:before {content: "\e6ea";}
+.cicon-favorite:before {content: "\e623";}
+.cicon-favorite-o:before {content: "\e621";}
+.cicon-female:before {content: "\e72f";}
+.cicon-file:before {content: "\e857";}
+.cicon-file-copy:before {content: "\e85c";}
+.cicon-file-copy-o:before {content: "\e7bc";}
+.cicon-file-o:before {content: "\e7bb";}
+.cicon-file-text:before {content: "\e858";}
+.cicon-file-text-o:before {content: "\e7b9";}
+.cicon-filter:before {content: "\e6ec";}
+.cicon-fingerprint:before {content: "\e63b";}
+.cicon-first-page:before {content: "\e60c";}
+.cicon-flag:before {content: "\e64d";}
+.cicon-flag-o:before {content: "\e64c";}
+.cicon-flash-close:before {content: "\e73b";}
+.cicon-flash-off:before {content: "\e6d5";}
+.cicon-flash-on:before {content: "\e6dc";}
+.cicon-flash-open:before {content: "\e74f";}
+.cicon-folder:before {content: "\e6a1";}
+.cicon-folder-add:before {content: "\e6b4";}
+.cicon-folder-o:before {content: "\e6b0";}
+.cicon-folder-special:before {content: "\e65c";}
+.cicon-forward:before {content: "\e601";}
+.cicon-fullscreen:before {content: "\e915";}
+.cicon-fullscreen-exit:before {content: "\e914";}
+.cicon-game:before {content: "\e6c0";}
+.cicon-game-o:before {content: "\e6d1";}
+.cicon-git-commit:before {content: "\e7be";}
+.cicon-git-commit-o:before {content: "\e7bd";}
+.cicon-github:before {content: "\e6e9";}
+.cicon-github-circle:before {content: "\ead8";}
+.cicon-goods:before {content: "\e778";}
+.cicon-goodsnew:before {content: "\e7bf";}
+.cicon-goodsnew-o:before {content: "\e7c0";}
+.cicon-goods-o:before {content: "\e70f";}
+.cicon-GooglePlaylogo:before {content: "\e6e5";}
+.cicon-grid:before {content: "\e6ce";}
+.cicon-grid-o:before {content: "\e6cc";}
+.cicon-group:before {content: "\e7f5";}
+.cicon-group-o:before {content: "\e753";}
+.cicon-guanli:before {content: "\e750";}
+.cicon-headset:before {content: "\e6a4";}
+.cicon-headset-mic:before {content: "\e6b1";}
+.cicon-help:before {content: "\e66b";}
+.cicon-help-o:before {content: "\e65e";}
+.cicon-home:before {content: "\e70d";}
+.cicon-home-2:before {content: "\e6fd";}
+.cicon-home-2-o:before {content: "\e6cf";}
+.cicon-home-3:before {content: "\e6fc";}
+.cicon-home-3-o:before {content: "\e6e0";}
+.cicon-home-4:before {content: "\e732";}
+.cicon-home-4-o:before {content: "\e6e6";}
+.cicon-home-community:before {content: "\e799";}
+.cicon-home-dot:before {content: "\e794";}
+.cicon-home-dot-o:before {content: "\e797";}
+.cicon-home-line:before {content: "\e793";}
+.cicon-home-line-o:before {content: "\e792";}
+.cicon-home-o:before {content: "\e70a";}
+.cicon-home-sm:before {content: "\e798";}
+.cicon-home-smile:before {content: "\e79c";}
+.cicon-home-smile-o:before {content: "\e7a0";}
+.cicon-home-smline:before {content: "\e791";}
+.cicon-home-smline-o:before {content: "\e731";}
+.cicon-home-sm-o:before {content: "\e79b";}
+.cicon-hotel:before {content: "\e7a8";}
+.cicon-hotel-o:before {content: "\e7a3";}
+.cicon-huohu:before {content: "\e72e";}
+.cicon-IE:before {content: "\e922";}
+.cicon-image-text:before {content: "\e781";}
+.cicon-image-text-o:before {content: "\e758";}
+.cicon-import-export:before {content: "\e615";}
+.cicon-info:before {content: "\e6ef";}
+.cicon-info-o:before {content: "\e705";}
+.cicon-input:before {content: "\e75f";}
+.cicon-input-o:before {content: "\e6c8";}
+.cicon-keyboard:before {content: "\e6b6";}
+.cicon-kinds:before {content: "\e748";}
+.cicon-last-page:before {content: "\e60d";}
+.cicon-layout:before {content: "\e7e8";}
+.cicon-layout-o:before {content: "\e7e7";}
+.cicon-LightMode:before {content: "\e7ba";}
+.cicon-link:before {content: "\e6ab";}
+.cicon-link-off:before {content: "\e6b9";}
+.cicon-loader-fill:before {content: "\e76d";}
+.cicon-loading:before {content: "\e746";}
+.cicon-loading1:before {content: "\e749";}
+.cicon-loading2:before {content: "\e7f1";}
+.cicon-location-off:before {content: "\e671";}
+.cicon-location-off-o:before {content: "\e66d";}
+.cicon-location-on:before {content: "\e65f";}
+.cicon-location-on-o:before {content: "\e661";}
+.cicon-lock:before {content: "\e6ad";}
+.cicon-lock-o:before {content: "\e6b3";}
+.cicon-lock-open:before {content: "\e6ba";}
+.cicon-logout:before {content: "\e76e";}
+.cicon-loop:before {content: "\e616";}
+.cicon-magic:before {content: "\e6b7";}
+.cicon-magic-o:before {content: "\e6c2";}
+.cicon-mail:before {content: "\e6be";}
+.cicon-mail-o:before {content: "\e6bc";}
+.cicon-male:before {content: "\e730";}
+.cicon-mic:before {content: "\e656";}
+.cicon-mic-none:before {content: "\e642";}
+.cicon-mic-off:before {content: "\e652";}
+.cicon-miniprogram:before {content: "\e7d6";}
+.cicon-mobile:before {content: "\e854";}
+.cicon-mobile-o:before {content: "\e7b6";}
+.cicon-moneybag:before {content: "\e7ce";}
+.cicon-moneybag-o:before {content: "\e7d1";}
+.cicon-more:before {content: "\e688";}
+.cicon-more-tag:before {content: "\e672";}
+.cicon-move:before {content: "\e768";}
+.cicon-move-round:before {content: "\e602";}
+.cicon-move-round-o:before {content: "\e603";}
+.cicon-music:before {content: "\e795";}
+.cicon-music-off:before {content: "\e796";}
+.cicon-my:before {content: "\e78c";}
+.cicon-my-o:before {content: "\e78b";}
+.cicon-near-me:before {content: "\e654";}
+.cicon-near-me-o:before {content: "\e649";}
+.cicon-not:before {content: "\e667";}
+.cicon-notice:before {content: "\e666";}
+.cicon-notice-active:before {content: "\e66f";}
+.cicon-notice-active-o:before {content: "\e65d";}
+.cicon-notice-o:before {content: "\e664";}
+.cicon-notice-off:before {content: "\e6b5";}
+.cicon-notice-off-o:before {content: "\e6bb";}
+.cicon-numcode:before {content: "\e755";}
+.cicon-order:before {content: "\e786";}
+.cicon-order-o:before {content: "\e7b8";}
+.cicon-paint:before {content: "\e75d";}
+.cicon-paint-o:before {content: "\e75a";}
+.cicon-palette:before {content: "\e696";}
+.cicon-palette-o:before {content: "\e691";}
+.cicon-pause:before {content: "\e669";}
+.cicon-pause-circle:before {content: "\e678";}
+.cicon-person:before {content: "\e679";}
+.cicon-person-add:before {content: "\e668";}
+.cicon-person-add-o:before {content: "\e66a";}
+.cicon-person-o:before {content: "\e67d";}
+.cicon-person-pin-circle:before {content: "\e66c";}
+.cicon-person-pin-circle-o:before {content: "\e670";}
+.cicon-phone:before {content: "\e6f0";}
+.cicon-phone-call:before {content: "\e6d7";}
+.cicon-pic:before {content: "\e756";}
+.cicon-pic-o:before {content: "\e69e";}
+.cicon-pin-drop:before {content: "\e648";}
+.cicon-pin-drop-o:before {content: "\e655";}
+.cicon-place:before {content: "\e651";}
+.cicon-place-o:before {content: "\e650";}
+.cicon-play-arrow:before {content: "\e66e";}
+.cicon-play-circle:before {content: "\e674";}
+.cicon-play-circle-o:before {content: "\e67f";}
+.cicon-popover:before {content: "\e74e";}
+.cicon-popover-o:before {content: "\e757";}
+.cicon-present:before {content: "\e73a";}
+.cicon-present-o:before {content: "\e711";}
+.cicon-progress:before {content: "\e784";}
+.cicon-qq:before {content: "\e7d9";}
+.cicon-qr-code-fill:before {content: "\e767";}
+.cicon-qr-code-line:before {content: "\e75e";}
+.cicon-quill:before {content: "\e760";}
+.cicon-quill-o:before {content: "\e761";}
+.cicon-radio:before {content: "\e6d4";}
+.cicon-radiobox:before {content: "\e763";}
+.cicon-radiobox-o:before {content: "\e75b";}
+.cicon-recharge:before {content: "\e71c";}
+.cicon-recharge-o:before {content: "\e71d";}
+.cicon-record:before {content: "\e7a4";}
+.cicon-record-o:before {content: "\e7a6";}
+.cicon-redo:before {content: "\e612";}
+.cicon-redpacket:before {content: "\e7d3";}
+.cicon-redpacket-o:before {content: "\e71a";}
+.cicon-refresh:before {content: "\e611";}
+.cicon-repair:before {content: "\e73f";}
+.cicon-repair-o:before {content: "\e73e";}
+.cicon-repeat:before {content: "\e617";}
+.cicon-replay:before {content: "\e619";}
+.cicon-reply:before {content: "\e618";}
+.cicon-reply-all:before {content: "\e614";}
+.cicon-road-map:before {content: "\e769";}
+.cicon-road-map-o:before {content: "\e76a";}
+.cicon-round:before {content: "\e716";}
+.cicon-round-angle:before {content: "\e6f5";}
+.cicon-round-angle-o:before {content: "\e6f6";}
+.cicon-round-arrow-line:before {content: "\e734";}
+.cicon-round-box:before {content: "\e604";}
+.cicon-safe:before {content: "\e77f";}
+.cicon-safe-check:before {content: "\e875";}
+.cicon-safe-check-o:before {content: "\e876";}
+.cicon-safe-flash:before {content: "\e783";}
+.cicon-safe-flash-o:before {content: "\e775";}
+.cicon-safe-key:before {content: "\e76c";}
+.cicon-safe-key-o:before {content: "\e766";}
+.cicon-safe-o:before {content: "\e77e";}
+.cicon-save:before {content: "\e677";}
+.cicon-save-o:before {content: "\e684";}
+.cicon-scan:before {content: "\e703";}
+.cicon-scissors:before {content: "\e762";}
+.cicon-search:before {content: "\e6f7";}
+.cicon-search-line:before {content: "\e771";}
+.cicon-searchlist:before {content: "\e720";}
+.cicon-search-o:before {content: "\e782";}
+.cicon-search-sm:before {content: "\e631";}
+.cicon-service:before {content: "\e73d";}
+.cicon-service-fill:before {content: "\e704";}
+.cicon-service-o:before {content: "\e721";}
+.cicon-set:before {content: "\e773";}
+.cicon-set-list:before {content: "\e76f";}
+.cicon-set-o:before {content: "\e774";}
+.cicon-settings:before {content: "\e77a";}
+.cicon-settings-o:before {content: "\e780";}
+.cicon-share:before {content: "\e6c5";}
+.cicon-share-line-o:before {content: "\e74d";}
+.cicon-shengji:before {content: "\e747";}
+.cicon-shopping-cart:before {content: "\e685";}
+.cicon-shopping-cart-o:before {content: "\e676";}
+.cicon-show:before {content: "\e785";}
+.cicon-show-o:before {content: "\e787";}
+.cicon-shuffle:before {content: "\e61a";}
+.cicon-sip:before {content: "\e764";}
+.cicon-sip-o:before {content: "\e765";}
+.cicon-skip-next:before {content: "\e6dd";}
+.cicon-skip-previous:before {content: "\e6d6";}
+.cicon-slack:before {content: "\e87b";}
+.cicon-slack-square:before {content: "\e891";}
+.cicon-sort:before {content: "\e6bf";}
+.cicon-sort-order:before {content: "\e6fe";}
+.cicon-sound:before {content: "\e77b";}
+.cicon-sponsor:before {content: "\e77c";}
+.cicon-sponsor-o:before {content: "\e77d";}
+.cicon-star:before {content: "\e683";}
+.cicon-star-half:before {content: "\e67c";}
+.cicon-star-o:before {content: "\e67b";}
+.cicon-stock:before {content: "\e789";}
+.cicon-stop:before {content: "\e6db";}
+.cicon-store:before {content: "\e7ac";}
+.cicon-store-0:before {content: "\e7ab";}
+.cicon-store-2:before {content: "\e7a7";}
+.cicon-store-2-o:before {content: "\e7a5";}
+.cicon-sub-left:before {content: "\e60b";}
+.cicon-sub-right:before {content: "\e60f";}
+.cicon-subtitles:before {content: "\e6da";}
+.cicon-subtitles-o:before {content: "\e6d8";}
+.cicon-sync-alt:before {content: "\e613";}
+.cicon-tag:before {content: "\e751";}
+.cicon-tag-o:before {content: "\e752";}
+.cicon-taobao:before {content: "\e712";}
+.cicon-terminal:before {content: "\e7c1";}
+.cicon-terminal-o:before {content: "\e7c2";}
+.cicon-thumb-down:before {content: "\e6c1";}
+.cicon-thumb-down-o:before {content: "\e6c9";}
+.cicon-thumb-up:before {content: "\e6c6";}
+.cicon-thumb-up-line:before {content: "\e71b";}
+.cicon-thumb-up-line-o:before {content: "\e6eb";}
+.cicon-thumb-up-o:before {content: "\e6cb";}
+.cicon-ticket:before {content: "\e800";}
+.cicon-ticket-o:before {content: "\e701";}
+.cicon-time:before {content: "\e6f8";}
+.cicon-time-o:before {content: "\e6f9";}
+.cicon-timer:before {content: "\e69c";}
+.cicon-title:before {content: "\e82f";}
+.cicon-titles:before {content: "\e745";}
+.cicon-toggle:before {content: "\e706";}
+.cicon-toggle-o:before {content: "\e733";}
+.cicon-topbar:before {content: "\e788";}
+.cicon-translate:before {content: "\e79a";}
+.cicon-tree:before {content: "\e659";}
+.cicon-Tt:before {content: "\e7a2";}
+.cicon-twiter:before {content: "\e6e8";}
+.cicon-cicon-community-o:before {content: "\e6df";}
+.cicon-undo:before {content: "\e61b";}
+.cicon-unfold-less:before {content: "\e60e";}
+.cicon-unfold-more:before {content: "\e609";}
+.cicon-upstage:before {content: "\e724";}
+.cicon-upstage-o:before {content: "\e725";}
+.cicon-view-agenda:before {content: "\e639";}
+.cicon-view-array:before {content: "\e636";}
+.cicon-view-carousel:before {content: "\e638";}
+.cicon-view-column:before {content: "\e632";}
+.cicon-view-day:before {content: "\e627";}
+.cicon-view-headline:before {content: "\e62b";}
+.cicon-view-list:before {content: "\e63c";}
+.cicon-view-module:before {content: "\e629";}
+.cicon-view-quilt:before {content: "\e630";}
+.cicon-volume:before {content: "\e6c4";}
+.cicon-volume-off:before {content: "\e6cd";}
+.cicon-warn:before {content: "\e662";}
+.cicon-warn-o:before {content: "\e675";}
+.cicon-wechat-pay:before {content: "\e7e6";}
+.cicon-weibo-fill:before {content: "\e7e4";}
+.cicon-weibo-o:before {content: "\e7e3";}
+.cicon-weixin:before {content: "\e6de";}
+.cicon-whatshot:before {content: "\e6ca";}
+.cicon-whatshot-o:before {content: "\e6d0";}
+.cicon-wifi:before {content: "\e6d2";}
+.cicon-wifi-off:before {content: "\e6d3";}
+.cicon-yamaxun:before {content: "\e7b7";}
+.cicon-zuoji:before {content: "\e754";}
diff --git a/miniprogram/mp-sdk/index.js b/miniprogram/mp-sdk/index.js
new file mode 100644
index 00000000..99c2a9c9
--- /dev/null
+++ b/miniprogram/mp-sdk/index.js
@@ -0,0 +1,47 @@
+import baseLib from './lib/index'
+import {request} from './lib/request'
+
+export default class ColorUISdk {
+ constructor({env, version, api}) {
+ //默认配置,防止没自定义配置时,出问题。
+ env = env||'dev'
+ version = version||'1.0.0'
+ if (!api.header) {
+ api.header = {};
+ api.header['Content-Type'] = 'application/json';
+ }
+ this.env = env;
+ this.version = version;
+ this.api = api;
+ this.ColorUISdkInit();
+ }
+ ColorUISdkInit() {
+ Object.keys(baseLib).forEach(key => {
+ if (typeof baseLib[key] === 'function') {
+ this[key] = baseLib[key]
+ }
+ if (typeof baseLib[key] === 'object') {
+ //二级方法函数
+ Object.keys(baseLib[key]).forEach(k => {
+ if (typeof baseLib[key][k] === 'function' || typeof baseLib[key][k] === 'object') {
+ this[k] = baseLib[key][k]
+ }
+ })
+ }
+ })
+ //console.log(this)
+ }
+ //发起请求
+ request(data, loading = false) {
+ return new Promise( (resolve, reject) => {
+ request(data, loading, {
+ env: this.env,
+ api: this.api
+ }).then(res=> {
+ resolve(res);
+ }).catch(err=> {
+ reject(err)
+ });
+ });
+ }
+}
diff --git a/miniprogram/mp-sdk/lib/array.js b/miniprogram/mp-sdk/lib/array.js
new file mode 100644
index 00000000..c123009d
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/array.js
@@ -0,0 +1,157 @@
+module.exports = {
+ //数组操作
+ isArr: {
+ //数组中是否存在
+ ifItemKey(arr, item) {
+ return arr.indexOf(item) !== -1;
+ },
+ //数组或对象深拷贝
+ nextArr(arr) {
+ return JSON.parse(JSON.stringify(arr));
+ },
+ //获取数组索引
+ getItemIndex(arr, item) {
+ return arr.indexOf(item);
+ },
+ //移除数组中指定元素
+ delItem(arr, item) {
+ let index = arr.indexOf(item);
+ let items = [...arr];
+ items.splice(index, 1);
+ return [...items];
+ },
+ //移除数组中其它元素
+ delItemKey(arr, item) {
+ let index = arr.indexOf(item);
+ let items = [...arr];
+ for (let i = 0; i < arr.length; i++) {
+ if (index !== i) items.splice(i, 1);
+ }
+ return [...items];
+ },
+ //移除数组中左边的元素
+ delItemLeft(arr, item) {
+ let index = arr.indexOf(item);
+ let items = [...arr];
+ for (let i = 0; i < arr.length; i++) {
+ if (index >= i) return;
+ items.splice(i, 1);
+ }
+ return [...items];
+ },
+ //移除数组中右边的元素
+ delItemRight(arr, item) {
+ let index = arr.indexOf(item);
+ let items = [...arr];
+ for (let i = 0; i < arr.length; i++) {
+ if (index > i) items.splice(i, 1);
+ }
+ return [...items];
+ },
+ //替换数组中两个元素的位置
+ replaceItem(arr, item_a, item_b) {
+ let index_a = arr.indexOf(item_a);
+ let index_b = arr.indexOf(item_b);
+ let items = [...arr];
+ items.splice(index_a, 1);
+ items.splice(index_b, 0, item_a);
+ return [...items];
+ },
+ //数组中是否存在
+ ifKey(arr, keyName, key) {
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i][keyName] === key) {
+ return true;
+ }
+ }
+ return false;
+ },
+ //获取数组索引
+ getIndex(arr, keyName, key) {
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i][keyName] === key) {
+ return i;
+ }
+ }
+ return false;
+ },
+ //移除数组中指定元素
+ del(arr, keyName, key) {
+ let s = false, name = '', ArrData = [];
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i][keyName] !== key) {
+ if (!s) name = arr[i][keyName];
+ ArrData.push(arr[i]);
+ } else {
+ s = true;
+ }
+ }
+ return {key: name, arr: ArrData};
+ },
+ //移除数组中其它元素
+ delKey(arr, keyName, key) {
+ let ArrData = [];
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i][keyName] === key) {
+ ArrData.push(arr[i]);
+ }
+ }
+ return ArrData;
+ },
+ //移除数组中左边的元素
+ delLeft(arr, keyName, key) {
+ let s = false, ArrData = [];
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i][keyName] === key) {
+ s = true;
+ ArrData.push(arr[i]);
+ } else {
+ if (s) ArrData.push(arr[i]);
+ }
+ }
+ return ArrData;
+ },
+ //移除数组中右边的元素
+ delRight(arr, keyName, key) {
+ let s = true, ArrData = [];
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i][keyName] === key) {
+ s = false;
+ ArrData.push(arr[i]);
+ } else {
+ if (s) ArrData.push(arr[i]);
+ }
+ }
+ return ArrData;
+ },
+ isForEach(arr, fn) {
+ if (!arr.length || !fn) return;
+ let i = -1, len = arr.length;
+ while (++i < len) {
+ let item = arr[i];
+ fn(item, i, arr);
+ }
+ },
+ //得到两个数组的交集, 两个数组的元素为数值或字符串
+ intersection(arr1, arr2) {
+ let len = Math.min(arr1.length, arr2.length)
+ let i = -1, res = [];
+ while (++i < len) {
+ if (arr1.indexOf(arr2[i]) > -1) res.push(arr2[i])
+ }
+ return res
+ },
+ //得到两个数组的并集, 两个数组的元素为数值或字符串
+ getUnion(arr1, arr2) {
+ return Array.from(new Set([...arr1, ...arr2]));
+ },
+ //判断要查询的数组是否至少有一个元素包含在目标数组中
+ hasOneOf(arr1, arr2) {
+ return arr1.some(_ => arr2.indexOf(_) > -1);
+ },
+ //判断下级数组是否为空
+ hasChild(arr, key = 'children') {
+ return arr[key] && arr[key].length !== 0
+ }
+ }
+}
diff --git a/miniprogram/mp-sdk/lib/dataType.js b/miniprogram/mp-sdk/lib/dataType.js
new file mode 100644
index 00000000..a1d824a9
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/dataType.js
@@ -0,0 +1,29 @@
+module.exports = {
+ //判断数据类型
+ isDataType: {
+ ifNull(value) {
+ return value === undefined || value === null || value === '';
+ },
+ ifBoolean(value) {
+ return typeof value == 'boolean';
+ },
+ ifFunction(value) {
+ return typeof value == 'function';
+ },
+ ifObject(value) {
+ return Object.prototype.toString.call(value) === '[object Object]';
+ },
+ ifArray(value) {
+ return value instanceof Array || Object.prototype.toString.call(value) === '[object Array]';
+ },
+ ifDate(value) {
+ return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]';
+ },
+ ifNumber(value) {
+ return value instanceof Number || Object.prototype.toString.call(value) === '[object Number]';
+ },
+ ifString(value) {
+ return value instanceof String || Object.prototype.toString.call(value) === '[object String]';
+ }
+ }
+}
diff --git a/miniprogram/mp-sdk/lib/date.js b/miniprogram/mp-sdk/lib/date.js
new file mode 100644
index 00000000..062f2c8f
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/date.js
@@ -0,0 +1,74 @@
+//日期时间操作
+module.exports = {
+ isDate: {
+ new_date: new Date() ,
+ year: new Date().getFullYear(), //当前年
+ month: new Date().getMonth(), //当前月
+ date: new Date().getDate(), //当前日
+ day: new Date().getDay(), //今天本周的第几天
+ //获取当前的日期
+ currentDate() {
+ return this.formatDate(new Date());
+ },
+ //获得本周的开端日期
+ weekStartDate() {
+ return this.formatDate(new Date(this.year,this.month, this.date - this.day));
+ },
+ //获得本周的停止日期
+ weekEndDate() {
+ return this.formatDate(new Date(this.year,this.month, this.date + (6 - this.day)));
+ },
+ //获得上周的停止日期
+ weekLastEndDate() {
+ return this.formatDate(new Date(this.year,this.month, this.date + (6 - this.day - 7)));
+ },
+ //获得本月的开端日期
+ monthStartDate() {
+ return this.formatDate(new Date(this.year,this.month, 1));
+ },
+ //获得本月的停止日期
+ monthEndDate() {
+ return this.formatDate(new Date(this.year,this.month, this.monthDays(this.month)));
+ },
+ //获得上月开端时候
+ monthLastStartDate() {
+ return this.formatDate(new Date(this.year,this.month - 1, 1));
+ },
+ //获得上月停止时候
+ monthLastEndDate() {
+ const day = new Date(this.year, this.month, 0).getDate();
+ return this.formatDate(new Date(this.year,this.month - 1, day));
+ },
+ //获取今年的开头
+ currentYear() {
+ return this.new_date.getFullYear() + "-01-01";
+ },
+ //获取今天之前的多少天的日期
+ DateCountDay(Day) {
+ return this.formatDate(new Date().setDate(this.date + Day));
+ },
+ //获得某月的天数
+ monthDays(month) {
+ let StartDate = new Date(this.year, month, 1);
+ let EndDate = new Date(this.year, month + 1, 1);
+ return (StartDate - EndDate)/(1000 * 60 * 60 * 24);
+ },
+ //格局化日期:yyyy-MM-dd
+ formatDate(date) {
+ let y = date.getFullYear();
+ let m = date.getMonth() + 1;
+ let d = date.getDate();
+ if (m < 10) m = "0" + m;
+ if (d < 10) d = "0" + d;
+ return (y + "-" + m + "-" + d);
+ },
+ //字段拼接
+ substrDataStr(date) {
+ let strArr = [];
+ strArr.push(date.substr(0, 4))
+ strArr.push(date.substr(4, 2))
+ strArr.push(date.substr(6, 2))
+ return strArr
+ }
+ },
+}
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/lib/index.js b/miniprogram/mp-sdk/lib/index.js
new file mode 100644
index 00000000..3684fdc6
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/index.js
@@ -0,0 +1,15 @@
+import dataType from './dataType'
+import array from './array'
+import object from './object'
+import date from './date'
+import random from './random'
+import tools from './tools'
+
+module.exports = {
+ dataType: dataType,
+ array: array,
+ object: object,
+ date: date,
+ random: random,
+ tools: tools,
+}
diff --git a/miniprogram/mp-sdk/lib/object.js b/miniprogram/mp-sdk/lib/object.js
new file mode 100644
index 00000000..6c6ec888
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/object.js
@@ -0,0 +1,21 @@
+module.exports = {
+ //对象操作
+ isObj: {
+ //判断一个对象是否存在key
+ hasKey(obj, key) {
+ //如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性
+ //如果没有传入key这个参数,则判断obj对象是否有键值对
+ if (key) return key in obj;
+ let keysArr = Object.keys(obj);
+ return keysArr.length;
+ },
+ // 判断两个对象是否相等,这两个对象的值只能是数字或字符串
+ objEqual(obj1, obj2) {
+ const keysArr1 = Object.keys(obj1)
+ const keysArr2 = Object.keys(obj2)
+ if (keysArr1.length !== keysArr2.length) return false
+ else if (keysArr1.length === 0 && keysArr2.length === 0) return true
+ else return !keysArr1.some(key => obj1[key] != obj2[key])
+ },
+ }
+}
diff --git a/miniprogram/mp-sdk/lib/random.js b/miniprogram/mp-sdk/lib/random.js
new file mode 100644
index 00000000..b82a82a9
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/random.js
@@ -0,0 +1,45 @@
+module.exports = {
+ //随机字符串操作
+ isRandom: {
+ NUM: '0123456789',
+ XEU: 'abcdefghijklmnopqrstuvwxyz',
+ DEU: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ //生成随机字符串,默认为全部类型
+ getRandom(num, chars) {
+ if (!chars) chars = this.NUM + this.XEU + this.DEU
+ let maxPos = chars.length, value = '';
+ for (let i = 0; i < num; i++) {
+ value += chars.charAt(Math.floor(Math.random() * maxPos));
+ }
+ return value;
+ },
+ //数字
+ getRandomNUM(num) {
+ return this.getRandom(num, this.NUM);
+ },
+ //小写字母
+ getRandomXEU(num) {
+ return this.getRandom(num, this.XEU);
+ },
+ //大写字母
+ getRandomDEU(num) {
+ return this.getRandom(num, this.DEU);
+ },
+ //数字+ 小写字母
+ getRandomNUM_XEU(num) {
+ return this.getRandom(num, this.NUM + this.XEU);
+ },
+ //数字 + 大写字母
+ getRandomNUM_DEU(num) {
+ return this.getRandom(num, this.NUM + this.DEU);
+ },
+ //小写字母 + 大写字母
+ getRandomXEU_DEU(num) {
+ return this.getRandom(num, this.XEU + this.DEU);
+ },
+ //范围随机数
+ getRandomFrom(lower, upper) {
+ return Math.floor(Math.random() * (upper - lower + 1) + lower);
+ }
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/mp-sdk/lib/request.js b/miniprogram/mp-sdk/lib/request.js
new file mode 100644
index 00000000..123a5a25
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/request.js
@@ -0,0 +1,47 @@
+//发起请求
+const request = (promise, loading = false, config) => {
+ return new Promise( (resolve, reject) => {
+ if (['produce','dev','host'].includes(config.env)) {
+ if (loading) {
+ wx.showLoading({
+ title:'请求中',
+ mask: true
+ })
+ }
+ wx.request({
+ url: config.api[config.env].url + promise.url,
+ method: promise.method || 'GET',
+ header: promise.header || config.api.header,
+ data: promise.data,
+ success: res => {
+ if (res.statusCode === 200) {
+ resolve(res.data);
+ } else {
+ wx.showToast({
+ title: res.msg,
+ icon: 'none',
+ duration: 2000
+ });
+ reject(res.msg)
+ }
+ },
+ fail: err => {
+ wx.showToast({title: "网络异常",icon: 'none'});
+ reject(err)
+ },
+ complete() {
+ if (loading) {
+ wx.hideLoading()
+ }
+ }
+ });
+ } else {
+ wx.showToast({title: "环境异常",icon: 'none'});
+ reject({msg: "环境异常"})
+ }
+ });
+};
+
+module.exports = {
+ request: request
+}
diff --git a/miniprogram/mp-sdk/lib/tools.js b/miniprogram/mp-sdk/lib/tools.js
new file mode 100644
index 00000000..97c27bdb
--- /dev/null
+++ b/miniprogram/mp-sdk/lib/tools.js
@@ -0,0 +1,31 @@
+module.exports = {
+ //金额处理:保留几位小数,不四舍五入(关于金额数值的处理用这个方法,以防金额计算出错)
+ priceFormat(price, decimal=2) {
+ if (price) {
+ let price = (price * 100) / 100;
+ return parseFloat(price)
+ .toFixed(decimal)
+ .toString()
+ .split('')
+ .reverse()
+ .join('')
+ .replace(/(\d{3})/g, '$1,')
+ .replace(/\,$/, '')
+ .split('')
+ .reverse()
+ .join('')
+ } else {
+ return 0;
+ }
+ },
+ //数字格式化
+ numberFormat(num) {
+ if (num > 1000 && num < 10000) {
+ return Math.floor(num / 1000) + 'k';
+ } else if (num > 10000) {
+ return Math.floor(num / 10000) + 'W';
+ } else {
+ return num;
+ }
+ },
+}
diff --git a/miniprogram/mp-sdk/wxs/tools.wxs b/miniprogram/mp-sdk/wxs/tools.wxs
new file mode 100644
index 00000000..a7d71639
--- /dev/null
+++ b/miniprogram/mp-sdk/wxs/tools.wxs
@@ -0,0 +1,20 @@
+//tools.wxs文件
+indexOf = function (arr, value) {
+ return arr.indexOf(value) >= 0;
+}
+
+//数字格式化
+numberFormat = function (Num) {
+ if (Num > 1000 && Num < 10000) {
+ return Math.floor(Num / 1000) + 'k';
+ } else if (Num > 10000) {
+ return Math.floor(Num / 10000) + 'W';
+ } else {
+ return Num;
+ }
+}
+
+module.exports = {
+ indexOf: indexOf,
+ numberFormat: numberFormat
+}
\ No newline at end of file
diff --git a/miniprogram/package.json b/miniprogram/package.json
index 6c21d633..6a2e75a5 100644
--- a/miniprogram/package.json
+++ b/miniprogram/package.json
@@ -6,7 +6,7 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
- "author": "micahh",
+ "author": "chadwuo",
"license": "ISC",
"dependencies": {
"@alicloud/mpserverless-sdk": "^3.1.1",
diff --git a/miniprogram/pages/about/index.js b/miniprogram/pages/about/index.js
index dfe0df3b..37007d9d 100644
--- a/miniprogram/pages/about/index.js
+++ b/miniprogram/pages/about/index.js
@@ -5,7 +5,7 @@ Page({
* 页面的初始数据
*/
data: {
-
+ version: ''
},
Chadwuo() {
const arr = ['你拍了拍作者头顶\r\n却没摸到秀发', '要不要来一把LOL', '花生,你发现了彩蛋']
@@ -16,10 +16,30 @@ Page({
duration: 2500
})
},
+ tapCopy(e) {
+ wx.setClipboardData({
+ data: e.currentTarget.dataset.value,
+ success() {
+ wx.showToast({
+ title: '复制成功!',
+ icon: 'none'
+ })
+ },
+ fail() {
+ wx.showToast({
+ title: '复制失败!',
+ icon: 'none'
+ })
+ },
+ });
+ },
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
+ this.setData({
+ version: getApp().colorUISdk.version
+ })
wx.showShareMenu({
menus: ['shareAppMessage', 'shareTimeline']
})
diff --git a/miniprogram/pages/about/index.json b/miniprogram/pages/about/index.json
index 08abe5c1..8835af06 100644
--- a/miniprogram/pages/about/index.json
+++ b/miniprogram/pages/about/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "关于礼记",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/about/index.scss b/miniprogram/pages/about/index.scss
new file mode 100644
index 00000000..b02b8c2c
--- /dev/null
+++ b/miniprogram/pages/about/index.scss
@@ -0,0 +1 @@
+/* pages/about/index.wxss */
\ No newline at end of file
diff --git a/miniprogram/pages/about/index.wxml b/miniprogram/pages/about/index.wxml
index 5708b4ef..2fc94d0b 100644
--- a/miniprogram/pages/about/index.wxml
+++ b/miniprogram/pages/about/index.wxml
@@ -1,20 +1,32 @@
-
-
-
-
- 礼记
- 记得住恩情,守得住初心
-
- 礼尚往来,是中华民族的传统美德,老一辈人一般会在举行宴席的时候用手写人情簿的方式来记录每一个亲友的送礼,然后在对方有宴席邀请的时候翻阅人情簿,计算出送礼金额。这种方式存在很多弊端,比如人情簿丢失、无法携带在身边、很难搜索到某个人的送礼记录、由于手写原因无法辨认清楚内容等等。
+
+
+
+
+
+
+ 礼记
+ 记得住恩情,守得住初心
+
- 「礼记」是一个基于微信小程序的在线人情簿,随身携带、快速查找、统计汇总、亲友往来、家庭共享,为记账带来了全新体验。
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+ 礼尚往来,是中华民族的传统美德,老一辈人一般会在举行宴席的时候用手写人情簿的方式来记录每一个亲友的送礼,然后在对方有宴席邀请的时候翻阅人情簿,计算出送礼金额。这种方式存在很多弊端,比如人情簿丢失、无法携带在身边、很难搜索到某个人的送礼记录、由于手写原因无法辨认清楚内容等等。
+
+
+
+ 「礼记」是一个基于微信小程序的在线人情簿,随身携带、快速查找、统计汇总、亲友往来、家庭共享,为记账带来了全新体验。
+
+
+
+
+ Chadwuo
+
+
+ v{{version}}
+
+
+ GPL-3.0 license
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/about/index.wxss b/miniprogram/pages/about/index.wxss
deleted file mode 100644
index da6b66ea..00000000
--- a/miniprogram/pages/about/index.wxss
+++ /dev/null
@@ -1,39 +0,0 @@
-/* pages/about/index.wxss */
-.container {
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 0 50rpx;
-}
-
-.container .logo {
- margin-top: 80rpx;
- text-align: center;
-}
-
-.container .logo image {
- width: 128rpx;
- height: 128rpx;
-}
-
-.container .title {
- font-weight: 500;
- color: #000000;
- font-size: 38rpx;
- margin: 36rpx 0;
-}
-
-.container .title_info {
- font-family: PingFang SC;
- font-weight: 300;
- color: #000000;
- font-size: 30rpx;
- margin-bottom: 24rpx;
-}
-
-.container .describe {
- font-size: 28rpx;
- font-family: PingFang SC;
- color: #888888;
- margin-bottom: 56rpx;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/book/details/index.js b/miniprogram/pages/book/details/index.js
index d5615ff6..17a75de5 100644
--- a/miniprogram/pages/book/details/index.js
+++ b/miniprogram/pages/book/details/index.js
@@ -84,9 +84,6 @@ Page({
this.setData({
...data,
})
- wx.setNavigationBarTitle({
- title: data.book.title
- })
await this.loadData(1)
wx.hideLoading()
})
diff --git a/miniprogram/pages/book/details/index.json b/miniprogram/pages/book/details/index.json
index a627ed46..69b19d43 100644
--- a/miniprogram/pages/book/details/index.json
+++ b/miniprogram/pages/book/details/index.json
@@ -1,5 +1,4 @@
{
- "navigationBarTitleText": "礼簿详情",
"enablePullDownRefresh": true,
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/book/details/index.wxss b/miniprogram/pages/book/details/index.scss
similarity index 94%
rename from miniprogram/pages/book/details/index.wxss
rename to miniprogram/pages/book/details/index.scss
index 16fd7af7..21733c83 100644
--- a/miniprogram/pages/book/details/index.wxss
+++ b/miniprogram/pages/book/details/index.scss
@@ -1,8 +1,5 @@
/* pages/book/details/index.wxss */
/* 内容 */
-.wrapper {
- padding: 0 32rpx;
-}
/* 人情卡片 */
.gift-card {
diff --git a/miniprogram/pages/book/details/index.wxml b/miniprogram/pages/book/details/index.wxml
index 2fab4d00..d68cb24f 100644
--- a/miniprogram/pages/book/details/index.wxml
+++ b/miniprogram/pages/book/details/index.wxml
@@ -1,13 +1,13 @@
-
-
-
-
-
+
+
+
+
+
-
-
+
+
@@ -18,5 +18,4 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/miniprogram/pages/book/edit/index.js b/miniprogram/pages/book/edit/index.js
index 662afcf8..49abeb01 100644
--- a/miniprogram/pages/book/edit/index.js
+++ b/miniprogram/pages/book/edit/index.js
@@ -81,9 +81,6 @@ Page({
this.setData({
...data,
})
- wx.setNavigationBarTitle({
- title: '编辑礼簿'
- })
})
},
diff --git a/miniprogram/pages/book/edit/index.json b/miniprogram/pages/book/edit/index.json
index f841fec8..8835af06 100644
--- a/miniprogram/pages/book/edit/index.json
+++ b/miniprogram/pages/book/edit/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "添加礼簿",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/book/edit/index.scss b/miniprogram/pages/book/edit/index.scss
new file mode 100644
index 00000000..7e7796ac
--- /dev/null
+++ b/miniprogram/pages/book/edit/index.scss
@@ -0,0 +1,4 @@
+/* pages/book/edit/index.wxss */
+.ui-form-title{
+ min-width: 30%;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/book/edit/index.wxml b/miniprogram/pages/book/edit/index.wxml
index 4ed8d248..5244ff0e 100644
--- a/miniprogram/pages/book/edit/index.wxml
+++ b/miniprogram/pages/book/edit/index.wxml
@@ -1,23 +1,34 @@
-
-
-
-
-
-
-
- Tips:一场宴席活动中,用来登记所有来客贺礼的名册,称为礼簿。
-
-
-
-
-
- 删除
-
-
-
- 保 存
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tips:一场宴席活动中,用来登记所有来客贺礼的名册,称为礼簿。
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/book/edit/index.wxss b/miniprogram/pages/book/edit/index.wxss
deleted file mode 100644
index e1d0cd7d..00000000
--- a/miniprogram/pages/book/edit/index.wxss
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pages/book/edit/index.wxss */
-page {
- background-color: white;
-}
-
-.container {
- margin: 32rpx 0;
- margin-bottom: 120rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
-
-.submit-bar {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 32rpx;
- margin: 0 32rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
\ No newline at end of file
diff --git a/miniprogram/pages/book/select/index.json b/miniprogram/pages/book/select/index.json
index d49cafdd..8835af06 100644
--- a/miniprogram/pages/book/select/index.json
+++ b/miniprogram/pages/book/select/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "选择礼簿",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/book/select/index.scss b/miniprogram/pages/book/select/index.scss
new file mode 100644
index 00000000..42bb6a03
--- /dev/null
+++ b/miniprogram/pages/book/select/index.scss
@@ -0,0 +1 @@
+/* pages/book/select/index.wxss */
\ No newline at end of file
diff --git a/miniprogram/pages/book/select/index.wxml b/miniprogram/pages/book/select/index.wxml
index 9cea4b0e..e37f1c7a 100644
--- a/miniprogram/pages/book/select/index.wxml
+++ b/miniprogram/pages/book/select/index.wxml
@@ -1,16 +1,18 @@
-
-
-
-
-
-
- {{item.title}}
-
-
- {{item.date.value}} {{ item.date.lunar_month }}{{ item.date.lunar_day }}
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{item.date.value}} {{ item.date.lunar_month }}{{ item.date.lunar_day }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/book/select/index.wxss b/miniprogram/pages/book/select/index.wxss
deleted file mode 100644
index 64673e31..00000000
--- a/miniprogram/pages/book/select/index.wxss
+++ /dev/null
@@ -1,4 +0,0 @@
-/* pages/book/select/index.wxss */
-.container {
- margin: 32rpx 0;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/calendar/index.wxml b/miniprogram/pages/calendar/index.wxml
index e4c65319..ea9e4585 100644
--- a/miniprogram/pages/calendar/index.wxml
+++ b/miniprogram/pages/calendar/index.wxml
@@ -1,4 +1,4 @@
-
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/family/index.js b/miniprogram/pages/family/index.js
index c32abcc5..a1b129e7 100644
--- a/miniprogram/pages/family/index.js
+++ b/miniprogram/pages/family/index.js
@@ -1,7 +1,6 @@
// pages/family/index.js
const familyService = require('../../alicloud/services/family')
const app = getApp();
-import Notify from '@vant/weapp/notify/notify';
Page({
/**
@@ -16,10 +15,9 @@ Page({
async onUpdateName() {
const res = await familyService.updateFamily(this.data)
if (res.success) {
- Notify({
- type: 'success',
- message: '家庭名称已保存'
- });
+ wx.showToast({
+ title: '家庭名称已保存',
+ })
}
},
async onCreate() {
@@ -124,7 +122,7 @@ Page({
return {
title: '和我一起记录家里的人情往来',
path: `pages/family/index?familyId=${this.data._id}&word=${app.userInfo.nickName}邀请你加入家庭共享记账`,
- imageUrl: '../../images/share.jpg'
+ imageUrl: '/static/img/share2.jpg'
}
}
})
\ No newline at end of file
diff --git a/miniprogram/pages/family/index.json b/miniprogram/pages/family/index.json
index 94b31bcb..8835af06 100644
--- a/miniprogram/pages/family/index.json
+++ b/miniprogram/pages/family/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "我的家庭",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/family/index.scss b/miniprogram/pages/family/index.scss
new file mode 100644
index 00000000..f8b78d9d
--- /dev/null
+++ b/miniprogram/pages/family/index.scss
@@ -0,0 +1 @@
+/* pages/family/index.wxss */
\ No newline at end of file
diff --git a/miniprogram/pages/family/index.wxml b/miniprogram/pages/family/index.wxml
index 15eceaac..b90a5473 100644
--- a/miniprogram/pages/family/index.wxml
+++ b/miniprogram/pages/family/index.wxml
@@ -1,61 +1,51 @@
-
-
-
-
-
- 创建家庭
-
-
-
-
-
-
- 同意
-
-
- 首页
-
-
-
-
-
-
-
-
-
-
-
- {{item.user.nickName}}
-
-
-
-
-
-
-
- {{item.user.nickName}}
-
-
-
- 删除
-
+
+
+
+
+
-
-
-
-
- 邀请家庭成员
-
-
-
+
+
+
+
- Tips:向左滑动来展示操作按钮。
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.user.nickName}}
+
+
+
+
+
+
+
+ {{item.user.nickName}}
+
+
+
+
+
+
+
+
+
+
+
+
+ Tips:向左滑动来展示操作按钮。
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/family/index.wxss b/miniprogram/pages/family/index.wxss
deleted file mode 100644
index 2490c419..00000000
--- a/miniprogram/pages/family/index.wxss
+++ /dev/null
@@ -1,8 +0,0 @@
-/* pages/family/index.wxss */
-.container {
- padding: 0 32rpx;
-}
-
-.van-field__label {
- padding: 24rpx 0;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/friend/details/index.json b/miniprogram/pages/friend/details/index.json
index 2c31edd0..69b19d43 100644
--- a/miniprogram/pages/friend/details/index.json
+++ b/miniprogram/pages/friend/details/index.json
@@ -1,5 +1,4 @@
{
- "navigationBarTitleText": "亲友详情",
"enablePullDownRefresh": true,
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/friend/details/index.wxml b/miniprogram/pages/friend/details/index.wxml
index 21b11787..513bdfbe 100644
--- a/miniprogram/pages/friend/details/index.wxml
+++ b/miniprogram/pages/friend/details/index.wxml
@@ -1,9 +1,9 @@
-
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/friend/edit/index.scss b/miniprogram/pages/friend/edit/index.scss
new file mode 100644
index 00000000..1d0fdb4e
--- /dev/null
+++ b/miniprogram/pages/friend/edit/index.scss
@@ -0,0 +1,4 @@
+/* pages/friend/edit/index.wxss */
+.ui-form-title{
+ min-width: 30%;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/friend/edit/index.wxml b/miniprogram/pages/friend/edit/index.wxml
index 4e05136d..f165fcd3 100644
--- a/miniprogram/pages/friend/edit/index.wxml
+++ b/miniprogram/pages/friend/edit/index.wxml
@@ -1,20 +1,33 @@
-
-
-
-
-
-
-
-
-
-
- 删除
-
-
-
- 保 存
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/friend/edit/index.wxss b/miniprogram/pages/friend/edit/index.wxss
deleted file mode 100644
index 982c0bcd..00000000
--- a/miniprogram/pages/friend/edit/index.wxss
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pages/friend/edit/index.wxss */
-page {
- background-color: white;
-}
-
-.container {
- margin: 32rpx 0;
- margin-bottom: 120rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
-
-.submit-bar {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 32rpx;
- margin: 0 32rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
\ No newline at end of file
diff --git a/miniprogram/pages/friend/index.js b/miniprogram/pages/friend/index.js
index bc0d331e..3a43cdc0 100644
--- a/miniprogram/pages/friend/index.js
+++ b/miniprogram/pages/friend/index.js
@@ -5,9 +5,19 @@ Page({
* 页面的初始数据
*/
data: {
+ scrollTop: 0,
friendsList: [],
keyword: ''
},
+ // 监听用户滑动页面事件。
+ onPageScroll(e) {
+ // 注意:请只在需要的时候才在 page 中定义此方法,不要定义空方法。以减少不必要的事件派发对渲染层-逻辑层通信的影响。
+ // 注意:请避免在 onPageScroll 中过于频繁的执行 setData 等引起逻辑层-渲染层通信的操作。尤其是每次传输大量数据,会影响通信耗时。
+ // https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onPageScroll-Object-object
+ this.setData({
+ scrollTop: e.scrollTop
+ })
+ },
onSearch() {
wx.showToast({
title: '搜索...马上写完,真的',
diff --git a/miniprogram/pages/friend/index.wxss b/miniprogram/pages/friend/index.scss
similarity index 100%
rename from miniprogram/pages/friend/index.wxss
rename to miniprogram/pages/friend/index.scss
diff --git a/miniprogram/pages/friend/index.wxml b/miniprogram/pages/friend/index.wxml
index 3a1212fc..d793ed70 100644
--- a/miniprogram/pages/friend/index.wxml
+++ b/miniprogram/pages/friend/index.wxml
@@ -1,21 +1,22 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/miniprogram/pages/friend/select/index.json b/miniprogram/pages/friend/select/index.json
index d0ce5f35..8835af06 100644
--- a/miniprogram/pages/friend/select/index.json
+++ b/miniprogram/pages/friend/select/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "选择亲友",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/friend/select/index.scss b/miniprogram/pages/friend/select/index.scss
new file mode 100644
index 00000000..d5a1580c
--- /dev/null
+++ b/miniprogram/pages/friend/select/index.scss
@@ -0,0 +1 @@
+/* pages/friend/select/index.wxss */
\ No newline at end of file
diff --git a/miniprogram/pages/friend/select/index.wxml b/miniprogram/pages/friend/select/index.wxml
index e36535c0..6b97ea2d 100644
--- a/miniprogram/pages/friend/select/index.wxml
+++ b/miniprogram/pages/friend/select/index.wxml
@@ -1,17 +1,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/friend/select/index.wxss b/miniprogram/pages/friend/select/index.wxss
deleted file mode 100644
index 9b9a54c5..00000000
--- a/miniprogram/pages/friend/select/index.wxss
+++ /dev/null
@@ -1,4 +0,0 @@
-/* pages/friend/select/index.wxss */
-.container {
- margin: 32rpx 0;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/edit/index.js b/miniprogram/pages/giftOut/edit/index.js
index e1d92447..220f112c 100644
--- a/miniprogram/pages/giftOut/edit/index.js
+++ b/miniprogram/pages/giftOut/edit/index.js
@@ -2,156 +2,175 @@
const giftOutService = require('../../../alicloud/services/giftOut')
Page({
- /**
- * 页面的初始数据
- */
- data: {
- _id: '',
- friendId: '',
- friendName: '',
- title: '',
- date: {},
- money: '',
- remarks: '',
- },
- async onSave() {
- const eventChannel = this.getOpenerEventChannel()
- if (this.data._id) {
- const res = await giftOutService.updateGiftOut(this.data)
- if (res.success) {
- wx.showToast({
- title: '修改成功',
- })
- eventChannel.emit('refresh');
- setTimeout(() => {
- wx.navigateBack()
- }, 1000);
- }
- } else {
- const res = await giftOutService.addGiftOut(this.data)
- if (res.success) {
- wx.showToast({
- title: '添加成功',
- })
- eventChannel.emit('refresh');
- setTimeout(() => {
- wx.navigateBack()
- }, 1000);
- }
- }
- },
- async onDelete() {
- let delData = this.data
- const eventChannel = this.getOpenerEventChannel()
- wx.showModal({
- title: '删除来往记录?',
- content: '此操作无法恢复,确定删除?',
- async success(res) {
- if (res.confirm) {
- const result = await giftOutService.deleteGiftOut(delData)
- if (result.success) {
- wx.showToast({
- title: '删除成功',
- })
- eventChannel.emit('refresh');
- setTimeout(() => {
- wx.navigateBack()
- }, 1000);
- }
- }
- }
- })
- },
- showCalendar() {
- let that = this
- wx.navigateTo({
- url: `/pages/calendar/index?date=${this.data.date.value}`,
- events: {
- // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
- handleCalendarDateChange: function (data) {
- that.setData({
- date: data
- })
- },
- }
- });
- },
- showFriendSelect() {
- let that = this
- wx.navigateTo({
- url: '/pages/friend/select/index',
- events: {
- // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
- dialogResult: function (data) {
- that.setData({
- friendId: data._id,
- friendName: data.name,
- })
- },
- }
- });
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad(options) {
- const eventChannel = this.getOpenerEventChannel()
- eventChannel.on('acceptDataFromOpenerPage', (data) => {
- this.setData({
- ...data
- })
- wx.setNavigationBarTitle({
- title: '编辑记录'
- })
- })
- },
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ _id: '',
+ friendId: '',
+ friendName: '',
+ title: '',
+ date: {},
+ money: '',
+ remarks: '',
+ columns: ['结婚', '满月', '乔迁', '开业', '生日', '生病', '白事', '自定义'],
+ pickerCustom: false
+ },
+ showTitlePicker() {
+ this.setData({
+ pickerCustom: false
+ })
+ },
+ bindPickerChange: function (e) {
+ let sel_val = this.data.columns[e.detail.value]
+ if (sel_val == '自定义') {
+ this.setData({
+ pickerCustom: true
+ })
+ } else {
+ this.setData({
+ title: sel_val
+ })
+ }
+ },
+ async onSave() {
+ const eventChannel = this.getOpenerEventChannel()
+ if (this.data._id) {
+ const res = await giftOutService.updateGiftOut(this.data)
+ if (res.success) {
+ wx.showToast({
+ title: '修改成功',
+ })
+ eventChannel.emit('refresh');
+ setTimeout(() => {
+ wx.navigateBack()
+ }, 1000);
+ }
+ } else {
+ const res = await giftOutService.addGiftOut(this.data)
+ if (res.success) {
+ wx.showToast({
+ title: '添加成功',
+ })
+ eventChannel.emit('refresh');
+ setTimeout(() => {
+ wx.navigateBack()
+ }, 1000);
+ }
+ }
+ },
+ async onDelete() {
+ let delData = this.data
+ const eventChannel = this.getOpenerEventChannel()
+ wx.showModal({
+ title: '删除来往记录?',
+ content: '此操作无法恢复,确定删除?',
+ async success(res) {
+ if (res.confirm) {
+ const result = await giftOutService.deleteGiftOut(delData)
+ if (result.success) {
+ wx.showToast({
+ title: '删除成功',
+ })
+ eventChannel.emit('refresh');
+ setTimeout(() => {
+ wx.navigateBack()
+ }, 1000);
+ }
+ }
+ }
+ })
+ },
+ showCalendar() {
+ let that = this
+ wx.navigateTo({
+ url: `/pages/calendar/index?date=${this.data.date.value}`,
+ events: {
+ // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
+ handleCalendarDateChange: function (data) {
+ that.setData({
+ date: data
+ })
+ },
+ }
+ });
+ },
+ showFriendSelect() {
+ let that = this
+ wx.navigateTo({
+ url: '/pages/friend/select/index',
+ events: {
+ // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
+ dialogResult: function (data) {
+ that.setData({
+ friendId: data._id,
+ friendName: data.name,
+ })
+ },
+ }
+ });
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ const eventChannel = this.getOpenerEventChannel()
+ eventChannel.on('acceptDataFromOpenerPage', (data) => {
+ this.setData({
+ ...data
+ })
+ wx.setNavigationBarTitle({
+ title: '编辑记录'
+ })
+ })
+ },
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady() {
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
- },
+ },
- /**
- * 生命周期函数--监听页面显示
- */
- onShow() {
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
- },
+ },
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide() {
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
- },
+ },
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload() {
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
- },
+ },
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh() {
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
- },
+ },
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom() {
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
- },
+ },
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage() {
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
- }
+ }
})
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/edit/index.json b/miniprogram/pages/giftOut/edit/index.json
index e061ac45..8835af06 100644
--- a/miniprogram/pages/giftOut/edit/index.json
+++ b/miniprogram/pages/giftOut/edit/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "添加送礼",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/edit/index.scss b/miniprogram/pages/giftOut/edit/index.scss
new file mode 100644
index 00000000..71938704
--- /dev/null
+++ b/miniprogram/pages/giftOut/edit/index.scss
@@ -0,0 +1,4 @@
+/* pages/giftOut/edit/index.wxss */
+.ui-form-title{
+ min-width: 30%;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/edit/index.wxml b/miniprogram/pages/giftOut/edit/index.wxml
index a1524a4e..aed3aaf8 100644
--- a/miniprogram/pages/giftOut/edit/index.wxml
+++ b/miniprogram/pages/giftOut/edit/index.wxml
@@ -1,23 +1,49 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 删除
-
-
-
- 保 存
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tips:你可以点击联系人图标快速选取来宾。
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/edit/index.wxss b/miniprogram/pages/giftOut/edit/index.wxss
deleted file mode 100644
index e160e65e..00000000
--- a/miniprogram/pages/giftOut/edit/index.wxss
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pages/giftOut/edit/index.wxss */
-page {
- background-color: white;
-}
-
-.container {
- margin: 32rpx 0;
- margin-bottom: 120rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
-
-.submit-bar {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 32rpx;
- margin: 0 32rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/index.js b/miniprogram/pages/giftOut/index.js
index 9ac311c0..b3228735 100644
--- a/miniprogram/pages/giftOut/index.js
+++ b/miniprogram/pages/giftOut/index.js
@@ -6,10 +6,20 @@ Page({
* 页面的初始数据
*/
data: {
+ scrollTop: 0,
pageNo: 0,
giftList: [],
total: '0.00',
},
+ // 监听用户滑动页面事件。
+ onPageScroll(e) {
+ // 注意:请只在需要的时候才在 page 中定义此方法,不要定义空方法。以减少不必要的事件派发对渲染层-逻辑层通信的影响。
+ // 注意:请避免在 onPageScroll 中过于频繁的执行 setData 等引起逻辑层-渲染层通信的操作。尤其是每次传输大量数据,会影响通信耗时。
+ // https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onPageScroll-Object-object
+ this.setData({
+ scrollTop: e.scrollTop
+ })
+},
onSearch() {
wx.showToast({
title: '搜索...马上写完,真的',
@@ -33,7 +43,7 @@ Page({
}
});
},
- onAddGift() {
+ onAdd() {
wx.navigateTo({
url: '/pages/giftOut/edit/index',
events: {
diff --git a/miniprogram/pages/giftOut/index.json b/miniprogram/pages/giftOut/index.json
index 2ed30a0d..69b19d43 100644
--- a/miniprogram/pages/giftOut/index.json
+++ b/miniprogram/pages/giftOut/index.json
@@ -1,5 +1,4 @@
{
- "navigationBarTitleText": "送礼",
"enablePullDownRefresh": true,
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/giftOut/index.wxss b/miniprogram/pages/giftOut/index.scss
similarity index 92%
rename from miniprogram/pages/giftOut/index.wxss
rename to miniprogram/pages/giftOut/index.scss
index c87056b3..aaf60d5a 100644
--- a/miniprogram/pages/giftOut/index.wxss
+++ b/miniprogram/pages/giftOut/index.scss
@@ -1,9 +1,4 @@
/* pages/giftOut/index.wxss */
-/* 内容 */
-.wrapper {
- padding: 0 32rpx;
-}
-
/* 人情卡片 */
.gift-card {
display: flex;
diff --git a/miniprogram/pages/giftOut/index.wxml b/miniprogram/pages/giftOut/index.wxml
index 47fc0abe..4adbf1cd 100644
--- a/miniprogram/pages/giftOut/index.wxml
+++ b/miniprogram/pages/giftOut/index.wxml
@@ -1,13 +1,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -18,8 +20,4 @@
{{item.money}}元
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/miniprogram/pages/giftReceive/edit/index.js b/miniprogram/pages/giftReceive/edit/index.js
index a8199a99..13dc797b 100644
--- a/miniprogram/pages/giftReceive/edit/index.js
+++ b/miniprogram/pages/giftReceive/edit/index.js
@@ -118,9 +118,6 @@ Page({
this.setData({
...data,
})
- wx.setNavigationBarTitle({
- title: '编辑记录'
- })
})
},
diff --git a/miniprogram/pages/giftReceive/edit/index.scss b/miniprogram/pages/giftReceive/edit/index.scss
new file mode 100644
index 00000000..d16922f9
--- /dev/null
+++ b/miniprogram/pages/giftReceive/edit/index.scss
@@ -0,0 +1,4 @@
+/* pages/giftReceive/edit/index.wxss */
+.ui-form-title{
+ min-width: 30%;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/giftReceive/edit/index.wxml b/miniprogram/pages/giftReceive/edit/index.wxml
index 1a899d0a..806bf2f9 100644
--- a/miniprogram/pages/giftReceive/edit/index.wxml
+++ b/miniprogram/pages/giftReceive/edit/index.wxml
@@ -1,23 +1,35 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 删除
-
-
-
- 保 存
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tips:你可以点击联系人图标快速选取来宾。
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/giftReceive/edit/index.wxss b/miniprogram/pages/giftReceive/edit/index.wxss
deleted file mode 100644
index be54cf8a..00000000
--- a/miniprogram/pages/giftReceive/edit/index.wxss
+++ /dev/null
@@ -1,25 +0,0 @@
-/* pages/giftReceive/edit/index.wxss */
-page {
- background-color: white;
-}
-
-.container {
- margin: 32rpx 0;
- margin-bottom: 120rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
-
-.submit-bar {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 32rpx;
- margin: 0 32rpx;
- padding-bottom: constant(safe-area-inset-bottom);
- /*兼容 IOS<11.2*/
- padding-bottom: env(safe-area-inset-bottom);
- /*兼容 IOS>11.2*/
-}
\ No newline at end of file
diff --git a/miniprogram/pages/index/index.js b/miniprogram/pages/index/index.js
index 866747b5..9af6e302 100644
--- a/miniprogram/pages/index/index.js
+++ b/miniprogram/pages/index/index.js
@@ -3,222 +3,232 @@ const bookService = require('../../alicloud/services/book')
Page({
- /**
- * 页面的初始数据
- */
- data: {
- keyword: '',
- pageNo: 0,
- giftBooks: [],
- showBookAction: false,
- bookActions: [{
- name: '编辑',
- },
- {
- name: '删除',
- subname: '该礼簿所有来往记录都将被删除',
- },
- ],
- bookActionDetail: {}
- },
- onSearch() {
- wx.showToast({
- title: '搜索...马上写完,真的',
- icon: 'none',
- })
- },
- // 添加收礼
- onAddGift() {
- wx.navigateTo({
- url: '/pages/giftReceive/edit/index',
- events: {
- // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
- refresh: () => {
- this.loadData(1)
- },
- }
- });
- },
- // 添加礼簿
- onAddBook() {
- wx.navigateTo({
- url: '/pages/book/edit/index',
- events: {
- refresh: () => {
- this.loadData(1)
- },
- }
- });
- },
- // 点击礼簿
- onBookClick(e) {
- wx.navigateTo({
- url: '/pages/book/details/index',
- events: {
- refresh: () => {
- this.loadData(1)
- },
- },
- success: function (res) {
- // 通过 eventChannel 向被打开页面传送数据
- res.eventChannel.emit('acceptDataFromOpenerPage', {
- book: e.currentTarget.dataset.book
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ scrollTop: 0,
+ keyword: '',
+ pageNo: 0,
+ giftBooks: [],
+ showBookAction: false,
+ bookActions: [{
+ name: '编辑',
+ },
+ {
+ name: '删除',
+ subname: '该礼簿所有来往记录都将被删除',
+ },
+ ],
+ bookActionDetail: {}
+ },
+ // 监听用户滑动页面事件。
+ onPageScroll(e) {
+ // 注意:请只在需要的时候才在 page 中定义此方法,不要定义空方法。以减少不必要的事件派发对渲染层-逻辑层通信的影响。
+ // 注意:请避免在 onPageScroll 中过于频繁的执行 setData 等引起逻辑层-渲染层通信的操作。尤其是每次传输大量数据,会影响通信耗时。
+ // https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onPageScroll-Object-object
+ this.setData({
+ scrollTop: e.scrollTop
})
- }
- });
- },
- // 长按礼簿
- onBookLongPress(e) {
- this.setData({
- showBookAction: true,
- bookActionDetail: e.currentTarget.dataset.book
- });
- },
- // 长按礼簿-关闭
- onCloseBookAction() {
- this.setData({
- showBookAction: false
- });
- },
- // 长按礼簿-动作
- onSelectBookAction(event) {
- const that = this
- switch (event.detail.name) {
- case '删除':
- wx.showModal({
- title: '删除礼簿?',
- content: '该礼簿所有来往记录都将被删除,确定删除?',
- async success(result) {
- if (result.confirm) {
- const res = await bookService.deleteBook({
- _id: that.data.bookActionDetail._id
- })
- if (res.success) {
- that.loadData(1)
- wx.showToast({
- title: '删除成功',
- })
- }
- }
- }
+ },
+ onSearch() {
+ wx.showToast({
+ title: '搜索...马上写完,真的',
+ icon: 'none',
})
- break;
- case '编辑':
- console.log(that.data.actionId)
+ },
+ // 添加收礼
+ onAddGift() {
+ wx.navigateTo({
+ url: '/pages/giftReceive/edit/index',
+ events: {
+ // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
+ refresh: () => {
+ this.loadData(1)
+ },
+ }
+ });
+ },
+ // 添加礼簿
+ onAddBook() {
+ wx.navigateTo({
+ url: '/pages/book/edit/index',
+ events: {
+ refresh: () => {
+ this.loadData(1)
+ },
+ }
+ });
+ },
+ // 点击礼簿
+ onBookClick(e) {
wx.navigateTo({
- url: `/pages/book/edit/index`,
- success: function (res) {
- // 通过 eventChannel 向被打开页面传送数据
- res.eventChannel.emit('acceptDataFromOpenerPage', that.data.bookActionDetail)
- },
- events: {
- refresh: () => {
- this.loadData(1)
+ url: '/pages/book/details/index',
+ events: {
+ refresh: () => {
+ this.loadData(1)
+ },
},
- }
+ success: function (res) {
+ // 通过 eventChannel 向被打开页面传送数据
+ res.eventChannel.emit('acceptDataFromOpenerPage', {
+ book: e.currentTarget.dataset.book
+ })
+ }
});
- break;
- default:
- break;
- }
- },
- // 计算礼簿收礼金额
- computeTotal(datas) {
- return datas.map(i => {
- i.giftCount = i.giftList.length || 0
- i.giftTotal = 0
- for (let item of i.giftList) {
- i.giftTotal += Number(item.money)
- }
- return i
- })
- },
- // 加载数据
- async loadData(page) {
- if (page == 1) {
- this.setData({
- giftBooks: []
- })
- }
- const that = this
- const res = await bookService.getBookPage({
- page: page,
- limit: 10
- })
- if (res.success) {
- const resList = that.computeTotal(res.data)
- that.setData({
- giftBooks: this.data.giftBooks.concat(resList),
- pageNo: page
- });
- }
- },
- /**
- * 生命周期函数--监听页面加载
- */
- async onLoad(options) {
- wx.showLoading({
- title: '加载中',
- mask: true
- })
- // 人为延迟一点,避免loading动画闪烁
- setTimeout(async () => {
- // TODO 定时器,用以临时解决 app.onLaunch与page.onLoad异步问题
- await this.loadData(1)
- wx.hideLoading()
- }, 888)
- },
+ },
+ // 长按礼簿
+ onBookLongPress(e) {
+ this.setData({
+ showBookAction: true,
+ bookActionDetail: e.currentTarget.dataset.book
+ });
+ },
+ // 长按礼簿-关闭
+ onCloseBookAction() {
+ this.setData({
+ showBookAction: false
+ });
+ },
+ // 长按礼簿-动作
+ onSelectBookAction(event) {
+ const that = this
+ switch (event.detail.name) {
+ case '删除':
+ wx.showModal({
+ title: '删除礼簿?',
+ content: '该礼簿所有来往记录都将被删除,确定删除?',
+ async success(result) {
+ if (result.confirm) {
+ const res = await bookService.deleteBook({
+ _id: that.data.bookActionDetail._id
+ })
+ if (res.success) {
+ that.loadData(1)
+ wx.showToast({
+ title: '删除成功',
+ })
+ }
+ }
+ }
+ })
+ break;
+ case '编辑':
+ console.log(that.data.actionId)
+ wx.navigateTo({
+ url: `/pages/book/edit/index`,
+ success: function (res) {
+ // 通过 eventChannel 向被打开页面传送数据
+ res.eventChannel.emit('acceptDataFromOpenerPage', that.data.bookActionDetail)
+ },
+ events: {
+ refresh: () => {
+ this.loadData(1)
+ },
+ }
+ });
+ break;
+ default:
+ break;
+ }
+ },
+ // 计算礼簿收礼金额
+ computeTotal(datas) {
+ return datas.map(i => {
+ i.giftCount = i.giftList.length || 0
+ i.giftTotal = 0
+ for (let item of i.giftList) {
+ i.giftTotal += Number(item.money)
+ }
+ return i
+ })
+ },
+ // 加载数据
+ async loadData(page) {
+ if (page == 1) {
+ this.setData({
+ giftBooks: []
+ })
+ }
+ const that = this
+ const res = await bookService.getBookPage({
+ page: page,
+ limit: 10
+ })
+ if (res.success) {
+ const resList = that.computeTotal(res.data)
+ that.setData({
+ giftBooks: this.data.giftBooks.concat(resList),
+ pageNo: page
+ });
+ }
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ async onLoad(options) {
+ wx.showLoading({
+ title: '加载中',
+ mask: true
+ })
+ // 人为延迟一点,避免loading动画闪烁
+ setTimeout(async () => {
+ // TODO 定时器,用以临时解决 app.onLaunch与page.onLoad异步问题
+ await this.loadData(1)
+ wx.hideLoading()
+ }, 888)
+ },
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady() {
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
- },
+ },
- /**
- * 生命周期函数--监听页面显示
- */
- onShow() {
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
- },
+ },
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide() {
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
- },
+ },
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload() {
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
- },
+ },
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh() {
- // 感觉延迟一下,会舒服点
- setTimeout(async () => {
- await this.loadData(1)
- wx.stopPullDownRefresh()
- }, 666);
- },
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+ // 感觉延迟一下,会舒服点
+ setTimeout(async () => {
+ await this.loadData(1)
+ wx.stopPullDownRefresh()
+ }, 666);
+ },
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom() {
- this.loadData(this.data.pageNo + 1)
- },
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+ this.loadData(this.data.pageNo + 1)
+ },
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage() {
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
- }
+ }
})
\ No newline at end of file
diff --git a/miniprogram/pages/index/index.scss b/miniprogram/pages/index/index.scss
new file mode 100644
index 00000000..284c5445
--- /dev/null
+++ b/miniprogram/pages/index/index.scss
@@ -0,0 +1,24 @@
+/* pages/index/index.wxss */
+
+.book {
+ width: 100%;
+ height: 360rpx;
+ position: relative;
+ margin-bottom: 24rpx;
+}
+
+.book .bg {
+ position: absolute;
+ width: 100%;
+ height: 360rpx;
+}
+
+.book .content {
+ position: absolute;
+ z-index: 9;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ margin: 0 32rpx;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/index/index.wxml b/miniprogram/pages/index/index.wxml
index 1b029dbd..8e563619 100644
--- a/miniprogram/pages/index/index.wxml
+++ b/miniprogram/pages/index/index.wxml
@@ -1,44 +1,45 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.title||'' }}
- 共 {{ item.giftCount||0 }} 笔
-
-
- ¥ {{ item.giftTotal||'0.00' }}
- {{ item.date.value }}
- {{ item.date.lunar_month }}{{ item.date.lunar_day }}
-
-
-
-
-
-
-
-
-
-
-
- 添加礼簿
-
-
+
+
+
+ 礼记
+
+
+
+
+
+
+
+
+
+
+ {{ item.title||'' }}
+ 共 {{ item.giftCount||0 }} 笔
+
+
+ {{ item.giftTotal||'0' }}
+ {{ item.date.value }}
+ {{ item.date.lunar_month }}{{ item.date.lunar_day }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加礼簿
+
+
+
+
+
-
-
-
-
+
+
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/miniprogram/pages/index/index.wxss b/miniprogram/pages/index/index.wxss
deleted file mode 100644
index f3c888a3..00000000
--- a/miniprogram/pages/index/index.wxss
+++ /dev/null
@@ -1,55 +0,0 @@
-/* pages/index/index.wxss */
-.book-wrapper {
- padding: 24rpx 50rpx;
-}
-
-.book-wrapper .book {
- width: 100%;
- height: 360rpx;
- position: relative;
- margin-bottom: 24rpx;
-}
-
-.book-wrapper .book .bg {
- position: absolute;
- width: 100%;
- height: 360rpx;
-}
-
-.book-wrapper .book .content {
- position: absolute;
- z-index: 9;
- height: 100%;
- width: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-around;
-}
-
-.book-wrapper .book .content .name {
- font-size: large;
- color: #F76664;
- font-weight: bold;
- padding-bottom: 24rpx;
- margin: 0 24rpx;
-}
-
-.book-wrapper .book .content .count {
- font-size: small;
- color: #969799;
- margin: 0 24rpx;
-}
-
-.book-wrapper .book .content .total {
- font-size: large;
- color: #333;
- font-weight: bold;
- padding-bottom: 24rpx;
- margin: 0 24rpx;
-}
-
-.book-wrapper .book .content .date {
- font-size: small;
- color: #969799;
- margin: 0 24rpx;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/issue/index.json b/miniprogram/pages/issue/index.json
index eb7305e8..69b19d43 100644
--- a/miniprogram/pages/issue/index.json
+++ b/miniprogram/pages/issue/index.json
@@ -1,5 +1,4 @@
{
- "navigationBarTitleText": "意见反馈",
"enablePullDownRefresh": true,
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/issue/index.wxml b/miniprogram/pages/issue/index.wxml
index 8f4c6e8b..47ac33e2 100644
--- a/miniprogram/pages/issue/index.wxml
+++ b/miniprogram/pages/issue/index.wxml
@@ -1,5 +1,5 @@
-
+
@@ -45,5 +45,4 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/miniprogram/pages/mine/index.js b/miniprogram/pages/mine/index.js
index 4a32e2df..a3dd3c34 100644
--- a/miniprogram/pages/mine/index.js
+++ b/miniprogram/pages/mine/index.js
@@ -3,156 +3,129 @@ const giftReceiveService = require('../../alicloud/services/giftReceive')
const jinrishici = require('../../utils/jinrishici.js')
Page({
- /**
- * 页面的初始数据
- */
- data: {
- welcome: '',
- giveTotal: 0.00,
- receiveTotal: 0.00,
- menus: [{
- page: "family",
- icon: "shop-o",
- name: "我的家庭"
- },
- {
- page: "export",
- icon: "peer-pay",
- name: "数据导出"
- },
- {
- page: "chart",
- icon: "chart-trending-o",
- name: "统计分析"
- },
- // {
- // page: "sponsor",
- // icon: "good-job-o",
- // name: "赞赏"
- // },
- {
- page: "question",
- icon: "question-o",
- name: "常见问题"
- },
- {
- page: "issue",
- icon: "smile-comment-o",
- name: "意见反馈"
- },
- {
- page: "share",
- icon: "share-o",
- open_type: 'share',
- name: "分享"
- },
- {
- page: "about",
- icon: "info-o",
- name: "关于"
- }
- ]
- },
- jumpProfile() {
- wx.navigateTo({
- url: '/pages/profile/index',
- });
- },
- jumpPage(e) {
- if (e.currentTarget.dataset.page === 'chart') {
- wx.showToast({
- title: '统计分析,马上写完,真的...',
- icon: 'none',
- })
- return
- }
- if (e.currentTarget.dataset.page === 'export') {
- wx.showToast({
- title: '数据导出,马上写完,真的...',
- icon: 'none',
- })
- return
- }
-
- wx.navigateTo({
- url: `/pages/${e.currentTarget.dataset.page}/index`,
- });
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- jinrishici.load(result => {
- this.setData({
- welcome: result.data.content
- })
- })
- wx.showShareMenu({
- menus: ['shareAppMessage', 'shareTimeline']
- })
- },
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ scrollTop: 0,
+ welcome: '',
+ giveTotal: 0.00,
+ receiveTotal: 0.00,
+ menus: [{
+ icon: "cicon-home-smile-o",
+ name: "我的家庭",
+ color: "#A5ADF6",
+ path: "/pages/family/index"
+ },
+ {
+ icon: "cicon-event-list",
+ name: "数据导出",
+ color: "#4EB9FA",
+ path: "/pages/export/index"
+ },
+ {
+ icon: "cicon-demo",
+ name: "统计分析",
+ color: "#FFC667",
+ path: "/pages/chart/index"
+ },
+ {
+ icon: "cicon-goods-o",
+ name: "亲友关系",
+ color: "#F37D7D",
+ path: "/pages/chart/index"
+ }
+ ],
+ },
+ // 监听用户滑动页面事件。
+ onPageScroll(e) {
+ // 注意:请只在需要的时候才在 page 中定义此方法,不要定义空方法。以减少不必要的事件派发对渲染层-逻辑层通信的影响。
+ // 注意:请避免在 onPageScroll 中过于频繁的执行 setData 等引起逻辑层-渲染层通信的操作。尤其是每次传输大量数据,会影响通信耗时。
+ // https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onPageScroll-Object-object
+ this.setData({
+ scrollTop: e.scrollTop
+ })
+ },
+ tapToUrl(e) {
+ wx.navigateTo({
+ url: e.currentTarget.dataset.url
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ jinrishici.load(result => {
+ this.setData({
+ welcome: result.data.content
+ })
+ })
+ wx.showShareMenu({
+ menus: ['shareAppMessage', 'shareTimeline']
+ })
+ },
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
- },
+ },
- /**
- * 生命周期函数--监听页面显示
- */
- async onShow() {
- const {
- data: rTotal
- } = await giftReceiveService.computedTotalGiftReceive()
- this.setData({
- receiveTotal: rTotal || 0,
- });
- const {
- data: oTotal
- } = await giftOutService.computedTotalGiftOut()
- this.setData({
- giveTotal: oTotal || 0,
- });
- },
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ async onShow() {
+ const {
+ data: rTotal
+ } = await giftReceiveService.computedTotalGiftReceive()
+ this.setData({
+ receiveTotal: rTotal || 0,
+ });
+ const {
+ data: oTotal
+ } = await giftOutService.computedTotalGiftOut()
+ this.setData({
+ giveTotal: oTotal || 0,
+ });
+ },
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
- },
+ },
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
- },
+ },
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
- },
+ },
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
- },
+ },
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
- return {
- title: '可能是东半球最好用的人情记账工具',
- path: "pages/index/index",
- imageUrl: '../../images/share.jpg'
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+ return {
+ title: '可能是东半球最好用的人情记账工具',
+ path: "pages/index/index",
+ imageUrl: '/static/img/share.jpg'
+ }
}
- }
})
\ No newline at end of file
diff --git a/miniprogram/pages/mine/index.json b/miniprogram/pages/mine/index.json
index 69a694d0..776c690b 100644
--- a/miniprogram/pages/mine/index.json
+++ b/miniprogram/pages/mine/index.json
@@ -1,4 +1,3 @@
{
- "navigationBarTitleText": "",
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/pages/mine/index.scss b/miniprogram/pages/mine/index.scss
new file mode 100644
index 00000000..efa4d5ad
--- /dev/null
+++ b/miniprogram/pages/mine/index.scss
@@ -0,0 +1,13 @@
+.ui-item {
+ display: block;
+ text-align: center;
+}
+
+.open-btn {
+ position: absolute;
+ top: 0;
+ left: 0;
+ min-height: 4em;
+ width: 100%;
+ opacity: 0;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/mine/index.wxml b/miniprogram/pages/mine/index.wxml
index 0608883f..130e3cdf 100644
--- a/miniprogram/pages/mine/index.wxml
+++ b/miniprogram/pages/mine/index.wxml
@@ -1,46 +1,96 @@
-
-