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