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 @@ + + + + + + + + + + + {{title}} + + + + + + + + \ 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 + "" + }, !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 @@ - + - + @@ -58,6 +58,5 @@ - - -
\ No newline at end of file +
+ \ 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 @@ - - - - - - + + + 我的 + + + + + + + Hello,礼记者 + {{welcome}} + - - - - - - + + + + + + {{receiveTotal}} + 收礼 + + + {{giveTotal}} + 送礼 + + + + + + + + + + {{item.name}} + + + + - {{welcome}} - + + + + + + + + + + + 在线客服 + + + + + + + + + + + + + + + + + + 意见反馈 + + + + + + + + + + + + + + + + + 分享 + + + + + + + + + - - - - - - - {{receiveTotal}} - - - {{giveTotal}} - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/miniprogram/pages/mine/index.wxss b/miniprogram/pages/mine/index.wxss deleted file mode 100644 index 4da1ac77..00000000 --- a/miniprogram/pages/mine/index.wxss +++ /dev/null @@ -1,96 +0,0 @@ -button { - position: relative; - display: inline; - margin-left: auto; - margin-right: auto; - padding-left: 0px; - padding-right: 0px; - box-sizing: border-box; - text-align: center; - text-decoration: none; - line-height: 1.35; - -webkit-tap-highlight-color: transparent; - overflow: hidden; - width: 100%; - height: 100%; - outline: none; - } - - button::after { - border: none; - } - - .container .header { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding: 0 30rpx; - height: 190rpx; - position: relative; - background-color: #F76664 !important; - } - - .container .header:after { - position: absolute; - left: 0; - right: 0; - bottom: -98rpx; - z-index: -1; - content: ''; - height: 100rpx; - width: 100%; - border-radius: 0 0 50% 50%; - background-color: #F76664; - } - - .container .header .picTxt { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - } - - .container .header .picTxt .pictrue { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - } - - .container .header .picTxt .pictrue .avatar { - overflow: hidden; - display: block; - width: 120rpx; - height: 120rpx; - border-radius: 50%; - border: 2px solid #f5f5f5; - } - - .container .header .picTxt .text { - width: 434rpx; - color: rgba(255, 255, 255, 1); - margin-left: 35rpx; - } - - .container .header .picTxt .text .name { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - color: #fff; - font-size: 36rpx; - max-width: 470rpx; - } - - .container .header .picTxt .text .desc { - color: rgba(255, 255, 255, 0.6); - font-size: 26rpx; - margin-top: 15rpx; - } - - .container .header .icon-shezhi { - font-size: 38rpx; - color: #fff; - margin-top: 15rpx; - margin-right: 30rpx; - } \ No newline at end of file diff --git a/miniprogram/pages/profile/index.wxml b/miniprogram/pages/profile/index.wxml index 36428bc1..ce33b793 100644 --- a/miniprogram/pages/profile/index.wxml +++ b/miniprogram/pages/profile/index.wxml @@ -1,6 +1,6 @@ - +