From 0becab45282781f281ad5aa04202b83039ab275e Mon Sep 17 00:00:00 2001 From: qingyiay <2386314947@qq.com> Date: 星期五, 14 四月 2023 17:42:08 +0800 Subject: [PATCH] 增加发运统计页面,修改websocket,增加消息推送 --- pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue | 13 pages/driver-page/drvier-my/drvier-my.vue | 13 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json | 12 pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue | 1 pages/tabbar-page/index-tabbar/index-tabbar.vue | 85 + pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue | 2 uni_modules/uni-calendar/package.json | 85 + App.vue | 19 store/index.js | 61 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json | 12 pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue | 23 pages/driver-page/appointment/appointment.vue | 2 uni_modules/uni-calendar/changelog.md | 26 pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue | 47 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js | 8 pages/freight-forwarder-page/freightForwarder-index/freightForwarder-index.vue | 4 pages/public-page/forward/forward.vue | 208 ++-- api/publicInterface.js | 4 uni_modules/uni-calendar/readme.md | 103 ++ uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue | 566 +++++++++++ pages/public-page/messageDetails/messageDetails.vue | 31 uni_modules/uni-calendar/components/uni-calendar/util.js | 360 +++++++ pages.json | 11 pages/customer-page/customer-my/customer-my.vue | 11 api/globalApi.js | 19 api/request.js | 8 uni_modules/uni-calendar/components/uni-calendar/calendar.js | 546 ++++++++++ uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue | 187 +++ pages/public-page/message/message.vue | 20 pages/customer-page/customer-my/faYunstatistics/faYunstatistics.vue | 471 +++++++++ uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json | 12 31 files changed, 2,743 insertions(+), 227 deletions(-) diff --git a/App.vue b/App.vue index 5eb0a20..2ff8874 100644 --- a/App.vue +++ b/App.vue @@ -1,18 +1,11 @@ <script> - export default { - onLaunch: function() { - console.log('App Launch') - }, - onShow: function() { - console.log('App Show') - }, - onHide: function() { - console.log('App Hide') - } - } +export default { + onShow() {}, + methods: {} +}; </script> <style lang="scss" scoped> - /*姣忎釜椤甸潰鍏叡css */ - @import '@/uni_modules/uview-ui/index.scss'; +/*姣忎釜椤甸潰鍏叡css */ +@import '@/uni_modules/uview-ui/index.scss'; </style> diff --git a/api/globalApi.js b/api/globalApi.js index dd627c7..0b51552 100644 --- a/api/globalApi.js +++ b/api/globalApi.js @@ -295,6 +295,23 @@ url: '/wrzs/appMessage/getMessageByUser', method: 'GET' }, + // 宸茶娑堟伅 readMessage: { url: '/wrzs/appMessage/readMessage' }, - delteMessage: { url: '/wrzs/appMessage/deleteMessage', method: 'GET' } + // 鍒犻櫎娑堟伅 + delteMessage: { url: '/wrzs/appMessage/deleteMessage', method: 'GET' }, + // 娑堟伅璇︽儏 + getMsgDetail: { + url: '/wrzs/appMessage/getMsgById', + method: 'GET' + }, + // 鍙戣繍缁熻绛涢�夋潯浠� + getShippingCondition: { + url: '/wrzs/tmtaskcoal/getShippingCondition', + method: 'GET' + }, + // 鍙戣繍缁熻鏁版嵁 + getTmTaskCoalData: { + url: '/wrzs/tmtaskcoal/getTmTaskCoalData', + method: 'GET' + } } diff --git a/api/publicInterface.js b/api/publicInterface.js index 59e40cc..e850135 100644 --- a/api/publicInterface.js +++ b/api/publicInterface.js @@ -3,9 +3,9 @@ import { BaseUrl as wrBaseUrl } from '@/api/request.js' -// const BaseUrl = 'http://192.168.31.14:9999' +const BaseUrl = 'http://192.168.31.14:9999' // const BaseUrl = "http://hesuancj.cn:9999" -const BaseUrl = 'https://mx.jzeg.cn:9095' +// const BaseUrl = 'https://mx.jzeg.cn:9095' // const BaseUrl = 'http://192.168.31.18:9999' // 鐧诲綍 diff --git a/api/request.js b/api/request.js index 639bd3d..be2601b 100644 --- a/api/request.js +++ b/api/request.js @@ -81,14 +81,14 @@ // const BaseUrl = "http://192.168.31.18:9997" // const webSocketUrl = "ws://192.168.31.18:9997/wrzs/ws/info" -// const BaseUrl = "http://192.168.31.14:9997"; -// const webSocketUrl = "ws://192.168.31.14:9997/wrzs/ws/info" +const BaseUrl = "http://192.168.31.14:9997"; +const webSocketUrl = "ws://192.168.31.14:9997/wrzs/ws/info" // // 绾夸笂寮�鍙� // const BaseUrl = "http://hesuancj.cn:9997"; // const webSocketUrl = "ws://hesuancj.cn:9997/wrzs/ws/info" // // 绾夸笂鐢熶骇 -const BaseUrl = "https://mx.jzeg.cn:9095"; -const webSocketUrl = "wss://mx.jzeg.cn:9095/wrzs/ws/info" +// const BaseUrl = "https://mx.jzeg.cn:9095"; +// const webSocketUrl = "wss://mx.jzeg.cn:9095/wrzs/ws/info" // 璇锋眰鎷︽埅 diff --git a/pages.json b/pages.json index 7f71f99..c69b5d9 100644 --- a/pages.json +++ b/pages.json @@ -168,7 +168,16 @@ } } - ], + ,{ + "path" : "pages/customer-page/customer-my/faYunstatistics/faYunstatistics", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ], "subPackages": [{ "root": "pages/register", "pages": [{ diff --git a/pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue b/pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue index cbbb80a..866478c 100644 --- a/pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue +++ b/pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue @@ -160,6 +160,7 @@ color: #909399; } .label-value { + min-width: vww(85); margin-top: vww(10); color: #606266; } diff --git a/pages/customer-page/customer-my/customer-my.vue b/pages/customer-page/customer-my/customer-my.vue index 62643bc..4558572 100644 --- a/pages/customer-page/customer-my/customer-my.vue +++ b/pages/customer-page/customer-my/customer-my.vue @@ -33,6 +33,7 @@ </view> </view> + <view class="statistics"><u-button text="鍙戣繍缁熻" type="primary" @click="statistics"></u-button></view> <view class="logout"><u-button text="閫�鍑虹櫥褰�" type="primary" @click="logout()"></u-button></view> <!-- 鏂板缓杞﹂槦寮瑰嚭妗� --> @@ -274,12 +275,22 @@ }, logoutCancel() { this.logoutShow = false; + }, + // 璺宠浆鍙戣繍缁熻椤甸潰 + statistics() { + uni.navigateTo({ + url: '/pages/customer-page/customer-my/faYunstatistics/faYunstatistics' + }); } } }; </script> <style lang="scss" scoped> +.statistics { + margin-top: vww(10); + margin-bottom: vww(10); +} ::v-deep.customer-my { width: 94%; margin: 0 auto; diff --git a/pages/customer-page/customer-my/faYunstatistics/faYunstatistics.vue b/pages/customer-page/customer-my/faYunstatistics/faYunstatistics.vue new file mode 100644 index 0000000..4f89ef6 --- /dev/null +++ b/pages/customer-page/customer-my/faYunstatistics/faYunstatistics.vue @@ -0,0 +1,471 @@ +<template> + <view class="main"> + <view class="top-statistics"> + <view class="content-statistics"> + <view class="content-text">鍙戣繍缁熻</view> + <view class="content-text">鍏眥{ totalLength }}杞�</view> + <view class="content-text">鍏眥{ totalTon }}鍚�</view> + </view> + </view> + <view class="collapse-main"> + <u-collapse> + <u-collapse-item :title="dateRange" value="绛涢��"> + <view class="filter-main"> + <view class="filter-body"> + <view class="condition-name">鐓ょ锛�</view> + <view class="filter-name"> + <view class="filter-button" v-for="(item, index) in coalList" :key="index" @click="filterCondition(0, index, item.condition)"> + <u-button shape="circle" :text="item.condition" :type="item.active ? 'success' : ''" size="small"></u-button> + </view> + </view> + </view> + <view class="filter-body"> + <view class="condition-name">绫诲瀷锛�</view> + <view class="filter-name"> + <view class="filter-button" v-for="(item, index) in typeList" :key="index" @click="filterCondition(1, index, item.condition)"> + <u-button shape="circle" :text="item.condition" :type="item.active ? 'success' : ''" size="small"></u-button> + </view> + </view> + </view> + <view class="filter-body"> + <view class="condition-name">瀹㈡埛锛�</view> + <view class="filter-name"> + <view class="filter-button" v-for="(item, index) in customerList" :key="index" @click="filterCondition(2, index, item.condition)"> + <u-button shape="circle" :text="item.condition" :type="item.active ? 'success' : ''" size="small"></u-button> + </view> + </view> + </view> + <view class="filter-body" v-if="roleType == 1"> + <view class="condition-name">璐т唬锛�</view> + <view class="filter-name"> + <view class="filter-button" v-for="(item, index) in forwarderList" :key="index" @click="filterCondition(3, index, item.condition)"> + <u-button shape="circle" :text="item.condition" :type="item.active ? 'success' : ''" size="small"></u-button> + </view> + </view> + </view> + <view class="filter-body" v-if="roleType != 3"> + <view class="condition-name">杞﹂槦锛�</view> + <view class="filter-name"> + <view class="filter-button" v-for="(item, index) in fleetList" :key="index" @click="filterCondition(4, index, item.condition)"> + <u-button shape="circle" :text="item.condition" :type="item.active ? 'success' : ''" size="small"></u-button> + </view> + </view> + </view> + <view class="filter-body" v-if="roleType != 1"> + <view class="condition-name">鐭垮満锛�</view> + <view class="filter-name"> + <view class="filter-button" v-for="(item, index) in filedList" :key="index" @click="filterCondition(5, index, item.condition)"> + <u-button shape="circle" :text="item.condition" :type="item.active ? 'success' : ''" size="small"></u-button> + </view> + </view> + </view> + <view class="filter-body"> + <view class="condition-name">鏃ユ湡锛�</view> + <view class="filter-name"> + <u-button :text="dateselect" @click="opencalendar"></u-button> + <view class="filter-button"> + <uni-calendar + ref="calendar" + class="uni-calendar--hook" + :clear-date="true" + :date="info.date" + :insert="info.insert" + :lunar="info.lunar" + :startDate="info.startDate" + :endDate="info.endDate" + :range="info.range" + @confirm="confirm" + /> + </view> + </view> + </view> + </view> + </u-collapse-item> + </u-collapse> + </view> + <view class="date-information"> + <view class="statistics-card" v-for="(item, index) in filterList" :key="index"> + <view class="card-title"> + <view class="title-date">{{ item.condition }}</view> + <view class="title-number"> + 鍏眥{ item.taskCoalList.length }}杞� {{ + item.taskCoalList.reduce((prev, cur) => { + return prev + cur.clean; + }, 0) + }}鍚� + </view> + </view> + <view class="card-main" v-for="(value, i) in item.taskCoalList" :key="i"> + <view class="arrow-right"><u-icon name="arrow-right" size="50"></u-icon></view> + <view class="main-body"> + <view class="coal-name">鐓ょ:{{ value.coalName || '' }}</view> + <view class="clean">鎵ц閲�:{{ value.clean || 0 }}</view> + <view class="out-time">鍑哄満鏃堕棿:{{ value.outTime || '' }}</view> + <view class="car-number">杞︾墝鍙�:{{ value.carNo || '' }}</view> + <view class="filedName">鐭垮満:{{ value.filedName || '' }}</view> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> +export default { + data() { + return { + conditionList: [], + coalList: [], + typeList: [], + customerList: [], + forwarderList: [], + fleetList: [], + filedList: [], + isactive: false, + info: { + lunar: false, + range: true, + insert: false, + selected: [] + }, + first: '', + last: '', + taskList: [], + filterList: [], + totalLength: 0, + totalTon: 0 + }; + }, + onShow() { + this.firstDate(); + this.lastDate(); + this.getShipping(); + this.getTmTaskCoalData(); + }, + methods: { + firstDate() { + let y = new Date().getFullYear(); //鑾峰彇骞翠唤 + let m = new Date().getMonth() + 1; //鑾峰彇鏈堜唤 + let d = '01'; + m = m < 10 ? '0' + m : m; //鏈堜唤琛� 0 + this.first = [y, m, d].join('-'); + }, + lastDate() { + let y = new Date().getFullYear(); //鑾峰彇骞翠唤 + let m = new Date().getMonth() + 1; //鑾峰彇鏈堜唤 + let d = new Date(y, m, 0).getDate(); //鑾峰彇褰撴湀鏈�鍚庝竴鏃� + m = m < 10 ? '0' + m : m; //鏈堜唤琛� 0 + d = d < 10 ? '0' + d : d; //鏃ユ暟琛� 0 + this.last = [y, m, d].join('-'); + }, + // 绛涢�夋潯浠� + getShipping() { + this.$reqGet('getShippingCondition', { startTime: this.first, endTime: this.last }).then(res => { + this.conditionList = res.data; + this.coalList = res.data + .filter(v => v.conditionType == 0) + .map(item => { + return { + ...item, + active: false + }; + }); + this.typeList = res.data + .filter(v => v.conditionType == 1) + .map(item => { + return { + ...item, + active: false + }; + }); + this.customerList = res.data + .filter(v => v.conditionType == 2) + .map(item => { + return { + ...item, + active: false + }; + }); + this.forwarderList = res.data + .filter(v => v.conditionType == 3) + .map(item => { + return { + ...item, + active: false + }; + }); + this.fleetList = res.data + .filter(v => v.conditionType == 4) + .map(item => { + return { + ...item, + active: false + }; + }); + this.filedList = res.data + .filter(v => v.conditionType == 5) + .map(item => { + return { + ...item, + active: false + }; + }); + }); + }, + // 鑾峰彇鏁版嵁 + getTmTaskCoalData() { + uni.showLoading({ + title: '鍔犺浇涓�' + }); + this.$reqGet('getTmTaskCoalData', { startTime: this.first, endTime: this.last }).then(res => { + this.filterList = this.taskList = res.data; + if (this.filterList.length != 0) { + this.totalLength = this.filterList.map(v => v.taskCoalList.length).reduce((x, y) => x + y); + this.totalTon = this.filterList.map(v => + v.taskCoalList.reduce((prev, cur) => { + return cur.clean + prev; + }, 0) + ); + this.totalTon = this.totalTon.reduce((x, y) => x + y); + } else { + this.totalLength = 0; + this.totalTon = 0; + } + uni.hideLoading(); + }); + }, + // 绛涢�夋暟鎹� + filterCondition(value, i, data) { + switch (value) { + case 0: + this.coalList[i].active = !this.coalList[i].active; + break; + case 1: + this.typeList[i].active = !this.typeList[i].active; + break; + case 2: + this.customerList[i].active = !this.customerList[i].active; + break; + case 3: + this.forwarderList[i].active = !this.forwarderList[i].active; + break; + case 4: + this.fleetList[i].active = !this.fleetList[i].active; + break; + case 5: + this.filedList[i].active = !this.filedList[i].active; + break; + } + + const validateFn = key => (v, arr) => { + if (arr.length == 0) { + return true; + } else { + return arr.includes(v[key]); + } + }; + let conditionMapping = { + coalName: this.coalList.filter(v => v.active == true).map(item => item.condition), + orderType: this.typeList.filter(v => v.active == true).map(item => item.condition), + customerName: this.customerList.filter(v => v.active == true).map(item => item.condition), + xsUser2Name: this.forwarderList.filter(v => v.active == true).map(item => item.condition), + fleetName: this.fleetList.filter(v => v.active == true).map(item => item.condition), + filedName: this.filedList.filter(v => v.active == true).map(item => item.condition) + }; + + const mapping = { + coalName: validateFn('coalName'), + orderType: validateFn('orderType'), + customerName: validateFn('customerName'), + xsUser2Name: validateFn('xsUser2Name'), + fleetName: validateFn('fleetName'), + filedName: validateFn('filedName') + }; + this.filterList = this.taskList.map(val => { + return { + condition: val.condition, + conditionId: val.conditionId, + conditionType: val.conditionType, + taskCoalList: val.taskCoalList.filter(v => Reflect.ownKeys(conditionMapping).every(key => mapping[key](v, conditionMapping[key]))) + }; + }); + if (this.filterList.length != 0) { + this.totalLength = this.filterList.map(v => v.taskCoalList.length).reduce((x, y) => x + y); + this.totalTon = this.filterList.map(v => + v.taskCoalList.reduce((prev, cur) => { + return cur.clean + prev; + }, 0) + ); + this.totalTon = this.totalTon.reduce((x, y) => x + y); + } else { + this.totalLength = 0; + this.totalTon = 0; + } + }, + confirm(e) { + this.first = e.range.before; + this.last = e.range.after; + }, + opencalendar() { + this.$refs.calendar.open(); + } + }, + computed: { + roleType() { + return uni.getStorageSync('roleType'); + }, + dateRange() { + return `鏃ユ湡:${this.first}-${this.last}`; + }, + dateselect() { + return `${this.first}-${this.last}`; + } + }, + watch: { + dateselect(newV, old) { + let tempDate = `${this.first}-${this.last}`; + console.log(newV, '鏂�', old, '鏃�', tempDate, '涓�寮�濮�'); + if (newV != old && old != '-') { + this.first = newV.slice(0, 10); + this.last = newV.slice(11); + this.getTmTaskCoalData(); + } + } + } +}; +</script> + +<style lang="scss" scoped> +::v-deep .u-cell__value { + color: #9ec16c !important; + font-size: vww(18) !important; +} +::v-deep .filter-name:nth-last-child(1) { + .u-button { + width: 66%; + } +} +.main { + width: 96%; + margin: 0 auto; + background-color: #e8eaec; + /*椤堕儴缁熻鏍�*/ + .top-statistics { + width: 100%; + height: vww(50); + display: flex; + justify-content: center; + align-items: center; + .content-statistics { + width: 100%; + height: 100%; + padding: 0 vww(10); + display: flex; + justify-content: space-between; + align-items: center; + .content-text { + width: vww(80); + height: vww(30); + font-size: vww(20); + color: #393a3c; + } + } + } + // 閫夐」鎶樺彔妗� + .collapse-main { + width: 100%; + margin-top: vww(10); + background-color: #fff; + border: 1px solid #cccccc; + border-radius: vww(5); + .filter-main { + width: 100%; + display: flex; + flex-direction: column; + justify-content: space-around; + .filter-body { + width: 100%; + position: relative; + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + .condition-name { + font-size: vww(16); + } + .filter-name { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: flex-start; + position: relative; + top: vww(-34); + + .filter-button { + color: #393a3c; + height: vww(16); + padding: vww(8); + margin: vww(5) vww(5); + &:nth-child(1) { + margin-left: vww(48); + } + } + } + } + } + } + // 鏃ユ湡鍙戣繍 + .date-information { + width: 100%; + display: flex; + flex-direction: column; + .statistics-card { + width: 100%; + margin-top: vww(8); + border: 1px solid #cccccc; + border-radius: vww(5); + background-color: #fff; + min-height: vww(120); + display: flex; + flex-direction: column; + justify-content: space-between; + .card-title { + width: 100%; + height: vww(40); + line-height: vww(40); + padding-left: vww(5); + color: #bcbcbc; + border-bottom: 1px solid #cccccc; + display: flex; + .title-date { + width: vww(90); + margin-right: vww(10); + } + .title-number { + flex: 1; + } + } + .card-main { + width: 100%; + flex: 1; + position: relative; + .arrow-right { + position: absolute; + right: vww(14); + top: vww(18); + } + .main-body { + width: 80%; + height: vww(60); + margin-top: vww(5); + padding: vww(3); + color: #686868; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + } + } + } + } +} +</style> diff --git a/pages/driver-page/appointment/appointment.vue b/pages/driver-page/appointment/appointment.vue index 42e79ca..885ccc9 100644 --- a/pages/driver-page/appointment/appointment.vue +++ b/pages/driver-page/appointment/appointment.vue @@ -102,7 +102,7 @@ uni.navigateBack({ delta: 1 }); - }, 1000); + }, 500); } else { this.$u.toast(res.msg ? res.msg : '棰勭害澶辫触'); } diff --git a/pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue b/pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue index 53c8404..c5bc631 100644 --- a/pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue +++ b/pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue @@ -48,8 +48,8 @@ </template> <script> -let socket = null; import { webSocketUrl } from '@/api/request.js'; +import { mapState, mapMutations } from 'vuex'; export default { onLoad(value) { if (value.orderPlanId && value.yyId) { @@ -100,7 +100,7 @@ sceneId: '', gateCameraId: '', equipmentCode: '', - weigh: 30 + weigh: 0 } }; }, @@ -108,6 +108,7 @@ this.init(); }, computed: { + ...mapState(['globalweigh', 'globalinfraredStatus']), name() { return uni.getStorageSync('name'); }, @@ -255,50 +256,16 @@ } }); }, - /** - * 鍒濆鍖� weoSocket - */ - initWebSocket() { - let wsUrl = `${webSocketUrl}?access_token=${uni.getStorageSync('token')}`; - socket = uni.connectSocket({ - url: wsUrl, - header: { - CLIENT_TOC: 'Y' - }, - complete: res => { - console.log(res, 'socket缁撴灉'); - } - }); - socket.onOpen(() => { - console.log('onOpen'); - }); - // 鑾峰彇鏈嶅姟鍣ㄤ紶鏉ョ殑鏁版嵁锛屽仛鐩稿簲澶勭悊 - socket.onMessage(res => { - console.log('socketWeigh', res); - let nowWeighObj = JSON.parse(res.data.slice(7)); - if (nowWeighObj.eqCode == this.weighHouseCode) { - if (nowWeighObj.eqInfraredStatus) { - this.weighData.weigh = nowWeighObj.weigh; - } else { - this.weighData.weigh = nowWeighObj.weigh; - } - } - }); - socket.onClose(() => { - console.log('webSocketClose'); - this.$u.toast('纾呮埧涓柇'); - }); - socket.onError(err => { - console.log('socket鎶ラ敊', err); - this.$u.toast('鍑虹幇閿欒锛岃閲嶆柊杩涘叆璇ラ〉闈紝閲嶈瘯锛侊紒'); - }); - }, // 鏀剧┖ evacuation() { this.evacuationModalShow = true; }, // 鏀剧┖寮圭獥纭 evacuationConfirm() { + this.weighData = { + ...this.weighData, + weigh: this.globalweigh + }; let mix = Object.assign(this.weighData, this.getWeightHouseObj); this.$reqPost('getOneEvacuation', mix, 'json').then(res => { console.log(res, '绗竴娆℃斁绌�'); diff --git a/pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue b/pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue index 7db8d01..e0fdead 100644 --- a/pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue +++ b/pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue @@ -1,6 +1,6 @@ <template> <view class="coal-pick-up-bill"> - <view class="driver" style="background:url(https://hesuancj.cn:9095/appimg/image/coalBackgroud/coal-background.png) no-repeat;background-size:100% 100%;"> + <view class="driver" style="background:url(https://mx.jzeg.cn:9095/appimg/image/coalBackgroud/coal-background.png) no-repeat;background-size:100% 100%;"> <view class="driver-coalOne">鐢靛瓙鎻愮叅鍗�</view> <view class="driver-coalTwo"> <view>{{ coalData.code || '鏆傛棤璁㈠崟缂栧彿' }}</view> diff --git a/pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue b/pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue index 47564df..cea97c8 100644 --- a/pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue +++ b/pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue @@ -12,7 +12,7 @@ </view> <view class=""> 绾㈠: - <u--text :type="infraredStatus ? 'error' : 'success'" :text="infraredStatus ? '寮傚父' : '姝e父'" size="34"></u--text> + <u--text :type="globalinfraredStatus ? 'error' : 'success'" :text="globalinfraredStatus ? '寮傚父' : '姝e父'" size="34"></u--text> </view> <!-- <view class=""> 闆疯揪: @@ -40,9 +40,9 @@ <u-button type="primary" text="纭畾绉伴噸" - :disabled="realTimeWeigh == 0 || infraredStatus" + :disabled="realTimeWeigh == 0 || globalinfraredStatus" :loading="isConfirmWeighLoading" - loadingText="鍔犺浇涓�" + loadingText="纭" @click="confirmWeigh" ></u-button> <u-button type="primary" text="杩斿洖鍔犲噺鍚�" :disabled="addAndSubtractCoalDisabled" @click="addAndSubtractCoal" class="jiajian"></u-button> @@ -65,14 +65,16 @@ <script> let socket = null; import { webSocketUrl } from '@/api/request.js'; +import { mapState, mapMutations } from 'vuex'; +import toast from '../../../../../uni_modules/uview-ui/libs/config/props/toast'; export default { onLoad(params) { - console.log(params, '绗簩娆℃斁绌哄弬鏁�'); this.takeCoalId = params.takeCoalId; this.weighData.sceneId = params.sceneId; this.weighData.gateCameraId = params.gateCameraId; this.weighData.equipmentCode = params.gateCameraCode; this.weighHouseCode = params.weighHouseCode; + this.changeweighHouseCode(params.weighHouseCode); }, data() { return { @@ -118,6 +120,7 @@ }, watch: { realTimeWeigh(newV, oldV) { + console.log(newV); if (this.weighList.orderType == '澶栭攢' || this.weighList.orderType == '鍐呴攢') { if (this.weighList.skin == 0) { // this.temporaryWeighObj.skin = this.realTimeWeigh; @@ -137,13 +140,18 @@ this.temporaryWeighObj.clean = (this.weighList.hair - this.temporaryWeighObj.skin).toFixed(2); } } + }, + // 鐩戝惉閲嶉噺鍙樺寲 + globalweigh(v) { + this.weighData.weigh = this.realTimeWeigh = v; } }, onShow() { this.init(); - this.initWebSocket(); + // this.initWebSocket(); }, computed: { + ...mapState(['globalweigh', 'globalinfraredStatus']), token() { return uni.getStorageSync('token'); }, @@ -167,6 +175,7 @@ } }, methods: { + ...mapMutations(['changeweighHouseCode']), init() { // 鑾峰彇绉伴噸淇℃伅 this.$reqGet('weighList', { id: this.takeCoalId }).then(res => { @@ -216,6 +225,8 @@ }); this.isConfirmWeighLoading = false; }, 1000); + } else { + this.$u.toast('绉伴噸澶辫触锛岃绋嶅悗閲嶈瘯'); } }) .catch(err => { @@ -259,8 +270,6 @@ socket.onMessage(res => { console.log('socketWeigh', res); let nowWeighObj = JSON.parse(res.data.slice(7)); - console.log(nowWeighObj); - // 涓�寮�濮嬫槸weighHouseCode if (nowWeighObj.eqCode == this.weighHouseCode) { if (nowWeighObj.eqInfraredStatus) { this.infraredStatus = true; diff --git a/pages/driver-page/drvier-my/drvier-my.vue b/pages/driver-page/drvier-my/drvier-my.vue index 464386b..1233de8 100644 --- a/pages/driver-page/drvier-my/drvier-my.vue +++ b/pages/driver-page/drvier-my/drvier-my.vue @@ -52,12 +52,13 @@ <u-button text="閫�鍑虹櫥褰�" type="primary" @click="logout"></u-button> <u-button text="淇敼涓汉璧勬枡" type="primary" @click="editBtnClick"></u-button> </view> + <view class="statistics"><u-button text="鍙戣繍缁熻" type="primary" @click="statistics"></u-button></view> </view> <!-- 鍥剧墖棰勮寮瑰嚭妗� --> <view class="previewImage-container"> <u-popup :show="previewImageShow" mode="center" @close="previewImageClose" @open="previewImageOpen"> - <u--image :src="previewImageSrc!=null?BaseUrl + previewImageSrc:''" width="400px" height="400px"></u--image> + <u--image :src="previewImageSrc != null ? BaseUrl + previewImageSrc : ''" width="400px" height="400px"></u--image> </u-popup> </view> @@ -258,12 +259,22 @@ }, logoutCancel() { this.logoutShow = false; + }, + // 璺宠浆鍙戣繍缁熻椤甸潰 + statistics() { + uni.navigateTo({ + url: '/pages/customer-page/customer-my/faYunstatistics/faYunstatistics' + }); } } }; </script> <style lang="scss" scoped> +.statistics { + margin-top: vww(10); + margin-bottom: vww(10); +} ::v-deep.driver-my { width: 90%; margin: 0 auto; diff --git a/pages/freight-forwarder-page/freightForwarder-index/freightForwarder-index.vue b/pages/freight-forwarder-page/freightForwarder-index/freightForwarder-index.vue index 8537405..9e48a5c 100644 --- a/pages/freight-forwarder-page/freightForwarder-index/freightForwarder-index.vue +++ b/pages/freight-forwarder-page/freightForwarder-index/freightForwarder-index.vue @@ -8,9 +8,7 @@ <text>{{ item.carNum }}</text> 寮� </view> - <view class="card-left__utils"> - <u-button text="杞彂" type="primary" @tap.stop="forwardClick(item)" shape="circle" v-if="item.carNumSurplusHuodai !== 0"></u-button> - </view> + <view class="card-left__utils"><u-button text="杞彂" type="primary" @tap.stop="forwardClick(item)" shape="circle"></u-button></view> </template> <template v-slot:right-top> <view class="right-top"> diff --git a/pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue b/pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue index 8db9103..01a7f7b 100644 --- a/pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue +++ b/pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue @@ -34,7 +34,10 @@ <view class="addCarButton"><u-button text="娣诲姞" type="primary" @click="addNewGroupClick"></u-button></view> </u-popup> </view> + + <view class="statistics"><u-button text="鍙戣繍缁熻" type="primary" @click="statistics"></u-button></view> <view class="utils"><u-button text="閫�鍑虹櫥褰�" type="primary" @click="logout"></u-button></view> + <!-- 鍒犻櫎杞﹂槦妯℃�佹 --> <view class="deleteFleetModal"> <u-modal @@ -167,12 +170,22 @@ }, logoutCancel() { this.logoutShow = false; + }, + // 璺宠浆鍙戣繍缁熻椤甸潰 + statistics() { + uni.navigateTo({ + url: '/pages/customer-page/customer-my/faYunstatistics/faYunstatistics' + }); } } }; </script> <style lang="scss" scoped> +.statistics { + margin-top: vww(10); + margin-bottom: vww(10); +} ::v-deep.freightForwarder-my { width: 94%; margin: 0 auto; diff --git a/pages/public-page/forward/forward.vue b/pages/public-page/forward/forward.vue index 885473b..57a8e42 100644 --- a/pages/public-page/forward/forward.vue +++ b/pages/public-page/forward/forward.vue @@ -54,18 +54,18 @@ </template> <script> -import { customerId } from '@/utils/status' +import { customerId } from '@/utils/status'; export default { onLoad(params) { - console.log(params, '杞彂椤甸潰鐨勫弬鏁�') + console.log(params, '杞彂椤甸潰鐨勫弬鏁�'); // 瀹㈡埛 - this.cars2 = Number(params.cars2) - this.carNumSurplus1 = Number(params.carNumSurplus1) + this.cars2 = Number(params.cars2); + this.carNumSurplus1 = Number(params.carNumSurplus1); // 璐т唬 - this.carNum = Number(params.carNum) - this.carNumSurplusHuodai = this.forwardSurplus = Number(params.carNumSurplusHuodai) - this.orderPlanId = params.orderPlanId + this.carNum = Number(params.carNum); + this.carNumSurplusHuodai = this.forwardSurplus = Number(params.carNumSurplusHuodai); + this.orderPlanId = params.orderPlanId; this.$reqGet('forwardList', { OrderPlanId: params.orderPlanId }).then(res => { if (res.data.length !== 0 && this.roleType == 1) { this.jhOrderPlanForwardList = res.data.map(item => { @@ -77,8 +77,8 @@ xsUserId: item.xsUserId === null ? 0 : item.xsUserId, fleetId: item.fleetId === null ? 0 : item.fleetId, checkboxValue1: '' - } - }) + }; + }); } else if (res.data.length !== 0 && this.roleType == 2) { this.jhOrderPlanForwardList = res.data.map(item => { return { @@ -89,19 +89,19 @@ xsUserId: item.xsUserId === null ? 0 : item.xsUserId, fleetId: item.fleetId === null ? 0 : item.fleetId, checkboxValue1: '' - } - }) + }; + }); } else { this.jhOrderPlanForwardList = this.jhOrderPlanForwardList.map(v => { if (!v.orderPlanId) { return { ...v, orderPlanId: params.orderPlanId - } + }; } - }) + }); } - }) + }); }, data() { return { @@ -132,155 +132,161 @@ carNum: '', carNumSurplusHuodai: '', formNum: 1 - } + }; }, onShow() { - this.init() + this.init(); if (this.roleType == 2) { - this.list1.splice(1, 1) - this.tabHuoDai = false + this.list1.splice(1, 1); + this.tabHuoDai = false; } }, computed: { roleType() { - return uni.getStorageSync('roleType') + return uni.getStorageSync('roleType'); }, text() { - return `宸查鍙�${this.cars2}寮犳彁鐓ゅ崟,鍓╀綑${this.carNumSurplus1}寮犳彁鐓ゅ崟` + return `宸查鍙�${this.cars2}寮犳彁鐓ゅ崟,鍓╀綑${this.carNumSurplus1}寮犳彁鐓ゅ崟`; }, text1() { - return `宸叉嫢鏈�${this.carNum}寮犳彁鐓ゅ崟,鍓╀綑${this.carNumSurplusHuodai}寮犳彁鐓ゅ崟` + return `宸叉嫢鏈�${this.carNum}寮犳彁鐓ゅ崟,鍓╀綑${this.carNumSurplusHuodai}寮犳彁鐓ゅ崟`; } }, methods: { init() { - console.log('roleType', this.roleType) + console.log('roleType', this.roleType); switch (this.roleType) { case 1: - this.getAllHuoDaiByCustomerId() - this.getFleet() - break + this.getAllHuoDaiByCustomerId(); + this.getFleet(); + break; case 2: - this.getFleet() - break + this.getFleet(); + break; default: - break + break; } }, allrelay(x, y) { - let a = 0 + let a = 0; if (y != 0) { - a = Number(x) + Number(y) - return a + a = Number(x) + Number(y); + return a; } else { - return Number(x) + return Number(x); } }, allrelayto(x, y) { - let a = 0 + let a = 0; if (y != 0) { - a = Number(x) - Number(y) - return a + a = Number(x) - Number(y); + return a; } else { - return Number(x) + return Number(x); } }, checkboxChange(value, index) { - uni.setStorageSync('allrelay', this.jhOrderPlanForwardList[index].carNum) + uni.setStorageSync('allrelay', this.jhOrderPlanForwardList[index].carNum); this.jhOrderPlanForwardList = this.jhOrderPlanForwardList.map((v, i) => { return { ...v, ischecked: false - } - }) + }; + }); if (value.length != 0) { - let tempforwardSurplus = this.forwardSurplus - let tempcarNumSurplus1 = this.carNumSurplus1 + let tempforwardSurplus = this.forwardSurplus; + let tempcarNumSurplus1 = this.carNumSurplus1; // 璁$畻鍏ㄩ儴杞彂鏁� // 瀹㈡埛 if (this.roleType == 1) { - this.jhOrderPlanForwardList[index].carNum = this.allrelay(this.jhOrderPlanForwardList[index].carNum, tempcarNumSurplus1) + this.jhOrderPlanForwardList[index].carNum = this.allrelay(this.jhOrderPlanForwardList[index].carNum, tempcarNumSurplus1); } - tempcarNumSurplus1 = 0 + tempcarNumSurplus1 = 0; // 璐т唬 if (this.roleType == 2) { - this.jhOrderPlanForwardList[index].carNum = this.allrelay(this.jhOrderPlanForwardList[index].carNum, tempforwardSurplus) + this.jhOrderPlanForwardList[index].carNum = this.allrelay(this.jhOrderPlanForwardList[index].carNum, tempforwardSurplus); } - tempforwardSurplus = 0 + tempforwardSurplus = 0; // 閫夋嫨涓�涓悗鍏朵綑绂佹澶嶉�� this.jhOrderPlanForwardList.forEach((v, i) => { if (i !== index) { - v.ischecked = true + v.ischecked = true; } - }) + }); } else { - let tempforwardSurplus = this.forwardSurplus - let tempcarNumSurplus1 = this.carNumSurplus1 + let tempforwardSurplus = this.forwardSurplus; + let tempcarNumSurplus1 = this.carNumSurplus1; // 璐т唬 if (this.roleType == 2) { - this.jhOrderPlanForwardList[index].carNum = this.allrelayto(this.jhOrderPlanForwardList[index].carNum, this.forwardSurplus) + this.jhOrderPlanForwardList[index].carNum = this.allrelayto(this.jhOrderPlanForwardList[index].carNum, this.forwardSurplus); + if (this.jhOrderPlanForwardList[index].carNum <= 0) { + this.jhOrderPlanForwardList[index].carNum = 0; + } } // 瀹㈡埛 if (this.roleType == 1) { - this.jhOrderPlanForwardList[index].carNum = this.allrelayto(this.jhOrderPlanForwardList[index].carNum, this.carNumSurplus1) + this.jhOrderPlanForwardList[index].carNum = this.allrelayto(this.jhOrderPlanForwardList[index].carNum, this.carNumSurplus1); + if (this.jhOrderPlanForwardList[index].carNum <= 0) { + this.jhOrderPlanForwardList[index].carNum = 0; + } } } }, // 鑾峰彇璐т唬鍒楄〃 getAllHuoDaiByCustomerId() { this.$reqGet('getAllHuoDaiByCustomerId').then(res => { - this.huoDaiData = res.data - }) + this.huoDaiData = res.data; + }); }, // 鑾峰彇杞﹂槦鍒楄〃 getFleet() { this.$reqGet('getFleet').then(res => { - this.fleetData = res.data - }) + this.fleetData = res.data; + }); }, // 杞彂 forwardObjectClick(index) { - this.selectPopupShow = true - this.index = index + this.selectPopupShow = true; + this.index = index; }, selectPopupClose() { - this.selectPopupShow = false + this.selectPopupShow = false; }, selectPopupOpen() {}, // 杞彂閫夋嫨璐т唬 forwardHuoDaiObjectSelect(item, index) { this.$nextTick(() => { - let isableAdd = this.jhOrderPlanForwardList.filter(v => item.name === v.name) + let isableAdd = this.jhOrderPlanForwardList.filter(v => item.name === v.name); if (isableAdd.length > 0) { - this.$u.toast('瀛樺湪閲嶅娣诲姞') - this.selectPopupShow = true + this.$u.toast('瀛樺湪閲嶅娣诲姞'); + this.selectPopupShow = true; } else { - this.selectPopupShow = false - this.jhOrderPlanForwardList[this.index].xsUserId = item.userId - this.jhOrderPlanForwardList[this.index].name = item.name - this.jhOrderPlanForwardList[this.index].fleetId = 0 + this.selectPopupShow = false; + this.jhOrderPlanForwardList[this.index].xsUserId = item.userId; + this.jhOrderPlanForwardList[this.index].name = item.name; + this.jhOrderPlanForwardList[this.index].fleetId = 0; } - }) + }); }, // 杞彂閫夋嫨杞﹂槦 forwardFleetObjectSelect(item, index) { this.$nextTick(() => { - let isableAdd = this.jhOrderPlanForwardList.filter(v => item.name === v.name) + let isableAdd = this.jhOrderPlanForwardList.filter(v => item.name === v.name); if (isableAdd.length > 0) { - this.$u.toast('瀛樺湪閲嶅娣诲姞') - this.selectPopupShow = true + this.$u.toast('瀛樺湪閲嶅娣诲姞'); + this.selectPopupShow = true; } else { - this.selectPopupShow = false - this.jhOrderPlanForwardList[this.index].fleetId = item.id - this.jhOrderPlanForwardList[this.index].name = item.name - this.jhOrderPlanForwardList[this.index].xsUserId = 0 + this.selectPopupShow = false; + this.jhOrderPlanForwardList[this.index].fleetId = item.id; + this.jhOrderPlanForwardList[this.index].name = item.name; + this.jhOrderPlanForwardList[this.index].xsUserId = 0; } - }) + }); }, // 娣诲姞涓�缁勮〃鍗� addForm() { // 鍒ゆ柇鏄惁鏈変竴涓閫夛紝濡傛灉鏈夊垯绂佹鏂板姞鐨勫閫夛紝娌℃湁鍒欎笉绂佹 - let ischeck = this.jhOrderPlanForwardList.some(v => v.ischecked == true) + let ischeck = this.jhOrderPlanForwardList.some(v => v.ischecked == true); if (!ischeck) { this.jhOrderPlanForwardList.push({ orderPlanId: this.orderPlanId, @@ -290,7 +296,7 @@ fleetId: 0, checkboxValue1: '', ischecked: false - }) + }); } else { this.jhOrderPlanForwardList.push({ orderPlanId: this.orderPlanId, @@ -300,37 +306,37 @@ fleetId: 0, checkboxValue1: '', ischecked: true - }) + }); } }, // 鍒犻櫎涓�缁勮〃鍗� deleteGroup(index, v) { - let tempcarNum = v.carNum + let tempcarNum = v.carNum; if (v.id && this.jhOrderPlanForwardList[index].carNum !== tempcarNum) { this.$reqPost('deleteForward', { id: v.id }, 'params').then(res => { if (res.code === 0) { - this.jhOrderPlanForwardList.splice(index, 1) - this.$u.toast('鍒犻櫎鎴愬姛') + this.jhOrderPlanForwardList.splice(index, 1); + this.$u.toast('鍒犻櫎鎴愬姛'); } else if (res.code === 1) { - this.$u.toast(res.msg) + this.$u.toast(res.msg); } - }) + }); } else { - this.jhOrderPlanForwardList.splice(index, 1) - this.$u.toast('鍒犻櫎鎴愬姛') + this.jhOrderPlanForwardList.splice(index, 1); + this.$u.toast('鍒犻櫎鎴愬姛'); } }, // 鎻愪氦 submitForm() { - let isPass = false + let isPass = false; if (this.jhOrderPlanForwardList.length === 0) { - this.$u.toast('璇疯嚦灏戦�夋嫨涓�缁勮浆鍙戝璞�') + this.$u.toast('璇疯嚦灏戦�夋嫨涓�缁勮浆鍙戝璞�'); } this.jhOrderPlanForwardList.forEach(v => { if (isNaN(Number(v.carNum)) || Number(v.carNum) <= 0) { - this.$u.toast('璇疯緭鍏ュ悎娉曟暟瀛�') - isPass = false - return isPass + this.$u.toast('璇疯緭鍏ュ悎娉曟暟瀛�'); + isPass = false; + return isPass; } // else if (Number(v.carNum) > Number(this.forwardSurplus)) { // this.$u.toast('瓒呰繃鏈�澶ц鍗曞墿浣欓噺'); @@ -338,33 +344,33 @@ // return isPass; // } else { - isPass = true - return isPass + isPass = true; + return isPass; } - }) + }); if (isPass) { this.$reqPost('forward', this.jhOrderPlanForwardList, 'json').then(res => { - console.log(res, 'zh') + console.log(res, 'zh'); if (res.code == 0) { - this.$u.toast('鎻愪氦鎴愬姛') + this.$u.toast('鎻愪氦鎴愬姛'); setTimeout(() => { - uni.navigateBack({ delta: 1 }) - }, 1000) + uni.navigateBack({ delta: 1 }); + }, 1000); } else { - this.$u.toast(res.msg) + this.$u.toast(res.msg); } - }) + }); } }, tabClick(item) { if (item.name == '璐т唬') { - this.tabHuoDai = true + this.tabHuoDai = true; } else { - this.tabHuoDai = false + this.tabHuoDai = false; } } } -} +}; </script> <style lang="scss" scoped> diff --git a/pages/public-page/message/message.vue b/pages/public-page/message/message.vue index 710e11d..e84b822 100644 --- a/pages/public-page/message/message.vue +++ b/pages/public-page/message/message.vue @@ -1,11 +1,11 @@ <template> <view class="message-body"> <u-empty mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png" v-if="messageList.length == 0" width="400" height="400" textSize="18"></u-empty> - <u-list @scrolltolower="scrolltolower" :height="1400"> + <u-list @scroll="scrolltolower" :height="1400"> <u-list-item> <u-swipe-action> <u-swipe-action-item :options="options1" v-for="(item, index) in messageList" :key="item.id" @click="deleteMsg(item, index)"> - <u-badge :isDot="true" type="error" v-if="item.status === 0"></u-badge> + <u-badge :isDot="true" type="error" v-if="item.status !== 1"></u-badge> <u-cell size="large" :title="item.title" :label="item.content" @click="messageDetails(item, index)"> <view class="prepose" slot="icon"><u-icon name="file-text" color="#a299a0" size="80"></u-icon></view> </u-cell> @@ -41,6 +41,10 @@ onShow() { this.messageReq(); }, + onHide() { + this.messageList = []; + this.pageNum = 1; + }, methods: { // 瑙﹀簳鍔犺浇 scrolltolower() { @@ -73,21 +77,13 @@ this.$reqAllJson('readMessage', { id: value.id, status: value.status }, { method: 'PUT', 'Content-Type': 'application/json' }).then(res => { if (res.code == 0) { uni.navigateTo({ - url: `/pages/public-page/messageDetails/messageDetails?index=${index}` + url: `/pages/public-page/messageDetails/messageDetails?messageId=${value.messageId}&id=${value.id}` }); - // uni.showLoading({ - // title: '鍔犺浇涓�' - // }); - // this.$reqGet('getMessageByUser', { current: 1, size: this.pageSize }).then(res => { - // uni.hideLoading(); - // this.total = res.data.total; - // this.messageList = res.data.records; - // }); } }); } else { uni.navigateTo({ - url: `/pages/public-page/messageDetails/messageDetails?index=${index}` + url: `/pages/public-page/messageDetails/messageDetails?messageId=${value.messageId}&id=${value.id}` }); } }, diff --git a/pages/public-page/messageDetails/messageDetails.vue b/pages/public-page/messageDetails/messageDetails.vue index 87b45f4..cca0914 100644 --- a/pages/public-page/messageDetails/messageDetails.vue +++ b/pages/public-page/messageDetails/messageDetails.vue @@ -1,19 +1,19 @@ <template> <view> <combined-title title="娑堟伅璇︽儏"></combined-title> - <view class="compDetails" v-for="(item, index) in detail" :key="index"> + <view class="compDetails"> <uni-table border stripe emptyText="鏆傛棤鏇村鏁版嵁"> <uni-tr> <uni-th align="left">娑堟伅鏍囬</uni-th> - <uni-td align="left">{{ item.title || '' }}</uni-td> + <uni-td align="left">{{ detail.title || '' }}</uni-td> </uni-tr> <uni-tr> <uni-th align="left">娑堟伅鍐呭</uni-th> - <uni-td align="left">{{ item.content || '' }}</uni-td> + <uni-td align="left">{{ detail.content || '' }}</uni-td> </uni-tr> <uni-tr> <uni-th align="left">鍒涘缓鏃堕棿</uni-th> - <uni-td align="left">{{ item.createTime || '' }}</uni-td> + <uni-td align="left">{{ detail.createTime || '' }}</uni-td> </uni-tr> </uni-table> </view> @@ -25,27 +25,22 @@ data() { return { index: '', - detail: [] + detail: {}, + messageId: '', + id: '' }; }, onLoad(v) { - this.index = v.index; + this.messageId = v.messageId; + this.id = v.id; }, onShow() { - this.messageReq(); + this.getDetail(); }, methods: { - messageReq() { - uni.showLoading({ - title: '鍔犺浇涓�' - }); - this.$reqGet('getMessageByUser', { current: 1, size: 10 }).then(res => { - if (res.code == 0) { - uni.hideLoading(); - this.detail = res.data.records.filter((v, i) => i == this.index); - } else { - this.$u.toast('鍔犺浇澶辫触'); - } + getDetail() { + this.$reqGet('getMsgDetail', { messageId: this.messageId, id: this.id }).then(res => { + this.detail = res.data; }); } } diff --git a/pages/tabbar-page/index-tabbar/index-tabbar.vue b/pages/tabbar-page/index-tabbar/index-tabbar.vue index e2db085..a42f5ec 100644 --- a/pages/tabbar-page/index-tabbar/index-tabbar.vue +++ b/pages/tabbar-page/index-tabbar/index-tabbar.vue @@ -12,6 +12,8 @@ ></freight-forwarder-index> <driver-index v-if="roleType == 3" ref="driverIndexRef" :indexdriverBillOfLoadingData="indexdriverBillOfLoadingData"></driver-index> <tab-bar :current="0"></tab-bar> + <!-- 鎺ㄩ�佹秷鎭脊绐� --> + <u-modal :show="messagePushShow" :title="messageList.title" :content="messageList.content" @confirm="messageconfirm"></u-modal> </view> </template> @@ -19,12 +21,17 @@ import customerIndex from '@/pages/customer-page/customer-index/customer-index.vue'; import driverIndex from '@/pages/driver-page/driver-index/driver-index.vue'; import freightForwarderIndex from '@/pages/freight-forwarder-page/freightForwarder-index/freightForwarder-index.vue'; -import { mapState } from 'vuex'; +import { mapState, mapMutations } from 'vuex'; +import { webSocketUrl } from '@/api/request.js'; +let socket = null; export default { components: { customerIndex, driverIndex, freightForwarderIndex + }, + computed: { + ...mapState(['globalweighHouseCode', 'globalweigh']) }, //棣栭〉涓嬫媺鍒锋柊 onPullDownRefresh() { @@ -46,6 +53,7 @@ this.$reqGet('GetOrderPlan').then(res => { if (res.data) { this.orderPlanDataStore = res.data; + this.$u.toast('鍔犺浇鎴愬姛'); uni.hideLoading(); uni.stopPullDownRefresh(); } else { @@ -56,6 +64,7 @@ this.$reqGet('huoDaiList').then(res => { if (res.data) { this.indexHuoDaiOrderPlanData = res.data; + this.$u.toast('鍔犺浇鎴愬姛'); uni.hideLoading(); uni.stopPullDownRefresh(); } else { @@ -64,7 +73,6 @@ }); } else if (this.roleType == 3) { this.$reqGet('qiangDanList').then(res => { - console.log(res, '鍒锋柊涔嬪悗鐨勬暟鎹�'); if (res.code == 0) { this.indexdriverBillOfLoadingData = res.data; this.$u.toast('鍔犺浇鎴愬姛'); @@ -101,14 +109,27 @@ orderPlanDataStore: [], indexHuoDaiOrderPlanData: [], indexHistoryCoalData: [], - indexdriverBillOfLoadingData: {} + indexdriverBillOfLoadingData: {}, + messagePushShow: false, + messageList: {}, + isconnect: false }; + }, + beforeDestroy() { + this.closeSocket(); }, onShow() { this.init(); + if (!this.isconnect) { + this.initWebsocket(); + } this.userAuthorization(); }, + onBackPress() { + this.closeSocket(); + }, methods: { + ...mapMutations(['pushMessage', 'changeWeigh', 'changeinfraredStatus']), messagePage() { uni.navigateTo({ url: '/pages/public-page/message/message' @@ -175,6 +196,64 @@ console.log('鑾峰彇澶辫触'); } }); + }, + // 鍒濆鍖杦ebsocket + initWebsocket() { + let wsUrl = `${webSocketUrl}?access_token=${uni.getStorageSync('token')}`; + socket = uni.connectSocket({ + url: wsUrl, + header: { + CLIENT_TOC: 'Y' + }, + complete: res => { + console.log(res, 'socket缁撴灉'); + if (res.errMsg == 'connectSocket:ok') { + this.isconnect = true; + } + } + }); + socket.onOpen(() => { + console.log('onOpen'); + }); + // 鑾峰彇鏈嶅姟鍣ㄤ紶鏉ョ殑鏁版嵁锛屽仛鐩稿簲澶勭悊 + socket.onMessage(res => { + console.log('socketWeigh', res); + if (res.data.startsWith('weigh')) { + let nowWeighObj = JSON.parse(res.data.slice(7)); + if (this.globalweighHouseCode && nowWeighObj.eqCode == this.globalweighHouseCode) { + if (nowWeighObj.eqInfraredStatus) { + this.changeinfraredStatus(true); + this.changeWeigh(nowWeighObj.weigh); + } else { + this.changeinfraredStatus(false); + this.changeWeigh(nowWeighObj.weigh); + } + } + } else { + this.messageList = JSON.parse(res.data.slice(5)); + this.messagePushShow = true; + } + }); + socket.onClose(() => { + console.log('webSocketClose'); + }); + socket.onError(err => { + console.log('socket鎶ラ敊', err); + this.$u.toast('鍑虹幇閿欒锛岃閲嶆柊杩涘叆璇ラ〉闈紝閲嶈瘯锛侊紒'); + }); + }, + closeSocket() { + socket.close({ + success(res) { + console.log('鍏抽棴鎴愬姛', res); + }, + fail(err) { + console.log('鍏抽棴澶辫触', err); + } + }); + }, + messageconfirm() { + this.messagePushShow = false; } } }; diff --git a/store/index.js b/store/index.js index ebd4104..1321749 100644 --- a/store/index.js +++ b/store/index.js @@ -5,29 +5,29 @@ // 鍔ㄦ�佸簳閮╰abbar const userRoleTabbar = { first: [{ - pagePath: "pages/tabbar-page/index-tabbar/index-tabbar", - iconPath: "../../static/tabBar-icon/Gfayun.png", - selectedIconPath: "../../static/tabBar-icon/Bfayun1.png", - text: "棣栭〉" + pagePath: 'pages/tabbar-page/index-tabbar/index-tabbar', + iconPath: '../../static/tabBar-icon/Gfayun.png', + selectedIconPath: '../../static/tabBar-icon/Bfayun1.png', + text: '棣栭〉' }, { - pagePath: "pages/tabbar-page/myPage-tabbar/myPage-tabbar", - iconPath: "../../static/tabBar-icon/Gmine10.png", - selectedIconPath: "../../static/tabBar-icon/Bmine57.png", - text: "鎴戠殑" + pagePath: 'pages/tabbar-page/myPage-tabbar/myPage-tabbar', + iconPath: '../../static/tabBar-icon/Gmine10.png', + selectedIconPath: '../../static/tabBar-icon/Bmine57.png', + text: '鎴戠殑' } ], second: [{ - pagePath: "pages/tabbar-page/index-tabbar/index-tabbar", - iconPath: "../../static/tabBar-icon/Ghome.png", - selectedIconPath: "../../static/tabBar-icon/Bhome.png", - text: "棣栭〉" + pagePath: 'pages/tabbar-page/index-tabbar/index-tabbar', + iconPath: '../../static/tabBar-icon/Ghome.png', + selectedIconPath: '../../static/tabBar-icon/Bhome.png', + text: '棣栭〉' }, { - pagePath: "pages/tabbar-page/myPage-tabbar/myPage-tabbar", - iconPath: "../../static/tabBar-icon/Gmine10.png", - selectedIconPath: "../../static/tabBar-icon/Bmine57.png", - text: "鎴戠殑" + pagePath: 'pages/tabbar-page/myPage-tabbar/myPage-tabbar', + iconPath: '../../static/tabBar-icon/Gmine10.png', + selectedIconPath: '../../static/tabBar-icon/Bmine57.png', + text: '鎴戠殑' } ] } @@ -37,7 +37,14 @@ userInfo: {}, roleType: null, // 1瀹㈡埛锛�2璐т唬锛�3鍙告満 userTabbar: [], // 鐢ㄦ埛鎵�鍦ㄨ鑹插簳閮ㄨ彍鍗曪紝 - fleetDriverDataLength: 0 + // 绉伴噸鏃剁殑閲嶉噺 + globalweigh: 0, + // 娑堟伅鎺ㄩ�� + globalmessage: '', + // 鍏ㄥ眬weihousecode + globalweighHouseCode: '', + // 鍏ㄥ眬绾㈠鐘舵�� + globalinfraredStatus: false }, mutations: { lengthchange(state, payload) { @@ -56,8 +63,24 @@ state.userTabbar = userRoleTabbar.second uni.setStorageSync('userTabbar', state.userTabbar) } - - + }, + // 鏀瑰彉閲嶉噺 + changeWeigh(state, payload) { + state.globalweigh = payload + console.log(state.globalweigh, '閲嶉噺鏀瑰彉浜�') + }, + // 娑堟伅鎺ㄩ�� + pushMessage(state, payload) { + state.globalmessage = payload + }, + // 鏀瑰彉weighHouseCode + changeweighHouseCode(state, payload) { + state.globalweighHouseCode = payload + console.log(state.globalweighHouseCode, 'globalweighHouseCode鏀瑰彉浜�') + }, + // 鏀瑰彉绾㈠鐘舵�� + changeinfraredStatus(state, payload) { + state.globalinfraredStatus = payload } } }) diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md new file mode 100644 index 0000000..f291eec --- /dev/null +++ b/uni_modules/uni-calendar/changelog.md @@ -0,0 +1,26 @@ +## 1.4.10锛�2023-04-10锛� +- 淇 鏌愪簺鎯呭喌 monthSwitch 鏈Е鍙戠殑Bug +## 1.4.9锛�2023-02-02锛� +- 淇 鏌愪簺鎯呭喌鍒囨崲鏈堜唤閿欒鐨凚ug +## 1.4.8锛�2023-01-30锛� +- 淇 鏌愪簺鎯呭喌鍒囨崲鏈堜唤閿欒鐨凚ug [璇︽儏](https://ask.dcloud.net.cn/question/161964) +## 1.4.7锛�2022-09-16锛� +- 浼樺寲 鏀寔浣跨敤 uni-scss 鎺у埗涓婚鑹� +## 1.4.6锛�2022-09-08锛� +- 淇 琛ㄥご骞存湀鍒囨崲锛屽鑷存敼鍙樺綋鍓嶆棩鏈熶负閫夋嫨鏈�1鍙凤紝涓旀湭瑙﹀彂change浜嬩欢鐨凚ug +## 1.4.5锛�2022-02-25锛� +- 淇 鏉′欢缂栬瘧 nvue 涓嶆敮鎸佺殑 css 鏍峰紡鐨凚ug +## 1.4.4锛�2022-02-25锛� +- 淇 鏉′欢缂栬瘧 nvue 涓嶆敮鎸佺殑 css 鏍峰紡鐨凚ug +## 1.4.3锛�2021-09-22锛� +- 淇 startDate銆� endDate 灞炴�уけ鏁堢殑Bug +## 1.4.2锛�2021-08-24锛� +- 鏂板 鏀寔鍥介檯鍖� +## 1.4.1锛�2021-08-05锛� +- 淇 寮瑰嚭灞傝 tabbar 閬洊鐨凚ug +## 1.4.0锛�2021-07-30锛� +- 缁勪欢鍏煎 vue3锛屽浣曞垱寤簐ue3椤圭洰锛岃瑙� [uni-app 椤圭洰鏀寔 vue3 浠嬬粛](https://ask.dcloud.net.cn/article/37834) +## 1.3.16锛�2021-05-12锛� +- 鏂板 缁勪欢绀轰緥鍦板潃 +## 1.3.15锛�2021-02-04锛� +- 璋冩暣涓簎ni_modules鐩綍瑙勮寖 diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100鍖洪棿鍐呯殑鍏巻銆佸啘鍘嗕簰杞� +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea鏉�(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex銆丄ttribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @鍏巻杞啘鍘嗭細calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @鍐滃巻杞叕鍘嗭細calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 鍐滃巻1900-2100鐨勬鼎澶у皬淇℃伅琛� + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 鍏巻姣忎釜鏈堜唤鐨勫ぉ鏁版櫘閫氳〃 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 澶╁共鍦版敮涔嬪ぉ骞查�熸煡琛� + * @Array Of Property trans["鐢�","涔�","涓�","涓�","鎴�","宸�","搴�","杈�","澹�","鐧�"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 澶╁共鍦版敮涔嬪湴鏀�熸煡琛� + * @Array Of Property + * @trans["瀛�","涓�","瀵�","鍗�","杈�","宸�","鍗�","鏈�","鐢�","閰�","鎴�","浜�"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 澶╁共鍦版敮涔嬪湴鏀�熸煡琛�<=>鐢熻倴 + * @Array Of Property + * @trans["榧�","鐗�","铏�","鍏�","榫�","铔�","椹�","缇�","鐚�","楦�","鐙�","鐚�"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24鑺傛皵閫熸煡琛� + * @Array Of Property + * @trans["灏忓瘨","澶у瘨","绔嬫槬","闆ㄦ按","鎯婅洶","鏄ュ垎","娓呮槑","璋烽洦","绔嬪","灏忔弧","鑺掔","澶忚嚦","灏忔殤","澶ф殤","绔嬬","澶勬殤","鐧介湶","绉嬪垎","瀵掗湶","闇滈檷","绔嬪啲","灏忛洩","澶ч洩","鍐嚦"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100鍚勫勾鐨�24鑺傛皵鏃ユ湡閫熸煡琛� + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 鏁板瓧杞腑鏂囬�熸煡琛� + * @Array Of Property + * @trans ['鏃�','涓�','浜�','涓�','鍥�','浜�','鍏�','涓�','鍏�','涔�','鍗�'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 鏃ユ湡杞啘鍘嗙О鍛奸�熸煡琛� + * @Array Of Property + * @trans ['鍒�','鍗�','寤�','鍗�'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 鏈堜唤杞啘鍘嗙О鍛奸�熸煡琛� + * @Array Of Property + * @trans ['姝�','涓�','浜�','涓�','鍥�','浜�','鍏�','涓�','鍏�','涔�','鍗�','鍐�','鑵�'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 杩斿洖鍐滃巻y骞翠竴鏁村勾鐨勬�诲ぉ鏁� + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 杩斿洖鍐滃巻y骞撮棸鏈堟槸鍝釜鏈堬紱鑻骞存病鏈夐棸鏈� 鍒欒繑鍥�0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闂板瓧缂栫爜 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 杩斿洖鍐滃巻y骞撮棸鏈堢殑澶╂暟 鑻ヨ骞存病鏈夐棸鏈堝垯杩斿洖0 + * @param lunar Year + * @return Number (0銆�29銆�30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 杩斿洖鍐滃巻y骞磎鏈堬紙闈為棸鏈堬級鐨勬�诲ぉ鏁帮紝璁$畻m涓洪棸鏈堟椂鐨勫ぉ鏁拌浣跨敤leapDays鏂规硶 + * @param lunar Year + * @return Number (-1銆�29銆�30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 鏈堜唤鍙傛暟浠�1鑷�12锛屽弬鏁伴敊璇繑鍥�-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 杩斿洖鍏巻(!)y骞磎鏈堢殑澶╂暟 + * @param solar Year + * @return Number (-1銆�28銆�29銆�30銆�31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 鑻ュ弬鏁伴敊璇� 杩斿洖-1 + var ms = m - 1 + if (ms == 1) { // 2鏈堜唤鐨勯棸骞宠寰嬫祴绠楀悗纭杩斿洖28鎴�29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 鍐滃巻骞翠唤杞崲涓哄共鏀邯骞� + * @param lYear 鍐滃巻骞寸殑骞翠唤鏁� + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 濡傛灉浣欐暟涓�0鍒欎负鏈�鍚庝竴涓ぉ骞� + if (zhiKey == 0) zhiKey = 12// 濡傛灉浣欐暟涓�0鍒欎负鏈�鍚庝竴涓湴鏀� + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 鍏巻鏈堛�佹棩鍒ゆ柇鎵�灞炴槦搴� + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 搴� + }, + + /** + * 浼犲叆offset鍋忕Щ閲忚繑鍥炲共鏀� + * @param offset 鐩稿鐢插瓙鐨勫亸绉婚噺 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 浼犲叆鍏巻(!)y骞磋幏寰楄骞寸n涓妭姘旂殑鍏巻鏃ユ湡 + * @param y鍏巻骞�(1900-2100)锛沶浜屽崄鍥涜妭姘斾腑鐨勭鍑犱釜鑺傛皵(1~24)锛涗粠n=1(灏忓瘨)绠楄捣 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;鎰忓嵆1987骞�2鏈�4鏃ョ珛鏄� + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 浼犲叆鍐滃巻鏁板瓧鏈堜唤杩斿洖姹夎閫氫織琛ㄧず娉� + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='鑵婃湀' + */ + toChinaMonth: function (m) { // 鏈� => \u6708 + if (m > 12 || m < 1) { return -1 } // 鑻ュ弬鏁伴敊璇� 杩斿洖-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 鍔犱笂鏈堝瓧 + return s + }, + + /** + * 浼犲叆鍐滃巻鏃ユ湡鏁板瓧杩斿洖姹夊瓧琛ㄧず娉� + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='寤夸竴' + */ + toChinaDay: function (d) { // 鏃� => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 骞翠唤杞敓鑲朳!浠呰兘澶ц嚧杞崲] => 绮剧‘鍒掑垎鐢熻倴鍒嗙晫绾挎槸鈥滅珛鏄モ�� + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='鍏�' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 浼犲叆闃冲巻骞存湀鏃ヨ幏寰楄缁嗙殑鍏巻銆佸啘鍘唎bject淇℃伅 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 鍙傛暟鍖洪棿1900.1.31~2100.12.31 + // 骞翠唤闄愬畾銆佷笂闄� + if (y < 1900 || y > 2100) { + return -1// undefined杞崲涓烘暟瀛楀彉涓篘aN + } + // 鍏巻浼犲弬鏈�涓嬮檺 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 鏈紶鍙� 鑾峰緱褰撳ぉ + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 淇ymd鍙傛暟 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 鏄惁浠婂ぉ + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 鏄熸湡鍑� + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 鏁板瓧琛ㄧず鍛ㄥ嚑椤哄簲澶╂湞鍛ㄤ竴寮�濮嬬殑鎯緥 + if (nWeek == 0) { + nWeek = 7 + } + // 鍐滃巻骞� + var year = i + var leap = this.leapMonth(i) // 闂板摢涓湀 + var isLeap = false + + // 鏁堥獙闂版湀 + for (i = 1; i < 13 && offset > 0; i++) { + // 闂版湀 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 璁$畻鍐滃巻闂版湀澶╂暟 + } else { + temp = this.monthDays(year, i)// 璁$畻鍐滃巻鏅�氭湀澶╂暟 + } + // 瑙i櫎闂版湀 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闂版湀瀵艰嚧鏁扮粍涓嬫爣閲嶅彔鍙栧弽 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 鍐滃巻鏈� + var month = i + // 鍐滃巻鏃� + var day = offset + 1 + // 澶╁共鍦版敮澶勭悊 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 褰撴湀鐨勪袱涓妭姘� + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 杩斿洖褰撴湀銆岃妭銆嶄负鍑犳棩寮�濮� + var secondNode = this.getTerm(y, (m * 2))// 杩斿洖褰撴湀銆岃妭銆嶄负鍑犳棩寮�濮� + + // 渚濇嵁12鑺傛皵淇骞叉敮鏈� + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 浼犲叆鐨勬棩鏈熺殑鑺傛皵涓庡惁 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 鏃ユ煴 褰撴湀涓�鏃ヤ笌 1900/1/1 鐩稿樊澶╂暟 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 璇ユ棩鏈熸墍灞炵殑鏄熷骇 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 浼犲叆鍐滃巻骞存湀鏃ヤ互鍙婁紶鍏ョ殑鏈堜唤鏄惁闂版湀鑾峰緱璇︾粏鐨勫叕鍘嗐�佸啘鍘唎bject淇℃伅 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[濡傛灉鏄啘鍘嗛棸鏈堢鍥涗釜鍙傛暟璧嬪�紅rue鍗冲彲] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 鍙傛暟鍖洪棿1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 浼犲弬瑕佹眰璁$畻璇ラ棸鏈堝叕鍘� 浣嗚骞村緱鍑虹殑闂版湀涓庝紶鍙傜殑鏈堜唤骞朵笉鍚� + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 瓒呭嚭浜嗘渶澶ф瀬闄愬�� + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 鍙傛暟鍚堟硶鎬ф晥楠� + + // 璁$畻鍐滃巻鐨勬椂闂村樊 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 澶勭悊闂版湀 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 杞崲闂版湀鍐滃巻 闇�琛ュ厖璇ュ勾闂版湀鐨勫墠涓�涓湀鐨勬椂宸� + if (isLeapMonth) { offset += day } + // 1900骞村啘鍘嗘鏈堜竴鏃ョ殑鍏巻鏃堕棿涓�1900骞�1鏈�30鏃�0鏃�0鍒�0绉�(璇ユ椂闂翠篃鏄湰鍐滃巻鐨勬渶寮�濮嬭捣濮嬬偣) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json new file mode 100644 index 0000000..fcbd13c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "ok", + "uni-calender.cancel": "cancel", + "uni-calender.today": "today", + "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" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/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-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json new file mode 100644 index 0000000..1ca43de --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "纭畾", + "uni-calender.cancel": "鍙栨秷", + "uni-calender.today": "浠婃棩", + "uni-calender.SUN": "鏃�", + "uni-calender.MON": "涓�", + "uni-calender.TUE": "浜�", + "uni-calender.WED": "涓�", + "uni-calender.THU": "鍥�", + "uni-calender.FRI": "浜�", + "uni-calender.SAT": "鍏�" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json new file mode 100644 index 0000000..e0fe33b --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "纰哄畾", + "uni-calender.cancel": "鍙栨秷", + "uni-calender.today": "浠婃棩", + "uni-calender.SUN": "鏃�", + "uni-calender.MON": "涓�", + "uni-calender.TUE": "浜�", + "uni-calender.WED": "涓�", + "uni-calender.THU": "鍥�", + "uni-calender.FRI": "浜�", + "uni-calender.SAT": "鍏�" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..a54135e --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,187 @@ +<template> + <view class="uni-calendar-item__weeks-box" :class="{ + 'uni-calendar-item--disable':weeks.disable, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) , + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + }" + @click="choiceDate(weeks)"> + <view class="uni-calendar-item__weeks-box-item"> + <text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text> + <text class="uni-calendar-item__weeks-box-text" :class="{ + 'uni-calendar-item--isDay-text': weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + '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, + }">{{weeks.date}}</text> + <text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{ + 'uni-calendar-item--isDay-text':weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + 'uni-calendar-item--before-checked':weeks.beforeMultiple, + 'uni-calendar-item--multiple': weeks.multiple, + 'uni-calendar-item--after-checked':weeks.afterMultiple, + }">{{todayText}}</text> + <text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{ + 'uni-calendar-item--isDay-text':weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + '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, + }">{{weeks.isDay ? todayText : (weeks.lunar.IDayCn === '鍒濅竴'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}</text> + <text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{ + 'uni-calendar-item--extra':weeks.extraInfo.info, + 'uni-calendar-item--isDay-text':weeks.isDay, + 'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, + 'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, + '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, + }">{{weeks.extraInfo.info}}</text> + </view> + </view> +</template> + +<script> + import { initVueI18n } from '@dcloudio/uni-i18n' + import i18nMessages from './i18n/index.js' + const { t } = initVueI18n(i18nMessages) + + export default { + emits:['change'], + props: { + weeks: { + type: Object, + default () { + return {} + } + }, + calendar: { + type: Object, + default: () => { + return {} + } + }, + selected: { + type: Array, + default: () => { + return [] + } + }, + lunar: { + type: Boolean, + default: false + } + }, + computed: { + todayText() { + return t("uni-calender.today") + }, + }, + methods: { + choiceDate(weeks) { + this.$emit('change', weeks) + } + } + } +</script> + +<style lang="scss" scoped> + $uni-font-size-base:14px; + $uni-text-color:#333; + $uni-font-size-sm:12px; + $uni-color-error: #e43d33; + $uni-opacity-disabled: 0.3; + $uni-text-color-disable:#c0c0c0; + $uni-primary: #2979ff !default; + .uni-calendar-item__weeks-box { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + } + + .uni-calendar-item__weeks-box-text { + font-size: $uni-font-size-base; + color: $uni-text-color; + } + + .uni-calendar-item__weeks-lunar-text { + font-size: $uni-font-size-sm; + color: $uni-text-color; + } + + .uni-calendar-item__weeks-box-item { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + align-items: center; + width: 100rpx; + height: 100rpx; + } + + .uni-calendar-item__weeks-box-circle { + position: absolute; + top: 5px; + right: 5px; + width: 8px; + height: 8px; + border-radius: 8px; + background-color: $uni-color-error; + + } + + .uni-calendar-item--disable { + background-color: rgba(249, 249, 249, $uni-opacity-disabled); + color: $uni-text-color-disable; + } + + .uni-calendar-item--isDay-text { + color: $uni-primary; + } + + .uni-calendar-item--isDay { + background-color: $uni-primary; + opacity: 0.8; + color: #fff; + } + + .uni-calendar-item--extra { + color: $uni-color-error; + opacity: 0.8; + } + + .uni-calendar-item--checked { + background-color: $uni-primary; + color: #fff; + opacity: 0.8; + } + + .uni-calendar-item--multiple { + background-color: $uni-primary; + color: #fff; + opacity: 0.8; + } + .uni-calendar-item--before-checked { + background-color: #ff5a5f; + color: #fff; + } + .uni-calendar-item--after-checked { + background-color: #ff5a5f; + color: #fff; + } +</style> diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..17c958d --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,566 @@ +<template> + <view class="uni-calendar"> + <view v-if="!insert&&show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}" @click="clean"></view> + <view v-if="insert || show" class="uni-calendar__content" :class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow}"> + <view v-if="!insert" class="uni-calendar__header uni-calendar--fixed-top"> + <view class="uni-calendar__header-btn-box" @click="close"> + <text class="uni-calendar__header-text uni-calendar--fixed-width">{{cancelText}}</text> + </view> + <view class="uni-calendar__header-btn-box" @click="confirm"> + <text class="uni-calendar__header-text uni-calendar--fixed-width">{{okText}}</text> + </view> + </view> + <view class="uni-calendar__header"> + <view class="uni-calendar__header-btn-box" @click.stop="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||'') +' / '+( nowDate.month||'')}}</text> + </picker> + <view class="uni-calendar__header-btn-box" @click.stop="next"> + <view class="uni-calendar__header-btn uni-calendar--right"></view> + </view> + <text class="uni-calendar__backtoday" @click="backToday">{{todayText}}</text> + + </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"> + <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" :lunar="lunar" @change="choiceDate"></calendar-item> + </view> + </view> + </view> + </view> + </view> +</template> + +<script> + import Calendar from './util.js'; + import CalendarItem from './uni-calendar-item.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 {Boolean} lunar 鏄剧ず鍐滃巻 + * @property {String} startDate 鏃ユ湡閫夋嫨鑼冨洿-寮�濮嬫棩鏈� + * @property {String} endDate 鏃ユ湡閫夋嫨鑼冨洿-缁撴潫鏃ユ湡 + * @property {Boolean} range 鑼冨洿閫夋嫨 + * @property {Boolean} insert = [true|false] 鎻掑叆妯″紡,榛樿涓篺alse + * @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 鏄惁閫夋嫨鏈堜唤涓鸿儗鏅� + * @event {Function} change 鏃ユ湡鏀瑰彉锛宍insert :ture` 鏃剁敓鏁� + * @event {Function} confirm 纭閫夋嫨`insert :false` 鏃剁敓鏁� + * @event {Function} monthSwitch 鍒囨崲鏈堜唤鏃惰Е鍙� + * @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" /> + */ + export default { + components: { + CalendarItem + }, + emits:['close','confirm','change','monthSwitch'], + props: { + date: { + type: String, + default: '' + }, + selected: { + type: Array, + default () { + return [] + } + }, + lunar: { + type: Boolean, + default: false + }, + startDate: { + type: String, + default: '' + }, + endDate: { + type: String, + default: '' + }, + range: { + type: Boolean, + default: false + }, + insert: { + type: Boolean, + default: true + }, + showMonth: { + type: Boolean, + default: true + }, + clearDate: { + type: Boolean, + default: true + } + }, + data() { + return { + show: false, + weeks: [], + calendar: {}, + nowDate: '', + aniMaskShow: false + } + }, + computed:{ + /** + * for i18n + */ + + okText() { + return t("uni-calender.ok") + }, + cancelText() { + return t("uni-calender.cancel") + }, + todayText() { + return t("uni-calender.today") + }, + 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") + }, + }, + watch: { + date(newVal) { + // this.cale.setDate(newVal) + this.init(newVal) + }, + startDate(val){ + this.cale.resetSatrtDate(val) + this.cale.setDate(this.nowDate.fullDate) + this.weeks = this.cale.weeks + }, + endDate(val){ + this.cale.resetEndDate(val) + this.cale.setDate(this.nowDate.fullDate) + this.weeks = this.cale.weeks + }, + selected(newVal) { + this.cale.setSelectInfo(this.nowDate.fullDate, newVal) + this.weeks = this.cale.weeks + } + }, + created() { + this.cale = new Calendar({ + selected: this.selected, + startDate: this.startDate, + endDate: this.endDate, + range: this.range, + }) + this.init(this.date) + }, + methods: { + // 鍙栨秷绌块�� + clean() {}, + bindDateChange(e) { + const value = e.detail.value + '-1' + this.setDate(value) + + const { year,month } = this.cale.getDate(value) + this.$emit('monthSwitch', { + year, + month + }) + }, + /** + * 鍒濆鍖栨棩鏈熸樉绀� + * @param {Object} date + */ + init(date) { + this.cale.setDate(date) + this.weeks = this.cale.weeks + this.nowDate = this.calendar = this.cale.getInfo(date) + }, + /** + * 鎵撳紑鏃ュ巻寮圭獥 + */ + open() { + // 寮圭獥妯″紡骞朵笖娓呯悊鏁版嵁 + if (this.clearDate && !this.insert) { + this.cale.cleanMultipleStatus() + // this.cale.setDate(this.date) + 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) { + let { + year, + month, + date, + fullDate, + lunar, + extraInfo + } = this.calendar + this.$emit(name, { + range: this.cale.multipleStatus, + year, + month, + date, + fulldate: fullDate, + lunar, + extraInfo: extraInfo || {} + }) + }, + /** + * 閫夋嫨澶╄Е鍙� + * @param {Object} weeks + */ + choiceDate(weeks) { + if (weeks.disable) return + this.calendar = weeks + // 璁剧疆澶氶�� + this.cale.setMultiple(this.calendar.fullDate) + this.weeks = this.cale.weeks + this.change() + }, + /** + * 鍥炲埌浠婂ぉ + */ + backToday() { + const nowYearMonth = `${this.nowDate.year}-${this.nowDate.month}` + const date = this.cale.getDate(new Date()) + const todayYearMonth = `${date.year}-${date.month}` + + if(nowYearMonth !== todayYearMonth) { + this.monthSwitch() + } + + this.init(date.fullDate) + this.change() + }, + /** + * 涓婁釜鏈� + */ + pre() { + const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'month').fullDate + this.setDate(preDate) + this.monthSwitch() + + }, + /** + * 涓嬩釜鏈� + */ + next() { + const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'month').fullDate + this.setDate(nextDate) + 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" scoped> + $uni-bg-color-mask: rgba($color: #000000, $alpha: 0.4); + $uni-border-color: #EDEDED; + $uni-text-color: #333; + $uni-bg-color-hover:#f1f1f1; + $uni-font-size-base:14px; + $uni-text-color-placeholder: #808080; + $uni-color-subtitle: #555555; + $uni-text-color-grey:#999; + .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: $uni-bg-color-mask; + 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; + /* #ifdef APP-NVUE */ + bottom: 0; + /* #endif */ + left: 0; + right: 0; + transition-property: transform; + transition-duration: 0.3s; + transform: translateY(460px); + /* #ifndef APP-NVUE */ + bottom: calc(var(--window-bottom)); + z-index: 99; + /* #endif */ + } + + .uni-calendar--ani-show { + transform: translateY(0); + } + + .uni-calendar__content { + background-color: #fff; + } + + .uni-calendar__header { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + align-items: center; + height: 50px; + border-bottom-color: $uni-border-color; + border-bottom-style: solid; + border-bottom-width: 1px; + } + + .uni-calendar--fixed-top { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: space-between; + border-top-color: $uni-border-color; + 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: $uni-text-color; + background-color: $uni-bg-color-hover; + } + + .uni-calendar__header-text { + text-align: center; + width: 100px; + font-size: $uni-font-size-base; + color: $uni-text-color; + } + + .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: 10px; + height: 10px; + border-left-color: $uni-text-color-placeholder; + border-left-style: solid; + border-left-width: 2px; + border-top-color: $uni-color-subtitle; + border-top-style: solid; + border-top-width: 2px; + } + + .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: 45px; + border-bottom-color: #F5F5F5; + border-bottom-style: solid; + border-bottom-width: 1px; + } + + .uni-calendar__weeks-day-text { + font-size: 14px; + } + + .uni-calendar__box { + position: relative; + } + + .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: $uni-text-color-grey; + opacity: 0.1; + text-align: center; + /* #ifndef APP-NVUE */ + line-height: 1; + /* #endif */ + } +</style> diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js new file mode 100644 index 0000000..5ec8a92 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/util.js @@ -0,0 +1,360 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 褰撳墠鏃ユ湡 + this.date = this.getDate(new Date()) // 褰撳墠鍒濆叆鏃ユ湡 + // 鎵撶偣淇℃伅 + this.selected = selected || []; + // 鑼冨洿寮�濮� + this.startDate = startDate + // 鑼冨洿缁撴潫 + this.endDate = endDate + this.range = range + // 澶氶�夌姸鎬� + this.cleanMultipleStatus() + // 姣忓懆鏃ユ湡 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 璁剧疆鏃ユ湡 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 娓呯悊澶氶�夌姸鎬� + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 閲嶇疆寮�濮嬫棩鏈� + */ + resetSatrtDate(startDate) { + // 鑼冨洿寮�濮� + this.startDate = startDate + + } + + /** + * 閲嶇疆缁撴潫鏃ユ湡 + */ + resetEndDate(endDate) { + // 鑼冨洿缁撴潫 + this.endDate = endDate + } + + /** + * 鑾峰彇浠绘剰鏃堕棿 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 鑾峰彇AddDayCount澶╁悗鐨勬棩鏈� + break + case 'month': + if (dd.getDate() === 31 && AddDayCount>0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 鑾峰彇AddDayCount澶╁悗鐨勬棩鏈� + const nextMonth = dd.getMonth() + // 澶勭悊 pre 鍒囨崲鏈堜唤鐩爣鏈堜唤涓�2鏈堟病鏈夊綋鍓嶆棩(30 31) 鍒囨崲閿欒闂 + if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount)) + } + // 澶勭悊 next 鍒囨崲鏈堜唤鐩爣鏈堜唤涓�2鏈堟病鏈夊綋鍓嶆棩(30 31) 鍒囨崲閿欒闂 + if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth-(nextMonth-preMonth-AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 鑾峰彇AddDayCount澶╁悗鐨勬棩鏈� + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 鑾峰彇褰撳墠鏈堜唤鐨勬棩鏈燂紝涓嶈冻10琛�0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 鑾峰彇褰撳墠鍑犲彿锛屼笉瓒�10琛�0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 鑾峰彇涓婃湀鍓╀綑澶╂暟 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 鑾峰彇鏈湀澶╂暟 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 鏄惁浠婂ぉ + let isDay = fullDate === nowDate + // 鑾峰彇鎵撶偣淇℃伅 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 鏃ユ湡绂佺敤 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 鑾峰彇涓嬫湀澶╂暟 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + + /** + * 鑾峰彇褰撳墠鏃ユ湡璇︽儏 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 姣旇緝鏃堕棿澶у皬 + */ + dateCompare(startDate, endDate) { + // 璁$畻鎴鏃堕棿 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 璁$畻璇︾粏椤圭殑鎴鏃堕棿 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 姣旇緝鏃堕棿鏄惁鐩哥瓑 + */ + dateEqual(before, after) { + // 璁$畻鎴鏃堕棿 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 璁$畻璇︾粏椤圭殑鎴鏃堕棿 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 鑾峰彇鏃ユ湡鑼冨洿鍐呮墍鏈夋棩鏈� + * @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.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 璁$畻闃村巻鏃ユ湡鏄剧ず + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 璁剧疆鎵撶偣 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 鑾峰彇澶氶�夌姸鎬� + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.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._getWeek(fullDate) + } + + /** + * 鑾峰彇姣忓懆鏁版嵁 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + year, + month + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 涓婁釜鏈堟湯灏惧嚑澶� + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 鏈湀澶╂暟 + nextMonthDays: [], // 涓嬩釜鏈堝紑濮嬪嚑澶� + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 鎷兼帴鏁扮粍 涓婁釜鏈堝紑濮嬪嚑澶� + 鏈湀澶╂暟+ 涓嬩釜鏈堝紑濮嬪嚑澶� + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //闈欐�佹柟娉� + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json new file mode 100644 index 0000000..fad841f --- /dev/null +++ b/uni_modules/uni-calendar/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-calendar", + "displayName": "uni-calendar 鏃ュ巻", + "version": "1.4.10", + "description": "鏃ュ巻缁勪欢", + "keywords": [ + "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": [], + "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-calendar/readme.md b/uni_modules/uni-calendar/readme.md new file mode 100644 index 0000000..4e1748c --- /dev/null +++ b/uni_modules/uni-calendar/readme.md @@ -0,0 +1,103 @@ + + +## Calendar 鏃ュ巻 +> **缁勪欢鍚嶏細uni-calendar** +> 浠g爜鍧楋細 `uCalendar` + + +鏃ュ巻缁勪欢 + +> **娉ㄦ剰浜嬮」** +> 涓轰簡閬垮厤閿欒浣跨敤锛岀粰澶у甯︽潵涓嶅ソ鐨勫紑鍙戜綋楠岋紝璇峰湪浣跨敤缁勪欢鍓嶄粩缁嗛槄璇讳笅闈㈢殑娉ㄦ剰浜嬮」锛屽彲浠ュ府浣犻伩鍏嶄竴浜涢敊璇�� +> - 鏈粍浠跺啘鍘嗚浆鎹娇鐢ㄧ殑js鏄� [@1900-2100鍖洪棿鍐呯殑鍏巻銆佸啘鍘嗕簰杞琞(https://github.com/jjonline/calendar.js) +> - 浠呮敮鎸佽嚜瀹氫箟缁勪欢妯″紡 +> - `date`灞炴�т紶鍏ョ殑搴旇鏄竴涓� String 锛屽锛� 2019-06-27 锛岃�屼笉鏄� new Date() +> - 閫氳繃 `insert` 灞炴�ф潵纭畾褰撳墠鐨勪簨浠舵槸 @change 杩樻槸 @confirm 銆傜悊搴斿悎骞朵负涓�涓簨浠讹紝浣嗘槸涓轰簡鍖哄垎妯″紡锛岀幇浣跨敤涓や釜浜嬩欢锛岃繖閲岄渶瑕佹敞鎰� +> - 寮圭獥妯″紡涓嬫棤娉曢樆姝㈠悗闈㈢殑鍏冪礌婊氬姩锛屽鏈夐渶瑕侀樆姝紝璇峰湪寮圭獥寮瑰嚭鍚庯紝鎵嬪姩璁剧疆婊氬姩鍏冪礌涓轰笉鍙粴鍔� + + +### 瀹夎鏂瑰紡 + +鏈粍浠剁鍚圼easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)瑙勮寖锛宍HBuilderX 2.5.5`璧凤紝鍙渶灏嗘湰缁勪欢瀵煎叆椤圭洰锛屽湪椤甸潰`template`涓嵆鍙洿鎺ヤ娇鐢紝鏃犻渶鍦ㄩ〉闈腑`import`鍜屾敞鍐宍components`銆� + +濡傞渶閫氳繃`npm`鏂瑰紡浣跨敤`uni-ui`缁勪欢锛屽彟瑙佹枃妗o細[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 鍩烘湰鐢ㄦ硶 + +鍦� ``template`` 涓娇鐢ㄧ粍浠� + +```html +<view> + <uni-calendar + :insert="true" + :lunar="true" + :start-date="'2019-3-2'" + :end-date="'2019-5-20'" + @change="change" + /> +</view> +``` + +### 閫氳繃鏂规硶鎵撳紑鏃ュ巻 + +闇�瑕佽缃� `insert` 涓� `false` + +```html +<view> + <uni-calendar + ref="calendar" + :insert="false" + @confirm="confirm" + /> + <button @click="open">鎵撳紑鏃ュ巻</button> +</view> +``` + +```javascript + +export default { + data() { + return {}; + }, + methods: { + open(){ + this.$refs.calendar.open(); + }, + confirm(e) { + console.log(e); + } + } +}; + +``` + + +## API + +### Calendar Props + +| 灞炴�у悕 | 绫诲瀷 | 榛樿鍊紎 璇存槑 | +| - | - | - | - | +| date | String |- | 鑷畾涔夊綋鍓嶆椂闂达紝榛樿涓轰粖澶� | +| lunar | Boolean | false | 鏄剧ず鍐滃巻 | +| startDate | String |- | 鏃ユ湡閫夋嫨鑼冨洿-寮�濮嬫棩鏈� | +| endDate | String |- | 鏃ユ湡閫夋嫨鑼冨洿-缁撴潫鏃ユ湡 | +| range | Boolean | false | 鑼冨洿閫夋嫨 | +| insert | Boolean | false | 鎻掑叆妯″紡,鍙�夊�硷紝ture锛氭彃鍏ユā寮忥紱false锛氬脊绐楁ā寮忥紱榛樿涓烘彃鍏ユā寮� | +|clearDate |Boolean |true |寮圭獥妯″紡鏄惁娓呯┖涓婃閫夋嫨鍐呭 | +| selected | Array |- | 鎵撶偣锛屾湡寰呮牸寮廩{date: '2019-06-27', info: '绛惧埌', data: { custom: '鑷畾涔変俊鎭�', name: '鑷畾涔夋秷鎭ご',xxx:xxx... }}] | +|showMonth | Boolean | true | 鏄惁鏄剧ず鏈堜唤涓鸿儗鏅� | + +### Calendar Events + +| 浜嬩欢鍚� | 璇存槑 |杩斿洖鍊紎 +| - | - | - | +| open | 寮瑰嚭鏃ュ巻缁勪欢锛宍insert :false` 鏃剁敓鏁坾- | + + + + + +## 缁勪欢绀轰緥 + +鐐瑰嚮鏌ョ湅锛歔https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) -- Gitblit v1.9.1