From 52d463e03c1f074099ed8e8a6b7c3ddde52d2708 Mon Sep 17 00:00:00 2001 From: quanyawei <401863037@qq.com> Date: Fri, 27 Oct 2023 14:50:28 +0800 Subject: [PATCH] fix:小程序初版 --- pages/actionChange/workOrderDetails/index.vue | 176 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js | 8 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue | 934 +++++ uni_modules/uni-icons/package.json | 86 pages/actionChange/components/rectificationInfor.vue | 146 uni_modules/uni-scss/styles/setting/_variables.scss | 146 uni_modules/uni-icons/components/uni-icons/icons.js | 1169 +++++++ uni_modules/uni-icons/components/uni-icons/uni-icons.vue | 96 utils/storage.js | 52 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue | 24 uni_modules/uni-scss/variables.scss | 62 uni_modules/uni-datetime-picker/package.json | 87 main.js | 44 .env.dev.js | 4 uni_modules/uni-icons/components/uni-icons/uniicons.ttf | 0 uni_modules/uni-nav-bar/changelog.md | 51 uni_modules/uni-nav-bar/readme.md | 15 uni_modules/uni-scss/styles/setting/_color.scss | 66 uni_modules/uni-scss/styles/setting/_space.scss | 56 pages.json | 147 uni_modules/uni-icons/changelog.md | 22 uni_modules/uni-scss/styles/setting/_styles.scss | 167 + uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js | 403 ++ uni_modules/uni-scss/readme.md | 4 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue | 1034 ++++++ utils/login.js | 7 pages/actionChange/components/userAvatar.vue | 67 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue | 928 +++++ uni_modules/uni-nav-bar/package.json | 86 uni_modules/uni-scss/styles/setting/_text.scss | 24 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json | 22 uni_modules/uni-scss/styles/tools/functions.scss | 19 uni_modules/uni-datetime-picker/readme.md | 21 uni_modules/uni-datetime-picker/changelog.md | 142 App.vue | 126 pages/actionChange/components/fileUpload.vue | 130 pages/actionChange/components/basicInfor.vue | 339 + store/index.js | 40 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json | 22 uni_modules/uni-icons/readme.md | 8 pages/actionChange/myInfor/index.vue | 45 uni_modules/uni-scss/changelog.md | 8 uni_modules/uni-scss/index.scss | 1 pages/actionChange/components/commonUserTabBar.vue | 41 pages/index/index.vue | 81 pages/actionChange/agencyPage/index.vue | 298 + uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue | 177 + pages/login/login.vue | 41 pages/actionChange/newPage/index.vue | 597 +-- pages/actionChange/components/approvalnfor.vue | 97 uni_modules/uni-scss/package.json | 82 uni_modules/uni-scss/styles/setting/_border.scss | 3 uni_modules/uni-scss/styles/setting/_radius.scss | 55 /dev/null | 111 utils/request.js | 8 uni_modules/uni-scss/styles/index.scss | 7 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json | 22 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue | 357 ++ uni_modules/uni-icons/components/uni-icons/uniicons.css | 663 ++++ uni_modules/uni-scss/theme.scss | 31 60 files changed, 8,578 insertions(+), 1,127 deletions(-) diff --git a/.env.dev.js b/.env.dev.js index ed166ca..8093bf2 100644 --- a/.env.dev.js +++ b/.env.dev.js @@ -1,6 +1,6 @@ const config = { - baseUrl: "http://120.26.43.34:8081/api", //������ - // baseUrl: "http://47.99.64.149:8081/api", //������ + // baseUrl: "http://120.26.43.34:8081/api/", //������ + baseUrl: "https://qx.7drlb.com/api", //������ // baseUrl: "http://192.168.0.9:8081/api", //������ }; module.exports = config; \ No newline at end of file diff --git a/App.vue b/App.vue index dd2c821..2dbd4d1 100644 --- a/App.vue +++ b/App.vue @@ -1,46 +1,34 @@ <script> - import Vue from 'vue' import { - getUserInfor, getDic } from '@/utils/login.js' // ������������ + import store from '@/store/index.js' import { httpPost, httpGet } from '@/utils/http.js' export default { - onLaunch: function() { + onLaunch() { // ������������������ - this.getUserInfo() - }, - methods: { - /** - * ������������ - * ��������������������������������������������������������������������� - * - */ - getUserInfo() { + let token = uni.getStorageSync('token') + console.log('apptoken', token) + if (!token) { uni.login({ provider: 'weixin', - success(res) { - if (res.code) { - // ������������������������code������������������������ - httpGet('/AppUser/wx/login', { - 'code': res.code - }).then(result => { + success: loginRes => { + console.log('loginRes', loginRes) + httpGet('/AppUser/wx/login', { + 'code': loginRes.code + }).then(result => { + try { if (result.data.code === 0) { - // ������������ uni.clearStorageSync() - uni.setStorageSync('token', result.data.token) - // setTimeout(() => { - // uni.reLaunch({ - // url: '/pages/actionChange/agencyPage/index', - // }) - // }, 3000) - getUserInfor(result.data.token) + uni.setStorageSync('userInfor', JSON.stringify(result.data)) + uni.setStorageSync('tonken', result.data.token) getDic() + this.$isResolve() } else { - // ��������������� + uni.clearStorageSync() uni.setStorageSync('openId', result.data.openId) uni.showModal({ title: '���������', @@ -55,14 +43,62 @@ } }, }) + this.$isResolve() } + } catch (e) { + console.error(e) + } + }).catch(errors => { + console.log('appdddd', errors) + uni.showToast({ + title: errors, + icon: 'none', }) - } else { - console.log(res.errMsg) - } + }) + } + }) + } else { + this.$isResolve() + } + }, + methods: { + /** + * ������������ + * ��������������������������������������������������������������������� + * + */ + getWXCode() { + let that = this + uni.login({ + provider: 'weixin', + success(res) { + that.getLogin(res.code) } }) }, + getLogin(data) { + // ������������������������code������������������������ + httpGet('/AppUser/wx/login', { + 'code': data + }).then(result => { + if (result.data.code === 0) { + // ������������ + uni.clearStorage() + store.commit('setUserInfor', result.data) + store.commit('setTonken', result.data.token) + getDic() + try { + this.$isResolve() + } catch (e) { + console.error(e) + } + // getUserInfor(result.data.token) + } else { + // ��������������� + // console.log('openId', result.data.openId) + } + }) + } }, } </script> @@ -76,18 +112,40 @@ .formItemContent { ::v-deep.u-form-item { - padding: 8px 0; + padding: 5px 0; border-bottom: 1px dashed #bbb; + } + + ::v-deep.u-form-item__body__left__content__label { + font-size: 16px !important; } ::v-deep.u-form-item__body, /deep/.u-textarea { padding: 0 !important; } + } - ::v-deep.u-form-item__body__left__content__label, - /deep/.u-radio__text { - font-size: 13px !important; + .tabarStyle { + /deep/.u-tabbar-item__text { + font-size: 18px !important; + } + + /deep/.u-tabbar__content__item-wrapper { + height: 60px !important; + } + + /deep/.u-icon__icon { + font-size: 25px !important; + } + } + + .dataRangeSerch { + + /deep/.range-separator, + /deep/.uni-date__x-input { + height: 30px !important; + line-height: 30px !important; } } </style> \ No newline at end of file diff --git a/main.js b/main.js index 3892abb..5470a1f 100644 --- a/main.js +++ b/main.js @@ -1,25 +1,27 @@ -import Vue from "vue"; -import App from "./App"; -import * as http from "./utils/http"; // http������������ -import * as login from "./utils/login"; // ������ -import * as utils from "./utils/utils"; // ������������ +import Vue from 'vue' +import App from './App' +import * as http from './utils/http' // http������������ +import * as login from './utils/login' // ������ +import * as utils from './utils/utils' // ������������ // import * as common from './utils/common' // ������������ -import store from "./store"; -import storage from "./utils/storage"; // ������������ -import ".env.js"; +import store from './store/index.js' +import storage from './utils/storage' // ������������ +import '.env.js' // ������������ -Vue.prototype.$store = store; -Vue.prototype.$storage = storage; -Vue.prototype.$http = http; -Vue.prototype.$login = login; -Vue.prototype.$utils = utils; +Vue.prototype.$store = store +Vue.prototype.$storage = storage +Vue.prototype.$http = http +Vue.prototype.$login = login +Vue.prototype.$utils = utils // Vue.prototype.$common = common - -App.mpType = "app"; +App.mpType = 'app' const app = new Vue({ - store, - ...App, -}); -app.$mount(); -import uView from "@/uni_modules/uview-ui"; -Vue.use(uView); + store, + ...App, +}) +Vue.prototype.$onLaunched = new Promise(resolve => { + Vue.prototype.$isResolve = resolve +}) +app.$mount() +import uView from '@/uni_modules/uview-ui' +Vue.use(uView) \ No newline at end of file diff --git a/pages.json b/pages.json index f0efe61..0122ed8 100644 --- a/pages.json +++ b/pages.json @@ -1,70 +1,81 @@ { - "pages": [ - //pages���������������������������������������������������https://uniapp.dcloud.io/collocation/pages - - { - "path": "pages/actionChange/agencyPage/index", - "style": { - "navigationBarTitleText": "������", - "enablePullDownRefresh": false - } - }, - { - "path": "pages/login/login" - }, - { - "path": "pages/login/register/register", - "style": { - "navigationBarTitleText": "������", - "enablePullDownRefresh": false - } - }, - { - "path": "pages/actionChange/newPage/index", //��������������������������� - "style": { - "navigationBarTitleText": "���������������", - "enablePullDownRefresh": false, - "navigationBarHidden":true - } - }, - { - "path": "pages/actionChange/workOrderDetails/index", //��������������������������� - "style": { - "navigationBarTitleText": "���������������", - "enablePullDownRefresh": false - } - }, - { - "path": "pages/actionChange/myInfor/index", - "style": { - "navigationBarTitleText": "������", - "enablePullDownRefresh": false - } - } - ], - "tabBar": { - "color": "#515151", - "selectedColor": "#3875C5", - "list": [ + "pages": [ + //pages���������������������������������������������������https://uniapp.dcloud.io/collocation/pages { - "text": "������", - "pagePath": "pages/actionChange/agencyPage/index", - "iconPath": "static/img/shouye.png", - "selectedIconPath": "static/img/shouyeClick.png" - }, - { - "text": "���������������", - "pagePath": "pages/actionChange/newPage/index", - "iconPath": "static/img/xinjian.png", - "selectedIconPath": "static/img/xinjianClick.png" - }, - - { - "text": "������", - "iconPath": "static/img/wode-.png", - "selectedIconPath": "static/img/wodeClick.png", - "pagePath": "pages/actionChange/myInfor/index" - } - ] - } -} + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "������", + "enablePullDownRefresh": false, + "disableSwipeBack": true, + "navigationStyle": "custom" + } + }, { + "path": "pages/actionChange/agencyPage/index", + "style": { + "navigationBarTitleText": "������", + "navigationStyle": "custom", + "enablePullDownRefresh": false + } + }, { + "path": "pages/login/login" + }, { + "path": "pages/login/register/register", + "style": { + "navigationBarTitleText": "������", + "enablePullDownRefresh": false + } + }, { + "path": "pages/actionChange/newPage/index", //��������������������������� + "style": { + "navigationBarTitleText": "���������������", + "enablePullDownRefresh": false + } + }, { + "path": "pages/actionChange/workOrderDetails/index", //��������������������������� + "style": { + "navigationBarTitleText": "���������������", + "enablePullDownRefresh": false + } + }, { + "path": "pages/actionChange/myInfor/index", + "style": { + "navigationBarTitleText": "������", + "enablePullDownRefresh": false, + "disableSwipeBack": true, + "navigationStyle": "custom" + } + } + ] + // "tabBar": { + // "color": "#515151", + // "height": "60px", + // "fontSize": "60px", + // "selectedFontSize": 20, + // "selectedColor": "#3875C5", + // "list": [{ + // "text": "������", + // "pagePath": "pages/actionChange/agencyPage/index", + // "iconPath": "static/img/shouye.png", + // "selectedIconPath": "static/img/shouyeClick.png", + // "textStyle": { + // "fontSize": "60px" + // } + // }, { + // "text": "���������������", + // "pagePath": "pages/actionChange/newPage/index", + // "iconPath": "static/img/xinjian.png", + // "selectedIconPath": "static/img/xinjianClick.png", + // "textStyle": { + // "fontSize": "20px" + // } + // }, { + // "text": "������", + // "iconPath": "static/img/wode-.png", + // "selectedIconPath": "static/img/wodeClick.png", + // "pagePath": "pages/actionChange/myInfor/index", + // "textStyle": { + // "fontSize": "20px" + // } + // }] + // } +} \ No newline at end of file diff --git a/pages/actionChange/agencyPage/index.vue b/pages/actionChange/agencyPage/index.vue index 5c535ca..563f912 100644 --- a/pages/actionChange/agencyPage/index.vue +++ b/pages/actionChange/agencyPage/index.vue @@ -3,23 +3,35 @@ <view class="hearderInfor"> <view> <p class="unit"> - <text>���������������{{ userInfor.userName ||''}}</text> + <text>���������������{{ unitName }}</text> </p> </view> <view class="headSculpture"> - <image alt="" src="/static/img/headSculpture.png" /> - <text>������������{{ userInfor.userName || ''}}</text> + <button open-type="chooseAvatar" @chooseavatar='onChooseAvatar' + style="padding: 0;margin: 0;border-radius: 100px;"> + <u-avatar :src="avatarUrl" randomBgColor size='60'></u-avatar> + </button> + <text style="margin-left: 46.15rpx;">������������{{ userName || ''}}</text> </view> </view> <view> - <u-tabs :list="list" :scrollable="scrollable" @change="changeTap" /> + <u-tabs :list="list" :scrollable="scrollable" lineWidth="60" @change="changeTap" /> </view> - <view class="" v-if="userInfor.userName"> + <view class="" v-if="userName"> + <view class="dataRangeSerch" v-if="current===3"> + <view class="dataRangeSerchLabel"> + <text style="margin-right: 8px;">������:</text> + <uni-datetime-picker v-model="range" type="daterange" rangeSeparator="���" /> + </view> + <view> + <u-button type="primary" size="small" text="������" @click="getWorkOrder"></u-button> + </view> + </view> <view :key="index" v-for="(item, index) in workOderList" class="workOrderDetail" @tap="handleClick(item, 'edit')"> <view class="mainContent"> <p class="rowTip" style="justify-content: space-between"> - <text class=""> ������������: {{ item.allocationNum }} + <text class=" titleLable"> ������������: {{ item.allocationNum }} </text> <text class="rowTipContenet_right"> <text catchtap class="butsName" @tap.stop="handleClick(item, 'view')"> ������ </text> @@ -69,9 +81,14 @@ <view class="rowTipContenet"> <view class="wholeLine"> <text class="rowTipContenetLabel">������������:</text> - <text class="rowTipContenetAll"> - {{ stateFormatter(item.state) }} - </text> + <u--text type="warning" :text="item.state |stateFormatter" size='30.77rpx' + v-if="item.state===20 ||item.state===9"></u--text> + <u--text type="primary" :text="item.state |stateFormatter" size='30.77rpx' + v-if="item.state===30"></u--text> + <u--text type="success" :text="item.state |stateFormatter" size='30.77rpx' + v-if="item.state===40"></u--text> + <u--text type="error" :text="item.state |stateFormatter" size='30.77rpx' + v-if="item.state===50"></u--text> </view> </view> </p> @@ -108,7 +125,12 @@ </view> </p> </view> + <view class="yingzhang" v-if="item.isInvalid===1"> + <view class="seal-red"> ��������� </view> + </view> </view> + <u-loadmore :status="status" :loading-text="loadingText" @loadmore='getLoadmore' + :loadmore-text="loadmoreText" dashed line :nomore-text="nomoreText" /> </view> </view> </template> @@ -117,11 +139,13 @@ httpPost, httpGet } from '@/utils/http.js' + import store from '@/store/index.js' export default { data() { return { + range: [], scrollable: false, - userInfor: {}, + userInfor: null, dictObj: [], list: [{ name: '������', @@ -136,54 +160,188 @@ name: '���������', value: 3, }, ], + showeEscalationTime: false, current: 0, + startTime: '', + endTime: '', workOderList: [], unitList: [], polluteList: [], + avatarUrl: '', + baseUrl: '', + token: '', + status: 'loadmore', + loadingText: '���������������', + loadmoreText: '������������', + nomoreText: '���������������', + isLoading: false, + page: { + currentPage: 1, + pageSize: 10 + } } }, - mounted() { - console.log('mounted this.userInfo', this.userInfo) + watch: { + range(newval) { + console.log('newval', newval) + this.startTime = newval[0] + this.endTime = newval[1] + }, }, - created() { - console.log('created this.userInfo', this.userInfo) - this.getContaminateList() - this.getUnitList() - this.getWorkOrder() + computed: { + unitName() { + let data = '' + if (this.userInfor && this.unitList.length > 0) { + data = this.unitList && this.unitList.find(a => Number(a.unitId) === Number(this.userInfor.unitId)) + } + if (this.userInfor) { + data = this.userInfor.unName + } + return data + }, + userName() { + let data = '' + if (this.userInfor) { + data = this.userInfor.userName + } + return data + } }, - onShow() { - uni.showTabBar() + onReachBottom() { + //������������������������������������������ + if (this.isLoading) { + this.status = 'loading' + //������������������,���������++ + this.page.currentPage = ++this.page.currentPage + //������������,������������tab������������ + this.getWorkOrder() + } }, + mounted() {}, + filters: { + stateFormatter(val) { + let information = JSON.parse(uni.getStorageSync('dictObj') || '[]') + return information.allocationApproveEnum[val] + } + }, + onLoad: () => {}, methods: { + getLoadmore() { + if (this.isLoading) { + this.status = 'loading' + //������������������,���������++ + this.page.currentPage = ++this.page.currentPage + //������������,������������tab������������ + this.getWorkOrder() + } + }, + async onChooseAvatar(e) { + const { + avatarUrl + } = e.detail // ������������������������������������������������������������������������ + this.avatarUrl = avatarUrl + uni.showToast({ + title: '������', + duration: 1000 + }) + let a = uni.uploadFile({ + url: this.baseUrl + '/file/upload', + filePath: this.avatarUrl, + header: { + token: this.token, + Authorization: this.token, + }, + name: 'file', + formData: { + sysCode: '1202401' + }, + success: res => { + let resData = JSON.parse(res.data) + let parms = { + 'file': resData.data, + 'userId': this.userInfor.userId + } + this.$http.httpPost('/allocationApp/appFile', parms).then(res => { + uni.removeStorageSync('userInfor') + this.userInfor.file = resData.data + console.log('resData.data', resData.data) + uni.setStorageSync('userInfor', JSON.stringify(this.userInfor)) + console.log('this.userInforSet', this.userInfor) + }) + console.log(this.url) + }, + fail: res => { + uni.showToast({ + title: res.data, + icon: 'none', + }) + } + }) + }, changeTap(data) { + console.log(data) this.current = data.value + this.page = { + currentPage: 1, + pageSize: 10 + } + this.startTime = '' + this.endTime = '' this.getWorkOrder() }, // ������������������list getUnitList() { this.$http.httpGet('/allocation/unit').then(res => { this.unitList = res.data - this.userInfor = this.$storage.getJson('userInfo') - this.dictObj = this.$storage.getJson('dictObj') - this.$storage.setJson('unitList', this.unitList) }) }, getContaminateList() { + console.log('indexindex') this.$http.httpGet('/allocation/contaminate').then(res => { this.polluteList = res.data - this.$storage.setJson('polluteList', this.polluteList) + this.dictObj = JSON.parse(uni.getStorageSync('dictObj') || '[]') + this.userInfor = JSON.parse(uni.getStorageSync('userInfor') || '{}') + this.baseUrl = this.$storage.get('baseUrl') + this.token = uni.getStorageSync('tonken') + this.avatarUrl = `${this.baseUrl}/file/preview/${this.userInfor.file.fileId}` + console.log('indexindexindexindexthis.userInfor', this.userInfor) + this.getUnitList() + this.getWorkOrder() + }).catch(res => { + console.log('���������', res) + // this.getContaminateList() }) }, - stateFormatter(val) { - return this.dictObj.allocationApproveEnum[val] - }, getWorkOrder() { - httpGet('/allocationApp/select', { + httpPost('/allocationApp/page', { state: this.current, - startTime: '', - endTime: '', + startTime: this.startTime, + endTime: this.endTime, + page: { + 'currentPage': this.page.currentPage, + 'pageSize': this.page.pageSize + }, }).then(res => { - this.workOderList = res.data + console.log('indexindex', res.data.list) + if (res.data.list) { + if (res.data.list.length < this.page.pageSize) { + //���������������false������������������������,������������������������������������������ + this.isLoading = false + this.status = 'nomore' + } else { + this.isLoading = true + this.status = 'loadmore' + } + if (this.page.currentPage === res.data.page.currentPage) { + this.workOderList = res.data.list + } else { + res.data.list.forEach(el => { + this.workOderList.push(el) + }) + } + } else { + this.status = 'nomore' + } }) }, handleClick(e, pageState) { @@ -191,7 +349,7 @@ id: e.allocationId }).then(res => { let data = res.data - data.pageState = pageState + data.pageState = data.state === 50 || data.state === 40 ? 'view' : pageState let myData = JSON.stringify(data) uni.navigateTo({ url: '/pages/actionChange/workOrderDetails/index?infor=' + myData, @@ -208,9 +366,9 @@ } .hearderInfor { - font-size: 26.92rpx; - height: 223.08rpx; + font-size: 28.85rpx; background-color: #3875c5; + padding-bottom: 8px; color: #f2f2f2; .unit { @@ -222,8 +380,9 @@ .headSculpture { display: flex; align-items: center; + padding-left: 20px; - image { + .imageSrc { height: 117.31rpx; width: 117.31rpx; margin: 0rpx 46.15rpx; @@ -234,25 +393,23 @@ .textContent { text-align: left; width: 100%; - font-size: 28.85rpx; + font-size: 30.77rpx; } .workOrderDetail { border: 1px solid #bbb; border-radius: 5px; - min-height: 288.46rpx; - margin: 19.23rpx; - padding: 19.23rpx; + margin: 9.62rpx; + padding: 9.62rpx 19.23rpx; color: #101010; - font-weight: 700; - font-size: 26.92rpx; + font-size: 30.77rpx; /deep/.u-line { - margin: 19.23rpx 0px !important; + margin: 9.62rpx 0px !important; } .mainContent { - margin-bottom: 10px; + margin-bottom: 5px; .rowTip { display: flex; @@ -283,9 +440,66 @@ color: #1990ff; } + .titleLable { + font-size: 30.77rpx; + font-weight: bold; + } + .rowTipContenet_right { text-align: right !important; } } } + + /deep/.u-tabs__wrapper__nav__item__text { + font-size: 34.62rpx !important; + } + + .yingzhang { + position: relative; + + .seal-red { + position: absolute; + right: 0; + top: -85px; + display: inline-block; + border: solid 2px #e93e00; + border-radius: .2em; + color: #e24c06; + font-size: 19px; + line-height: 1; + opacity: 0; + padding: .1em .5em; + text-transform: uppercase; + opacity: 0; + transform: rotate(-2deg) scale(5); + animation: seal .3s cubic-bezier(0.6, 0.04, 0.98, 0.335) forwards; + } + + @keyframes seal { + 100% { + opacity: .75; + transform: rotate(-15deg) scale(1); + } + } + } + + .dataRangeSerch { + display: flex; + justify-content: space-around; + align-items: center; + padding: 10px 0 5px 0px; + + .dataRangeSerchLabel { + display: flex; + align-items: center; + width: 75%; + } + + /deep/.range-separator, + /deep/.uni-date__x-inpu { + height: 30px !important; + line-height: 30px !important; + } + } </style> \ No newline at end of file diff --git a/pages/actionChange/components/approvalnfor.vue b/pages/actionChange/components/approvalnfor.vue index 98bc05c..ad8ce63 100644 --- a/pages/actionChange/components/approvalnfor.vue +++ b/pages/actionChange/components/approvalnfor.vue @@ -8,33 +8,36 @@ <u-line color="#bbb" /> <view> <view class="mainContent"> - - <u--form labelPosition="left" label-width="70" :model="form" :border-bottom="false" :rules="rules" + <u--form labelPosition="left" label-width="80" :model="form" :border-bottom="false" :rules="rules" ref="uForm"> <view class="formItemContent"> - <u-form-item border-bottom label="������������:" prop="checkScore" required :border-bottom="false"> - <view class="" v-if="basicInfor.pageState==='view'"> + <u-form-item border-bottom label="������������:" prop="checkScore" + :required="basicInfor.pageState==='edit'" :border-bottom="false"> + <view class="fonttest" v-if="basicInfor.pageState==='view'"> {{ basicInfor.checkScore ||''}} </view> - <u-input v-else v-model="form.checkScore" border="none" placeholder="���������" type="text" /> + <u-input v-else v-model="form.checkScore" border="none" placeholder="���������" + type="number" /> </u-form-item> </view> <view class="formItemContent"> - <u-form-item border-bottom label="������:" prop="checkDescribe" required :border-bottom="false"> - <view class="" v-if="basicInfor.pageState==='view'"> + <u-form-item border-bottom label="������:" prop="checkDescribe" + :required="basicInfor.pageState==='edit'" :border-bottom="false"> + <view class="fonttest" v-if="basicInfor.pageState==='view'"> {{ basicInfor.checkDescribe ||''}} </view> <u--textarea v-else v-model="form.checkDescribe" border="none" placeholder="���������������" /> </u-form-item> </view> <view class="formItemContent"> - <u-form-item border-bottom label="������������" :border-bottom="false"> + <u-form-item border-bottom label="������������:" :border-bottom="false"> <view class="fileBox" v-if="basicInfor.pageState==='view'"> <cl-upload v-model="fileList" :add="false" :action="`''`" cloud-type="other" :remove="false" /> </view> <view class="fileBox" v-else> - <fileUpload class="rowTipContenetAll" :sys-code="sysCode" @handleFile="handleFile" /> + <fileUpload class="rowTipContenetAll" :sys-code="sysCode" + @handleFile="handleFile" /> </view> </u-form-item> </view> @@ -68,7 +71,7 @@ checkScore: 0, checkDescribe: '', }, - dictObj: this.$storage.getJson('dictObj'), + dictObj: JSON.parse(uni.getStorageSync('dictObj') || '[]'), fileList: [], fileBaseList: [], baseUrl: this.$storage.get('baseUrl'), @@ -104,7 +107,6 @@ console.log('this.fileList', this.basicInfor.fileBaseList) console.log('this.fileList', this.fileList) } - }, methods: { handleFile(data) { @@ -113,26 +115,21 @@ }, formVali() { return new Promise((resolve, reject) => { - if(this.basicInfor.pageState!=='view'){ + if (this.basicInfor.pageState !== 'view') { this.$refs.uForm.validate().then(res => { - resolve(true) - }) - .catch(errors => { - reject(false) - uni.$u.toast('������������') - }) - } else{ + resolve(true) + }).catch(errors => { + reject(false) + uni.$u.toast('������������') + }) + } else { resolve(true) } - - }); - + }) } - }, } </script> - <style scoped lang="scss"> /deep/.u-line { margin: 19.23rpx 0px !important; @@ -141,17 +138,16 @@ .workOrderDetail { border: 1px solid #bbb; border-radius: 5px; - min-height: 288.46rpx; margin: 19.23rpx; padding: 19.23rpx; color: #101010; font-weight: 700; - font-size: 26.92rpx; + font-size: 30.77rpx; .headerCont { display: flex; justify-content: space-between; - font-size: 15px; + font-size: 30.77rpx; } .mainContent { @@ -159,21 +155,25 @@ font-weight: 500; .rowTip { - // display: flex; - padding: 8px 0; + display: flex; + padding: 5px 0; border-bottom: 1px dashed #bbb; .wholeLine { display: flex; + width: 100%; align-items: center; .rowTipContenetLabel { - min-width: 125rpx; + min-width: 144.23rpx; + font-size: 28.85rpx; + text-align: left; } - } - .rowTipContenetAll { - width: calc(100% - 125rpx; ); + .rowTipContenetAll { + font-size: 28.85rpx; + width: calc(100% - 144.23rpx); + } } .rowTipContenet { @@ -195,36 +195,5 @@ text-align: right !important; } } - } - - /deep/.u-form-item { - padding: 8px 0; - border-bottom: 1px dashed #bbb; - } - - /deep/.u-form-item__body, - /deep/.u-textarea { - padding: 0 !important; - } - - /deep/.u-form-item__body__left__content__label, - /deep/.u-radio__text { - font-size: 13px !important; - } - - .fileBox { - display: -webkit-box; - display: -webkit-flex; - display: flex; - position: relative; - width: 100%; - height: 100%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - flex-direction: column; - -webkit-box-pack: center; - -webkit-justify-content: center; - justify-content: center; } </style> \ No newline at end of file diff --git a/pages/actionChange/components/basicInfor.vue b/pages/actionChange/components/basicInfor.vue index f7e26bb..47de5eb 100644 --- a/pages/actionChange/components/basicInfor.vue +++ b/pages/actionChange/components/basicInfor.vue @@ -12,6 +12,22 @@ <p class="rowTip"> <view class="rowTipContenet"> <view class="wholeLine"> + <text class="rowTipContenetLabel">������������:</text> + <text class="rowTipContenetAll"> + {{ basicInfor.escalationTime ||'' }} + </text> + </view> + </view> + <view class="rowTipContenet"> + <view class="wholeLine"> + <text class="rowTipContenetLabel">���������:</text> + <text class="rowTipContenetAll">{{ basicInfor.escalationName ||'' }}</text> + </view> + </view> + </p> + <p class="rowTip"> + <view class="rowTipContenet"> + <view class="wholeLine"> <text class="rowTipContenetLabel">������������:</text> <text class="rowTipContenetAll"> {{ unitName }} @@ -41,7 +57,8 @@ <view class="wholeLine"> <text class="rowTipContenetLabel">������������:</text> <text class="rowTipContenetAll"> - {{ dictObj.changeEnum[basicInfor.changeType] ||'' }} + <text>{{ dictObj.changeEnum[basicInfor.changeType]||'' }}</text> + <!-- <text>{{ basicInfor.residueDay||'' }}</text> --> </text> </view> </view> @@ -55,18 +72,6 @@ </text> </view> </view> - <view class="rowTipContenet"> - <view class="wholeLine"> - <text class="rowTipContenetLabel">���������:</text> - <text class="rowTipContenetAll">{{ basicInfor.escalationName ||'' }}</text> - </view> - </view> - </p> - <p class="rowTip"> - <view class="wholeLine"> - <text class="rowTipContenetLabel">������������:</text> - <text class="rowTipContenetAll">{{ basicInfor.escalationTime ||'' }}</text> - </view> </p> <p class="rowTip"> <view class="wholeLine"> @@ -74,161 +79,173 @@ <text class="rowTipContenetAll">{{ basicInfor.pollutePosition ||'' }}</text> </view> </p> - <p class="rowTip"> - <view class="wholeLine"> - <text class="rowTipContenetLabel">������������:</text> - <text v-if="fileList.length>0" class="rowTipContenetAll"> - <cl-upload - v-model="fileList" - :action="`''`" - :add="false" - cloud-type="other" - :remove="false" - /> - </text> - </view> - </p> + <view class="formItemContent"> + <u--form labelPosition="left" label-width="75" :border-bottom="false" ref="uForm"> + <u-form-item border-bottom label="������������:" :border-bottom="false"> + <view class="fileBox"> + <cl-upload v-model="fileList" :add="false" :action="`''`" cloud-type="other" + :remove="false" /> + </view> + </u-form-item> + </u--form> + </view> </view> </view> </view> </view> </template> <script> -export default { - props: { - basicInfor: { - type: Object, - default: ()=> {} - }, - }, - data() { - return { - polluteList: this.$storage.getJson('polluteList'), - unitList: this.$storage.getJson('unitList'), - dictObj: this.$storage.getJson('dictObj'), - fileList: [], - baseUrl: this.$storage.get('baseUrl'), - } - }, - computed: { - unitName(){ - let data ={} - if(this.basicInfor.unitId){ - data=this.unitList&& this.unitList.find( - (a)=> parseInt(a.unitId) === this.basicInfor.unitId - ) - console.log('nnnnnn', this.unitList) - console.log('nnnnnn', this.basicInfor.unitId) - - } - return data.unitName || '' - }, - escalationUnitName(){ - let data ={} - if(this.basicInfor.unitId){ - data=this.unitList&& this.unitList.find( - (a)=> parseInt(a.unitId) === this.basicInfor.escalationUnitId - ) - console.log('nnnnnn', this.unitList) - console.log('nnnnnn', this.basicInfor.unitId) - - } - return data.unitName || '' - - }, - polluteType(){ - let data ={} - if(this.basicInfor.polluteType){ - data=this.polluteList.find( - (a)=> parseInt(a.dataKey) === this.basicInfor.polluteType - ) - } - return data.dataValue ||'' - } - }, - watch: { - basicInfor: { - handler: function(newValue, oldValue) { - // ������������������ - this.basicInfor=newValue + export default { + props: { + basicInfor: { + type: Object, + default: () => {} }, - deep: true - } - }, - onLoad: function (option) { - //option���object������������������������������������������������ - console.log(option) //��������������������������������������� - }, - mounted() { - if(this.basicInfor.fileBaseList&&this.basicInfor.fileBaseList.length>0){ - this.basicInfor.fileBaseList.forEach(item=> { - this.baseUrl='http://120.26.43.34:8081/api/' - let name = item.fileType === 1 ? 'name.png' : '' - this.fileList.push(`${this.baseUrl}/file/preview/${item.fileId}?${name}`) // ������ - this.fileList.push('http://120.26.43.34:8081/api//file/preview/145?name.png') // ������ - }) - console.log('this.fileList', this.basicInfor.fileBaseList) - console.log('this.fileList', this.fileList) - } - - }, - methods: {}, -} + }, + data() { + return { + polluteList: [], + unitList: [], + dictObj: JSON.parse(uni.getStorageSync('dictObj') || '[]'), + fileList: [], + baseUrl: this.$storage.get('baseUrl'), + } + }, + computed: { + unitName() { + let data = '' + if (this.basicInfor.unitId && this.unitList.length > 0) { + data = this.unitList && this.unitList.find(a => Number(a.unitId) === Number(this.basicInfor.unitId)) + .unitName + } + return data + }, + escalationUnitName() { + let data = '' + if (this.basicInfor.unitId && this.unitList.length > 0) { + data = this.unitList && this.unitList.find(a => Number(a.unitId) === Number(this.basicInfor + .escalationUnitId)).unitName + } + return data + }, + polluteType() { + let data = '' + console.log('this.polluteList', this.polluteList) + console.log('this.basicInfor.polluteType', this.basicInfor.polluteType) + if (String(this.basicInfor.polluteType) && this.polluteList.length > 0) { + data = this.polluteList.find(a => Number(a.dataKey) === Number(this.basicInfor.polluteType)).dataValue + } + console.log('data', data) + return data + } + }, + watch: { + basicInfor: { + handler: function(newValue, oldValue) { + // ������������������ + this.basicInfor = newValue + }, + deep: true + } + }, + onLoad: function(option) { + //option���object������������������������������������������������ + console.log(option) //��������������������������������������� + }, + created() { + this.getUnitList() + }, + mounted() { + // ������������������list + if (this.basicInfor.fileBaseList && this.basicInfor.fileBaseList.length > 0) { + this.basicInfor.fileBaseList.forEach(item => { + let name = item.fileType === 1 ? 'name.png' : '' + this.fileList.push(`${this.baseUrl}/file/preview/${item.fileId}?${name}`) // ������ + }) + console.log('this.basicInfor.fileList', this.basicInfor.fileBaseList) + console.log('this.fileList', this.fileList) + } + }, + methods: { + getUnitList() { + this.$http.httpGet('/allocation/unit').then(res => { + this.unitList = res.data + this.getContaminateList() + }) + }, + getContaminateList() { + this.$http.httpGet('/allocation/contaminate').then(res => { + this.polluteList = res.data + }) + }, + }, + } </script> - <style scoped lang="scss"> -/deep/.u-line { - margin: 19.23rpx 0px !important; -} -.workOrderDetail { - border: 1px solid #bbb; - border-radius: 5px; - min-height: 288.46rpx; - margin: 19.23rpx; - padding: 19.23rpx; - color: #101010; - font-weight: 700; - font-size: 26.92rpx; - .headerCont { - display: flex; - justify-content: space-between; - font-size: 15px; - } - .mainContent { - margin-bottom: 10px; - font-weight: 500; - .rowTip { - display: flex; - padding: 8px 0; - border-bottom: 1px dashed #bbb; - .wholeLine { - display: flex; - width: 100%; - align-items: center; - .rowTipContenetLabel { - min-width: 125rpx; - } - .rowTipContenetAll{ - width: calc(100% - 125rpx); - } - } + /deep/.u-line { + margin: 19.23rpx 0px !important; + } - .rowTipContenet { - width: 50%; - text-align: left; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - .butsName { - display: inline-block; - margin-left: 19.23rpx; - color: #1990ff; - } - } - } - .rowTipContenet_right { - text-align: right !important; - } - } -} -</style> + .workOrderDetail { + border: 1px solid #bbb; + border-radius: 5px; + min-height: 288.46rpx; + margin: 19.23rpx; + padding: 19.23rpx; + color: #101010; + font-weight: 700; + font-size: 30.77rpx; + + .headerCont { + display: flex; + justify-content: space-between; + font-size: 30.77rpx; + } + + .mainContent { + margin-bottom: 10px; + font-weight: 500; + + .rowTip { + display: flex; + padding: 5px 0; + border-bottom: 1px dashed #bbb; + + .wholeLine { + display: flex; + width: 100%; + align-items: center; + + .rowTipContenetLabel { + min-width: 144.23rpx; + font-size: 28.85rpx; + text-align: left; + } + + .rowTipContenetAll { + font-size: 28.85rpx; + width: calc(100% - 144.23rpx); + } + } + + .rowTipContenet { + width: 50%; + text-align: left; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + .butsName { + display: inline-block; + margin-left: 19.23rpx; + color: #1990ff; + } + } + } + + .rowTipContenet_right { + text-align: right !important; + } + } + } +</style> \ No newline at end of file diff --git a/pages/actionChange/components/commonUserTabBar.vue b/pages/actionChange/components/commonUserTabBar.vue new file mode 100644 index 0000000..1157205 --- /dev/null +++ b/pages/actionChange/components/commonUserTabBar.vue @@ -0,0 +1,41 @@ +<template> + <view class="tabarStyle"> + <u-tabbar :value="value" @change="name => value = name" :fixed="true" :placeholder="true" + :safeAreaInsetBottom="true"> + <u-tabbar-item text="������" @click="clickTo" icon="home"></u-tabbar-item> + <u-tabbar-item text="���������������" icon="plus-circle" @click="clickTo"></u-tabbar-item> + <u-tabbar-item text="������" icon="account" @click="clickTo"></u-tabbar-item> + </u-tabbar> + </view> +</template> +<script> + export default { + data() { + return { + value: 0, + } + }, + props: { + currIndex: { + type: String, + default: '0' + }, + }, + watch: { + currIndex(newValue, oldValue) { + console.log('currIndex', newValue) + this.value = Number(newValue) + } + }, + mounted() { + this.value = Number(this.currIndex) + }, + methods: { + clickTo(index) { + this.$emit('handleChangeTabe', index) + } + } + } +</script> +<style scoped lang="scss"> +</style> \ No newline at end of file diff --git a/pages/actionChange/components/fileUpload.vue b/pages/actionChange/components/fileUpload.vue index c9d6d82..72461e8 100644 --- a/pages/actionChange/components/fileUpload.vue +++ b/pages/actionChange/components/fileUpload.vue @@ -1,87 +1,79 @@ <template> <view class=""> - <cl-upload - v-model="fileList" - :action="uploadTermExcelUrl" - cloud-type="other" - :data="{ sysCode }" - :headers="hearder" - :image-form-data="{ + <cl-upload v-model="fileList" :action="uploadTermExcelUrl" cloud-type="other" :data="{ sysCode }" + :headers="hearder" :image-form-data="{ compress: true, - }" - :list-style="{ + }" :list-style="{ columns: 3, columnGap: '10rpx', rowGap: '10rpx', padding: '10rpx', radius: '20rpx' - }" - use-before-delete - @beforeDelete="beforeDelete" - @onSuccess="onSuccess" - /> + }" use-before-delete @beforeDelete="beforeDelete" @onSuccess="onSuccess" /> </cl-upload> </view> </template> - <script> -export default { - props: { - sysCode: { - type: String, + export default { + props: { + sysCode: { + type: String, + }, }, - }, - data() { - return { - fileList: [], - upLoadList: [], - beforFileList: [], - baseUrl: this.$storage.get('baseUrl'), - token: this.$storage.get('token'), - } - }, - computed: { - uploadTermExcelUrl() { - return `${this.baseUrl}/file/upload` || '' + data() { + return { + fileList: [], + upLoadList: [], + beforFileList: [], + baseUrl: this.$storage.get('baseUrl'), + token: '', + } }, - hearder() { - let obj = { token: this.token, Authorization: this.token } - return obj + created() { + this.token = uni.getStorageSync('tonken') + console.log('tonken', this.token) }, - }, - methods: { - onSuccess(res) { - console.log(res.data.fileId) - let fileId = res.data.fileId - let name = res.data.fileType === 1 ? 'name.png' : '' - this.fileList.push(`${this.baseUrl}/file/preview/${fileId}?${name}`) // ������ - this.upLoadList.push(res.data) - console.log(this.fileList) - this.$emit('handleFile', this.upLoadList) - }, - /** - * ��������������� - * @param {Object} item ��������������������������������������� - * @param {Number} index ������������������������������������ - * @param {Function} next ��������������������������������������������� - * */ - beforeDelete(item, index, next) { - - uni.showModal({ - title: '������������', - content: '���������������������������������', - success: res=> { - if (res.confirm) { - this.fileList.splice(index, 1) - this.upLoadList.splice(index, 1) - console.log('this.fileList', this.upLoadList) - this.$emit('handleFile', this.upLoadList) - } + computed: { + uploadTermExcelUrl() { + return `${this.baseUrl}/file/upload` || '' + }, + hearder() { + let obj = { + token: this.token, + Authorization: this.token } - }) + return obj + }, }, - }, -} + methods: { + onSuccess(res) { + let fileId = res.data.fileId + let name = res.data.fileType === 1 ? 'name.png' : '' + this.fileList.push(`${this.baseUrl}/file/preview/${fileId}?${name}`) // ������ + this.upLoadList.push(res.data) + this.$emit('handleFile', this.upLoadList) + }, + /** + * ��������������� + * @param {Object} item ��������������������������������������� + * @param {Number} index ������������������������������������ + * @param {Function} next ��������������������������������������������� + * */ + beforeDelete(item, index, next) { + uni.showModal({ + title: '������������', + content: '���������������������������������', + success: res => { + if (res.confirm) { + this.fileList.splice(index, 1) + this.upLoadList.splice(index, 1) + console.log('this.fileList', this.upLoadList) + this.$emit('handleFile', this.upLoadList) + } + } + }) + }, + }, + } </script> - -<style></style> +<style></style> \ No newline at end of file diff --git a/pages/actionChange/components/rectificationInfor.vue b/pages/actionChange/components/rectificationInfor.vue index 8f532aa..fad999f 100644 --- a/pages/actionChange/components/rectificationInfor.vue +++ b/pages/actionChange/components/rectificationInfor.vue @@ -8,38 +8,54 @@ <u-line color="#bbb" /> <view> <view class="mainContent"> - <u--form labelPosition="left" label-width="70" :model="form" :border-bottom="false" :rules="rules" + <u--form labelPosition="left" label-width="80" :model="form" :border-bottom="false" :rules="rules" ref="uForm"> - <view class="formItemContent"> - <u-form-item label="������������:" required :border-bottom="false"> - <view class="" v-if="pageState"> - {{ dictObj.yesOrNo[basicInfor.isChange] ||''}} + <view class="" v-if="pageState"> + <p class="rowTip"> + <view class="rowTipContenet"> + <view class="wholeLine"> + <text class="rowTipContenetLabel">������������:</text> + <text class="rowTipContenetAll"> + {{ dictObj.yesOrNo[basicInfor.isChange] ||''}} + </text> + </view> </view> - <u-radio-group v-else v-model="form.isChange" @change="radioGroupChange"> - <u-radio :key="index" v-for="(item, index) in list" - :custom-style="{marginRight: '8px'}" :label="item.name" :name="item.value" /> - </u-radio-group> - </u-form-item> + <view class="rowTipContenet"> + <view class="wholeLine"> + <text class="rowTipContenetLabel">���������:</text> + <text class="rowTipContenetAll">{{ basicInfor.changeName ||''}}</text> + </view> + </view> + </p> + </view> + <view class="" v-else> + <view class="formItemContent"> + <u-form-item label="������������:" :required="!pageState" :border-bottom="false"> + <u-radio-group v-model="form.isChange" @change="radioGroupChange"> + <u-radio :key="index" v-for="(item, index) in list" + :custom-style="{marginRight: '8px'}" :label="item.name" + :name="item.value" /> + </u-radio-group> + </u-form-item> + </view> + <view class="formItemContent"> + <u-form-item label="���������:" prop="changeName" :border-bottom="false" + :required="!pageState"> + <u-input v-model="form.changeName" border="none" placeholder="���������" type="text" /> + </u-form-item> + </view> </view> <view class="formItemContent"> - <u-form-item label="���������:" prop="changeName" :border-bottom="false" required> - <view class="" v-if="pageState"> - {{ basicInfor.changeName ||''}} - </view> - <u-input v-else v-model="form.changeName" border="none" placeholder="���������" type="text" /> - </u-form-item> - </view> - <view class="formItemContent"> - <u-form-item label="������������" prop="changeDescribe" :border-bottom="false" required> - <view class="" v-if="pageState"> + <u-form-item label="������������:" prop="changeDescribe" :border-bottom="false" + :required="!pageState"> + <view class="fonttest" v-if="pageState"> {{ basicInfor.changeDescribe ||''}} </view> - <u--textarea v-else v-model="form.changeDescribe" border="none" placeholder="���������������" /> + <u--textarea v-else v-model="form.changeDescribe" border="none" /> </u-form-item> </view> - <view class="formItemContent"> - <u-form-item label="������������" :border-bottom="false"> + <u-form-item label="������������:" :border-bottom="false"> <view class="fileBox" v-if="pageState"> <cl-upload v-model="fileList" :add="false" :action="`''`" cloud-type="other" :remove="false" /> @@ -86,20 +102,18 @@ return { sysCode: '1010202', list: [{ - name: '���', - value: 0, - }, - { - name: '���', - value: 1, - }, - ], + name: '���', + value: 0, + }, { + name: '���', + value: 1, + }, ], form: { isChange: 0, changeName: '', changeDescribe: '', }, - dictObj: this.$storage.getJson('dictObj'), + dictObj: JSON.parse(uni.getStorageSync('dictObj') || '[]'), fileList: [], fileBaseList: [], baseUrl: this.$storage.get('baseUrl'), @@ -147,23 +161,19 @@ return new Promise((resolve, reject) => { if (!this.pageState) { this.$refs.uForm.validate().then(res => { - resolve(true) - }) - .catch(errors => { - reject(false) - uni.$u.toast('������������') - }) + resolve(true) + }).catch(errors => { + reject(false) + uni.$u.toast('������������') + }) } else { resolve(true) } - - }); - + }) } }, } </script> - <style scoped lang="scss"> /deep/.u-line { margin: 19.23rpx 0px !important; @@ -172,17 +182,16 @@ .workOrderDetail { border: 1px solid #bbb; border-radius: 5px; - min-height: 288.46rpx; margin: 19.23rpx; padding: 19.23rpx; color: #101010; font-weight: 700; - font-size: 26.92rpx; + font-size: 30.77rpx; .headerCont { display: flex; justify-content: space-between; - font-size: 15px; + font-size: 30.77rpx; } .mainContent { @@ -190,7 +199,8 @@ font-weight: 500; .rowTip { - padding: 8px 0; + display: flex; + padding: 5px 0; border-bottom: 1px dashed #bbb; .wholeLine { @@ -199,12 +209,15 @@ align-items: center; .rowTipContenetLabel { - min-width: 125rpx; + min-width: 144.23rpx; + font-size: 28.85rpx; + text-align: left; } - } - .rowTipContenetAll { - width: calc(100% - 125rpx; ); + .rowTipContenetAll { + font-size: 28.85rpx; + width: calc(100% - 144.23rpx); + } } .rowTipContenet { @@ -226,38 +239,5 @@ text-align: right !important; } } - } - - .formItemContent { - /deep/.u-form-item { - padding: 8px 0; - border-bottom: 1px dashed #bbb; - } - - /deep/.u-form-item__body, - /deep/.u-textarea { - padding: 0 !important; - } - - /deep/.u-form-item__body__left__content__label, - /deep/.u-radio__text { - font-size: 13px !important; - } - } - - .fileBox { - display: -webkit-box; - display: -webkit-flex; - display: flex; - position: relative; - width: 100%; - height: 100%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - flex-direction: column; - -webkit-box-pack: center; - -webkit-justify-content: center; - justify-content: center; } </style> \ No newline at end of file diff --git a/pages/actionChange/components/userAvatar.vue b/pages/actionChange/components/userAvatar.vue new file mode 100644 index 0000000..d64eaca --- /dev/null +++ b/pages/actionChange/components/userAvatar.vue @@ -0,0 +1,67 @@ +<template> + <view class=""> + <u-modal :show="showUserSculpture" :title="title"> + <view class="slot-content"> + <view class=""> + <u-avatar :src="avatarUrl" size="60"></u-avatar> + </view> + </view> + <view class="" slot="confirmButton"> + <view class="confirmButton"> + <button type="primary" open-type="chooseAvatar" @chooseavatar="onChooseAvatar" plain="true" + style="border: none;position: relative;"> + <image :src="avatar" mode="aspectFill" + style="width: 150rpx;height: 150rpx;border-radius: 20rpx;" v-if="avatar"> + </image> + <image src="../../static/home/noavatar.jpg" mode="aspectFill" + style="width: 150rpx;height: 150rpx;border-radius: 20rpx;" v-else></image> + <view class="tips">������������������</view> + </button> + <button type="primary" open-type="chooseAvatar" @chooseavatar="onChooseAvatar" plain="true" + style="border: none;position: relative; width: 200px;"> + <u-button text="������" class="buts"></u-button> </button> + <button type="primary" plain="true" style="border: none;position: relative; width: 200px;"> + <u-button text="������" class="buts"></u-button> + </button> + </view> + </view> + </u-modal> + </view> +</template> +<script> + export default { + props: { + showUserSculpture: { + type: Boolean, + default: false + }, + }, + data() { + return { + title: '������������', + avatarUrl: '' + } + }, + methods: { + onChooseAvatar(e) { + const { + avatarUrl + } = e.detail // ������������������������������������������������������������������������ + this.avatarUrl = avatarUrl + } + } + } +</script> +<style lang="scss" scoped> + .slot-content { + display: flex; + width: 100%; + align-items: center; + flex-wrap: wrap; + justify-content: center; + } + + .confirmButton { + display: flex; + } +</style> \ No newline at end of file diff --git a/pages/actionChange/myInfor/index.vue b/pages/actionChange/myInfor/index.vue index b63dc6c..a186dec 100644 --- a/pages/actionChange/myInfor/index.vue +++ b/pages/actionChange/myInfor/index.vue @@ -2,11 +2,11 @@ <view class="mainContent"> <view class="headerAvatar"> <view class=""> - <u-avatar :text="firstFont" fontSize="40" randomBgColor size='100'></u-avatar> + <u-avatar :src="avatarUrl" fontSize="40" randomBgColor size='100'></u-avatar> </view> </view> <view class="inforBox"> - <u-cell-group> + <u-cell-group :custom-style='fontStyleobj'> <u-cell icon="server-man" title="������" :value="userInfor.userName"></u-cell> <u-cell icon="account-fill" title="������" :value="userInfor.account"></u-cell> <u-cell icon="integral-fill" title="������������" :value="unitName"></u-cell> @@ -19,38 +19,49 @@ </view> </template> <script> - import { - created - } from '../../../uni_modules/uview-ui/libs/mixin/mixin' + import store from '@/store/index.js' export default { data() { return { loading: false, userInfor: {}, - unitList: [] + avatarUrl: '', + unitList: [], + fontStyleobj: { + 'fontSize': '16px' + } } }, computed: { unitName() { let data = '' - if (this.unitList.length > 0) { - data = this.unitList.find(a => parseInt(a.unitId) === this.userInfor.unitId).unitName + if (Object.values(this.userInfor).length > 0 && this.unitList.length > 0) { + if (this.userInfor.unitId) { + data = this.unitList.find(a => parseInt(a.unitId) === this.userInfor.unitId).unitName + } } return data || '' }, - firstFont() { - return this.userInfor.userName[0] || '���' - } + // firstFont() { + // let data = '' + // if (Object.values(this.userInfor).length > 0) { + // data = this.userInfor.userName[0] + // } + // return data || '���' + // } }, created() { this.$http.httpGet('/allocation/unit').then(res => { this.unitList = res.data }) - this.userInfor = this.$storage.getJson('userInfo') - console.log('userInfor', this.userInfor.userName[0]) + this.userInfor = JSON.parse(uni.getStorageSync('userInfor') || '{}') + console.log('this.userInforGet', this.userInfor) + let baseUrl = this.$storage.get('baseUrl') + this.avatarUrl = `${baseUrl}/file/preview/${this.userInfor.file.fileId}` }, methods: { goOut() { + let openId = uni.getStorageSync('openId') uni.showModal({ title: '������', content: '������������������', @@ -60,10 +71,11 @@ userId: this.userInfor.userId }).then(res => { uni.clearStorageSync() + uni.setStorageSync('openId', openId) uni.reLaunch({ url: '/pages/login/login', }) - }).catch(uni.$u.toast('������������')) + }) } } }) @@ -88,4 +100,9 @@ .bunts { margin-top: 57.69rpx; } + + /deep/ .u-cell__title-text, + /deep/.u-cell__value { + font-size: 30.77rpx !important; + } </style> \ No newline at end of file diff --git a/pages/actionChange/newPage/index.vue b/pages/actionChange/newPage/index.vue index e33c5bf..e84ee88 100644 --- a/pages/actionChange/newPage/index.vue +++ b/pages/actionChange/newPage/index.vue @@ -1,173 +1,61 @@ <template> <view class="mianContent"> <p class="title">������������</p> - <u-form - ref="uForm" - label-width="65" - :model="form" - :rules="rules" - > - <u-form-item - border-bottom - label="������������:" - prop="unitId" - required - @click=" + <u-form ref="uForm" label-width="80" :model="form" :rules="rules" :labelStyle="labelStyle"> + <u-form-item border-bottom label="������������:" prop="escalationTime" required @click="showeEscalationTime = true"> + <u-input v-model="form.escalationTime" border="none" disabled disabled-color="#ffffff" placeholder="���������" + type="select" /> + <u-icon slot="right" name="arrow-right" /> + <u-datetime-picker ref="datetimePicker" v-model="timeFormet" mode="date" :show="showeEscalationTime" + @confirm="checkTime" @cancel='showeEscalationTime=false' /> + </u-form-item> + <u-form-item border-bottom label="������������:" prop="pollutePosition" required> + <u-input v-model="form.pollutePosition" border="none" placeholder="���������" type="text" /> + </u-form-item> + <u-form-item border-bottom label="������������:" prop="unitId" required @click=" showCheckBox = true; hideKeyboard('unitList', 'unitId'); - " - > - <u--input - v-model="form.unitId" - border="none" - disabled - disabled-color="#ffffff" - placeholder="���������" - /> + "> + <u--input v-model="form.unitId" border="none" disabled disabled-color="#ffffff" placeholder="���������" /> <u-icon slot="right" name="arrow-right" /> </u-form-item> - - <u-form-item - border-bottom - label="������������:" - prop="polluteType" - required - @click=" + <u-form-item border-bottom label="������������:" prop="polluteType" required @click=" showCheckBox = true; hideKeyboard('polluteList', 'polluteType'); - " - > - <u-input - v-model="form.polluteType" - border="none" - disabled - disabled-color="#ffffff" - placeholder="���������" - type="select" - /> + "> + <u-input v-model="form.polluteType" border="none" disabled disabled-color="#ffffff" placeholder="���������" + type="select" /> <u-icon slot="right" name="arrow-right" /> </u-form-item> - <u-form-item - border="none" - border-bottom - label="������������:" - prop="changeType" - required - @click=" + <u-form-item border="none" border-bottom label="������������:" prop="changeType" required @click=" showCheckBox = true; hideKeyboard('changeEnum', 'changeType'); - " - > - <u-input - v-model="form.changeType" - border="none" - disabled - disabled-color="#ffffff" - placeholder="���������" - type="select" - /> + "> + <u-input v-model="form.changeType" border="none" disabled disabled-color="#ffffff" placeholder="���������" + type="select" /> <u-icon slot="right" name="arrow-right" /> </u-form-item> - <u-form-item - border-bottom - label="������������:" - placeholder="���������" - required - > + <u-form-item border-bottom label="������������:" placeholder="���������" required> <u-input v-model="form.changeDay" border="none" type="number" /> </u-form-item> - <u-form-item - border-bottom - label="������������:" - prop="escalationUnitId" - required - @click=" + <u-form-item border-bottom label="������������:" prop="escalationUnitId" required @click=" showCheckBox = true; hideKeyboard('unitList', 'escalationUnitId'); - " - > - <u-input - v-model="form.escalationUnitId" - border="none" - disabled - disabled-color="#ffffff" - placeholder="���������" - type="select" - /> + "> + <u-input v-model="form.escalationUnitId" border="none" disabled disabled-color="#ffffff" + placeholder="���������" type="select" /> <u-icon slot="right" name="arrow-right" /> </u-form-item> - <u-form-item - border-bottom - label="���������:" - prop="escalationName" - required - > - <u-input - v-model="form.escalationName" - border="none" - placeholder="���������" - type="text" - /> + <u-form-item border-bottom label="���������:" prop="escalationName" required> + <u-input v-model="form.escalationName" border="none" placeholder="���������" type="text" /> </u-form-item> - <u-form-item - border-bottom - label="������������:" - prop="investigationType" - required - > + <u-form-item border-bottom label="������������:" prop="investigationType" required> <u-radio-group v-model="form.investigationType" style="font-size: 13px;"> - <u-radio - :key="index" - v-for="(item, index) in Dic.investigationEnum" - :custom-style="{marginRight: '8px'}" - :label="item.name" - :name="item.value" - /> + <u-radio :key="index" v-for="(item, index) in Dic.investigationEnum" + :custom-style="{marginRight: '8px'}" :label="item.name" :name="item.value" /> </u-radio-group> </u-form-item> - <u-form-item - border-bottom - label="������������:" - prop="escalationTime" - required - @click="showeEscalationTime = true" - > - <u-input - v-model="form.escalationTime" - border="none" - disabled - disabled-color="#ffffff" - placeholder="���������" - type="select" - /> - <u-icon slot="right" name="arrow-right" /> - <u-datetime-picker - ref="datetimePicker" - v-model="timeFormet" - mode="date" - :show="showeEscalationTime" - @confirm="checkTime" - /> - </u-form-item> - <u-form-item - border-bottom - label="������������:" - prop="pollutePosition" - required - > - <u-input - v-model="form.pollutePosition" - border="none" - placeholder="���������" - type="text" - /> - </u-form-item> - <u-form-item - border-bottom - label="������������:" - prop="problemDescribe" - required - > + <u-form-item border-bottom label="������������:" prop="problemDescribe" required> <u--textarea v-model="form.problemDescribe" border="none" placeholder="���������������" /> </u-form-item> <u-form-item border-bottom label="������������:"> @@ -176,185 +64,230 @@ </view> </u-form-item> </u-form> - <u-action-sheet - v-if="actionOptionList.length > 0" - :actions="actionOptionList" - :show="showCheckBox" - title="���������" - @close="showCheckBox = false" - @select="selectBack" - /> + <u-picker :show="showCheckBox" keyName="label" :columns="actionOptionList" @cancel="showCheckBox = false" + @confirm="selectBack"></u-picker> + <!-- <u-action-sheet v-if="actionOptionList.length > 0" :actions="actionOptionList" :show="showCheckBox" title="���������" + @close="showCheckBox = false" @select="selectBack" /> --> <view class="bunts"> - <u-button shape="square" @click="close">������</u-button> - <u-button shape="square" type="primary" @click="submit">������</u-button> + <view class="but butRight"> + <u-button shape="square" @click="close">������</u-button> + </view> + <view class="but butleft"> + <u-button shape="square" type="primary" @click="submit">������</u-button> + </view> </view> </view> </template> - <script> -import fileUpload from '../components/fileUpload.vue' -export default { - components: { - fileUpload - }, - data() { - return { - sysCode: '1010201', // - showCheckBox: false, - showeEscalationTime: false, - actionOptionList: [], - rules: { - 'unitId': { - required: true, - message: '���������', - trigger: ['blur', 'change'] - }, - 'polluteType': { - required: true, - message: '���������', - trigger: ['blur', 'change'] - }, - 'changeType': { - required: true, - message: '���������', - trigger: ['blur', 'change'] - }, - 'changeDay': { - required: true, - message: '���������', - trigger: ['blur', 'change'] - }, - 'escalationName': { - required: true, - message: '���������', - trigger: ['blur'] - }, - 'escalationUnitId': { - required: true, - message: '���������', - trigger: ['blur', 'change'] - }, - 'escalationTime': { - required: true, - message: '���������', - trigger: ['blur'] - }, 'problemDescribe': { - required: true, - message: '���������', - trigger: ['blur'] - }, 'pollutePosition': { - required: true, - message: '���������', - trigger: ['blur'] - }, - }, - currentKey: '', - Dic: this.$storage.getJson('dict'), - changeEnum: [], - timeFormet: Number(new Date()), - form: { - unitId: '', - polluteType: '', - changeType: '', - changeDay: '', - escalationName: '', - escalationUnitId: '', - escalationTime: '', - problemDescribe: '', - pollutePosition: '', - }, - sumbitForm: { - unitId: '', - polluteType: '', - changeType: '', - changeDay: '', - escalationName: '', - escalationUnitId: '', - escalationTime: '', - problemDescribe: '', - pollutePosition: '', - }, - unitList: [], - polluteList: [], - fileBaseList: [], - } - }, - onReady() { - //onReady ���uni-app��������������������������� - this.$refs.uForm.setRules(this.rules) - }, - onShow(){ - uni.hideTabBar() - }, - created() { - this.changeEnum = this.Dic.changeEnum - this.getUnitList() - this.getContaminateList() - }, - methods: { - handleFile(data){ - this.fileBaseList=data + import fileUpload from '../components/fileUpload.vue' + export default { + components: { + fileUpload }, - close(){ - uni.reLaunch({ - url: '/pages/actionChange/agencyPage/index', + data() { + return { + sysCode: '1010201', // + showCheckBox: false, + labelStyle: { + fontSize: '30.77rpx' + }, + showeEscalationTime: false, + actionOptionList: [], + rules: { + 'unitId': { + required: true, + message: '���������', + trigger: ['blur', 'change'] + }, + 'polluteType': { + required: true, + message: '���������', + trigger: ['blur', 'change'] + }, + 'changeType': { + required: true, + message: '���������', + trigger: ['blur', 'change'] + }, + 'changeDay': { + required: true, + message: '���������', + trigger: ['blur', 'change'] + }, + 'escalationName': { + required: true, + message: '���������', + trigger: ['blur'] + }, + 'escalationUnitId': { + required: true, + message: '���������', + trigger: ['blur', 'change'] + }, + 'escalationTime': { + required: true, + message: '���������', + trigger: ['blur'] + }, + 'problemDescribe': { + required: true, + message: '���������', + trigger: ['blur'] + }, + 'pollutePosition': { + required: true, + message: '���������', + trigger: ['blur'] + }, + }, + currentKey: '', + Dic: [], + changeEnum: [], + timeFormet: Number(new Date()), + form: { + unitId: '', + polluteType: '', + changeType: '', + changeDay: '', + escalationName: '', + escalationUnitId: '', + escalationTime: '', + problemDescribe: '', + pollutePosition: '', + }, + sumbitForm: { + unitId: '', + polluteType: '', + changeType: '', + changeDay: '', + escalationName: '', + escalationUnitId: '', + escalationTime: '', + problemDescribe: '', + pollutePosition: '', + }, + unitList: [], + polluteList: [], + fileBaseList: [], + } + }, + onReady() { + //onReady ���uni-app��������������������������� + this.$refs.uForm.setRules(this.rules) + }, + onShow() { + uni.hideTabBar() + }, + created() { + this.getUnitList() + this.getContaminateList() + }, + onBackPress(e) { + uni.navigateBack({ + delta: 1, //������������������������������������������2 }) + return false }, - hideKeyboard(data, key) { - this.actionOptionList = [] - let list = this[data] - - this.currentKey = key - list.forEach((item)=> { - item.name = item.dataValue || item.name || item.unitName - item.value = item.dataKey || item.value|| item.unitId - }) - - this.actionOptionList = list - }, - selectBack(e) { - this.form[this.currentKey] = e.name - this.sumbitForm[this.currentKey] = e.value - - }, - checkTime(e) { - this.showeEscalationTime = false - let data = this.$utils.dateFormatter(e.value) - this.form.escalationTime = data - this.sumbitForm.escalationTime = data - }, - submit() { - this.$refs.uForm.validate().then(res=> { - this.sumbitForm.problemDescribe=this.form.problemDescribe - this.sumbitForm.pollutePosition=this.form.pollutePosition - this.sumbitForm.changeDay=this.form.changeDay - this.sumbitForm.escalationName=this.form.escalationName - this.sumbitForm.fileBaseList=this.fileBaseList - this.sumbitForm.state='10' - console.log('this.sumbitForm', this.sumbitForm) - this.$http.httpPost('/allocation/insert', {...this.sumbitForm}).then((res)=> { - uni.$u.toast('������������') - this.close() + methods: { + handleFile(data) { + this.fileBaseList = data + }, + close() { + uni.$emit('currIndex', { + data: { + index: '0', + showTabBar: true + } }) - }).catch(errors=> { - uni.$u.toast('������������') - }) + uni.navigateBack({ + delta: 1, //������������������������������������������2 + }) + }, + hideKeyboard(data, key) { + this.actionOptionList = [] + let list = this[data] + this.currentKey = key + list.forEach(item => { + item.label = item.dataValue || item.name || item.unitName + item.id = item.dataKey || item.value || item.unitId + }) + console.log('list', list) + this.$set(this.actionOptionList, 0, list) + }, + selectBack(e) { + console.log(e) + this.form[this.currentKey] = e.value[0].label + this.sumbitForm[this.currentKey] = e.value[0].id + this.showCheckBox = false + }, + checkTime(e) { + this.showeEscalationTime = false + let data = this.$utils.dateFormatter(e.value) + console.log('e.value', e.value) + this.form.escalationTime = data + this.sumbitForm.escalationTime = data + }, + submit() { + this.$refs.uForm.validate().then(res => { + this.sumbitForm.problemDescribe = this.form.problemDescribe + this.sumbitForm.pollutePosition = this.form.pollutePosition + this.sumbitForm.changeDay = this.form.changeDay + this.sumbitForm.escalationName = this.form.escalationName + this.sumbitForm.investigationType = this.form.investigationType + this.sumbitForm.fileBaseList = this.fileBaseList + this.sumbitForm.state = '20' + console.log('this.sumbitForm', this.sumbitForm) + this.$http.httpPost('/allocation/insert', { + ...this.sumbitForm + }).then(res => { + uni.$u.toast('������������') + this.close() + }) + }).catch(errors => { + uni.$u.toast('������������') + }) + }, + setDefaultValue() { + let time = new Date().getTime() + let data = this.$utils.dateFormatter(time) + this.form.escalationTime = data + this.sumbitForm.escalationTime = data + if (this.changeEnum.length > 0) { + this.form.changeType = this.changeEnum[0].name + this.sumbitForm.changeType = this.changeEnum[0].value + } + let userInfor = JSON.parse(uni.getStorageSync('userInfor') || '{}') + if (userInfor.unitId && this.unitList.length > 0) { + let data = this.unitList && this.unitList.find(a => Number(a.unitId) === Number(userInfor.unitId)) + .unitName + this.form.unitId = data + this.sumbitForm.unitId = userInfor.unitId + this.form.escalationUnitId = data + this.sumbitForm.escalationUnitId = userInfor.unitId + } + this.form.escalationName = userInfor.name || '' + this.sumbitForm.escalationName = userInfor.name || '' + this.form.investigationType = 1 + this.sumbitForm.investigationType = 1 + console.log('this.sumbitForm', this.sumbitForm) + }, + // ������������������list + getUnitList() { + this.$http.httpGet('/allocation/unit').then(res => { + this.unitList = res.data + this.Dic = JSON.parse(uni.getStorageSync('dict') || '[]') + this.changeEnum = this.Dic.changeEnum + this.setDefaultValue() + }) + }, + getContaminateList() { + this.$http.httpGet('/allocation/contaminate').then(res => { + this.polluteList = res.data + }) + }, }, - // ������������������list - getUnitList() { - this.$http.httpGet('/allocation/unit').then((res)=> { - this.unitList = res.data - }) - }, - getContaminateList() { - this.$http.httpGet('/allocation/contaminate').then((res)=> { - this.polluteList = res.data - }) - }, - }, -} + } </script> - <style scoped lang="scss"> uni-page-body { padding-top: 10px; @@ -363,6 +296,8 @@ .mianContent { margin: 19.23rpx; border-radius: 5px; + padding-bottom: 38.46rpx; + .title { padding: 9.62rpx; font-size: 16px; @@ -375,24 +310,38 @@ padding-left: 10px; } - /deep/.u-form-item__body { - padding: 5px 0px !important; - font-size: 13px!important; - } - /deep/.u-form-item__body__left__content__label,/deep/.u-input__content__field-wrapper__field,/deep/.u-radio__text{ - font-size: 13px!important; - } + // /deep/.u-form-item__body { + // padding: 8px 0px !important; + // font-size: 15px !important; + // } + // /deep/.u-form-item__body__left__content__label, + // /deep/.u-input__content__field-wrapper__field, + // /deep/.u-radio__text { + // font-size: 15px !important; + // } } + .bunts { display: flex; margin-top: 20px; margin-bottom: 96.15rpx; - padding-bottom: 20px; - .u-button { - width: 288.46rpx; + padding: 0 20px; + justify-content: center; + + .but { + width: 50%; + } + + .butRight { + padding-right: 20px; + } + + .butleft { + padding-left: 20px; } } - .fileBox{ + + .fileBox { display: -webkit-box; display: -webkit-flex; display: flex; diff --git a/pages/actionChange/workOrderDetails/index.vue b/pages/actionChange/workOrderDetails/index.vue index 1e79165..9feaf22 100644 --- a/pages/actionChange/workOrderDetails/index.vue +++ b/pages/actionChange/workOrderDetails/index.vue @@ -1,93 +1,110 @@ <template> <view class="mainContent"> <basicInfor :basic-infor="basicInfor" /> - <rectificationInfor ref="rectificationInfor" :basic-infor="basicInfor" /> + <rectificationInfor ref="rectificationInfor" :basic-infor="basicInfor" + v-if="!(pageState === 'view' && basicInfor.state === 20)" /> <approvalnfor ref="approvalnfor" v-if="basicInfor.state >= 30" :basic-infor="basicInfor" /> <view class="bunts"> - <u-button shape="square" @click="close">������</u-button> - <u-button - v-if="pageState==='edit'" - shape="square" - type="primary" - @click="submit" - > - ������ - </u-button> + <view class="but butRight"> + <u-button shape="square" @click="refuse" type="error" + v-if="pageState==='edit'&& basicInfor.state >= 30">������</u-button> + <u-button shape=" square" @click="close" v-else>������</u-button> + </view> + <view class="but butleft" v-if="pageState==='edit'"> + <u-button shape="square" type="primary" @click="submit"> ������ </u-button> + </view> </view> </view> </template> <script> -import basicInfor from '../components/basicInfor.vue' -import rectificationInfor from '../components/rectificationInfor.vue' -import approvalnfor from '../components/approvalnfor.vue' -export default { - components: { - basicInfor, - rectificationInfor, - approvalnfor, - }, - data() { - return { - basicInfor: {} - } - }, - computed: { - pageState() { - return this.basicInfor.pageState - } - }, - onLoad: function(option) { - console.log('option', option) - //option���object������������������������������������������������ - this.basicInfor = JSON.parse(option.infor) - - }, - onBackPress(e) { - uni.navigateTo({ - url: '/pages/actionChange/agencyPage/index', - }) - return false - }, - methods: { - radioGroupChange(e) { - console.log('radioGroupe���e', this.workForme.isChange) + import basicInfor from '../components/basicInfor.vue' + import rectificationInfor from '../components/rectificationInfor.vue' + import approvalnfor from '../components/approvalnfor.vue' + export default { + components: { + basicInfor, + rectificationInfor, + approvalnfor, }, - close() { - let pages = getCurrentPages() // ������������ - let beforePage = pages[pages.length - 3] // ������������ - //beforePage.$vm.reFresh = Math.random()//������������������������ + data() { + return { + basicInfor: {} + } + }, + computed: { + pageState() { + return this.basicInfor.pageState + } + }, + onLoad: function(option) { + console.log('option', option) + //option���object������������������������������������������������ + this.basicInfor = JSON.parse(option.infor) + }, + onBackPress(e) { uni.navigateBack({ delta: 1, //������������������������������������������2 - success: function() { - // beforePage.$vm.reFresh() - } }) + return false }, - submit() { - Promise.all([this.$refs.rectificationInfor && this.$refs.rectificationInfor.formVali(), this.$refs - .approvalnfor && this.$refs.approvalnfor.formVali() - ]) // - .then(()=> { - let api = this.basicInfor.state >= 30 ? '/allocation/check' : '/allocation/change' //������ - let form = this.basicInfor.state >=30 ? this.$refs.approvalnfor.form : this.$refs.rectificationInfor.form - let data = { - allocationId: this.basicInfor.allocationId, - ...form, - state: this.basicInfor.state, + methods: { + radioGroupChange(e) { + console.log('radioGroupe���e', this.workForme.isChange) + }, + close() { + uni.$emit('currIndex', { + data: { + index: '0', + showTabBar: true } - this.$http.httpPost(api, data).then((res)=> { - this.close() + }) + uni.navigateBack({ + delta: 1, //������������������������������������������2 + }) + }, + refuse() { + Promise.all([this.$refs.rectificationInfor && this.$refs.rectificationInfor.formVali(), this.$refs + .approvalnfor && this.$refs.approvalnfor.formVali() + ]) // + .then(() => { + let api = this.basicInfor.state >= 30 ? '/allocation/check' : '/allocation/change' //������ + let form = this.basicInfor.state >= 30 ? this.$refs.approvalnfor.form : this.$refs + .rectificationInfor.form + let data = { + allocationId: this.basicInfor.allocationId, + ...form, + state: 50, + } + this.$http.httpPost(api, data).then(res => { + this.close() + }) + }).catch(err => { + console.log('���������������', err) }) - }) - .catch(err=> { - console.log('���������������������', err) - }) - - } - }, -} + }, + submit() { + Promise.all([this.$refs.rectificationInfor && this.$refs.rectificationInfor.formVali(), this.$refs + .approvalnfor && this.$refs.approvalnfor.formVali() + ]) // + .then(() => { + let api = this.basicInfor.state >= 30 ? '/allocation/check' : '/allocation/change' //������ + let form = this.basicInfor.state >= 30 ? this.$refs.approvalnfor.form : this.$refs + .rectificationInfor.form + let data = { + allocationId: this.basicInfor.allocationId, + ...form, + state: this.basicInfor.state === 20 ? 30 : 40, + } + this.$http.httpPost(api, data).then(res => { + this.close() + }) + }).catch(err => { + console.log('���������������', err) + }) + } + }, + } </script> - <style scoped lang="scss"> .mainContent { padding-bottom: 38.46rpx; @@ -98,9 +115,18 @@ margin-top: 20px; margin-bottom: 96.15rpx; padding: 0 20px; + justify-content: center; - .u-button { - width: 288.46rpx; + .but { + width: 50%; + } + + .butRight { + padding-right: 20px; + } + + .butleft { + padding-left: 20px; } } </style> \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index 6445b39..bc74e39 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,5 +1,76 @@ -<template /> - -<script></script> - -<style></style> +<template> + <view class="newIndex"> + <uni-nav-bar backgroundColor='#000' color='#fff' statusBar :border='false' fixed :title="title" /> + <u-loading-page :loading="loading"></u-loading-page> + <agencyPage v-if="isShow" ref="agencyPage"></agencyPage> + <myInfor v-if="!isShow"></myInfor> + <tabBar v-if="showTabBar" @handleChangeTabe='handleChangeTabe' :currIndex='currIndex'></tabBar> + </view> +</template> +<script> + import agencyPage from '@/pages/actionChange/agencyPage/index.vue' + import myInfor from '@/pages/actionChange/myInfor/index.vue' + import tabBar from '@/pages/actionChange/components/commonUserTabBar.vue' + export default { + data() { + return { + isShow: true, + loading: true, + showTabBar: true, + token: '', + currIndex: '0', + title: '������' + } + }, + components: { + agencyPage, + myInfor, + tabBar + }, + onLoad(option) {}, + onReady() {}, + onShow() { + this.currIndex = '0' + this.showTabBar = true + }, + async mounted() { + //������������������ + await this.$onLaunched + this.token = uni.getStorageSync('tonken') + console.log('indextoken', this.token) + this.loading = false + this.getData() + uni.$on('currIndex', data => { + console.log('currIndexOn', data) + this.currIndex = data.data.index + this.showTabBar = data.data.showTabBar + this.$refs.agencyPage.getContaminateList() + }) + }, + methods: { + getData() { + console.log('indextokengetContaminateList') + this.$refs.agencyPage.getContaminateList() + }, + handleChangeTabe(index) { + if (index === 2) { + this.isShow = false + this.title = '������' + } + if (index === 0) { + this.isShow = true + this.$nextTick(() => { + this.getData() + }) + } + if (index === 1) { + uni.navigateTo({ + url: '/pages/actionChange/newPage/index' + }) + this.showTabBar = false + } + } + } + } +</script> +<style></style> \ No newline at end of file diff --git a/pages/login/login.vue b/pages/login/login.vue index 147529c..04a8c27 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -21,11 +21,11 @@ </u-form> </view> <view class="loginContent"> - <p> + <!-- <p> <navigator style="display: inline-block;" url="/pages/login/register/register"> <text style="text-decoration: underline">������������</text> </navigator> - </p> + </p> --> <u-button @click="submit">������</u-button> </view> </view> @@ -34,19 +34,20 @@ <script> import { login, - getUserInfor, getDic } from '@/utils/login.js' // ������������ import { httpPost, httpGet } from '@/utils/http.js' + import store from '@/store/index.js' export default { data() { return { labelStyle: { color: '#fff' }, + title: '������������', passwordIcon: false, form: { account: '', @@ -71,38 +72,48 @@ //onReady ���uni-app��������������������������� this.$refs.uForm.setRules(this.rules) }, + async onLoad(option) { + //������������������ + await this.$onLaunched + // ������������������ + }, + async onShow() { + uni.hideHomeButton() + }, methods: { submit() { this.$refs.uForm.validate().then(res => { this.getlogin() - }).catch(errors => { - uni.$u.toast('������������') - }) + }).catch(errors => {}) }, //������ getlogin() { - let openId = this.$storage.get('openId') + const value = uni.getStorageSync('openId') + console.log('openId', value) + if (value) { + this.logining(value) + console.log('openId', openId) + } + }, + logining(openId) { login({ ...this.form, openId }).then(response => { - this.$storage.set('token', response.data.token) + uni.setStorageSync('userInfor', JSON.stringify(response.data)) + uni.setStorageSync('tonken', response.data.token) getDic() - getUserInfor(response.data.token) uni.hideLoading() - uni.switchTab({ - url: '/pages/actionChange/agencyPage/index', + uni.navigateTo({ + url: '/pages/index/index', }) - // this.$storage.setJson("accountInFor", this.form); - // console.log('this.$store', this.$store) - // this.$store.commit('token', token) }).catch(errors => { uni.showToast({ title: errors, icon: 'none', }) }) - }, + } }, } </script> diff --git a/store/index.js b/store/index.js index 293363c..3d8198f 100644 --- a/store/index.js +++ b/store/index.js @@ -1,7 +1,39 @@ import Vue from 'vue' import Vuex from 'vuex' -import modules from './modules/index.js' Vue.use(Vuex) - -const store = new Vuex.Store(modules) -export default store +const store = new Vuex.Store({ + state: { + userInfor: {}, + tonken: '', + dictObj: {}, + dict: null + }, + mutations: { + setUserInfor(state, data) { + state.userInfor = data + // ������������������ + uni.setStorageSync('userInfor', JSON.stringify(data)) //������������������������������ + }, + setDictObj(state, data) { + state.dictObj = data + // ������������������ + uni.setStorageSync('dictObj', JSON.stringify(data)) //������������������������������ + }, + setDict(state, data) { + state.dict = data + // ������������������ + uni.setStorageSync('dict', JSON.stringify(data)) //������������������������������ + }, + setTonken(state, data) { + state.tonken = data + // ������������������ + uni.setStorageSync('tonken', data) + }, + }, + actions: { + getUserInfo(context, data) { + context.commit('userInfor', data) + } + }, +}) +export default store \ No newline at end of file diff --git a/store/modules/index.js b/store/modules/index.js deleted file mode 100644 index b32b44c..0000000 --- a/store/modules/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import _ from 'lodash' - -const files = require.context('.', false, /\.js$/) -const modules = {} - -files.keys().forEach(key => { - if (key === './index.js') return - _.mergeWith(modules,files(key).default) -}) -export default modules diff --git a/store/modules/user.js b/store/modules/user.js deleted file mode 100644 index 166094c..0000000 --- a/store/modules/user.js +++ /dev/null @@ -1,111 +0,0 @@ -import Vue from "vue"; -export default { - state: { - user: null, - tonken:'' - }, - mutations: { - login(state, user) { - state.user = user; - // ������������������ - Vue.prototype.$cache.set("_userInfo", user, 0); - }, - tonken(state, data) { - state.tonken = data; - // ������������������ - Vue.prototype.$cache.set("state",tonken,0); - }, - logout(state) { - state.user = null; - // ������������������������ - Vue.prototype.$cache.delete("_userInfo"); - }, - }, - actions: { - autoLogin({ commit, getters, dispatch }) { - console.log('Vue.prototype.$storage',Vue.prototype.$storage.get("tonken")) - let tonken = Vue.prototype.$storage.get("tonken"); - console.log("tonken", tonken); - // ��������������������������������������������������������������������� - if (tonken) { - const params = { - account: accountInFor.account, - password: accountInFor.password, - }; - uni.showLoading({ - title: "���������������...", - }); - dispatch("login", params) - .then((res) => { - uni.hideLoading(); - // uni.showToast({ - // title: '������������������', - // icon: 'success' - // }) - }) - .catch(() => { - uni.hideLoading(); - uni.showToast({ - title: "���������������������������������", - icon: "none", - }); - setTimeout(() => { - uni.reLaunch({ - url: "/pages/login/login", - }); - }, 1000); - }); - } else { - // ������������������������������������������������������������ - uni.showModal({ - title: "���������", - content: "������������������������������������������", - showCancel: false, - confirmText: "������", - success: (res) => { - if (res.confirm) { - uni.reLaunch({ - url: "/pages/login/login", - }); - } - }, - }); - } - }, - login({ commit }, params) { - return new Promise((resolve, reject) => { - Vue.prototype.$login - .login(params) - .then((res) => { - if (res.ok()) { - console.log(response); - this.$storage.set("token", response.data.token); - this.$storage.setJson("accountInFor", this.form); - let token = this.$storage.get("token"); - commit("login", tmp); - resolve(res); - } else { - reject(res); - } - }) - .catch((err) => { - reject(err); - }); - }); - }, - logout({ commit }) { - commit("logout"); - uni.reLaunch({ - url: "/pages/login/login", - }); - }, - }, - getters: { - user: (state) => { - if (state.user) { - return state.user; - } - // return Vue.prototype.$cache.get('_userInfo') - }, - }, -}; diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..64c2f04 --- /dev/null +++ b/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,142 @@ +## 2.2.25���2023-10-18��� +- ������ PC������������������������������������������������Bug [������](https://github.com/dcloudio/uni-ui/issues/737) +## 2.2.24���2023-06-02��� +- ������ ���������������������������������������������������������������Bug [������](https://ask.dcloud.net.cn/question/171146) +- ������ ������������������������������������������������Bug +## 2.2.23���2023-05-02��� +- ������ ���������������������������������������������������Bug [������](https://github.com/dcloudio/uni-ui/issues/737) +- ������ ���������������������������������������������������������Bug +- ������ ios ���������������������������������������������Bug [������](https://ask.dcloud.net.cn/question/162979) +## 2.2.22���2023-03-30��� +- ������ ������ picker ������������������������������������1������Bug [������](https://ask.dcloud.net.cn/question/165937) +- ������ ������������ ��������� ios NaN���Bug [������](https://ask.dcloud.net.cn/question/162979) +## 2.2.21���2023-02-20��� +- ������ firefox ������������������������������������������������������Bug [������](https://ask.dcloud.net.cn/question/163362) +## 2.2.20���2023-02-17��� +- ������ ��������������������������������� +- ������ ������ default-value ��������������������������������������������������������� +- ������ ��������������������������������������������������������������������������������� +- ������ ���������������������������������������������������������������Bug +## 2.2.19���2023-02-09��� +- ������ 2.2.18 ������������������������ end ���������������Bug [������](https://github.com/dcloudio/uni-ui/issues/686) +## 2.2.18���2023-02-08��� +- ������ ���������������������change���������������������Bug [������](https://github.com/dcloudio/uni-ui/issues/684) +- ������ PC������������������������������������������������������ +- ������ PC��������������������������� start���end ���������Bug +- ������ ������������������������������������������������������������ +## 2.2.17���2023-02-04��� +- ������ ������������������ Date ���������������Bug [������](https://github.com/dcloudio/uni-ui/issues/679) +- ������ vue3 time-picker ������������������������������Bug +## 2.2.16���2023-02-02��� +- ������ ������������������������Bug +## 2.2.15���2023-02-02��� +- ������ ���������������������������������Bug +## 2.2.14���2023-01-30��� +- ������ ���������������������������������Bug [������](https://ask.dcloud.net.cn/question/162033) +## 2.2.13���2023-01-10��� +- ������ ���������������������������������������Bug +## 2.2.12���2022-12-01��� +- ������ vue3 ��� i18n ������������������������������Bug +## 2.2.11���2022-09-19��� +- ������ ���������������������������������Bug [������](https://github.com/dcloudio/uni-app/issues/3861) +## 2.2.10���2022-09-19��� +- ������ ������������������������������������������������Bug [������](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +## 2.2.9���2022-09-16��� +- ������������ uni-scss ��������������� +## 2.2.8���2022-09-08��� +- ������ close���������������Bug +## 2.2.7���2022-09-05��� +- ������ ��������� maskClick ���������Bug [������](https://ask.dcloud.net.cn/question/140824) +## 2.2.6���2022-06-30��� +- ������ ���������������������������������������������������������������������uni-ui������������������ +## 2.2.5���2022-06-24��� +- ������ ������������������������������������������������Bug +## 2.2.4���2022-03-31��� +- ������ Vue3 ���������������,������������������������Bug +## 2.2.3���2022-03-28��� +- ������ Vue3 ���������������������������Bug +## 2.2.2���2021-12-10��� +- ������ clear-icon ������������������������������������Bug +## 2.2.1���2021-12-10��� +- ������ ������������������������������������������������������������������������������������Bug +## 2.2.0���2021-11-19��� +- ������ ������UI������������������������ [������](https://uniapp.dcloud.io/component/uniui/resource) +- ������������ [https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5���2021-11-09��� +- ������ ��������������������������������������������� +## 2.1.4���2021-09-10��� +- ������ hide-second ���������������Bug +- ������ ������������������������������������������������Bug +- ������ ���������������������������������������������������Bug +## 2.1.3���2021-09-09��� +- ������ hide-second ������������������������������������������ +## 2.1.2���2021-09-03��� +- ������ ���������������������������������������������������������, ������������������ +- ������ ������������������������������������������������ ref ��������������� clear ������ +- ������ ��������������������������������������� +- ������ ��������������������� placeholder ���������Bug +## 2.1.1���2021-08-24��� +- ������ ��������������� +- ������ ������������������ pc ������������������ +## 2.1.0���2021-08-09��� +- ������ ������ vue3 +## 2.0.19���2021-08-09��� +- ������ ������������ uni-forms ��������������������� +- ������ ��� uni-forms ������������������������������ NAN ���������Bug +## 2.0.18���2021-08-05��� +- ������ type ���������������������������Bug +- ������ ��������������������� tabbar ������ bug +- ������ ���������������������������������������������������Bug +## 2.0.17���2021-08-04��� +- ������ ������������������������������������Bug +- ������ h5 ��������������������������� 'cale' of undefined ���Bug +## 2.0.16���2021-07-21��� +- ������ return-type ������������������ date ������������ +## 2.0.15���2021-07-14��� +- ������ ���������������������������������������������������������Bug +- ������ clearIcon ������������������������������������������������������������ pc ��������� +- ������ ��������������������������������������������������������� +## 2.0.14���2021-07-14��� +- ������ ���������������������������������������Bug +- ������ start ��� end ���������������������Bug +- ������ ���������������������������������������������������������������������������������������������Bug +## 2.0.13���2021-07-08��� +- ������ ���������������������������������Bug +## 2.0.12���2021-07-08��� +- ������ ���������������������������������������������������������������������bug +## 2.0.11���2021-07-08��� +- ������ ������������������������������������������������������ +## 2.0.10���2021-07-08��� +- ������ ���������������������������������������������������������������������������������������������������������Bug +- ������ ������������������������������������������������ +## 2.0.9���2021-07-07��� +- ������ maskClick ������ +- ������ ������������������ rpx ���������������Bug���rpx -> px +- ������ ������������������������������������������bug���['', ''] -> [] +## 2.0.8���2021-07-07��� +- ������ ��������������������������������� +## 2.0.7���2021-07-01��� +- ������ ������ uni-icons ������ +## 2.0.6���2021-05-22��� +- ������ ���������������������������������Bug +- ������ ������������������������������������������������������ +## 2.0.5���2021-05-20��� +- ������ ��������������������� +## 2.0.4���2021-05-12��� +- ������ ������������������ +## 2.0.3���2021-05-10��� +- ������ ios ������������ '-' ���������������Bug +- ������ pc ��������������������������������� +## 2.0.2���2021-05-08��� +- ������ ��� admin ���������������������������������bug +## 2.0.1���2021-05-08��� +- ������ type ��������������������������������� date ��������� datetime +## 2.0.0���2021-04-30��� +- ���������������������������+��������������������� + > ���������������������������������������������������������������������type=time��������������� hide-second ��������������������������������������� picker��� +## 1.0.6���2021-03-18��� +- ������ hide-second ��������������������������������������� +- ������ ������������������������������������Bug +- ������ chang������������2������Bug +- ������ ��������� end ���������������Bug +- ������ ��������� nvue ������ diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..dba9887 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,177 @@ +<template> + <view class="uni-calendar-item__weeks-box" :class="{ + 'uni-calendar-item--disable':weeks.disable, + 'uni-calendar-item--before-checked-x':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked-x':weeks.afterMultiple, + }" @click="choiceDate(weeks)" @mouseenter="handleMousemove(weeks)"> + <view class="uni-calendar-item__weeks-box-item" :class="{ + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && (calendar.userChecked || !checkHover), + 'uni-calendar-item--checked-range-text': checkHover, + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + 'uni-calendar-item--disable':weeks.disable, + }"> + <text v-if="selected && weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text> + <text class="uni-calendar-item__weeks-box-text uni-calendar-item__weeks-box-text-disable uni-calendar-item--checked-text">{{weeks.date}}</text> + </view> + <view :class="{'uni-calendar-item--today': weeks.isToday}"></view> + </view> +</template> + +<script> + export default { + props: { + weeks: { + type: Object, + default () { + return {} + } + }, + calendar: { + type: Object, + default: () => { + return {} + } + }, + selected: { + type: Array, + default: () => { + return [] + } + }, + checkHover: { + type: Boolean, + default: false + } + }, + methods: { + choiceDate(weeks) { + this.$emit('change', weeks) + }, + handleMousemove(weeks) { + this.$emit('handleMouse', weeks) + } + } + } +</script> + +<style lang="scss" > + $uni-primary: #007aff !default; + + .uni-calendar-item__weeks-box { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + margin: 1px 0; + position: relative; + } + + .uni-calendar-item__weeks-box-text { + font-size: 14px; + // font-family: Lato-Bold, Lato; + font-weight: bold; + color: darken($color: $uni-primary, $amount: 40%); + } + + .uni-calendar-item__weeks-box-item { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + width: 40px; + height: 40px; + /* #ifdef H5 */ + cursor: pointer; + /* #endif */ + } + + + .uni-calendar-item__weeks-box-circle { + position: absolute; + top: 5px; + right: 5px; + width: 8px; + height: 8px; + border-radius: 8px; + background-color: #dd524d; + + } + + .uni-calendar-item__weeks-box .uni-calendar-item--disable { + cursor: default; + } + + .uni-calendar-item--disable .uni-calendar-item__weeks-box-text-disable { + color: #D1D1D1; + } + + .uni-calendar-item--today { + position: absolute; + top: 10px; + right: 17%; + background-color: #dd524d; + width:6px; + height: 6px; + border-radius: 50%; + } + + .uni-calendar-item--extra { + color: #dd524d; + opacity: 0.8; + } + + .uni-calendar-item__weeks-box .uni-calendar-item--checked { + background-color: $uni-primary; + border-radius: 50%; + box-sizing: border-box; + border: 3px solid #fff; + } + + .uni-calendar-item--checked .uni-calendar-item--checked-text { + color: #fff; + } + + .uni-calendar-item--multiple .uni-calendar-item--checked-range-text { + color: #333; + } + + .uni-calendar-item--multiple { + background-color: #F6F7FC; + // color: #fff; + } + + .uni-calendar-item--multiple .uni-calendar-item--before-checked, + .uni-calendar-item--multiple .uni-calendar-item--after-checked { + background-color: $uni-primary; + border-radius: 50%; + box-sizing: border-box; + border: 3px solid #F6F7FC; + } + + .uni-calendar-item--before-checked .uni-calendar-item--checked-text, + .uni-calendar-item--after-checked .uni-calendar-item--checked-text { + color: #fff; + } + + .uni-calendar-item--before-checked-x { + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + box-sizing: border-box; + background-color: #F6F7FC; + } + + .uni-calendar-item--after-checked-x { + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; + background-color: #F6F7FC; + } +</style> diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..3418f49 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,928 @@ +<template> + <view class="uni-calendar" @mouseleave="leaveCale"> + + <view v-if="!insert && show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}" + @click="maskClick"></view> + + <view v-if="insert || show" class="uni-calendar__content" + :class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow, 'uni-calendar__content-mobile': aniMaskShow}"> + <view class="uni-calendar__header" :class="{'uni-calendar__header-mobile' :!insert}"> + + <view class="uni-calendar__header-btn-box" @click.stop="changeMonth('pre')"> + <view class="uni-calendar__header-btn uni-calendar--left"></view> + </view> + + <picker mode="date" :value="date" fields="month" @change="bindDateChange"> + <text + class="uni-calendar__header-text">{{ (nowDate.year||'') + yearText + ( nowDate.month||'') + monthText}}</text> + </picker> + + <view class="uni-calendar__header-btn-box" @click.stop="changeMonth('next')"> + <view class="uni-calendar__header-btn uni-calendar--right"></view> + </view> + + <view v-if="!insert" class="dialog-close" @click="close"> + <view class="dialog-close-plus" data-id="close"></view> + <view class="dialog-close-plus dialog-close-rotate" data-id="close"></view> + </view> + </view> + <view class="uni-calendar__box"> + + <view v-if="showMonth" class="uni-calendar__box-bg"> + <text class="uni-calendar__box-bg-text">{{nowDate.month}}</text> + </view> + + <view class="uni-calendar__weeks" style="padding-bottom: 7px;"> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{SUNText}}</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{MONText}}</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{TUEText}}</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{WEDText}}</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{THUText}}</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{FRIText}}</text> + </view> + <view class="uni-calendar__weeks-day"> + <text class="uni-calendar__weeks-day-text">{{SATText}}</text> + </view> + </view> + + <view class="uni-calendar__weeks" v-for="(item,weekIndex) in weeks" :key="weekIndex"> + <view class="uni-calendar__weeks-item" v-for="(weeks,weeksIndex) in item" :key="weeksIndex"> + <calendar-item class="uni-calendar-item--hook" :weeks="weeks" :calendar="calendar" + :selected="selected" :checkHover="range" @change="choiceDate" + @handleMouse="handleMouse"> + </calendar-item> + </view> + </view> + </view> + + <view v-if="!insert && !range && hasTime" class="uni-date-changed uni-calendar--fixed-top" + style="padding: 0 80px;"> + <view class="uni-date-changed--time-date">{{tempSingleDate ? tempSingleDate : selectDateText}}</view> + <time-picker type="time" :start="timepickerStartTime" :end="timepickerEndTime" v-model="time" + :disabled="!tempSingleDate" :border="false" :hide-second="hideSecond" class="time-picker-style"> + </time-picker> + </view> + + <view v-if="!insert && range && hasTime" class="uni-date-changed uni-calendar--fixed-top"> + <view class="uni-date-changed--time-start"> + <view class="uni-date-changed--time-date">{{tempRange.before ? tempRange.before : startDateText}} + </view> + <time-picker type="time" :start="timepickerStartTime" v-model="timeRange.startTime" :border="false" + :hide-second="hideSecond" :disabled="!tempRange.before" class="time-picker-style"> + </time-picker> + </view> + <view style="line-height: 50px;"> + <uni-icons type="arrowthinright" color="#999"></uni-icons> + </view> + <view class="uni-date-changed--time-end"> + <view class="uni-date-changed--time-date">{{tempRange.after ? tempRange.after : endDateText}}</view> + <time-picker type="time" :end="timepickerEndTime" v-model="timeRange.endTime" :border="false" + :hide-second="hideSecond" :disabled="!tempRange.after" class="time-picker-style"> + </time-picker> + </view> + </view> + + <view v-if="!insert" class="uni-date-changed uni-date-btn--ok"> + <view class="uni-datetime-picker--btn" @click="confirm">{{confirmText}}</view> + </view> + </view> + </view> +</template> + +<script> + import { Calendar, getDate, getTime } from './util.js'; + import calendarItem from './calendar-item.vue' + import timePicker from './time-picker.vue' + + import { initVueI18n } from '@dcloudio/uni-i18n' + import i18nMessages from './i18n/index.js' + const { t } = initVueI18n(i18nMessages) + + /** + * Calendar ������ + * @description ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������� + * @tutorial https://ext.dcloud.net.cn/plugin?id=56 + * @property {String} date ��������������������������������������� + * @property {String} startDate ������������������-������������ + * @property {String} endDate ������������������-������������ + * @property {Boolean} range ������������ + * @property {Boolean} insert = [true|false] ������������,���������false + * @value true ������������ + * @value false ������������ + * @property {Boolean} clearDate = [true|false] ������������������������������������������ + * @property {Array} selected ���������������������[{date: '2019-06-27', info: '������', data: { custom: '���������������', name: '������������������',xxx:xxx... }}] + * @property {Boolean} showMonth ��������������������������� + * @property {[String} defaultValue ��������������������������������������� + * @event {Function} change ���������������`insert :ture` ��������� + * @event {Function} confirm ������������`insert :false` ��������� + * @event {Function} monthSwitch ��������������������� + * @example <uni-calendar :insert="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" /> + */ + export default { + components: { + calendarItem, + timePicker + }, + props: { + date: { + type: String, + default: '' + }, + defTime: { + type: [String, Object], + default: '' + }, + selectableTimes: { + type: [Object], + default () { + return {} + } + }, + selected: { + type: Array, + default () { + return [] + } + }, + startDate: { + type: String, + default: '' + }, + endDate: { + type: String, + default: '' + }, + startPlaceholder: { + type: String, + default: '' + }, + endPlaceholder: { + type: String, + default: '' + }, + range: { + type: Boolean, + default: false + }, + hasTime: { + type: Boolean, + default: false + }, + insert: { + type: Boolean, + default: true + }, + showMonth: { + type: Boolean, + default: true + }, + clearDate: { + type: Boolean, + default: true + }, + checkHover: { + type: Boolean, + default: true + }, + hideSecond: { + type: [Boolean], + default: false + }, + pleStatus: { + type: Object, + default () { + return { + before: '', + after: '', + data: [], + fulldate: '' + } + } + }, + defaultValue: { + type: [String, Object, Array], + default: '' + } + }, + data() { + return { + show: false, + weeks: [], + calendar: {}, + nowDate: {}, + aniMaskShow: false, + firstEnter: true, + time: '', + timeRange: { + startTime: '', + endTime: '' + }, + tempSingleDate: '', + tempRange: { + before: '', + after: '' + } + } + }, + watch: { + date: { + immediate: true, + handler(newVal) { + if (!this.range) { + this.tempSingleDate = newVal + setTimeout(() => { + this.init(newVal) + }, 100) + } + } + }, + defTime: { + immediate: true, + handler(newVal) { + if (!this.range) { + this.time = newVal + } else { + this.timeRange.startTime = newVal.start + this.timeRange.endTime = newVal.end + } + } + }, + startDate(val) { + // ��������������� watch ������ created + if(!this.cale){ + return + } + this.cale.setStartDate(val) + this.cale.setDate(this.nowDate.fullDate) + this.weeks = this.cale.weeks + }, + endDate(val) { + // ��������������� watch ������ created + if(!this.cale){ + return + } + this.cale.setEndDate(val) + this.cale.setDate(this.nowDate.fullDate) + this.weeks = this.cale.weeks + }, + selected(newVal) { + // ��������������� watch ������ created + if(!this.cale){ + return + } + this.cale.setSelectInfo(this.nowDate.fullDate, newVal) + this.weeks = this.cale.weeks + }, + pleStatus: { + immediate: true, + handler(newVal) { + const { + before, + after, + fulldate, + which + } = newVal + this.tempRange.before = before + this.tempRange.after = after + setTimeout(() => { + if (fulldate) { + this.cale.setHoverMultiple(fulldate) + if (before && after) { + this.cale.lastHover = true + if (this.rangeWithinMonth(after, before)) return + this.setDate(before) + } else { + this.cale.setMultiple(fulldate) + this.setDate(this.nowDate.fullDate) + this.calendar.fullDate = '' + this.cale.lastHover = false + } + } else { + // ��������������� watch ������ created + if(!this.cale){ + return + } + + this.cale.setDefaultMultiple(before, after) + if (which === 'left' && before) { + this.setDate(before) + this.weeks = this.cale.weeks + } else if(after) { + this.setDate(after) + this.weeks = this.cale.weeks + } + this.cale.lastHover = true + } + }, 16) + } + } + }, + computed: { + timepickerStartTime() { + const activeDate = this.range ? this.tempRange.before : this.calendar.fullDate + return activeDate === this.startDate ? this.selectableTimes.start : '' + }, + timepickerEndTime() { + const activeDate = this.range ? this.tempRange.after : this.calendar.fullDate + return activeDate === this.endDate ? this.selectableTimes.end : '' + }, + /** + * for i18n + */ + selectDateText() { + return t("uni-datetime-picker.selectDate") + }, + startDateText() { + return this.startPlaceholder || t("uni-datetime-picker.startDate") + }, + endDateText() { + return this.endPlaceholder || t("uni-datetime-picker.endDate") + }, + okText() { + return t("uni-datetime-picker.ok") + }, + yearText() { + return t("uni-datetime-picker.year") + }, + monthText() { + return t("uni-datetime-picker.month") + }, + MONText() { + return t("uni-calender.MON") + }, + TUEText() { + return t("uni-calender.TUE") + }, + WEDText() { + return t("uni-calender.WED") + }, + THUText() { + return t("uni-calender.THU") + }, + FRIText() { + return t("uni-calender.FRI") + }, + SATText() { + return t("uni-calender.SAT") + }, + SUNText() { + return t("uni-calender.SUN") + }, + confirmText() { + return t("uni-calender.confirm") + }, + }, + created() { + // ������������������������ + this.cale = new Calendar({ + selected: this.selected, + startDate: this.startDate, + endDate: this.endDate, + range: this.range, + }) + // ��������������� + this.init(this.date) + }, + methods: { + leaveCale() { + this.firstEnter = true + }, + handleMouse(weeks) { + if (weeks.disable) return + if (this.cale.lastHover) return + let { + before, + after + } = this.cale.multipleStatus + if (!before) return + this.calendar = weeks + // ��������������� + this.cale.setHoverMultiple(this.calendar.fullDate) + this.weeks = this.cale.weeks + // hover������������������������������������������ + if (this.firstEnter) { + this.$emit('firstEnterCale', this.cale.multipleStatus) + this.firstEnter = false + } + }, + rangeWithinMonth(A, B) { + const [yearA, monthA] = A.split('-') + const [yearB, monthB] = B.split('-') + return yearA === yearB && monthA === monthB + }, + // ������������������ + maskClick() { + this.close() + this.$emit('maskClose') + }, + + clearCalender() { + if (this.range) { + this.timeRange.startTime = '' + this.timeRange.endTime = '' + this.tempRange.before = '' + this.tempRange.after = '' + this.cale.multipleStatus.before = '' + this.cale.multipleStatus.after = '' + this.cale.multipleStatus.data = [] + this.cale.lastHover = false + } else { + this.time = '' + this.tempSingleDate = '' + } + this.calendar.fullDate = '' + this.setDate(new Date()) + }, + + bindDateChange(e) { + const value = e.detail.value + '-1' + this.setDate(value) + }, + /** + * ��������������������� + * @param {Object} date + */ + init(date) { + // ��������������� watch ������ created + if(!this.cale){ + return + } + this.cale.setDate(date || new Date()) + this.weeks = this.cale.weeks + this.nowDate = this.cale.getInfo(date) + this.calendar = {...this.nowDate} + if(!date){ + // ������date��������������������������� + this.calendar.fullDate = '' + if(this.defaultValue && !this.range){ + // ��������������������������������������� + const defaultDate = new Date(this.defaultValue) + const fullDate = getDate(defaultDate) + const year = defaultDate.getFullYear() + const month = defaultDate.getMonth()+1 + const date = defaultDate.getDate() + const day = defaultDate.getDay() + this.calendar = { + fullDate, + year, + month, + date, + day + }, + this.tempSingleDate = fullDate + this.time = getTime(defaultDate, this.hideSecond) + } + } + }, + /** + * ������������������ + */ + open() { + // ������������������������������ + if (this.clearDate && !this.insert) { + this.cale.cleanMultipleStatus() + this.init(this.date) + } + this.show = true + this.$nextTick(() => { + setTimeout(() => { + this.aniMaskShow = true + }, 50) + }) + }, + /** + * ������������������ + */ + close() { + this.aniMaskShow = false + this.$nextTick(() => { + setTimeout(() => { + this.show = false + this.$emit('close') + }, 300) + }) + }, + /** + * ������������ + */ + confirm() { + this.setEmit('confirm') + this.close() + }, + /** + * ������������ + */ + change() { + if (!this.insert) return + this.setEmit('change') + }, + /** + * ������������������ + */ + monthSwitch() { + let { + year, + month + } = this.nowDate + this.$emit('monthSwitch', { + year, + month: Number(month) + }) + }, + /** + * ������������ + * @param {Object} name + */ + setEmit(name) { + if(!this.range){ + if(!this.calendar.fullDate){ + this.calendar = this.cale.getInfo(new Date()) + this.tempSingleDate = this.calendar.fullDate + } + if(this.hasTime && !this.time) { + this.time = getTime(new Date(), this.hideSecond) + } + } + let { + year, + month, + date, + fullDate, + extraInfo + } = this.calendar + this.$emit(name, { + range: this.cale.multipleStatus, + year, + month, + date, + time: this.time, + timeRange: this.timeRange, + fulldate: fullDate, + extraInfo: extraInfo || {} + }) + }, + /** + * ��������������� + * @param {Object} weeks + */ + choiceDate(weeks) { + if (weeks.disable) return + this.calendar = weeks + this.calendar.userChecked = true + // ������������ + this.cale.setMultiple(this.calendar.fullDate, true) + this.weeks = this.cale.weeks + this.tempSingleDate = this.calendar.fullDate + const beforeDate = new Date(this.cale.multipleStatus.before).getTime() + const afterDate = new Date(this.cale.multipleStatus.after).getTime() + if (beforeDate > afterDate && afterDate) { + this.tempRange.before = this.cale.multipleStatus.after + this.tempRange.after = this.cale.multipleStatus.before + } else { + this.tempRange.before = this.cale.multipleStatus.before + this.tempRange.after = this.cale.multipleStatus.after + } + this.change() + }, + changeMonth(type) { + let newDate + if(type === 'pre') { + newDate = this.cale.getPreMonthObj(this.nowDate.fullDate).fullDate + } else if(type === 'next') { + newDate = this.cale.getNextMonthObj(this.nowDate.fullDate).fullDate + } + + this.setDate(newDate) + this.monthSwitch() + }, + /** + * ������������ + * @param {Object} date + */ + setDate(date) { + this.cale.setDate(date) + this.weeks = this.cale.weeks + this.nowDate = this.cale.getInfo(date) + } + } + } +</script> + +<style lang="scss" > + $uni-primary: #007aff !default; + + .uni-calendar { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + } + + .uni-calendar__mask { + position: fixed; + bottom: 0; + top: 0; + left: 0; + right: 0; + background-color: rgba(0, 0, 0, 0.4); + transition-property: opacity; + transition-duration: 0.3s; + opacity: 0; + /* #ifndef APP-NVUE */ + z-index: 99; + /* #endif */ + } + + .uni-calendar--mask-show { + opacity: 1 + } + + .uni-calendar--fixed { + position: fixed; + bottom: calc(var(--window-bottom)); + left: 0; + right: 0; + transition-property: transform; + transition-duration: 0.3s; + transform: translateY(460px); + /* #ifndef APP-NVUE */ + z-index: 99; + /* #endif */ + } + + .uni-calendar--ani-show { + transform: translateY(0); + } + + .uni-calendar__content { + background-color: #fff; + } + + .uni-calendar__content-mobile { + border-top-left-radius: 10px; + border-top-right-radius: 10px; + box-shadow: 0px 0px 5px 3px rgba(0, 0, 0, 0.1); + } + + .uni-calendar__header { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + align-items: center; + height: 50px; + } + + .uni-calendar__header-mobile { + padding: 10px; + padding-bottom: 0; + } + + .uni-calendar--fixed-top { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: space-between; + border-top-color: rgba(0, 0, 0, 0.4); + border-top-style: solid; + border-top-width: 1px; + } + + .uni-calendar--fixed-width { + width: 50px; + } + + .uni-calendar__backtoday { + position: absolute; + right: 0; + top: 25rpx; + padding: 0 5px; + padding-left: 10px; + height: 25px; + line-height: 25px; + font-size: 12px; + border-top-left-radius: 25px; + border-bottom-left-radius: 25px; + color: #fff; + background-color: #f1f1f1; + } + + .uni-calendar__header-text { + text-align: center; + width: 100px; + font-size: 15px; + color: #666; + } + + .uni-calendar__button-text { + text-align: center; + width: 100px; + font-size: 14px; + color: $uni-primary; + /* #ifndef APP-NVUE */ + letter-spacing: 3px; + /* #endif */ + } + + .uni-calendar__header-btn-box { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + justify-content: center; + width: 50px; + height: 50px; + } + + .uni-calendar__header-btn { + width: 9px; + height: 9px; + border-left-color: #808080; + border-left-style: solid; + border-left-width: 1px; + border-top-color: #555555; + border-top-style: solid; + border-top-width: 1px; + } + + .uni-calendar--left { + transform: rotate(-45deg); + } + + .uni-calendar--right { + transform: rotate(135deg); + } + + + .uni-calendar__weeks { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + } + + .uni-calendar__weeks-item { + flex: 1; + } + + .uni-calendar__weeks-day { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + height: 40px; + border-bottom-color: #F5F5F5; + border-bottom-style: solid; + border-bottom-width: 1px; + } + + .uni-calendar__weeks-day-text { + font-size: 12px; + color: #B2B2B2; + } + + .uni-calendar__box { + position: relative; + // padding: 0 10px; + padding-bottom: 7px; + } + + .uni-calendar__box-bg { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + .uni-calendar__box-bg-text { + font-size: 200px; + font-weight: bold; + color: #999; + opacity: 0.1; + text-align: center; + /* #ifndef APP-NVUE */ + line-height: 1; + /* #endif */ + } + + .uni-date-changed { + padding: 0 10px; + // line-height: 50px; + text-align: center; + color: #333; + border-top-color: #DCDCDC; + ; + border-top-style: solid; + border-top-width: 1px; + flex: 1; + } + + .uni-date-btn--ok { + padding: 20px 15px; + } + + .uni-date-changed--time-start { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + align-items: center; + } + + .uni-date-changed--time-end { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + align-items: center; + } + + .uni-date-changed--time-date { + color: #999; + line-height: 50px; + /* #ifdef MP-TOUTIAO */ + font-size: 16px; + /* #endif */ + margin-right: 5px; + // opacity: 0.6; + } + + .time-picker-style { + // width: 62px; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + align-items: center + } + + .mr-10 { + margin-right: 10px; + } + + .dialog-close { + position: absolute; + top: 0; + right: 0; + bottom: 0; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + padding: 0 25px; + margin-top: 10px; + } + + .dialog-close-plus { + width: 16px; + height: 2px; + background-color: #737987; + border-radius: 2px; + transform: rotate(45deg); + } + + .dialog-close-rotate { + position: absolute; + transform: rotate(-45deg); + } + + .uni-datetime-picker--btn { + border-radius: 100px; + height: 40px; + line-height: 40px; + background-color: $uni-primary; + color: #fff; + font-size: 16px; + letter-spacing: 2px; + } + + /* #ifndef APP-NVUE */ + .uni-datetime-picker--btn:active { + opacity: 0.7; + } + /* #endif */ +</style> diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..024f22f --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select date and time", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-datetime-picker.year": "-", + "uni-datetime-picker.month": "", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN", + "uni-calender.confirm": "confirm" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..d2df5e7 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "������������", + "uni-datetime-picker.selectTime": "������������", + "uni-datetime-picker.selectDateTime": "������������������", + "uni-datetime-picker.startDate": "������������", + "uni-datetime-picker.endDate": "������������", + "uni-datetime-picker.startTime": "������������", + "uni-datetime-picker.endTime": "������������", + "uni-datetime-picker.ok": "������", + "uni-datetime-picker.clear": "������", + "uni-datetime-picker.cancel": "������", + "uni-datetime-picker.year": "���", + "uni-datetime-picker.month": "���", + "uni-calender.SUN": "���", + "uni-calender.MON": "���", + "uni-calender.TUE": "���", + "uni-calender.WED": "���", + "uni-calender.THU": "���", + "uni-calender.FRI": "���", + "uni-calender.SAT": "���", + "uni-calender.confirm": "������" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..d23fa3c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "������������", + "uni-datetime-picker.selectTime": "������������", + "uni-datetime-picker.selectDateTime": "������������������", + "uni-datetime-picker.startDate": "������������", + "uni-datetime-picker.endDate": "������������", + "uni-datetime-picker.startTime": "������������", + "uni-datetime-picker.endTime": "������������", + "uni-datetime-picker.ok": "������", + "uni-datetime-picker.clear": "������", + "uni-datetime-picker.cancel": "������", + "uni-datetime-picker.year": "���", + "uni-datetime-picker.month": "���", + "uni-calender.SUN": "���", + "uni-calender.MON": "���", + "uni-calender.TUE": "���", + "uni-calender.WED": "���", + "uni-calender.THU": "���", + "uni-calender.FRI": "���", + "uni-calender.SAT": "���", + "uni-calender.confirm": "������" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..81a042a --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,934 @@ +<template> + <view class="uni-datetime-picker"> + <view @click="initTimePicker"> + <slot> + <view class="uni-datetime-picker-timebox-pointer" + :class="{'uni-datetime-picker-disabled': disabled, 'uni-datetime-picker-timebox': border}"> + <text class="uni-datetime-picker-text">{{time}}</text> + <view v-if="!time" class="uni-datetime-picker-time"> + <text class="uni-datetime-picker-text">{{selectTimeText}}</text> + </view> + </view> + </slot> + </view> + <view v-if="visible" id="mask" class="uni-datetime-picker-mask" @click="tiggerTimePicker"></view> + <view v-if="visible" class="uni-datetime-picker-popup" :class="[dateShow && timeShow ? '' : 'fix-nvue-height']" + :style="fixNvueBug"> + <view class="uni-title"> + <text class="uni-datetime-picker-text">{{selectTimeText}}</text> + </view> + <view v-if="dateShow" class="uni-datetime-picker__container-box"> + <picker-view class="uni-datetime-picker-view" :indicator-style="indicatorStyle" :value="ymd" + @change="bindDateChange"> + <picker-view-column> + <view class="uni-datetime-picker-item" v-for="(item,index) in years" :key="index"> + <text class="uni-datetime-picker-item">{{lessThanTen(item)}}</text> + </view> + </picker-view-column> + <picker-view-column> + <view class="uni-datetime-picker-item" v-for="(item,index) in months" :key="index"> + <text class="uni-datetime-picker-item">{{lessThanTen(item)}}</text> + </view> + </picker-view-column> + <picker-view-column> + <view class="uni-datetime-picker-item" v-for="(item,index) in days" :key="index"> + <text class="uni-datetime-picker-item">{{lessThanTen(item)}}</text> + </view> + </picker-view-column> + </picker-view> + <!-- ������ nvue ��������������� --> + <text class="uni-datetime-picker-sign sign-left">-</text> + <text class="uni-datetime-picker-sign sign-right">-</text> + </view> + <view v-if="timeShow" class="uni-datetime-picker__container-box"> + <picker-view class="uni-datetime-picker-view" :class="[hideSecond ? 'time-hide-second' : '']" + :indicator-style="indicatorStyle" :value="hms" @change="bindTimeChange"> + <picker-view-column> + <view class="uni-datetime-picker-item" v-for="(item,index) in hours" :key="index"> + <text class="uni-datetime-picker-item">{{lessThanTen(item)}}</text> + </view> + </picker-view-column> + <picker-view-column> + <view class="uni-datetime-picker-item" v-for="(item,index) in minutes" :key="index"> + <text class="uni-datetime-picker-item">{{lessThanTen(item)}}</text> + </view> + </picker-view-column> + <picker-view-column v-if="!hideSecond"> + <view class="uni-datetime-picker-item" v-for="(item,index) in seconds" :key="index"> + <text class="uni-datetime-picker-item">{{lessThanTen(item)}}</text> + </view> + </picker-view-column> + </picker-view> + <!-- ������ nvue ��������������� --> + <text class="uni-datetime-picker-sign" :class="[hideSecond ? 'sign-center' : 'sign-left']">:</text> + <text v-if="!hideSecond" class="uni-datetime-picker-sign sign-right">:</text> + </view> + <view class="uni-datetime-picker-btn"> + <view @click="clearTime"> + <text class="uni-datetime-picker-btn-text">{{clearText}}</text> + </view> + <view class="uni-datetime-picker-btn-group"> + <view class="uni-datetime-picker-cancel" @click="tiggerTimePicker"> + <text class="uni-datetime-picker-btn-text">{{cancelText}}</text> + </view> + <view @click="setTime"> + <text class="uni-datetime-picker-btn-text">{{okText}}</text> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> + import { initVueI18n } from '@dcloudio/uni-i18n' + import i18nMessages from './i18n/index.js' + const { t } = initVueI18n(i18nMessages) + import { fixIosDateFormat } from './util' + + /** + * DatetimePicker ��������������� + * @description ��������������������������������������������� + * @tutorial https://ext.dcloud.net.cn/plugin?id=xxx + * @property {String} type = [datetime | date | time] ������������ + * @property {Boolean} multiple = [true|false] ������������ + * @property {String|Number} value ��������� + * @property {String|Number} start ��������������������� + * @property {String|Number} end ��������������������� + * @property {String} return-type = [timestamp | string] + * @event {Function} change ������������������������ + */ + + export default { + name: 'UniDatetimePicker', + data() { + return { + indicatorStyle: `height: 50px;`, + visible: false, + fixNvueBug: {}, + dateShow: true, + timeShow: true, + title: '���������������', + // ��������������������� + time: '', + // ��������������������������� + year: 1920, + month: 0, + day: 0, + hour: 0, + minute: 0, + second: 0, + // ������������ + startYear: 1920, + startMonth: 1, + startDay: 1, + startHour: 0, + startMinute: 0, + startSecond: 0, + // ������������ + endYear: 2120, + endMonth: 12, + endDay: 31, + endHour: 23, + endMinute: 59, + endSecond: 59, + } + }, + props: { + type: { + type: String, + default: 'datetime' + }, + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + start: { + type: [Number, String], + default: '' + }, + end: { + type: [Number, String], + default: '' + }, + returnType: { + type: String, + default: 'string' + }, + disabled: { + type: [Boolean, String], + default: false + }, + border: { + type: [Boolean, String], + default: true + }, + hideSecond: { + type: [Boolean, String], + default: false + } + }, + watch: { + // #ifndef VUE3 + value: { + handler(newVal) { + if (newVal) { + this.parseValue(fixIosDateFormat(newVal)) + this.initTime(false) + } else { + this.time = '' + this.parseValue(Date.now()) + } + }, + immediate: true + }, + // #endif + // #ifdef VUE3 + modelValue: { + handler(newVal) { + if (newVal) { + this.parseValue(fixIosDateFormat(newVal)) + this.initTime(false) + } else { + this.time = '' + this.parseValue(Date.now()) + } + }, + immediate: true + }, + // #endif + type: { + handler(newValue) { + if (newValue === 'date') { + this.dateShow = true + this.timeShow = false + this.title = '������' + } else if (newValue === 'time') { + this.dateShow = false + this.timeShow = true + this.title = '������' + } else { + this.dateShow = true + this.timeShow = true + this.title = '���������������' + } + }, + immediate: true + }, + start: { + handler(newVal) { + this.parseDatetimeRange(fixIosDateFormat(newVal), 'start') + }, + immediate: true + }, + end: { + handler(newVal) { + this.parseDatetimeRange(fixIosDateFormat(newVal), 'end') + }, + immediate: true + }, + + // ��������������������������������������������������������������������������������������������������������������������������������������� + months(newVal) { + this.checkValue('month', this.month, newVal) + }, + days(newVal) { + this.checkValue('day', this.day, newVal) + }, + hours(newVal) { + this.checkValue('hour', this.hour, newVal) + }, + minutes(newVal) { + this.checkValue('minute', this.minute, newVal) + }, + seconds(newVal) { + this.checkValue('second', this.second, newVal) + } + }, + computed: { + // ��������������������������������������������������� + years() { + return this.getCurrentRange('year') + }, + + months() { + return this.getCurrentRange('month') + }, + + days() { + return this.getCurrentRange('day') + }, + + hours() { + return this.getCurrentRange('hour') + }, + + minutes() { + return this.getCurrentRange('minute') + }, + + seconds() { + return this.getCurrentRange('second') + }, + + // picker ��������������� + ymd() { + return [this.year - this.minYear, this.month - this.minMonth, this.day - this.minDay] + }, + hms() { + return [this.hour - this.minHour, this.minute - this.minMinute, this.second - this.minSecond] + }, + + // ������ date ��� start + currentDateIsStart() { + return this.year === this.startYear && this.month === this.startMonth && this.day === this.startDay + }, + + // ������ date ��� end + currentDateIsEnd() { + return this.year === this.endYear && this.month === this.endMonth && this.day === this.endDay + }, + + // ��������������������������������������������������������������� + minYear() { + return this.startYear + }, + maxYear() { + return this.endYear + }, + minMonth() { + if (this.year === this.startYear) { + return this.startMonth + } else { + return 1 + } + }, + maxMonth() { + if (this.year === this.endYear) { + return this.endMonth + } else { + return 12 + } + }, + minDay() { + if (this.year === this.startYear && this.month === this.startMonth) { + return this.startDay + } else { + return 1 + } + }, + maxDay() { + if (this.year === this.endYear && this.month === this.endMonth) { + return this.endDay + } else { + return this.daysInMonth(this.year, this.month) + } + }, + minHour() { + if (this.type === 'datetime') { + if (this.currentDateIsStart) { + return this.startHour + } else { + return 0 + } + } + if (this.type === 'time') { + return this.startHour + } + }, + maxHour() { + if (this.type === 'datetime') { + if (this.currentDateIsEnd) { + return this.endHour + } else { + return 23 + } + } + if (this.type === 'time') { + return this.endHour + } + }, + minMinute() { + if (this.type === 'datetime') { + if (this.currentDateIsStart && this.hour === this.startHour) { + return this.startMinute + } else { + return 0 + } + } + if (this.type === 'time') { + if (this.hour === this.startHour) { + return this.startMinute + } else { + return 0 + } + } + }, + maxMinute() { + if (this.type === 'datetime') { + if (this.currentDateIsEnd && this.hour === this.endHour) { + return this.endMinute + } else { + return 59 + } + } + if (this.type === 'time') { + if (this.hour === this.endHour) { + return this.endMinute + } else { + return 59 + } + } + }, + minSecond() { + if (this.type === 'datetime') { + if (this.currentDateIsStart && this.hour === this.startHour && this.minute === this.startMinute) { + return this.startSecond + } else { + return 0 + } + } + if (this.type === 'time') { + if (this.hour === this.startHour && this.minute === this.startMinute) { + return this.startSecond + } else { + return 0 + } + } + }, + maxSecond() { + if (this.type === 'datetime') { + if (this.currentDateIsEnd && this.hour === this.endHour && this.minute === this.endMinute) { + return this.endSecond + } else { + return 59 + } + } + if (this.type === 'time') { + if (this.hour === this.endHour && this.minute === this.endMinute) { + return this.endSecond + } else { + return 59 + } + } + }, + + /** + * for i18n + */ + selectTimeText() { + return t("uni-datetime-picker.selectTime") + }, + okText() { + return t("uni-datetime-picker.ok") + }, + clearText() { + return t("uni-datetime-picker.clear") + }, + cancelText() { + return t("uni-datetime-picker.cancel") + } + }, + + mounted() { + // #ifdef APP-NVUE + const res = uni.getSystemInfoSync(); + this.fixNvueBug = { + top: res.windowHeight / 2, + left: res.windowWidth / 2 + } + // #endif + }, + + methods: { + /** + * @param {Object} item + * ������ 10 ��������������� 0 + */ + + lessThanTen(item) { + return item < 10 ? '0' + item : item + }, + + /** + * ������������������������������������00:00:00 + * @param {String} timeString + */ + parseTimeType(timeString) { + if (timeString) { + let timeArr = timeString.split(':') + this.hour = Number(timeArr[0]) + this.minute = Number(timeArr[1]) + this.second = Number(timeArr[2]) + } + }, + + /** + * ���������������������������������������������������������������������������2000-10-02���'08:30:00'��� 1610695109000 + * @param {String | Number} datetime + */ + initPickerValue(datetime) { + let defaultValue = null + if (datetime) { + defaultValue = this.compareValueWithStartAndEnd(datetime, this.start, this.end) + } else { + defaultValue = Date.now() + defaultValue = this.compareValueWithStartAndEnd(defaultValue, this.start, this.end) + } + this.parseValue(defaultValue) + }, + + /** + * ������������������ + * - ��������������������� value + * - ��������������������� start��������������� end������ start < value < end��������������� value��� ������������������ start + * - ������������������������ start������ start < value��������������� value��������������������� start + * - ������������������������ end������ value < end��������������� value��������������������� end + * - ��������������������������������������� value + * - ������������ value������������������������������������ Date.now() + * @param {Object} value + * @param {Object} dateBase + */ + compareValueWithStartAndEnd(value, start, end) { + let winner = null + value = this.superTimeStamp(value) + start = this.superTimeStamp(start) + end = this.superTimeStamp(end) + + if (start && end) { + if (value < start) { + winner = new Date(start) + } else if (value > end) { + winner = new Date(end) + } else { + winner = new Date(value) + } + } else if (start && !end) { + winner = start <= value ? new Date(value) : new Date(start) + } else if (!start && end) { + winner = value <= end ? new Date(value) : new Date(end) + } else { + winner = new Date(value) + } + + return winner + }, + + /** + * ��������������������������������������������������������������������� + * @param {Object} value + */ + superTimeStamp(value) { + let dateBase = '' + if (this.type === 'time' && value && typeof value === 'string') { + const now = new Date() + const year = now.getFullYear() + const month = now.getMonth() + 1 + const day = now.getDate() + dateBase = year + '/' + month + '/' + day + ' ' + } + if (Number(value)) { + value = parseInt(value) + dateBase = 0 + } + return this.createTimeStamp(dateBase + value) + }, + + /** + * ��������������� value������������������������ + * @param {Object} defaultTime + */ + parseValue(value) { + if (!value) { + return + } + if (this.type === 'time' && typeof value === "string") { + this.parseTimeType(value) + } else { + let defaultDate = null + defaultDate = new Date(value) + if (this.type !== 'time') { + this.year = defaultDate.getFullYear() + this.month = defaultDate.getMonth() + 1 + this.day = defaultDate.getDate() + } + if (this.type !== 'date') { + this.hour = defaultDate.getHours() + this.minute = defaultDate.getMinutes() + this.second = defaultDate.getSeconds() + } + } + if (this.hideSecond) { + this.second = 0 + } + }, + + /** + * ��������������������������� start���end��������������������������������� + * @param {Object} defaultTime + */ + parseDatetimeRange(point, pointType) { + // ������������������������������������ + if (!point) { + if (pointType === 'start') { + this.startYear = 1920 + this.startMonth = 1 + this.startDay = 1 + this.startHour = 0 + this.startMinute = 0 + this.startSecond = 0 + } + if (pointType === 'end') { + this.endYear = 2120 + this.endMonth = 12 + this.endDay = 31 + this.endHour = 23 + this.endMinute = 59 + this.endSecond = 59 + } + return + } + if (this.type === 'time') { + const pointArr = point.split(':') + this[pointType + 'Hour'] = Number(pointArr[0]) + this[pointType + 'Minute'] = Number(pointArr[1]) + this[pointType + 'Second'] = Number(pointArr[2]) + } else { + if (!point) { + pointType === 'start' ? this.startYear = this.year - 60 : this.endYear = this.year + 60 + return + } + if (Number(point)) { + point = parseInt(point) + } + // datetime ��� end ���������������, ������������ + const hasTime = /[0-9]:[0-9]/ + if (this.type === 'datetime' && pointType === 'end' && typeof point === 'string' && !hasTime.test( + point)) { + point = point + ' 23:59:59' + } + const pointDate = new Date(point) + this[pointType + 'Year'] = pointDate.getFullYear() + this[pointType + 'Month'] = pointDate.getMonth() + 1 + this[pointType + 'Day'] = pointDate.getDate() + if (this.type === 'datetime') { + this[pointType + 'Hour'] = pointDate.getHours() + this[pointType + 'Minute'] = pointDate.getMinutes() + this[pointType + 'Second'] = pointDate.getSeconds() + } + } + }, + + // ������ ��������������������������������� ������������������ + getCurrentRange(value) { + const range = [] + for (let i = this['min' + this.capitalize(value)]; i <= this['max' + this.capitalize(value)]; i++) { + range.push(i) + } + return range + }, + + // ������������������������ + capitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1) + }, + + // ������������������������������������������������������������������������������������ + checkValue(name, value, values) { + if (values.indexOf(value) === -1) { + this[name] = values[0] + } + }, + + // ������������������������ + daysInMonth(year, month) { // Use 1 for January, 2 for February, etc. + return new Date(year, month, 0).getDate(); + }, + + //������ iOS���safari ������������ + fixIosDateFormat(value) { + if (typeof value === 'string') { + value = value.replace(/-/g, '/') + } + return value + }, + + /** + * ��������������� + * @param {Object} time + */ + createTimeStamp(time) { + if (!time) return + if (typeof time === "number") { + return time + } else { + time = time.replace(/-/g, '/') + if (this.type === 'date') { + time = time + ' ' + '00:00:00' + } + return Date.parse(time) + } + }, + + /** + * ��������������������������������� + */ + createDomSting() { + const yymmdd = this.year + + '-' + + this.lessThanTen(this.month) + + '-' + + this.lessThanTen(this.day) + + let hhmmss = this.lessThanTen(this.hour) + + ':' + + this.lessThanTen(this.minute) + + if (!this.hideSecond) { + hhmmss = hhmmss + ':' + this.lessThanTen(this.second) + } + + if (this.type === 'date') { + return yymmdd + } else if (this.type === 'time') { + return hhmmss + } else { + return yymmdd + ' ' + hhmmss + } + }, + + /** + * ������������������������������ change ������ + */ + initTime(emit = true) { + this.time = this.createDomSting() + if (!emit) return + if (this.returnType === 'timestamp' && this.type !== 'time') { + this.$emit('change', this.createTimeStamp(this.time)) + this.$emit('input', this.createTimeStamp(this.time)) + this.$emit('update:modelValue', this.createTimeStamp(this.time)) + } else { + this.$emit('change', this.time) + this.$emit('input', this.time) + this.$emit('update:modelValue', this.time) + } + }, + + /** + * ��������������������������������� data + * @param {Object} e + */ + bindDateChange(e) { + const val = e.detail.value + this.year = this.years[val[0]] + this.month = this.months[val[1]] + this.day = this.days[val[2]] + }, + bindTimeChange(e) { + const val = e.detail.value + this.hour = this.hours[val[0]] + this.minute = this.minutes[val[1]] + this.second = this.seconds[val[2]] + }, + + /** + * ������������������ + */ + initTimePicker() { + if (this.disabled) return + const value = fixIosDateFormat(this.time) + this.initPickerValue(value) + this.visible = !this.visible + }, + + /** + * ��������������������� + */ + tiggerTimePicker(e) { + this.visible = !this.visible + }, + + /** + * ������������������������������������������������ + */ + clearTime() { + this.time = '' + this.$emit('change', this.time) + this.$emit('input', this.time) + this.$emit('update:modelValue', this.time) + this.tiggerTimePicker() + }, + + /** + * ������������������������������ + */ + setTime() { + this.initTime() + this.tiggerTimePicker() + } + } + } +</script> + +<style lang="scss"> + $uni-primary: #007aff !default; + + .uni-datetime-picker { + /* #ifndef APP-NVUE */ + /* width: 100%; */ + /* #endif */ + } + + .uni-datetime-picker-view { + height: 130px; + width: 270px; + /* #ifndef APP-NVUE */ + cursor: pointer; + /* #endif */ + } + + .uni-datetime-picker-item { + height: 50px; + line-height: 50px; + text-align: center; + font-size: 14px; + } + + .uni-datetime-picker-btn { + margin-top: 60px; + /* #ifndef APP-NVUE */ + display: flex; + cursor: pointer; + /* #endif */ + flex-direction: row; + justify-content: space-between; + } + + .uni-datetime-picker-btn-text { + font-size: 14px; + color: $uni-primary; + } + + .uni-datetime-picker-btn-group { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + } + + .uni-datetime-picker-cancel { + margin-right: 30px; + } + + .uni-datetime-picker-mask { + position: fixed; + bottom: 0px; + top: 0px; + left: 0px; + right: 0px; + background-color: rgba(0, 0, 0, 0.4); + transition-duration: 0.3s; + z-index: 998; + } + + .uni-datetime-picker-popup { + border-radius: 8px; + padding: 30px; + width: 270px; + /* #ifdef APP-NVUE */ + height: 500px; + /* #endif */ + /* #ifdef APP-NVUE */ + width: 330px; + /* #endif */ + background-color: #fff; + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + transition-duration: 0.3s; + z-index: 999; + } + + .fix-nvue-height { + /* #ifdef APP-NVUE */ + height: 330px; + /* #endif */ + } + + .uni-datetime-picker-time { + color: grey; + } + + .uni-datetime-picker-column { + height: 50px; + } + + .uni-datetime-picker-timebox { + + border: 1px solid #E5E5E5; + border-radius: 5px; + padding: 7px 10px; + /* #ifndef APP-NVUE */ + box-sizing: border-box; + cursor: pointer; + /* #endif */ + } + + .uni-datetime-picker-timebox-pointer { + /* #ifndef APP-NVUE */ + cursor: pointer; + /* #endif */ + } + + + .uni-datetime-picker-disabled { + opacity: 0.4; + /* #ifdef H5 */ + cursor: not-allowed !important; + /* #endif */ + } + + .uni-datetime-picker-text { + font-size: 14px; + line-height: 50px + } + + .uni-datetime-picker-sign { + position: absolute; + top: 53px; + /* ������ 10px ������������������������nvue */ + color: #999; + /* #ifdef APP-NVUE */ + font-size: 16px; + /* #endif */ + } + + .sign-left { + left: 86px; + } + + .sign-right { + right: 86px; + } + + .sign-center { + left: 135px; + } + + .uni-datetime-picker__container-box { + position: relative; + display: flex; + align-items: center; + justify-content: center; + margin-top: 40px; + } + + .time-hide-second { + width: 180px; + } +</style> diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..a4c0340 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,1034 @@ +<template> + <view class="uni-date"> + <view class="uni-date-editor" @click="show"> + <slot> + <view + class="uni-date-editor--x" + :class="{'uni-date-editor--x__disabled': disabled,'uni-date-x--border': border}" + > + <view v-if="!isRange" class="uni-date-x uni-date-single"> + <uni-icons class="icon-calendar" type="calendar" color="#c0c4cc" size="22"></uni-icons> + <view class="uni-date__x-input">{{ displayValue || singlePlaceholderText }}</view> + </view> + + <view v-else class="uni-date-x uni-date-range"> + <uni-icons class="icon-calendar" type="calendar" color="#c0c4cc" size="22"></uni-icons> + <view class="uni-date__x-input text-center">{{ displayRangeValue.startDate || startPlaceholderText }}</view> + + <view class="range-separator">{{rangeSeparator}}</view> + + <view class="uni-date__x-input text-center">{{ displayRangeValue.endDate || endPlaceholderText }}</view> + </view> + + <view v-if="showClearIcon" class="uni-date__icon-clear" @click.stop="clear"> + <uni-icons type="clear" color="#c0c4cc" size="22"></uni-icons> + </view> + </view> + </slot> + </view> + + <view v-show="pickerVisible" class="uni-date-mask--pc" @click="close"></view> + + <view v-if="!isPhone" v-show="pickerVisible" ref="datePicker" class="uni-date-picker__container"> + <view v-if="!isRange" class="uni-date-single--x" :style="pickerPositionStyle"> + <view class="uni-popper__arrow"></view> + + <view v-if="hasTime" class="uni-date-changed popup-x-header"> + <input class="uni-date__input text-center" type="text" v-model="inputDate" + :placeholder="selectDateText" /> + + <time-picker type="time" v-model="pickerTime" :border="false" :disabled="!inputDate" + :start="timepickerStartTime" :end="timepickerEndTime" :hideSecond="hideSecond" style="width: 100%;"> + <input class="uni-date__input text-center" type="text" v-model="pickerTime" :placeholder="selectTimeText" + :disabled="!inputDate" /> + </time-picker> + </view> + + <Calendar ref="pcSingle" :showMonth="false" :start-date="calendarRange.startDate" + :end-date="calendarRange.endDate" :date="calendarDate" @change="singleChange" + :default-value="defaultValue" + style="padding: 0 8px;" /> + + <view v-if="hasTime" class="popup-x-footer"> + <text class="confirm-text" @click="confirmSingleChange">{{okText}}</text> + </view> + </view> + + <view v-else class="uni-date-range--x" :style="pickerPositionStyle"> + <view class="uni-popper__arrow"></view> + <view v-if="hasTime" class="popup-x-header uni-date-changed"> + <view class="popup-x-header--datetime"> + <input class="uni-date__input uni-date-range__input" type="text" v-model="tempRange.startDate" + :placeholder="startDateText" /> + + <time-picker type="time" v-model="tempRange.startTime" :start="timepickerStartTime" :border="false" + :disabled="!tempRange.startDate" :hideSecond="hideSecond"> + <input class="uni-date__input uni-date-range__input" type="text" + v-model="tempRange.startTime" :placeholder="startTimeText" + :disabled="!tempRange.startDate" /> + </time-picker> + </view> + + <uni-icons type="arrowthinright" color="#999" style="line-height: 40px;"></uni-icons> + + <view class="popup-x-header--datetime"> + <input class="uni-date__input uni-date-range__input" type="text" v-model="tempRange.endDate" + :placeholder="endDateText" /> + + <time-picker type="time" v-model="tempRange.endTime" :end="timepickerEndTime" :border="false" + :disabled="!tempRange.endDate" :hideSecond="hideSecond"> + <input class="uni-date__input uni-date-range__input" type="text" v-model="tempRange.endTime" + :placeholder="endTimeText" :disabled="!tempRange.endDate" /> + </time-picker> + </view> + </view> + + <view class="popup-x-body"> + <Calendar ref="left" :showMonth="false" :start-date="calendarRange.startDate" + :end-date="calendarRange.endDate" :range="true" :pleStatus="endMultipleStatus" + @change="leftChange" @firstEnterCale="updateRightCale" style="padding: 0 8px;" /> + <Calendar ref="right" :showMonth="false" :start-date="calendarRange.startDate" + :end-date="calendarRange.endDate" :range="true" @change="rightChange" + :pleStatus="startMultipleStatus" @firstEnterCale="updateLeftCale" + style="padding: 0 8px;border-left: 1px solid #F1F1F1;" /> + </view> + + <view v-if="hasTime" class="popup-x-footer"> + <text @click="clear">{{clearText}}</text> + <text class="confirm-text" @click="confirmRangeChange">{{okText}}</text> + </view> + </view> + </view> + + <Calendar v-if="isPhone" ref="mobile" :clearDate="false" :date="calendarDate" :defTime="mobileCalendarTime" + :start-date="calendarRange.startDate" :end-date="calendarRange.endDate" :selectableTimes="mobSelectableTime" + :startPlaceholder="startPlaceholder" :endPlaceholder="endPlaceholder" + :default-value="defaultValue" + :pleStatus="endMultipleStatus" :showMonth="false" :range="isRange" :hasTime="hasTime" :insert="false" + :hideSecond="hideSecond" @confirm="mobileChange" @maskClose="close" /> + </view> +</template> +<script> + /** + * DatetimePicker ��������������� + * @description ������������ PC ��������������������������������������������������� + * @tutorial https://ext.dcloud.net.cn/plugin?id=3962 + * @property {String} type ��������������� + * @property {String|Number|Array|Date} value ��������� + * @property {String} placeholder ��������������������������� + * @property {String} start ������������ + * @property {String} end ������������ + * @property {String} start-placeholder ������������������������������������������ + * @property {String} end-placeholder ������������������������������������������ + * @property {String} range-separator ��������������������������� + * @property {Boolean} border = [true|false] ��������������� + * @property {Boolean} disabled = [true|false] ������������ + * @property {Boolean} clearIcon = [true|false] ������������������������������PC������������ + * @property {[String} defaultValue ��������������������������������������� + * @event {Function} change ������������������������������ + * @event {Function} maskClick ������������������������������ + * @event {Function} show ��������������� + * @event {Function} close ��������������� + * @event {Function} clear ��������������������������������� + **/ + import Calendar from './calendar.vue' + import TimePicker from './time-picker.vue' + import { initVueI18n } from '@dcloudio/uni-i18n' + import i18nMessages from './i18n/index.js' + import { getDateTime, getDate, getTime, getDefaultSecond, dateCompare, checkDate, fixIosDateFormat } from './util' + + export default { + name: 'UniDatetimePicker', + options: { + virtualHost: true + }, + components: { + Calendar, + TimePicker + }, + data() { + return { + isRange: false, + hasTime: false, + displayValue: '', + inputDate: '', + calendarDate: '', + pickerTime: '', + calendarRange: { + startDate: '', + startTime: '', + endDate: '', + endTime: '' + }, + displayRangeValue: { + startDate: '', + endDate: '', + }, + tempRange: { + startDate: '', + startTime: '', + endDate: '', + endTime: '' + }, + // ������������������������ + startMultipleStatus: { + before: '', + after: '', + data: [], + fulldate: '' + }, + endMultipleStatus: { + before: '', + after: '', + data: [], + fulldate: '' + }, + pickerVisible: false, + pickerPositionStyle: null, + isEmitValue: false, + isPhone: false, + isFirstShow: true, + i18nT: () => {} + } + }, + props: { + type: { + type: String, + default: 'datetime' + }, + value: { + type: [String, Number, Array, Date], + default: '' + }, + modelValue: { + type: [String, Number, Array, Date], + default: '' + }, + start: { + type: [Number, String], + default: '' + }, + end: { + type: [Number, String], + default: '' + }, + returnType: { + type: String, + default: 'string' + }, + placeholder: { + type: String, + default: '' + }, + startPlaceholder: { + type: String, + default: '' + }, + endPlaceholder: { + type: String, + default: '' + }, + rangeSeparator: { + type: String, + default: '-' + }, + border: { + type: [Boolean], + default: true + }, + disabled: { + type: [Boolean], + default: false + }, + clearIcon: { + type: [Boolean], + default: true + }, + hideSecond: { + type: [Boolean], + default: false + }, + defaultValue: { + type: [String, Object, Array], + default: '' + } + }, + watch: { + type: { + immediate: true, + handler(newVal) { + this.hasTime = newVal.indexOf('time') !== -1 + this.isRange = newVal.indexOf('range') !== -1 + } + }, + // #ifndef VUE3 + value: { + immediate: true, + handler(newVal) { + if (this.isEmitValue) { + this.isEmitValue = false + return + } + this.initPicker(newVal) + } + }, + // #endif + // #ifdef VUE3 + modelValue: { + immediate: true, + handler(newVal) { + if (this.isEmitValue) { + this.isEmitValue = false + return + } + this.initPicker(newVal) + } + }, + // #endif + start: { + immediate: true, + handler(newVal) { + if (!newVal) return + this.calendarRange.startDate = getDate(newVal) + if (this.hasTime) { + this.calendarRange.startTime = getTime(newVal) + } + } + }, + end: { + immediate: true, + handler(newVal) { + if (!newVal) return + this.calendarRange.endDate = getDate(newVal) + if (this.hasTime) { + this.calendarRange.endTime = getTime(newVal, this.hideSecond) + } + } + }, + }, + computed: { + timepickerStartTime() { + const activeDate = this.isRange ? this.tempRange.startDate : this.inputDate + return activeDate === this.calendarRange.startDate ? this.calendarRange.startTime : '' + }, + timepickerEndTime() { + const activeDate = this.isRange ? this.tempRange.endDate : this.inputDate + return activeDate === this.calendarRange.endDate ? this.calendarRange.endTime : '' + }, + mobileCalendarTime() { + const timeRange = { + start: this.tempRange.startTime, + end: this.tempRange.endTime + } + return this.isRange ? timeRange : this.pickerTime + }, + mobSelectableTime() { + return { + start: this.calendarRange.startTime, + end: this.calendarRange.endTime + } + }, + datePopupWidth() { + // todo + return this.isRange ? 653 : 301 + }, + + /** + * for i18n + */ + singlePlaceholderText() { + return this.placeholder || (this.type === 'date' ? this.selectDateText : this.selectDateTimeText) + }, + startPlaceholderText() { + return this.startPlaceholder || this.startDateText + }, + endPlaceholderText() { + return this.endPlaceholder || this.endDateText + }, + selectDateText() { + return this.i18nT("uni-datetime-picker.selectDate") + }, + selectDateTimeText() { + return this.i18nT("uni-datetime-picker.selectDateTime") + }, + selectTimeText() { + return this.i18nT("uni-datetime-picker.selectTime") + }, + startDateText() { + return this.startPlaceholder || this.i18nT("uni-datetime-picker.startDate") + }, + startTimeText() { + return this.i18nT("uni-datetime-picker.startTime") + }, + endDateText() { + return this.endPlaceholder || this.i18nT("uni-datetime-picker.endDate") + }, + endTimeText() { + return this.i18nT("uni-datetime-picker.endTime") + }, + okText() { + return this.i18nT("uni-datetime-picker.ok") + }, + clearText() { + return this.i18nT("uni-datetime-picker.clear") + }, + showClearIcon() { + return this.clearIcon && !this.disabled && (this.displayValue || (this.displayRangeValue.startDate && this.displayRangeValue.endDate)) + } + }, + created() { + this.initI18nT() + this.platform() + }, + methods: { + initI18nT() { + const vueI18n = initVueI18n(i18nMessages) + this.i18nT = vueI18n.t + }, + initPicker(newVal) { + if ((!newVal && !this.defaultValue) || Array.isArray(newVal) && !newVal.length) { + this.$nextTick(() => { + this.clear(false) + }) + return + } + + if (!Array.isArray(newVal) && !this.isRange) { + if(newVal){ + this.displayValue = this.inputDate = this.calendarDate = getDate(newVal) + if (this.hasTime) { + this.pickerTime = getTime(newVal, this.hideSecond) + this.displayValue = `${this.displayValue} ${this.pickerTime}` + } + }else if(this.defaultValue){ + this.inputDate = this.calendarDate = getDate(this.defaultValue) + if(this.hasTime){ + this.pickerTime = getTime(this.defaultValue, this.hideSecond) + } + } + } else { + const [before, after] = newVal + if (!before && !after) return + const beforeDate = getDate(before) + const beforeTime = getTime(before, this.hideSecond) + + const afterDate = getDate(after) + const afterTime = getTime(after, this.hideSecond) + const startDate = beforeDate + const endDate = afterDate + this.displayRangeValue.startDate = this.tempRange.startDate = startDate + this.displayRangeValue.endDate = this.tempRange.endDate = endDate + + if (this.hasTime) { + this.displayRangeValue.startDate = `${beforeDate} ${beforeTime}` + this.displayRangeValue.endDate = `${afterDate} ${afterTime}` + this.tempRange.startTime = beforeTime + this.tempRange.endTime = afterTime + } + const defaultRange = { + before: beforeDate, + after: afterDate + } + this.startMultipleStatus = Object.assign({}, this.startMultipleStatus, defaultRange, { + which: 'right' + }) + this.endMultipleStatus = Object.assign({}, this.endMultipleStatus, defaultRange, { + which: 'left' + }) + } + }, + updateLeftCale(e) { + const left = this.$refs.left + // ��������������� + left.cale.setHoverMultiple(e.after) + left.setDate(this.$refs.left.nowDate.fullDate) + }, + updateRightCale(e) { + const right = this.$refs.right + // ��������������� + right.cale.setHoverMultiple(e.after) + right.setDate(this.$refs.right.nowDate.fullDate) + }, + platform() { + if(typeof navigator !== "undefined"){ + this.isPhone = navigator.userAgent.toLowerCase().indexOf('mobile') !== -1 + return + } + const { windowWidth } = uni.getSystemInfoSync() + this.isPhone = windowWidth <= 500 + this.windowWidth = windowWidth + }, + show() { + if (this.disabled) { + return + } + this.platform() + if (this.isPhone) { + setTimeout(() => { + this.$refs.mobile.open() + }, 0); + return + } + this.pickerPositionStyle = { + top: '10px' + } + const dateEditor = uni.createSelectorQuery().in(this).select(".uni-date-editor") + dateEditor.boundingClientRect(rect => { + if (this.windowWidth - rect.left < this.datePopupWidth) { + this.pickerPositionStyle.right = 0 + } + }).exec() + setTimeout(() => { + this.pickerVisible = !this.pickerVisible + if (!this.isPhone && this.isRange && this.isFirstShow) { + this.isFirstShow = false + const { + startDate, + endDate + } = this.calendarRange + if (startDate && endDate) { + if (this.diffDate(startDate, endDate) < 30) { + this.$refs.right.changeMonth('pre') + } + } else { + this.$refs.right.changeMonth('next') + if(this.isPhone){ + this.$refs.right.cale.lastHover = false; + } + } + } + + }, 50) + }, + close() { + setTimeout(() => { + this.pickerVisible = false + this.$emit('maskClick', this.value) + this.$refs.mobile && this.$refs.mobile.close() + }, 20) + }, + setEmit(value) { + if (this.returnType === "timestamp" || this.returnType === "date") { + if (!Array.isArray(value)) { + if (!this.hasTime) { + value = value + ' ' + '00:00:00' + } + value = this.createTimestamp(value) + if (this.returnType === "date") { + value = new Date(value) + } + } else { + if (!this.hasTime) { + value[0] = value[0] + ' ' + '00:00:00' + value[1] = value[1] + ' ' + '00:00:00' + } + value[0] = this.createTimestamp(value[0]) + value[1] = this.createTimestamp(value[1]) + if (this.returnType === "date") { + value[0] = new Date(value[0]) + value[1] = new Date(value[1]) + } + } + } + + this.$emit('update:modelValue', value) + this.$emit('input', value) + this.$emit('change', value) + this.isEmitValue = true + }, + createTimestamp(date) { + date = fixIosDateFormat(date) + return Date.parse(new Date(date)) + }, + singleChange(e) { + this.calendarDate = this.inputDate = e.fulldate + if (this.hasTime) return + this.confirmSingleChange() + }, + confirmSingleChange() { + if(!checkDate(this.inputDate)){ + const now = new Date() + this.calendarDate = this.inputDate = getDate(now) + this.pickerTime = getTime(now, this.hideSecond) + } + + let startLaterInputDate = false + let startDate, startTime + if(this.start) { + let startString = this.start + if(typeof this.start === 'number'){ + startString = getDateTime(this.start, this.hideSecond) + } + [startDate, startTime] = startString.split(' ') + if(this.start && !dateCompare(startDate, this.inputDate)) { + startLaterInputDate = true + this.inputDate = startDate + } + } + + let endEarlierInputDate = false + let endDate, endTime + if(this.end) { + let endString = this.end + if(typeof this.end === 'number'){ + endString = getDateTime(this.end, this.hideSecond) + } + [endDate, endTime] = endString.split(' ') + if(this.end && !dateCompare(this.inputDate, endDate)) { + endEarlierInputDate = true + this.inputDate = endDate + } + } + if (this.hasTime) { + if(startLaterInputDate){ + this.pickerTime = startTime || getDefaultSecond(this.hideSecond) + } + if(endEarlierInputDate){ + this.pickerTime = endTime || getDefaultSecond(this.hideSecond) + } + if(!this.pickerTime){ + this.pickerTime = getTime(Date.now(), this.hideSecond) + } + this.displayValue = `${this.inputDate} ${this.pickerTime}` + } else { + this.displayValue = this.inputDate + } + this.setEmit(this.displayValue) + this.pickerVisible = false + }, + leftChange(e) { + const { + before, + after + } = e.range + this.rangeChange(before, after) + const obj = { + before: e.range.before, + after: e.range.after, + data: e.range.data, + fulldate: e.fulldate + } + this.startMultipleStatus = Object.assign({}, this.startMultipleStatus, obj) + }, + rightChange(e) { + const { + before, + after + } = e.range + this.rangeChange(before, after) + const obj = { + before: e.range.before, + after: e.range.after, + data: e.range.data, + fulldate: e.fulldate + } + this.endMultipleStatus = Object.assign({}, this.endMultipleStatus, obj) + }, + mobileChange(e) { + if (this.isRange) { + const {before, after} = e.range + + if(!before || !after){ + return + } + + this.handleStartAndEnd(before, after, true) + if (this.hasTime) { + const { + startTime, + endTime + } = e.timeRange + this.tempRange.startTime = startTime + this.tempRange.endTime = endTime + } + this.confirmRangeChange() + } else { + if (this.hasTime) { + this.displayValue = e.fulldate + ' ' + e.time + } else { + this.displayValue = e.fulldate + } + this.setEmit(this.displayValue) + } + this.$refs.mobile.close() + }, + rangeChange(before, after) { + if (!(before && after)) return + this.handleStartAndEnd(before, after, true) + if (this.hasTime) return + this.confirmRangeChange() + }, + confirmRangeChange() { + if (!this.tempRange.startDate || !this.tempRange.endDate) { + this.pickerVisible = false + return + } + if(!checkDate(this.tempRange.startDate)){ + this.tempRange.startDate = getDate(Date.now()) + } + if(!checkDate(this.tempRange.endDate)){ + this.tempRange.endDate = getDate(Date.now()) + } + + let start, end + + let startDateLaterRangeStartDate = false + let startDateLaterRangeEndDate = false + let startDate, startTime + if(this.start) { + let startString = this.start + if(typeof this.start === 'number'){ + startString = getDateTime(this.start, this.hideSecond) + } + [startDate,startTime] = startString.split(' ') + if(this.start && !dateCompare(this.start, this.tempRange.startDate)) { + startDateLaterRangeStartDate = true + this.tempRange.startDate = startDate + } + if(this.start && !dateCompare(this.start, this.tempRange.endDate)) { + startDateLaterRangeEndDate = true + this.tempRange.endDate = startDate + } + } + let endDateEarlierRangeStartDate = false + let endDateEarlierRangeEndDate = false + let endDate, endTime + if(this.end) { + let endString = this.end + if(typeof this.end === 'number'){ + endString = getDateTime(this.end, this.hideSecond) + } + [endDate,endTime] = endString.split(' ') + + if(this.end && !dateCompare(this.tempRange.startDate, this.end)) { + endDateEarlierRangeStartDate = true + this.tempRange.startDate = endDate + } + if(this.end && !dateCompare(this.tempRange.endDate, this.end)) { + endDateEarlierRangeEndDate = true + this.tempRange.endDate = endDate + } + } + if (!this.hasTime) { + start = this.displayRangeValue.startDate = this.tempRange.startDate + end = this.displayRangeValue.endDate = this.tempRange.endDate + } else { + if(startDateLaterRangeStartDate){ + this.tempRange.startTime = startTime || getDefaultSecond(this.hideSecond) + }else if(endDateEarlierRangeStartDate){ + this.tempRange.startTime = endTime || getDefaultSecond(this.hideSecond) + } + if(!this.tempRange.startTime){ + this.tempRange.startTime = getTime(Date.now(), this.hideSecond) + } + + if(startDateLaterRangeEndDate){ + this.tempRange.endTime = startTime || getDefaultSecond(this.hideSecond) + }else if(endDateEarlierRangeEndDate){ + this.tempRange.endTime = endTime || getDefaultSecond(this.hideSecond) + } + if(!this.tempRange.endTime){ + this.tempRange.endTime = getTime(Date.now(), this.hideSecond) + } + start = this.displayRangeValue.startDate = `${this.tempRange.startDate} ${this.tempRange.startTime}` + end = this.displayRangeValue.endDate = `${this.tempRange.endDate} ${this.tempRange.endTime}` + } + if(!dateCompare(start,end)){ + [start, end] = [end, start] + } + this.displayRangeValue.startDate = start + this.displayRangeValue.endDate = end + const displayRange = [start, end] + this.setEmit(displayRange) + this.pickerVisible = false + }, + handleStartAndEnd(before, after, temp = false) { + if (!(before && after)) return + + const type = temp ? 'tempRange' : 'range' + const isStartEarlierEnd = dateCompare(before, after) + this[type].startDate = isStartEarlierEnd ? before : after + this[type].endDate = isStartEarlierEnd ? after : before + }, + /** + * ������������������ + */ + dateCompare(startDate, endDate) { + // ������������������ + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // ������������������������������ + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + return startDate <= endDate + }, + + /** + * ��������������� + */ + diffDate(startDate, endDate) { + // ������������������ + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // ������������������������������ + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + const diff = (endDate - startDate) / (24 * 60 * 60 * 1000) + return Math.abs(diff) + }, + + clear(needEmit = true) { + if (!this.isRange) { + this.displayValue = '' + this.inputDate = '' + this.pickerTime = '' + if (this.isPhone) { + this.$refs.mobile && this.$refs.mobile.clearCalender() + } else { + this.$refs.pcSingle && this.$refs.pcSingle.clearCalender() + } + if (needEmit) { + this.$emit('change', '') + this.$emit('input', '') + this.$emit('update:modelValue', '') + } + } else { + this.displayRangeValue.startDate = '' + this.displayRangeValue.endDate = '' + this.tempRange.startDate = '' + this.tempRange.startTime = '' + this.tempRange.endDate = '' + this.tempRange.endTime = '' + if (this.isPhone) { + this.$refs.mobile && this.$refs.mobile.clearCalender() + } else { + this.$refs.left && this.$refs.left.clearCalender() + this.$refs.right && this.$refs.right.clearCalender() + this.$refs.right && this.$refs.right.changeMonth('next') + } + if (needEmit) { + this.$emit('change', []) + this.$emit('input', []) + this.$emit('update:modelValue', []) + } + } + } + } + } +</script> + +<style lang="scss"> + $uni-primary: #007aff !default; + + .uni-date { + width: 100%; + flex: 1; + } + .uni-date-x { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + border-radius: 4px; + background-color: #fff; + color: #666; + font-size: 14px; + flex: 1; + + .icon-calendar{ + padding-left: 3px; + } + .range-separator{ + height: 35px; + /* #ifndef MP */ + padding: 0 2px; + /* #endif */ + line-height: 35px; + } + } + + .uni-date-x--border { + box-sizing: border-box; + border-radius: 4px; + border: 1px solid #e5e5e5; + } + + .uni-date-editor--x { + display: flex; + align-items: center; + position: relative; + } + + .uni-date-editor--x .uni-date__icon-clear { + padding-right: 3px; + display: flex; + align-items: center; + /* #ifdef H5 */ + cursor: pointer; + /* #endif */ + } + + .uni-date__x-input { + width: auto; + height: 35px; + /* #ifndef MP */ + padding-left: 5px; + /* #endif */ + position: relative; + flex: 1; + line-height: 35px; + font-size: 14px; + overflow: hidden; + } + + .text-center { + text-align: center; + } + + .uni-date__input { + height: 40px; + width: 100%; + line-height: 40px; + font-size: 14px; + } + + .uni-date-range__input { + text-align: center; + max-width: 142px; + } + + .uni-date-picker__container { + position: relative; + } + + .uni-date-mask--pc { + position: fixed; + bottom: 0px; + top: 0px; + left: 0px; + right: 0px; + background-color: rgba(0, 0, 0, 0); + transition-duration: 0.3s; + z-index: 996; + } + + .uni-date-single--x { + background-color: #fff; + position: absolute; + top: 0; + z-index: 999; + border: 1px solid #EBEEF5; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + } + + .uni-date-range--x { + background-color: #fff; + position: absolute; + top: 0; + z-index: 999; + border: 1px solid #EBEEF5; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + } + + .uni-date-editor--x__disabled { + opacity: 0.4; + cursor: default; + } + + .uni-date-editor--logo { + width: 16px; + height: 16px; + vertical-align: middle; + } + + /* ������������ */ + .popup-x-header { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + } + + .popup-x-header--datetime { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + flex: 1; + } + + .popup-x-body { + display: flex; + } + + .popup-x-footer { + padding: 0 15px; + border-top-color: #F1F1F1; + border-top-style: solid; + border-top-width: 1px; + line-height: 40px; + text-align: right; + color: #666; + } + + .popup-x-footer text:hover { + color: $uni-primary; + cursor: pointer; + opacity: 0.8; + } + + .popup-x-footer .confirm-text { + margin-left: 20px; + color: $uni-primary; + } + + .uni-date-changed { + text-align: center; + color: #333; + border-bottom-color: #F1F1F1; + border-bottom-style: solid; + border-bottom-width: 1px; + } + + .uni-date-changed--time text { + height: 50px; + line-height: 50px; + } + + .uni-date-changed .uni-date-changed--time { + flex: 1; + } + + .uni-date-changed--time-date { + color: #333; + opacity: 0.6; + } + + .mr-50 { + margin-right: 50px; + } + + /* picker ���������������������������������, todo������������������������������������ */ + .uni-popper__arrow, + .uni-popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border: 6px solid transparent; + border-top-width: 0; + } + + .uni-popper__arrow { + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + top: -6px; + left: 10%; + margin-right: 3px; + border-bottom-color: #EBEEF5; + } + + .uni-popper__arrow::after { + content: " "; + top: 1px; + margin-left: -6px; + border-bottom-color: #fff; + } +</style> diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..ab40b23 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,403 @@ +class Calendar { + constructor({ + selected, + startDate, + endDate, + range, + } = {}) { + // ������������ + this.date = this.getDateObj(new Date()) // ������������������ + // ������������ + this.selected = selected || []; + // ������������ + this.startDate = startDate + // ������������ + this.endDate = endDate + // ������������������ + this.range = range + // ������������ + this.cleanMultipleStatus() + // ������������ + this.weeks = {} + this.lastHover = false + } + /** + * ������������ + * @param {Object} date + */ + setDate(date) { + const selectDate = this.getDateObj(date) + this.getWeeks(selectDate.fullDate) + } + + /** + * ������������������ + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + setStartDate(startDate) { + this.startDate = startDate + } + + setEndDate(endDate) { + this.endDate = endDate + } + + getPreMonthObj(date){ + date = fixIosDateFormat(date) + date = new Date(date) + + const oldMonth = date.getMonth() + date.setMonth(oldMonth - 1) + const newMonth = date.getMonth() + if(oldMonth !== 0 && newMonth - oldMonth === 0){ + date.setMonth(newMonth - 1) + } + return this.getDateObj(date) + } + getNextMonthObj(date){ + date = fixIosDateFormat(date) + date = new Date(date) + + const oldMonth = date.getMonth() + date.setMonth(oldMonth + 1) + const newMonth = date.getMonth() + if(newMonth - oldMonth > 1){ + date.setMonth(newMonth - 1) + } + return this.getDateObj(date) + } + + /** + * ������������������Date������ + */ + getDateObj(date) { + date = fixIosDateFormat(date) + date = new Date(date) + + return { + fullDate: getDate(date), + year: date.getFullYear(), + month: addZero(date.getMonth() + 1), + date: addZero(date.getDate()), + day: date.getDay() + } + } + + /** + * ������������������������������ + */ + getPreMonthDays(amount, dateObj) { + const result = [] + for (let i = amount - 1; i >= 0; i--) { + const month = dateObj.month - 1 + result.push({ + date: new Date(dateObj.year, month, -i).getDate(), + month, + disable: true + }) + } + return result + } + /** + * ������������������������ + */ + getCurrentMonthDays(amount, dateObj) { + const result = [] + const fullDate = this.date.fullDate + for (let i = 1; i <= amount; i++) { + const currentDate = `${dateObj.year}-${dateObj.month}-${addZero(i)}` + const isToday = fullDate === currentDate + // ������������������ + const info = this.selected && this.selected.find((item) => { + if (this.dateEqual(currentDate, item.date)) { + return item + } + }) + + // ������������ + let disableBefore = true + let disableAfter = true + if (this.startDate) { + disableBefore = dateCompare(this.startDate, currentDate) + } + + if (this.endDate) { + disableAfter = dateCompare(currentDate, this.endDate) + } + + let multiples = this.multipleStatus.data + let multiplesStatus = -1 + if (this.range && multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, currentDate) + }) + } + const checked = multiplesStatus !== -1 + + result.push({ + fullDate: currentDate, + year: dateObj.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(currentDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(currentDate, this.multipleStatus.before, this.multipleStatus.after), + month: dateObj.month, + disable: (this.startDate && !dateCompare(this.startDate, currentDate)) || (this.endDate && !dateCompare(currentDate,this.endDate)), + isToday, + userChecked: false, + extraInfo: info + }) + } + return result + } + /** + * ������������������������������ + */ + _getNextMonthDays(amount, dateObj) { + const result = [] + const month = dateObj.month + 1 + for (let i = 1; i <= amount; i++) { + result.push({ + date: i, + month, + disable: true + }) + } + return result + } + + /** + * ������������������������ + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + + return this.calendar.find(item => item.fullDate === this.getDateObj(date).fullDate) + } + + /** + * ������������������������ + */ + dateEqual(before, after) { + before = new Date(fixIosDateFormat(before)) + after = new Date(fixIosDateFormat(after)) + return before.valueOf() === after.valueOf() + } + + /** + * ������������������������ + */ + + isLogicBefore(currentDate, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDate) + } + + isLogicAfter(currentDate, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDate) + } + + /** + * ��������������������������������� + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDateObj(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * ������������������ + */ + setMultiple(fullDate) { + if (!this.range) return + + let { + before, + after + } = this.multipleStatus + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this.getWeeks(fullDate) + } + + /** + * ������ hover ������������������ + */ + setHoverMultiple(fullDate) { + if (!this.range || this.lastHover) return + + const { before } = this.multipleStatus + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this.getWeeks(fullDate) + } + + /** + * ��������������������������� + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this.getWeeks(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this.getWeeks(before) + } + } + } + + /** + * ������������������ + * @param {Object} dateData + */ + getWeeks(dateData) { + const { + year, + month, + } = this.getDateObj(dateData) + + const preMonthDayAmount = new Date(year, month - 1, 1).getDay() + const preMonthDays = this.getPreMonthDays(preMonthDayAmount, this.getDateObj(dateData)) + + const currentMonthDayAmount = new Date(year, month, 0).getDate() + const currentMonthDays = this.getCurrentMonthDays(currentMonthDayAmount, this.getDateObj(dateData)) + + const nextMonthDayAmount = 42 - preMonthDayAmount - currentMonthDayAmount + const nextMonthDays = this._getNextMonthDays(nextMonthDayAmount, this.getDateObj(dateData)) + + const calendarDays = [...preMonthDays, ...currentMonthDays, ...nextMonthDays] + + const weeks = new Array(6) + for (let i = 0; i < calendarDays.length; i++) { + const index = Math.floor(i / 7) + if(!weeks[index]){ + weeks[index] = new Array(7) + } + weeks[index][i % 7] = calendarDays[i] + } + + this.calendar = calendarDays + this.weeks = weeks + } +} + +function getDateTime(date, hideSecond){ + return `${getDate(date)} ${getTime(date, hideSecond)}` +} + +function getDate(date) { + date = fixIosDateFormat(date) + date = new Date(date) + const year = date.getFullYear() + const month = date.getMonth()+1 + const day = date.getDate() + return `${year}-${addZero(month)}-${addZero(day)}` +} + +function getTime(date, hideSecond){ + date = fixIosDateFormat(date) + date = new Date(date) + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}` +} + +function addZero(num) { + if(num < 10){ + num = `0${num}` + } + return num +} + +function getDefaultSecond(hideSecond) { + return hideSecond ? '00:00' : '00:00:00' +} + +function dateCompare(startDate, endDate) { + startDate = new Date(fixIosDateFormat(startDate)) + endDate = new Date(fixIosDateFormat(endDate)) + return startDate <= endDate +} + +function checkDate(date){ + const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g + return date.match(dateReg) +} + +const dateTimeReg = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])( [0-5]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])?$/ +function fixIosDateFormat(value) { + if (typeof value === 'string' && dateTimeReg.test(value)) { + value = value.replace(/-/g, '/') + } + return value +} + +export {Calendar, getDateTime, getDate, getTime, addZero, getDefaultSecond, dateCompare, checkDate, fixIosDateFormat} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..254d7e3 --- /dev/null +++ b/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker ���������������", + "version": "2.2.25", + "description": "uni-datetime-picker ���������������������������������������������������������", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "���������������������", + "������������" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "���", + "data": "���", + "permissions": "���" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "���������������(Android)": "y", + "QQ���������(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "���������": { + "������": "y", + "������": "y", + "������": "y", + "������������": "y", + "QQ": "y" + }, + "���������": { + "������": "u", + "������": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-datetime-picker/readme.md b/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `��������������������������������� 2.0.0 ������������������+��������������������������� ui ������������������������������ui ��������������������������� PC ��� ���������������������������������������������������������������������������type=time��������������� hide-second ��������������������������������������� picker���������������������������������������������������������*���uni_modules������*���������������������������` + +## DatetimePicker ��������������� + +> **������������uni-datetime-picker** +> ������������ `uDatetimePicker` + + +������������������������������**���������**������������������������������������������������������������������������**������������**������������������ + +��������������������������������������������������������������������������������������������������� picker ��������� + +**_������ picker ������������������_** + +- ������������������ value, ������������ picker ������������ +- ��������������� value��������������� value ��������������������� Date.now()��� ������������������ picker ������������ + +### [������������](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### ������������������������������������������������uni-ui������������������������������������ uni-ui ������������871950839 \ No newline at end of file diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..6449885 --- /dev/null +++ b/uni_modules/uni-icons/changelog.md @@ -0,0 +1,22 @@ +## 1.3.5���2022-01-24��� +- ������ size ������������������������������������������������ +## 1.3.4���2022-01-24��� +- ������ size ������������������ +## 1.3.3���2022-01-17��� +- ������ nvue ������������������������bug������������������������ +## 1.3.2���2021-12-01��� +- ������ ��������������������������� +## 1.3.1���2021-11-23��� +- ������ ��������������� type ��� +## 1.3.0���2021-11-19��� +- ������ ������������ +- ������ ��������������������������� +- ������ ������UI���������������������������������:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- ���������������������:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7���2021-11-08��� +## 1.2.0���2021-07-30��� +- ������������ vue3���������������vue3��������������� [uni-app ������������ vue3 ������](https://ask.dcloud.net.cn/article/37834) +## 1.1.5���2021-05-12��� +- ������ ������������������ +## 1.1.4���2021-02-05��� +- ���������uni_modules������������ diff --git a/uni_modules/uni-icons/components/uni-icons/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui���������", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..86e7444 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,96 @@ +<template> + <!-- #ifdef APP-NVUE --> + <text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text> + <!-- #endif --> + <!-- #ifndef APP-NVUE --> + <text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text> + <!-- #endif --> +</template> + +<script> + import icons from './icons.js'; + const getVal = (val) => { + const reg = /^[0-9]*$/g + return (typeof val === 'number' ||���reg.test(val) )? val + 'px' : val; + } + // #ifdef APP-NVUE + var domModule = weex.requireModule('dom'); + import iconUrl from './uniicons.ttf' + domModule.addRule('fontFace', { + 'fontFamily': "uniicons", + 'src': "url('"+iconUrl+"')" + }); + // #endif + + /** + * Icons ������ + * @description ������������ icons ������ + * @tutorial https://ext.dcloud.net.cn/plugin?id=28 + * @property {Number} size ������������ + * @property {String} type ��������������������������� + * @property {String} color ������������ + * @property {String} customPrefix ��������������� + * @event {Function} click ������ Icon ������������ + */ + export default { + name: 'UniIcons', + emits:['click'], + props: { + type: { + type: String, + default: '' + }, + color: { + type: String, + default: '#333333' + }, + size: { + type: [Number, String], + default: 16 + }, + customPrefix:{ + type: String, + default: '' + } + }, + data() { + return { + icons: icons.glyphs + } + }, + computed:{ + unicode(){ + let code = this.icons.find(v=>v.font_class === this.type) + if(code){ + return unescape(`%u${code.unicode}`) + } + return '' + }, + iconSize(){ + return getVal(this.size) + } + }, + methods: { + _onClick() { + this.$emit('click') + } + } + } +</script> + +<style lang="scss"> + /* #ifndef APP-NVUE */ + @import './uniicons.css'; + @font-face { + font-family: uniicons; + src: url('./uniicons.ttf') format('truetype'); + } + + /* #endif */ + .uni-icons { + font-family: uniicons; + text-decoration: none; + text-align: center; + } + +</style> diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..2f56eab --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,663 @@ +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrowthinright:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrowthinleft:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrowthinup:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthindown:before { + content: "\e6be"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowdown:before { + content: "\e6b8"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-arrowright:before { + content: "\e6b5"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-arrowup:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowleft:before { + content: "\e6b7"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-cart-filled:before { + content: "\e629"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000..835f33b --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf Binary files differ diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..d1c4e77 --- /dev/null +++ b/uni_modules/uni-icons/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons ������", + "version": "1.3.5", + "description": "������������������������������������������������������������������������������������", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "������" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "������������", + "������������" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "���", + "data": "���", + "permissions": "���" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "���������������(Android)": "y", + "QQ���������(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "���������": { + "������": "y", + "������": "y", + "������": "y", + "������������": "y", + "QQ": "y" + }, + "���������": { + "������": "u", + "������": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons ������ +> **������������uni-icons** +> ������������ `uIcons` + +������������ icons ������ ��� + +### [������������](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### ������������������������������������������������uni-ui������������������������������������ uni-ui ������������871950839 diff --git a/uni_modules/uni-nav-bar/changelog.md b/uni_modules/uni-nav-bar/changelog.md new file mode 100644 index 0000000..0f9a2f1 --- /dev/null +++ b/uni_modules/uni-nav-bar/changelog.md @@ -0,0 +1,51 @@ +## 1.3.11���2023-03-29��� +- ������ ������������������������������BUG +## 1.3.10���2023-03-29��� +- ������ ������������������������������������bug +## 1.3.9���2022-10-13��� +- ������ ���������������������bug +## 1.3.8���2022-10-12��� +- ������ nvue ������ fixed ��� true ������������������������������ bug +## 1.3.7���2022-08-11��� +- ������ nvue ��������� fixed ��� true ������������������������������ bug +## 1.3.6���2022-06-30��� +- ������ ������������������������������������������������bug +## 1.3.5���2022-05-24��� +- ������ stat ������ ������������������title ������ ���������������title ������������������������uni������������ +## 1.3.4���2022-01-24��� +- ������ ������������ +## 1.3.3���2022-01-24��� +- ������ left-width/right-width������ ��������������������������������� +## 1.3.2���2022-01-18��� +- ������ ���vue������������������������������bug +## 1.3.1���2022-01-18��� +- ������ height ������������������ +## 1.3.0���2022-01-18��� +- ������ height ������,��������������������� +- ������ dark ������������������������������ +- ������ ��������������������������������� +- ������ ������������������������������������ +## 1.2.1���2022-01-10��� +- ������ color ������������������bug +## 1.2.0���2021-11-19��� +- ������ ������UI���������������������������������:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- ���������������������:[https://uniapp.dcloud.io/component/uniui/uni-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +## 1.1.0���2021-07-30��� +- ������������ vue3���������������vue3��������������� [uni-app ������������ vue3 ������](https://ask.dcloud.net.cn/article/37834) +## 1.0.11���2021-05-12��� +- ������ ������������������ +## 1.0.10���2021-04-30��� +- ������ ���nvue���fixed���true������������������������Bug +## 1.0.9���2021-04-21��� +- ������ ������������ uni-icons, ��������������������������� +## 1.0.8���2021-04-14��� +- uni-ui ������ uni-nav-bar ��� fixed ��������� true ��������������������� bug + +## 1.0.7���2021-02-25��� +- ������ easycom ��������������� uni-status-bar ���bug + +## 1.0.6���2021-02-05��� +- ������ ���������������������������uni_modules������������ + +## 1.0.5���2021-02-05��� +- ���������uni_modules������������ diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 0000000..c890860 --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,357 @@ +<template> + <view class="uni-navbar" :class="{'uni-dark':dark, 'uni-nvue-fixed': fixed}"> + <view class="uni-navbar__content" :class="{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }" + :style="{ 'background-color': themeBgColor, 'border-bottom-color':themeColor }" > + <status-bar v-if="statusBar" /> + <view :style="{ color: themeColor,backgroundColor: themeBgColor ,height:navbarHeight}" + class="uni-navbar__header"> + <view @tap="onClickLeft" class="uni-navbar__header-btns uni-navbar__header-btns-left" + :style="{width:leftIconWidth}"> + <slot name="left"> + <view class="uni-navbar__content_view" v-if="leftIcon.length > 0"> + <uni-icons :color="themeColor" :type="leftIcon" size="20" /> + </view> + <view :class="{ 'uni-navbar-btn-icon-left': !leftIcon.length > 0 }" class="uni-navbar-btn-text" + v-if="leftText.length"> + <text :style="{ color: themeColor, fontSize: '12px' }">{{ leftText }}</text> + </view> + </slot> + </view> + <view class="uni-navbar__header-container " @tap="onClickTitle"> + <slot> + <view class="uni-navbar__header-container-inner" v-if="title.length>0"> + <text class="uni-nav-bar-text uni-ellipsis-1" + :style="{color: themeColor }">{{ title }}</text> + </view> + </slot> + </view> + <view @click="onClickRight" class="uni-navbar__header-btns uni-navbar__header-btns-right" + :style="{width:rightIconWidth}"> + <slot name="right"> + <view v-if="rightIcon.length"> + <uni-icons :color="themeColor" :type="rightIcon" size="22" /> + </view> + <view class="uni-navbar-btn-text" v-if="rightText.length && !rightIcon.length"> + <text class="uni-nav-bar-right-text" :style="{ color: themeColor}">{{ rightText }}</text> + </view> + </slot> + </view> + </view> + </view> + <!-- #ifndef APP-NVUE --> + <view class="uni-navbar__placeholder" v-if="fixed"> + <status-bar v-if="statusBar" /> + <view class="uni-navbar__placeholder-view" :style="{ height:navbarHeight}" /> + </view> + <!-- #endif --> + </view> +</template> + +<script> + import statusBar from "./uni-status-bar.vue"; + const getVal = (val) => typeof val === 'number' ? val + 'px' : val; + + /** + * + * + * NavBar ������������������ + * @description ������������������������������������������ + * @tutorial https://ext.dcloud.net.cn/plugin?id=52 + * @property {Boolean} dark ������������������ + * @property {String} title ������������ + * @property {String} leftText ������������������ + * @property {String} rightText ������������������ + * @property {String} leftIcon ��������������������������������������� [Icon ������](http://ext.dcloud.net.cn/plugin?id=28) type ��������� + * @property {String} rightIcon ��������������������������������������� [Icon ������](http://ext.dcloud.net.cn/plugin?id=28) type ��������� + * @property {String} color ��������������������� + * @property {String} backgroundColor ��������������������� + * @property {Boolean} fixed = [true|false] ������������������ + * @property {Boolean} statusBar = [true|false] ��������������������� + * @property {Boolean} shadow = [true|false] ��������������������������� + * @property {Boolean} stat ������������������������������ + * @event {Function} clickLeft ��������������������������� + * @event {Function} clickRight ��������������������������� + * @event {Function} clickTitle ��������������������������� + */ + export default { + name: "UniNavBar", + components: { + statusBar + }, + emits: ['clickLeft', 'clickRight', 'clickTitle'], + props: { + dark: { + type: Boolean, + default: false + }, + title: { + type: String, + default: "" + }, + leftText: { + type: String, + default: "" + }, + rightText: { + type: String, + default: "" + }, + leftIcon: { + type: String, + default: "" + }, + rightIcon: { + type: String, + default: "" + }, + fixed: { + type: [Boolean, String], + default: false + }, + color: { + type: String, + default: "" + }, + backgroundColor: { + type: String, + default: "" + }, + statusBar: { + type: [Boolean, String], + default: false + }, + shadow: { + type: [Boolean, String], + default: false + }, + border: { + type: [Boolean, String], + default: true + }, + height: { + type: [Number, String], + default: 44 + }, + leftWidth: { + type: [Number, String], + default: 60 + }, + rightWidth: { + type: [Number, String], + default: 60 + }, + stat: { + type: [Boolean, String], + default: '' + } + }, + computed: { + themeBgColor() { + if (this.dark) { + // ��������� + if (this.backgroundColor) { + return this.backgroundColor + } else { + return this.dark ? '#333' : '#FFF' + } + } + return this.backgroundColor || '#FFF' + }, + themeColor() { + if (this.dark) { + // ��������� + if (this.color) { + return this.color + } else { + return this.dark ? '#fff' : '#333' + } + } + return this.color || '#333' + }, + navbarHeight() { + return getVal(this.height) + }, + leftIconWidth() { + return getVal(this.leftWidth) + }, + rightIconWidth() { + return getVal(this.rightWidth) + } + }, + mounted() { + if (uni.report && this.stat && this.title !== '') { + uni.report('title', this.title) + } + }, + methods: { + onClickLeft() { + this.$emit("clickLeft"); + }, + onClickRight() { + this.$emit("clickRight"); + }, + onClickTitle() { + this.$emit("clickTitle"); + } + } + }; +</script> + +<style lang="scss" scoped> + $nav-height: 44px; + + .uni-nvue-fixed { + /* #ifdef APP-NVUE */ + position: sticky; + /* #endif */ + } + .uni-navbar { + // box-sizing: border-box; + } + + .uni-nav-bar-text { + /* #ifdef APP-PLUS */ + font-size: 34rpx; + /* #endif */ + /* #ifndef APP-PLUS */ + font-size: 14px; + /* #endif */ + } + + .uni-nav-bar-right-text { + font-size: 12px; + } + + .uni-navbar__content { + position: relative; + // background-color: #fff; + // box-sizing: border-box; + background-color: transparent; + } + + .uni-navbar__content_view { + // box-sizing: border-box; + } + + .uni-navbar-btn-text { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: flex-start; + align-items: center; + line-height: 12px; + } + + .uni-navbar__header { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + padding: 0 10px; + flex-direction: row; + height: $nav-height; + font-size: 12px; + } + + .uni-navbar__header-btns { + /* #ifndef APP-NVUE */ + overflow: hidden; + display: flex; + /* #endif */ + flex-wrap: nowrap; + flex-direction: row; + width: 120rpx; + // padding: 0 6px; + justify-content: center; + align-items: center; + /* #ifdef H5 */ + cursor: pointer; + /* #endif */ + } + + .uni-navbar__header-btns-left { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + width: 120rpx; + justify-content: flex-start; + align-items: center; + } + + .uni-navbar__header-btns-right { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + // width: 150rpx; + // padding-right: 30rpx; + justify-content: flex-end; + align-items: center; + } + + .uni-navbar__header-container { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex: 1; + padding: 0 10px; + overflow: hidden; + } + + .uni-navbar__header-container-inner { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex: 1; + flex-direction: row; + align-items: center; + justify-content: center; + font-size: 12px; + overflow: hidden; + // box-sizing: border-box; + } + + + .uni-navbar__placeholder-view { + height: $nav-height; + } + + .uni-navbar--fixed { + position: fixed; + z-index: 998; + /* #ifdef H5 */ + left: var(--window-left); + right: var(--window-right); + /* #endif */ + /* #ifndef H5 */ + left: 0; + right: 0; + /* #endif */ + + } + + .uni-navbar--shadow { + box-shadow: 0 1px 6px #ccc; + } + + .uni-navbar--border { + border-bottom-width: 1rpx; + border-bottom-style: solid; + border-bottom-color: #eee; + } + + .uni-ellipsis-1 { + overflow: hidden; + /* #ifndef APP-NVUE */ + white-space: nowrap; + text-overflow: ellipsis; + /* #endif */ + /* #ifdef APP-NVUE */ + lines: 1; + text-overflow: ellipsis; + /* #endif */ + } + + // ��������������� + .uni-dark {} +</style> diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue new file mode 100644 index 0000000..4ac73ae --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue @@ -0,0 +1,24 @@ +<template> + <view :style="{ height: statusBarHeight }" class="uni-status-bar"> + <slot /> + </view> +</template> + +<script> + export default { + name: 'UniStatusBar', + data() { + return { + statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px' + } + } + } +</script> + +<style lang="scss" > + .uni-status-bar { + // width: 750rpx; + height: 20px; + // height: var(--status-bar-height); + } +</style> diff --git a/uni_modules/uni-nav-bar/package.json b/uni_modules/uni-nav-bar/package.json new file mode 100644 index 0000000..240ae95 --- /dev/null +++ b/uni_modules/uni-nav-bar/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-nav-bar", + "displayName": "uni-nav-bar ������������������", + "version": "1.3.11", + "description": "������������������������������������������������������", + "keywords": [ + "uni-ui", + "������", + "���������", + "������������������" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "���", + "data": "���", + "permissions": "���" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "���������������(Android)": "y", + "QQ���������(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "���������": { + "������": "y", + "������": "y", + "������": "y", + "������������": "y", + "QQ": "y" + }, + "���������": { + "������": "u", + "������": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-nav-bar/readme.md b/uni_modules/uni-nav-bar/readme.md new file mode 100644 index 0000000..3934b32 --- /dev/null +++ b/uni_modules/uni-nav-bar/readme.md @@ -0,0 +1,15 @@ + + +## NavBar ��������� +> **������������uni-nav-bar** +> ������������ `uNavBar` + +��������������������������������������������� + +### [������������](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +#### ������������������������������������������������uni-ui������������������������������������ uni-ui ������������871950839 + + + + + diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3���2022-01-21��� +- ������ ������������ +## 1.0.2���2021-11-22��� +- ������ / ��������� vue ��������������������������������������������� +## 1.0.1���2021-11-22��� +- ������ vue3���scss������������������ +## 1.0.0���2021-11-18��� +- init diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss ������������", + "version": "1.0.3", + "description": "uni-sass���uni-ui��������������������������� ���������������������������������sass���������������������������������������������������������������������������������", + "keywords": [ + "uni-scss", + "uni-ui", + "������������" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "������ SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "���", + "data": "���", + "permissions": "���" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "���������������(Android)": "y", + "QQ���������(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "���������": { + "������": "y", + "������": "y", + "������": "y", + "������������": "y", + "QQ": "y" + }, + "���������": { + "������": "n", + "������": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` ��� `uni-ui`��������������������������� ���������������������������������`sass`��������������������������������������������������������������������������������� + +### [������������](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### ������������������������������������������������uni-ui������������������������������������ uni-ui ������������871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO ��������������� class ��������������������������������� ��������������������������������������� +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // ������ + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // ��������� + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // ��������� + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // ��������� + bg-color: $uni-bg-color, + // ������������ + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // ������ + black:$uni-black, + // ������ + white:$uni-white, + // ������ + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO ��������������������������������������� + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// ������������������ +$uni-space-root: 2 !default; +// ��������������������� +$uni-radius-root:5px !default; +$uni-radius: () !default; +// ������������������ +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO ��������������������������� sm ������ + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// ������������ +$body-font-family: 'Roboto', sans-serif !default; +// ������ +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// ������ +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// ��������� +// ������������������������������������������������������������������������������������������������������������ +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// ��������� +// ��������������������������������������������������������������������������������������������������������� +$uni-main-color: #3a3a3a !default; // ������������ +$uni-base-color: #6a6a6a !default; // ������������ +$uni-secondary-color: #909399 !default; // ������������ +$uni-extra-color: #c7c7c7 !default; // ������������ + +// ������������ +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// ��������� +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// ��������� +$uni-bg-color: #f7f7f7 !default; + +/* ������������ */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// ������ +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// ������ +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// ������ map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// ������������������ +$uni-space-root: 2; +// ��������������������� +$uni-radius-root:5px; +// ������ +$uni-primary: #2979ff; +// ��������� +$uni-success: #4cd964; +// ��������� +$uni-warning: #f0ad4e; +// ��������� +$uni-error: #dd524d; +// ��������� +$uni-info: #909399; +// ��������� +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// ��������� +$uni-bg-color: #f5f5f5; +// ������������ +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// ��������� +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// ������������������ +$uni-space-root: 2; +// ��������������������� +$uni-radius-root:5px; + +// ������ +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// ��������� +// ������������������������������������������������������������������������������������������������������������ +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// ��������� +// ��������������������������������������������������������������������������������������������������������� +$uni-main-color: #3a3a3a; // ������������ +$uni-base-color: #6a6a6a; // ������������ +$uni-secondary-color: #909399; // ������������ +$uni-extra-color: #c7c7c7; // ������������ + +// ������������ +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// ��������� +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// ��������� +$uni-bg-color: #f7f7f7; + +/* ������������ */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// ������ +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// ������ +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/utils/login.js b/utils/login.js index aec9bba..dd08b18 100644 --- a/utils/login.js +++ b/utils/login.js @@ -1,4 +1,5 @@ import request from '@/utils/request' +import store from '@/store/index.js' export function login(params) { return new Promise((resolve, reject) => { request.post('/AppUser/logins', params, false).then(result => { @@ -16,13 +17,13 @@ } export function getUserInfor(token) { request.post('/getUserInfo', token).then(result => { - uni.setStorageSync('userInfo', JSON.stringify(result.data)) + uni.setStorageSync('userInfor', JSON.stringify(result.data)) }) } export function getDic() { request.get('/dict/list').then(result => { - uni.setStorageSync('dict', JSON.stringify(result.data)) - uni.setStorageSync('dictObj', JSON.stringify(objToArr(result.data))) + store.commit('setDict', result.data) + store.commit('setDictObj', objToArr(result.data)) }) } diff --git a/utils/request.js b/utils/request.js index 8496956..d863cdf 100644 --- a/utils/request.js +++ b/utils/request.js @@ -1,4 +1,5 @@ import storage from './storage' // ������������ +import store from '../store/index.js' export default { console(options) { if (config.debug) { @@ -20,13 +21,14 @@ // loading������ uni.showLoading({ title: '���������', }) // ��������������������������������������������� + // uni.showLoading({ title: baseUrl, }) options.url = baseUrl + '' + options.url // ������������ options.method = options.method || 'GET' // ������������������ if (isLogin) { - let token = storage.get('token') - console.log('tokentoken', token) + let token = uni.getStorageSync('tonken') + console.log('token', token) if (token !== null) { // options.header["token"] = token; options.header = { @@ -40,7 +42,7 @@ return new Promise((resolve, reject) => { uni.request(options).then(data => { var [error, res] = data - if (error != null) { + if (error !== null) { reject(error) } else { // ��������������������������������������������������������������������������� diff --git a/utils/storage.js b/utils/storage.js index 64b7e43..76f25cb 100644 --- a/utils/storage.js +++ b/utils/storage.js @@ -1,30 +1,24 @@ export default { - set(name, value) { - uni.setStorageSync(name, value); - }, - - setJson(name, value) { - uni.setStorageSync(name, JSON.stringify(value)); - }, - - get(name) { - return uni.getStorageSync(name); - }, - - getJson(name) { - const content = uni.getStorageSync(name); - if (!content) { - return null; - } - - return JSON.parse(content); - }, - - remove(name) { - uni.removeStorageSync(name); - }, - - clear() { - uni.clearStorageSync(); - }, -}; + set(name, value) { + uni.setStorageSync(name, value) + }, + setJson(name, value) { + uni.setStorageSync(name, JSON.stringify(value)) + }, + get(name) { + return uni.getStorageSync(name) + }, + getJson(name) { + const content = uni.getStorageSync(name) + if (!content) { + return null + } + return JSON.parse(content) + }, + remove(name) { + uni.removeStorageSync(name) + }, + clear() { + uni.clearStorageSync() + }, +} \ No newline at end of file -- Gitblit v1.8.0