Mr.Zhang
2023-09-07 def7a94103b1c68110dcfc2a7ceba3021a22a24f
小程序
已添加5个文件
已修改6个文件
2200 ■■■■ 文件已修改
minipro_standard/components/materialIn.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/InOperation/InOperation.vue 210 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/index/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/inspectComplete/inspectComplete.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/inspectPatrol/inspectPatrol.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/selectWorkOrder/selectWorkOrder.vue 437 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/uni_modules/l-calendar/changelog.md 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/uni_modules/l-calendar/components/l-calendar/calendar.js 562 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/uni_modules/l-calendar/components/l-calendar/l-calendar.vue 832 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/uni_modules/l-calendar/package.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/uni_modules/l-calendar/readme.md 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/components/materialIn.vue
@@ -42,7 +42,8 @@
                this.list = target.list
            },
            jump(item) {
                this.show = false
                this.$emit('selected', item)
            }
        }
    }
minipro_standard/pages/InOperation/InOperation.vue
@@ -63,10 +63,9 @@
                </div>
            </div>
            <!--        å…¥åº“单(单个仓库)        -->
            <template
                v-if="route.query.type == 9 && info.woScanMaterialBeanList && info.woScanMaterialBeanList.length > 0">
            <template v-if="type == 9 && woScanMaterialBeanList && woScanMaterialBeanList.length > 0">
                <div class="page_yxwl_list">
                    <div class="page_yxwl_list_item" v-for="(item, index) in info.woScanMaterialBeanList" :key="index">
                    <div class="page_yxwl_list_item" v-for="(item, index) in woScanMaterialBeanList" :key="index">
                        <div class="page_yxwl_list_item_top">
                            <!--                            <div class="page_yxwl_list_item_top_left" v-if="item.batch">{{item.materialName}} | {{item.materialCode}}|{{item.batch}}</div>-->
                            <div class="page_yxwl_list_item_top_left">{{item.materialName}} | {{item.materialCode}}
@@ -107,7 +106,7 @@
                </div>
            </template>
            <!--        è½¬åº“单(多个仓库)        -->
            <template v-else-if="route.query.type == 7 && seleMateriaList.length > 0">
            <template v-else-if="type == 7 && seleMateriaList.length > 0">
                <!-- <template v-for="(item, index) in info.wtransferWarehouseList" :key="index"> -->
                <div class="page_yxwl_list">
                    <div class="page_yxwl_list_item" v-for="(item1, idx) in seleMateriaList" :key="idx">
@@ -158,16 +157,14 @@
                <span>确认入库</span>
            </div>
        </div>
        <SelectMultipleMaterial ref="selectMultipleMaterial" />
        <SelectLoaction ref="selectLoaction" @selected="selectLocation"/>
        <MaterialIn ref="materialIn" @selected="selectLocation"/>
        <SelectLoaction ref="selectLoaction" @selected="selectLocation" />
        <MaterialIn ref="materialIn" @selected="selectMaterial" />
    </view>
</template>
<script>
    import InOutInfo from '@/components/InOutInfo.vue'
    import SelectMultipleMaterial from '@/components/SelectMultipleMaterial.vue'
    import SelectLoaction from '@/components/SelectLoaction.vue'
    import SelectLoaction from '@/components/SelectLoaction.vue'
    import MaterialIn from '@/components/materialIn.vue'
    import {
        QRCodeType
@@ -196,24 +193,25 @@
    } from '@/util/api/agencyAPI'
    export default {
        components: {
            InOutInfo,
            SelectLoaction,
            MaterialIn,
            SelectMultipleMaterial
            InOutInfo,
            SelectLoaction,
            MaterialIn
        },
        data() {
            return {
                type: '',
                id: '',
                id: '',
                wareHouseId: '',
                isZKD: false,
                show: false,
                info: {},
                ids: [],
                location: '',
                ids: [],
                location: '',
                locationName: '',
                wtransferWarehouseList: [],
                MateriaList: []
                MateriaList: [],
                woScanMaterialBeanList: [],
                seleMateriaList: [] // å·²é€‰ç‰©æ–™
            };
        },
        onLoad(option) {
@@ -246,8 +244,8 @@
                let data = {
                    id: this.id
                }
                console.log(this.type, QRCodeType.CKD);
                if (this.type == QRCodeType.CKD) {
                // console.log(this.type, QRCodeType.CKD);
                if (this.type == QRCodeType.RKD) {
                    infoAction = wOutBoundForInOut
                    data.wOutboundType = '1'
                } else if (this.type == QRCodeType.ZKD) {
@@ -256,13 +254,14 @@
                }
                infoAction(data).then(res => {
                    if (this.isZKD) {
                        this.info = res.data.wtransfer
                        this.info = res.data.wtransfer
                        this.wareHouseId = res.data.wtransfer.inWarehouseId
                        this.wtransferWarehouseList = res.data.wtransferWarehouseList
                        this.MateriaList = res.data.wtransferWarehouseList[0].wtransferDetailList
                    } else {
                        this.info = res.data.woutbound
                        this.woutboundDetailsWait = res.data.woutboundDetailsWait
                        this.woScanMaterialBeanList = res.data.woScanMaterialBeanList
                    }
                }).catch(err => {
                    uni.$u.toast(err)
@@ -277,19 +276,167 @@
                        wareHouseId: this.wareHouseId
                    })
                    .then(res => {
                        if (res.data.length === 1) {
                            this.location = res.data[0].id
                            this.locationName = res.data[0].unionName
                            this.$refs.materialIn.open({list: this.MateriaList})
                        } else {
                            this.$refs.selectLoaction.open({wareHouseId: this.wareHouseId})
                        if (res.data.length === 1) {
                            this.location = res.data[0].id
                            this.locationName = res.data[0].unionName
                            this.$refs.materialIn.open({
                                list: this.MateriaList
                            })
                        } else {
                            this.$refs.selectLoaction.open({
                                wareHouseId: this.wareHouseId
                            })
                        }
                    })
            },
            selectLocation(item) {
                this.location = item.id
                this.locationName = item.unionName
                this.$refs.materialIn.open({list: this.MateriaList})
            },
            selectLocation(item) {
                this.location = item.id
                this.locationName = item.unionName
                this.$refs.materialIn.open({
                    list: this.MateriaList
                })
            },
            selectMaterial(val) {
                let material = JSON.parse(JSON.stringify(val))
                let tempMaterial = this.seleMateriaList.find(item => item.locationId == this.location)
                if (tempMaterial) {
                    if (tempMaterial.qualityType == material.qualityType && tempMaterial.procedureId == material
                        .procedureId &&
                        tempMaterial.batch == material.batch && tempMaterial.materialId == material.materialId) {
                        uni.$u.toast('相同货位,同一个物料只能有一个')
                        return
                    }
                }
                let materialNum = 0
                let num = 0
                this.seleMateriaList.forEach(item => {
                    if (item.id === material.id) {
                        materialNum += Number(item.outActnum)
                    }
                })
                this.MateriaList.forEach(item => {
                    if (item.id === material.id) {
                        num = item.outActnum - materialNum
                    }
                })
                material.outActnum = num
                this.seleMateriaList.push({
                    ...material,
                    locationId: this.location,
                    locationName: this.locationName
                })
            },
            submit() {
                if (this.type == QRCodeType.ZKD) {
                    if (!this.seleMateriaList.length) {
                        uni.$u.toast('转入物料不能为空')
                        return
                    }
                    let result = this.seleMateriaList.reduce((a, b) => {
                        if (a[b.id]) {
                            a[b.id].push(b);
                        } else {
                            a[b.id] = [b];
                        }
                        return a;
                    }, {});
                    for (let i = 0; i < this.MateriaList.length; i++) {
                        for (let a in result) {
                            if (this.MateriaList[i].id == a) {
                                let total = 0
                                for (let b = 0; b < result[a].length; b++) {
                                    total = Number(total) + Number(result[a][b].outActnum)
                                }
                                if (!total || total <= 0) {
                                    uni.$u.toast('入库数量不能小于0')
                                    return
                                    // Toast.fail({
                                    //     message: '入库数量不能小于0',
                                    //     forbidClick: true,
                                    //     duration: 2000
                                    // })
                                }
                                if (total > this.MateriaList[i].outActnum) {
                                    uni.$u.toast('入库数量不能大于待入库数量')
                                    return
                                    // Toast.fail({
                                    //     message: '入库数量不能大于待入库数量',
                                    //     forbidClick: true,
                                    //     duration: 2000
                                    // })
                                }
                            }
                        }
                    }
                    let submitTransferInDetailDTOList = []
                    this.seleMateriaList.forEach(item => {
                        submitTransferInDetailDTOList.push({
                            inNum: item.outActnum,
                            locationId: item.locationId,
                            wtransferDetailId: item.id
                        })
                    })
                    transferToInNew({
                        submitTransferInDetailDTOList,
                        wtransferId: this.id
                    }).then(res => {
                        if (res.code === 200) {
                            this.$store.dispatch('getUpcomingNum')
                            uni.$u.toast('操作成功')
                            // Toast.success({
                            //     message: '操作成功',
                            //     forbidClick: true,
                            //     duration: 2000
                            // })
                            // setTimeout(() => {
                            //     if (route.query.Type == '4') { // è·³è½¬å®Œå·¥å…¥åº“详情
                            //         router.push({
                            //             name: 'completionDetails',
                            //             query: {
                            //                 id: route.query.id,
                            //                 dbid: route.query.dbid,
                            //                 type: 7,
                            //                 isShow: 2
                            //             }
                            //         })
                            //         return
                            //     }
                            //     router.replace({
                            //         name: 'wTransferDetail',
                            //         query: {
                            //             id: route.query.id
                            //         }
                            //     })
                            // }, 2000)
                        }
                    })
                } else if (this.type === QRCodeType.RKD) {
                    wOutBoundForUpload({
                        id: this.info.id,
                        wOutboundType: 1
                    }).then(res => {
                        if (res.code === 200) {
                            this.$store.dispatch('getUpcomingNum')
                            uni.$u.toast('操作成功')
                            // Toast.success({
                            //     message: '操作成功',
                            //     forbidClick: true,
                            //     duration: 2000
                            // })
                            // setTimeout(() => {
                            //     // router.go(-1)
                            //     router.replace({
                            //         name: 'wInboundDetail',
                            //         query: {
                            //             id: this.id
                            //         }
                            //     })
                            // }, 2000)
                        }
                    })
                }
            }
        }
    }
@@ -606,6 +753,7 @@
                            }
                            .nr {
                                display: flex;
                                font-size: 26rpx;
                                font-weight: 400;
                                color: #222222;
minipro_standard/pages/index/index.vue
@@ -9,7 +9,7 @@
                    :style="{paddingTop: `${statusbarHeight}px`, height: `${navHeight}px`, lineHeight:`${navHeight}px`, textAlign: 'center'}">
                    å¾…办</view>
                <view class="cY">
                    <u-search placeholder="搜索关键字" bgColor="#f7f7f7" :showAction="false" @search="scrolltoupper"
                    <u-search placeholder="搜索关键字" bgColor="#f7f7f7" :showAction="false" @search="search"
                        shape="square" v-model="searchForm.mixParam"></u-search>
                    <image src="../../static/filter@2x.png" class="img48 ml20" @click="filterAction" mode=""></image>
                </view>
@@ -198,13 +198,11 @@
            },
            selectType(status) {
                if (this.searchForm.status == status) return
                this.searchForm.status = status
                this.scrolltolower()
                this.searchForm.status = status
                this.search()
            },
            jump(item) {
                console.log(item);
                if ((item.type === 0 || item.type === 2 || item.type === 5) && item.status === 0) { // è·³è½¬å‡ºåº“(转库单)
                console.log('出库');
                    uni.navigateTo({
                        url: `/pages/OutOperation/OutOperation?id=${item.objId}&dbid=${item.id}&type=7`
                    })
@@ -278,7 +276,10 @@
                    //         id: item.objId
                    //     }
                    // })
                } else if (item.type === 9 && item.status === 0) { // è°ƒæ•´å…¥åº“(入库单)
                } else if (item.type === 9 && item.status === 0) { // è°ƒæ•´å…¥åº“(入库单)
                    uni.navigateTo({
                        url: `/pages/InOperation/InOperation?id=${item.objId}&dbid=${item.id}&type=9`
                    })
                    // router.push({
                    //     name: 'warehousing',
                    //     query: {
@@ -309,8 +310,12 @@
            },
            confirm() {
                this.searchForm.type = this.type
                this.show = false
                this.scrolltoupper()
                this.show = false
                this.search()
            },
            search() {
                this.page.page = 1
                this.loadData()
            }
        }
    }
minipro_standard/pages/inspectComplete/inspectComplete.vue
@@ -59,6 +59,8 @@
</template>
<script>
    import { createStandard } from '@/util/api/QualityAPI'
    import { checkAllList, getListByCondition, toolingQueryById } from "@/util/api/WorkOrderAPI"
    export default {
        data() {
            return {
minipro_standard/pages/inspectPatrol/inspectPatrol.vue
@@ -83,6 +83,7 @@
        },
        onLoad() {
            uni.$on('workOrder', (data) => {
                console.log(data);
                this.form.gdmc = data.mmodel.name + '-' + data.pgmodel.name
                this.form.gdid = data.id
                this.info = data
minipro_standard/pages/selectWorkOrder/selectWorkOrder.vue
@@ -8,10 +8,12 @@
                        <div class="Search_item_label">计划日期</div>
                        <div class="Search_item_content" @click="isOpenDate=true">
                            <div class="Search_item_content_a" :style="form.startDate ? 'color: #000;' : ''">
                                {{ form.startDate ? form.startDate : '开始日期'}}</div>
                                {{ form.startDate ? form.startDate : '开始日期'}}
                            </div>
                            <span>-</span>
                            <div class="Search_item_content_a" :style="form.endDate ? 'color: #000;' : ''">
                                {{ form.endDate ? form.endDate : '结束日期'}}</div>
                                {{ form.endDate ? form.endDate : '结束日期'}}
                            </div>
                        </div>
                    </div>
                </template>
@@ -19,239 +21,226 @@
            <div class="content_search_x"></div>
            <v-LableSelection :TagList="tagList" :isShow="true" @change="clickTag"></v-LableSelection>
        </div>
        <div class="content_total">共{{page.total}}条数据</div>
        <div class="content_list">
            <u-list @scrolltolower="scrolltolower" @scrolltoupper="scrolltoupper">
                <u-list-item  v-for="(item, i) in list" :key="i">
                    <div class="content_list_item" @click="jump(item)">
                        <div class="content_list_item_top">
                            <div class="content_list_item_top_left">
                                <span v-if="item.mmodel">{{item.mmodel.name}} | {{item.procedureName}}</span>
                                <div class="content_list_item_top_left_tag" v-if="item.urgent">优先{{item.urgent}}</div>
                                <div class="content_list_item_top_left_tagW" v-if="item.paused === 1">停</div>
                            </div>
                            <div class="content_list_item_top_right">
                                <span class="yellow" v-if="item.status === 0">已创建</span>
                                <span class="green" v-if="item.status === 1">已备料</span>
                                <span v-if="item.status === 2">已完工</span>
                                <span class="purple" v-if="item.status === 3">已检验</span>
                                <span v-if="item.status === 4">已报工</span>
                                <span v-if="item.status === 5">已入库</span>
                                <span v-if="item.status === 6">已取消</span>
                            </div>
                        </div>
                        <span>工单编码: {{item.code}}</span>
                        <div class="content_list_item_content">
                            <div class="content_list_item_content_item">
                                <div class="content_list_item_content_item_label">物料编码:</div>
                                <div class="content_list_item_content_item_nr" v-if="item.mmodel">{{item.mmodel.code}}
                                </div>
                            </div>
                            <div class="content_list_item_content_item">
                                <div class="content_list_item_content_item_label">计划开工:</div>
                                <div class="content_list_item_content_item_nr">{{item.planDate}}</div>
                            </div>
                            <div class="content_list_item_content_item">
                                <div class="content_list_item_content_item_label">生产批次:</div>
                                <div class="content_list_item_content_item_nr">{{item.batch}}</div>
                            </div>
                            <div class="content_list_item_content_item">
                                <div class="content_list_item_content_item_label">计划数量:</div>
                                <div class="content_list_item_content_item_nr" v-if="item.umodel">
                                    {{item.planNum}}{{item.umodel.name}}</div>
                            </div>
                            <div class="content_list_item_content_item">
                                <div class="content_list_item_content_item_label">生产设备:</div>
                                <div class="content_list_item_content_item_nr" v-if="item.pgmodel">{{item.pgmodel.name}}
                                </div>
                            </div>
                            <div class="content_list_item_content_item" v-if="item.status === 5">
                                <div class="content_list_item_content_item_label">完工数量:</div>
                                <div class="content_list_item_content_item_nr">{{item.proNum}}</div>
                            </div>
                        </div>
                    </div>
                </u-list-item>
            </u-list>
        <div class="content_total">共{{page.total}}条数据</div>
        <div class="content_list">
            <scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="refreshing"
                @scrolltolower="loadMore" @refresherrefresh="onRefresh" :style="{height: height}">
                <div class="content_list_item" v-for="(item, i) in list" :key="i" @click="jump(item)">
                    <div class="content_list_item_top">
                        <div class="content_list_item_top_left">
                            <span v-if="item.mmodel">{{item.mmodel.name}} | {{item.procedureName}}</span>
                            <div class="content_list_item_top_left_tag" v-if="item.urgent">优先{{item.urgent}}</div>
                            <div class="content_list_item_top_left_tagW" v-if="item.paused === 1">停</div>
                        </div>
                        <div class="content_list_item_top_right">
                            <span class="yellow" v-if="item.status === 0">已创建</span>
                            <span class="green" v-if="item.status === 1">已备料</span>
                            <span v-if="item.status === 2">已完工</span>
                            <span class="purple" v-if="item.status === 3">已检验</span>
                            <span v-if="item.status === 4">已报工</span>
                            <span v-if="item.status === 5">已入库</span>
                            <span v-if="item.status === 6">已取消</span>
                        </div>
                    </div>
                    <span>工单编码: {{item.code}}</span>
                    <div class="content_list_item_content">
                        <div class="content_list_item_content_item">
                            <div class="content_list_item_content_item_label">物料编码:</div>
                            <div class="content_list_item_content_item_nr" v-if="item.mmodel">{{item.mmodel.code}}
                            </div>
                        </div>
                        <div class="content_list_item_content_item">
                            <div class="content_list_item_content_item_label">计划开工:</div>
                            <div class="content_list_item_content_item_nr">{{item.planDate}}</div>
                        </div>
                        <div class="content_list_item_content_item">
                            <div class="content_list_item_content_item_label">生产批次:</div>
                            <div class="content_list_item_content_item_nr">{{item.batch}}</div>
                        </div>
                        <div class="content_list_item_content_item">
                            <div class="content_list_item_content_item_label">计划数量:</div>
                            <div class="content_list_item_content_item_nr" v-if="item.umodel">
                                {{item.planNum}}{{item.umodel.name}}
                            </div>
                        </div>
                        <div class="content_list_item_content_item">
                            <div class="content_list_item_content_item_label">生产设备:</div>
                            <div class="content_list_item_content_item_nr" v-if="item.pgmodel">{{item.pgmodel.name}}
                            </div>
                        </div>
                        <div class="content_list_item_content_item" v-if="item.status === 5">
                            <div class="content_list_item_content_item_label">完工数量:</div>
                            <div class="content_list_item_content_item_nr">{{item.proNum}}</div>
                        </div>
                    </div>
                </div>
            </scroll-view>
        </div>
        <!-- <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
            <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了~" @load="onLoad">
            </van-list>
        </van-pull-refresh> -->
        <u-calendar :show="isOpenDate" mode="range" @close="isOpenDate=false" @confirm="onConfirm"></u-calendar>
        <!-- <van-calendar v-model:show="isOpenDate" type="range" :min-date="minDate" :max-date="maxDate" color="#4275FC"
            @confirm="onConfirm" /> -->
        <!-- <v-ScanCode
                    :openCode="openCode"
                    :infos="['第一次扫码']"
                    @closePopup="closePopup"
                    @onDecode="onDecode">
                </v-ScanCode> -->
        </van-pull-refresh> -->
        <l-calendar :lunar="false" v-model="isOpenDate" @change="onConfirm" :isRange="true" activeBgColor="#305ED5"
            rangeColor="#305ED5" rangeBgColor="rgba(48, 80, 213, 0.1)"></l-calendar>
    </view>
</template>
<script>
    import vSearch from '@/components/Search.vue'
    import vLableSelection from '@/components/LabelSelection.vue'
    import { gsdate } from '@/util/utils'
    export default {
        components: {
            vSearch,
            vLableSelection
<script>
    import vSearch from '@/components/Search.vue'
    import vLableSelection from '@/components/LabelSelection.vue'
    import {
        gsdate
    } from '@/util/utils'
    import {
        getList,
        pageCount
    } from '@/util/api/WorkOrderAPI'
    export default {
        components: {
            vSearch,
            vLableSelection
        },
        data() {
            return {
                status: true,
                isOpenDate: false,
                // tagList: [1,2,3],
                form: {
                    startDate: '',
                    endDate: ''
                },
                list: [
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 0,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 1,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 2,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { name: '物料001', code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 3,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 4,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 5,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 6,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                    {
                        mmodel: { name: 'adsa', },
                        mmodel: { code: 'wl-001' },
                        umodel: { name: '吨' },
                        pgmodel: { name: '液压机' },
                        procedureName: '压制',
                        urgent: 10,
                        paused: 0,
                        status: 7,
                        code: '00100',
                        planDate: '2023-08-30',
                        batch: 'kk-yw',
                        planNum: 300,
                        proNum: 100,
                    },
                ],
                page: {
                    size: 10,
                    index: 1,
                    total: 0
                height: '',
                status: true,
                isOpenDate: false,
                refreshing: false,
                // tagList: [1,2,3],
                tagList: [{
                    id: [2,3,7],
                    name: '生产中',
                    num: ''
                }],
                minDate: '2021-01-01',
                maxDate: '',
                form: {
                    startDate: '',
                    endDate: '',
                    mixParam: '',
                    statusList: []
                },
                list: [],
                page: {
                    capacity: 10,
                    index: 1,
                    total: 0
                }
            };
        },
        methods: {
            reset() {},
            submit() {},
            onConfirm(value) {
                const [start, end] = value
                this.form.startDate = gsdate(start)
                this.form.endDate = gsdate(end)
                this.isOpenDate = false
            },
            scrolltolower() {},
            scrolltoupper() {},
            jump(item) {
                uni.$emit('workOrder', item)
                uni.navigateBack()
            }
        },
        onLoad(opt) {
            this.$nextTick(() => {
                uni.createSelectorQuery().in(this).select('.content_search').boundingClientRect((rect) => {
                    this.height = `calc(100vh - ${rect.height + 80}px)`
                }).exec()
            })
            if (opt.type == '1') {
                this.tagList = [{
                        id: [0, 1],
                        name: '待生产',
                        num: ''
                    },
                    {
                        id: [2, 3, 7],
                        name: '生产中',
                        num: ''
                    }
                ]
            } else {
                this.tagList = [{
                    id: [2, 3, 7],
                    name: '生产中',
                    num: ''
                }]
            }
            this.maxDate = gsdate(new Date(`${new Date().getFullYear() + 1}-12-30`))
            this.pageCounts()
            this.loadData()
        },
        methods: {
            reset() {
                this.form.startDate = ''
                this.form.endDate = ''
                this.search()
            },
            searchInput(val) {
                this.form.mixParam = val;
                this.search()
            },
            clickTag(v) {
                this.form.statusList = v
                this.search()
            },
            submit() {
                this.search()
            },
            onConfirm(value) {
                this.form.startDate = value.startDate
                this.form.endDate = value.endDate
                this.isOpenDate = false
            },
            onRefresh() {
                if (this.refreshing) return
                this.refreshing = true;
                this.search()
            },
            loadMore() {
                this.page.page += 1
                this.loadData()
            },
            search() {
                this.page.page = 1
                this.loadData()
            },
            loadData() {
                getList({
                        ...this.page,
                        model: {
                            ...this.form,
                            statusList: this.form.statusList.length === 0 ? this.tagList[0].id : this.form.statusList
                        }
                    })
                    .then(res => {
                        let {
                            data
                        } = res
                        if (data.page == 1) {
                            this.list = []
                        }
                        this.list.push(...data.records)
                        this.page.total = data.total
                        this.page.page = data.page
                    })
                    .catch(err => {
                    })
                    .finally(() => {
                        this.refreshing = false
                    })
            },
            pageCounts() {
                pageCount({}).then(res => {
                    if (res.code === 200) {
                        this.tagList.forEach(item => {
                            if (item.name == '待生产') {
                                item.num = res.data.startNum
                            }
                            if (item.name == '生产中') {
                                item.num = res.data.ingNum
                            }
                            if (item.name == '已完成') {
                                item.num = res.data.endNum
                            }
                        })
                    }
                })
            },
            jump(item) {
                uni.$emit('workOrder', item)
                uni.navigateBack()
            }
        }
    }
</script>
@@ -363,7 +352,7 @@
        .content_list {
            width: 100%;
            height: 100%;
            // height: 100%;
            display: flex;
            flex-direction: column;
minipro_standard/uni_modules/l-calendar/changelog.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
## 1.0.3(2023-05-31)
1.0.3
## 1.0.2(2023-05-20)
1.0.2
## 1.0.1(2023-05-19)
1.0.1
## 1.0.0(2023-05-19)
1.0.0
minipro_standard/uni_modules/l-calendar/components/l-calendar/calendar.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,562 @@
/**
 * @1900-2100区间内的公历、农历互转
 * @公历转农历:solar2lunar
 * @农历转公历:lunar2solar
 */
let 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, 0x055c0, 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
        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:let count = calendar.lYearDays(1987) ;//count=387
     */
    lYearDays: function(y) {
        let i, sum = 348;
        for (i = 0x8000; i > 0x8; i >>= 1) {
            sum += (calendar.lunarInfo[y - 1900] & i) ? 1 : 0;
        }
        return (sum + calendar.leapDays(y));
    },
    /**
     * è¿”回农历y年闰月是哪个月;若y年没有闰月 åˆ™è¿”回0
     * @param lunar Year
     * @return Number (0-12)
     * @eg:let leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
     */
    leapMonth: function(y) { //闰字编码 \u95f0
        return (calendar.lunarInfo[y - 1900] & 0xf);
    },
    /**
     * è¿”回农历y年闰月的天数 è‹¥è¯¥å¹´æ²¡æœ‰é—°æœˆåˆ™è¿”回0
     * @param lunar Year
     * @return Number (0、29、30)
     * @eg:let leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
     */
    leapDays: function(y) {
        if (calendar.leapMonth(y)) {
            return ((calendar.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
        }
        return (0);
    },
    /**
     * è¿”回农历yå¹´m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
     * @param lunar Year
     * @return Number (-1、29、30)
     * @eg:let MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
     */
    monthDays: function(y, m) {
        if (m > 12 || m < 1) {
            return -1
        } //月份参数从1至12,参数错误返回-1
        return ((calendar.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
    },
    /**
     * è¿”回公历(!)yå¹´m月的天数
     * @param solar Year
     * @return Number (-1、28、29、30、31)
     * @eg:let solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
     */
    solarDays: function(y, m) {
        if (m > 12 || m < 1) {
            return -1
        } //若参数错误 è¿”回-1
        let ms = m - 1;
        if (ms == 1) { //2月份的闰平规律测算后确认返回28或29
            return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28);
        } else {
            return (calendar.solarMonth[ms]);
        }
    },
    /**
     * å†œåŽ†å¹´ä»½è½¬æ¢ä¸ºå¹²æ”¯çºªå¹´
     * @param lYear å†œåŽ†å¹´çš„å¹´ä»½æ•°
     * @return Cn string
     */
    toGanZhiYear: function(lYear) {
        let ganKey = (lYear - 3) % 10;
        let zhiKey = (lYear - 3) % 12;
        if (ganKey == 0) ganKey = 10; //如果余数为0则为最后一个天干
        if (zhiKey == 0) zhiKey = 12; //如果余数为0则为最后一个地支
        return calendar.Gan[ganKey - 1] + calendar.Zhi[zhiKey - 1];
    },
    /**
     * å…¬åŽ†æœˆã€æ—¥åˆ¤æ–­æ‰€å±žæ˜Ÿåº§
     * @param cMonth [description]
     * @param cDay [description]
     * @return Cn string
     */
    toAstro: function(cMonth, cDay) {
        let 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";
        let 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 calendar.Gan[offset % 10] + calendar.Zhi[offset % 12];
    },
    /**
     * ä¼ å…¥å…¬åކ(!)y年获得该年第n个节气的公历日期
     * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
     * @return day Number
     * @eg:let _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;
        }
        let _table = calendar.sTermInfo[y - 1900];
        let _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()
        ];
        let _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:let cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
     */
    toChinaMonth: function(m) { // æœˆ => \u6708
        if (m > 12 || m < 1) {
            return -1
        } //若参数错误 è¿”回-1
        let s = calendar.nStr3[m - 1];
        s += "\u6708"; //加上月字
        return s;
    },
    /**
     * ä¼ å…¥å†œåŽ†æ—¥æœŸæ•°å­—è¿”å›žæ±‰å­—è¡¨ç¤ºæ³•
     * @param lunar day
     * @return Cn string
     * @eg:let cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
     */
    toChinaDay: function(d) { //日 => \u65e5
        let 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 = calendar.nStr2[Math.floor(d / 10)];
                s += calendar.nStr1[d % 10];
        }
        return (s);
    },
    /**
     * å¹´ä»½è½¬ç”Ÿè‚–[!仅能大致转换] => ç²¾ç¡®åˆ’分生肖分界线是“立春”
     * @param y year
     * @return Cn string
     * @eg:let animal = calendar.getAnimal(1987) ;//animal='兔'
     */
    getAnimal: function(y) {
        return calendar.Animals[(y - 4) % 12]
    },
    /**
     * ä¼ å…¥é˜³åŽ†å¹´æœˆæ—¥èŽ·å¾—è¯¦ç»†çš„å…¬åŽ†ã€å†œåŽ†object信息 <=>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;
        } //年份限定、上限
        if (y == 1900 && m == 1 && d < 31) {
            return -1;
        } //下限
        let objDate;
        if (!y) { //未传参 è޷得当天
             objDate = new Date();
        } else {
             objDate = new Date(y, parseInt(m) - 1, d)
        }
        let i, leap = 0,
            temp = 0;
        //修正ymd参数
        y = objDate.getFullYear();
        m = objDate.getMonth() + 1;
        d = objDate.getDate();
        let offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) /
            86400000;
        for (i = 1900; i < 2101 && offset > 0; i++) {
            temp = calendar.lYearDays(i);
            offset -= temp;
        }
        if (offset < 0) {
            offset += temp;
            i--;
        }
        //是否今天
        let isTodayObj = new Date(),
            isToday = false;
        if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
            isToday = true;
        }
        //星期几
        let nWeek = objDate.getDay(),
            cWeek = calendar.nStr1[nWeek];
        if (nWeek == 0) {
            nWeek = 7;
        } //数字表示周几顺应天朝周一开始的惯例
        //农历年
        let year = i;
        leap = calendar.leapMonth(i); //闰哪个月
        let isLeap = false;
        //效验闰月
        for (i = 1; i < 13 && offset > 0; i++) {
            //闰月
            if (leap > 0 && i == (leap + 1) && isLeap == false) {
                --i;
                isLeap = true;
                temp = calendar.leapDays(year); //计算农历闰月天数
            } else {
                temp = calendar.monthDays(year, 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;
        }
        //农历月
        let month = i;
        //农历日
        let day = offset + 1;
        //天干地支处理
        let sm = m - 1;
        let gzY = calendar.toGanZhiYear(year);
        //月柱 1900å¹´1月小寒以前为 ä¸™å­æœˆ(60进制12)
        let firstNode = calendar.getTerm(year, (m * 2 - 1)); //返回当月「节」为几日开始
        let secondNode = calendar.getTerm(year, (m * 2)); //返回当月「节」为几日开始
        //依据12节气修正干支月
        let gzM = calendar.toGanZhi((y - 1900) * 12 + m + 11);
        if (d >= firstNode) {
            gzM = calendar.toGanZhi((y - 1900) * 12 + m + 12);
        }
        //传入的日期的节气与否
        let isTerm = false;
        let Term = null;
        if (firstNode == d) {
            isTerm = true;
            Term = calendar.solarTerm[m * 2 - 2];
        }
        if (secondNode == d) {
            isTerm = true;
            Term = calendar.solarTerm[m * 2 - 1];
        }
        //日柱 å½“月一日与 1900/1/1 ç›¸å·®å¤©æ•°
        let dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
        let gzD = calendar.toGanZhi(dayCyclical + d - 1);
        //该日期所属的星座
        let astro = calendar.toAstro(m, d);
        return {
            'lYear': year,
            'lMonth': month,
            'lDay': day,
            'Animal': calendar.getAnimal(year),
            'IMonthCn': (isLeap ? "\u95f0" : '') + calendar.toChinaMonth(month),
            'IDayCn': calendar.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
        };
    },
    /**
     * ä¼ å…¥å†œåŽ†å¹´æœˆæ—¥ä»¥åŠä¼ å…¥çš„æœˆä»½æ˜¯å¦é—°æœˆèŽ·å¾—è¯¦ç»†çš„å…¬åŽ†ã€å†œåŽ†object信息 <=>JSON
     * @param y lunar year
     * @param m lunar month
     * @param d lunar day
     * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
     * @return JSON object
     * @eg:console.log(calendar.lunar2solar(1987,9,10));
     */
    lunar2solar: function(y, m, d, isLeapMonth) { //参数区间1900.1.31~2100.12.1
        isLeapMonth = !!isLeapMonth;
        let leapOffset = 0;
        let leapMonth = calendar.leapMonth(y);
        let leapDay = calendar.leapDays(y);
        if (isLeapMonth && (leapMonth != m)) {
            return -1;
        } //传参要求计算该闰月公历 ä½†è¯¥å¹´å¾—出的闰月与传参的月份并不同
        if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) {
            return -1;
        } //超出了最大极限值
        let day = calendar.monthDays(y, m);
        let _day = day;
        //bugFix 2016-9-25
        //if month is leap, _day use leapDays method
        if (isLeapMonth) {
            _day = calendar.leapDays(y, m);
        }
        if (y < 1900 || y > 2100 || d > _day) {
            return -1;
        } //参数合法性效验
        //计算农历的时间差
        let offset = 0;
        for (let i = 1900; i < y; i++) {
            offset += calendar.lYearDays(i);
        }
        let leap = 0,
            isAdd = false;
        for (let i = 1; i < m; i++) {
            leap = calendar.leapMonth(y);
            if (!isAdd) { //处理闰月
                if (leap <= i && leap > 0) {
                    offset += calendar.leapDays(y);
                    isAdd = true;
                }
            }
            offset += calendar.monthDays(y, i);
        }
        //转换闰月农历 éœ€è¡¥å……该年闰月的前一个月的时差
        if (isLeapMonth) {
            offset += day;
        }
        //1900年农历正月一日的公历时间为1900å¹´1月30日0时0分0秒(该时间也是本农历的最开始起始点)
        let stmap = Date.UTC(1900, 1, 30, 0, 0, 0);
        let calObj = new Date((offset + d - 31) * 86400000 + stmap);
        let cY = calObj.getUTCFullYear();
        let cM = calObj.getUTCMonth() + 1;
        let cD = calObj.getUTCDate();
        return calendar.solar2lunar(cY, cM, cD);
    }
};
export default {
    solar2lunar: calendar.solar2lunar,
    lunar2solar: calendar.lunar2solar
};
minipro_standard/uni_modules/l-calendar/components/l-calendar/l-calendar.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,832 @@
<template>
    <view @touchmove.stop.prevent>
        <view class="l-calendar-box" :class="{'calendar-box-show': value}">
            <view class="calendar-top">
                <view>{{title}}</view>
                <view class="close l-icons icon-shanchu" hover-class="l-opacity" :hover-stay-time="150" @tap="hide">
                </view>
            </view>
            <view class="date-box">
                <view class=" date-arrowleft l-icons icon-youjiantou" :style="{ color: yearChangeColor }"
                    hover-class="l-opacity" :hover-stay-time="150"  @tap="changeYear(false)">
                </view>
                <view class=" date-arrowleft l-icons  icon-zuojiantou" :style="{ color: monthChangeColor }"
                    hover-class="l-opacity" :hover-stay-time="150" @tap="changeMonth(false)"></view>
                <view class="title-datetime">{{ showTitle }}</view>
                <view class=" date-arrowright l-icons icon-youjiantou2" :style="{ color: monthChangeColor }"
                    hover-class="l-opacity" :hover-stay-time="150" @tap="changeMonth(true)"></view>
                <view class=" date-arrowright l-icons  icon-youjiantou1" :style="{ color: yearChangeColor }"
                    hover-class="l-opacity" :hover-stay-time="150"  @tap="changeYear(true)"></view>
            </view>
            <view class="date-weekday">
                <view class="date-weekday-item">日</view>
                <view class="date-weekday-item">一</view>
                <view class="date-weekday-item">二</view>
                <view class="date-weekday-item">三</view>
                <view class="date-weekday-item">四</view>
                <view class="date-weekday-item">五</view>
                <view class="date-weekday-item">六</view>
            </view>
            <view class="date-content" :style="{ height: dateHeight * 6 + 'px' }">
                <block v-for="(item, index) in weekdayArr" :key="index">
                    <view class="date-weekday-item"></view>
                </block>
                <view class="date-weekday-item" :class="{
                        'l-opacity': isDisable(year, month, index + 1),
                        'start-date': (isRange && startDate == `${year}-${month}-${index + 1}`) || !isRange,
                        'end-date': (isRange && endDate == `${year}-${month}-${index + 1}`) || !isRange
                    }" :style="{ backgroundColor: getColor(index, 1), height: dateHeight + 'px',padding:0}"
                    v-for="(item, index) in daysArr" :key="index" @tap="dateClick(index)">
                    <view class="date-content-item" :style="{ color: getColor(index, 2) }">
                        <view>{{ index + 1 }}</view>
                        <!-- å†œåކ -->
                        <view class="custom-desc">
                            {{ getText(index, startDate, endDate) }}
                        </view>
                    </view>
                    <view class="date-content-item-desc" :style="{ color: activeColor }"
                        v-if="!lunar && isRange && startDate == `${year}-${month}-${index + 1}` && startDate != endDate">
                        {{ startText }}
                    </view>
                    <view class="date-content-item-desc" :style="{ color: activeColor }"
                        v-if="!lunar && isRange && endDate == `${year}-${month}-${index + 1}`">{{ endText }}</view>
                </view>
                <view class="bg-mounth">{{ month }}</view>
            </view>
            <view class="calendar-text">
                <!-- <view class="calendar-result">
                    <text>{{ !isRange ? activeDate : startDate }}</text>
                    <text v-if="endDate">至{{ endDate }}</text>
                </view> -->
                <view class="calendar-btn">
                    <button :style="{opacity:disabled ? '.5' : '1'}" :size="28" :disabled="disabled"
                        @click="confireBtnClick(false)">确定
                    </button>
                </view>
            </view>
        </view>
        <view class="mask" :class="[value ? 'mask-show' : '']" @tap="hide"></view>
    </view>
</template>
<script>
    import calendar from './calendar.js';
    export default {
        name: 'lCalendar',
        model: {
            prop: 'value',
            event: 'input'
        },
        props: {
            //双向绑定的值 ç”¨äºŽå±•示/关闭日历
            value: {
                type: Boolean,
                default: false
            },
      //是否选择范围 true是 false选择单个日期
      isRange: {
          type: Boolean,
          default: false
      },
            //可切换最大年份
            maxYear: {
                type: Number,
                default: 2100
            },
            //可切换最小年份
            minYear: {
                type: Number,
                default: 1920
            },
            //最小可选日期 ä¸åœ¨èŒƒå›´å†…日期禁选
            minDate: {
                type: String,
                default: '1920-01-01'
            },
            //最大可选日期
            maxDate: {
                type: String,
                default: '2100-1-1'
            },
      //组件标题
            title: {
                type: String,
                default: '日期选择'
            },
            //月份切换箭头颜色
            monthChangeColor: {
                type: String,
                default: '#999'
            },
            //年份切换箭头颜色
            yearChangeColor: {
                type: String,
                default: '#bfbfbf'
            },
            //默认日期字体颜色
            color: {
                type: String,
                default: '#333'
            },
            //选中日期字体颜色
            activeColor: {
                type: String,
                default: '#fff'
            },
            //选中日期背景色
            activeBgColor: {
                type: String,
                default: '#55BBF9'
            },
            //范围内日期背景色
            rangeBgColor: {
                type: String,
                default: 'rgba(85, 187, 249, 0.1)'
            },
            //范围内日期字体颜色
            rangeColor: {
                type: String,
                default: '#55BBF9'
            },
            //范围选择时生效 å¼€å§‹æ—¥æœŸè‡ªå®šä¹‰æ–‡å­—
            startText: {
                type: String,
                default: '开始'
            },
            //范围选择时生效 ç»“束日期自定义文字
            endText: {
                type: String,
                default: '结束'
            },
            //是否显示农历
            lunar: {
                type: Boolean,
                default: true
            },
            //初始化开始选中日期 æ ¼å¼ï¼š 2020-06-06 æˆ– 2020/06/06
            initStartDate: {
                type: String,
                default: ''
            },
            //初始化结束日期 æ ¼å¼ï¼š 2020-06-06 æˆ– 2020/06/06
            initEndDate: {
                type: String,
                default: ''
            }
        },
        data() {
            return {
                weekday: 1, // æ˜ŸæœŸå‡ ,值为1-7
                weekdayArr: [],
                days: 0, //当前月有多少天
                daysArr: [],
                showTitle: '',//当前年月标题
                year: 2020,
                month: 0,
                day: 0,
                startYear: 0,
                startMonth: 0,
                startDay: 0,
                endYear: 0,
                endMonth: 0,
                endDay: 0,
                today: '', //今天的日期
                activeDate: '', //当前选中日期
                startDate: '', //范围选择时的选中开始日期
                endDate: '', //范围选择时的选中结束日期
                isStart: true,
                min: null,
                max: null,
                dateHeight: 20
            };
        },
        computed: {
            dataChange() {
                return `${this.type}-${this.minDate}-${this.maxDate}-${this.initStartDate}-${this.initEndDate}`;
            },
            disabled() {
                return this.isRange && (!this.startDate || !this.endDate)
            }
        },
        watch: {
            dataChange(val) {
                this.init();
            },
        },
        created() {
            this.init();
        },
        methods: {
            getColor(index, type) {
                let color = type == 1 ? '' : this.color;
                let day = index + 1;
                let date = `${this.year}-${this.month}-${day}`;
                let timestamp = new Date(date.replace(/\-/g, '/')).getTime();
                let start = this.startDate.replace(/\-/g, '/');
                let end = this.endDate.replace(/\-/g, '/');
                if ((this.activeDate == date) || this.startDate == date || this.endDate == date) {
                    color = type == 1 ? this.activeBgColor : this.activeColor;
                } else if (this.endDate && timestamp > new Date(start).getTime() && timestamp < new Date(end).getTime()) {
                    color = type == 1 ? this.rangeBgColor : this.rangeColor;
                }
                return color;
            },
            getText(index, startDate, endDate) {
                let text = this.lunar ? this.getLunar(this.year, this.month, index + 1) : '';
                if (this.isRange) {
                    if (this.lunar) {
                        let date = `${this.year}-${this.month}-${index + 1}`;
                        if (startDate == date && startDate != endDate) {
                            text = this.startText;
                        } else if (endDate == date) {
                            text = this.endText;
                        }
                    }
                }
                return text;
            },
            getLunar(year, month, day) {
                let obj = calendar.solar2lunar(year, month, day);
                if (obj.IDayCn == '初一') {
                    return obj.IMonthCn
                }
                return obj.IDayCn;
            },
            init() {
                this.dateHeight = uni.getSystemInfoSync().windowWidth / 7;
                let now = new Date();
                this.year = now.getFullYear();
                this.month = now.getMonth() + 1;
                this.day = now.getDate();
                this.today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;
                this.activeDate = this.today;
                this.min = this.initDate(this.minDate);
                this.max = this.initDate(this.maxDate);
                if (this.isDisable(this.year, this.month, this.day)) {
                    this.year = this.min.year;
                    this.month = this.min.month;
                    this.day = this.min.day;
                    this.activeDate = `${this.min.year}-${this.min.month}-${this.min.day}`;
                    this.max = this.initDate(this.maxDate || this.minDate);
                }
                this.startDate = '';
                this.startYear = 0;
                this.startMonth = 0;
                this.startDay = 0;
                if (this.initStartDate) {
                    let start = new Date(this.initStartDate.replace(/\-/g, '/'));
                    if (!this.isRange) {
                        this.year = start.getFullYear();
                        this.month = start.getMonth() + 1;
                        this.day = start.getDate();
                        this.activeDate = `${start.getFullYear()}-${start.getMonth() + 1}-${start.getDate()}`;
                    } else {
                        this.startDate = `${start.getFullYear()}-${start.getMonth() + 1}-${start.getDate()}`;
                        this.startYear = start.getFullYear();
                        this.startMonth = start.getMonth() + 1;
                        this.startDay = start.getDate();
                        this.activeDate = '';
                    }
                }
                this.endYear = 0;
                this.endMonth = 0;
                this.endDay = 0;
                this.endDate = '';
                if (this.initEndDate && this.isRange) {
                    let end = new Date(this.initEndDate.replace(/\-/g, '/'));
                    this.endDate = `${end.getFullYear()}-${end.getMonth() + 1}-${end.getDate()}`;
                    this.endYear = end.getFullYear();
                    this.endMonth = end.getMonth() + 1;
                    this.endDay = end.getDate();
                    this.activeDate = '';
                    this.year = end.getFullYear();
                    this.month = end.getMonth() + 1;
                    this.day = end.getDate();
                }
                this.isStart = true;
                this.changeData();
            },
            //日期处理
            initDate(date) {
                let dateArr = date.split('-');
                return {
                    year: Number(dateArr[0] || 1920),
                    month: Number(dateArr[1] || 1),
                    day: Number(dateArr[2] || 1)
                };
            },
            isDisable(year, month, day) {
                let bool = true;
                let date = `${year}/${month}/${day}`;
                let min = `${this.min.year}/${this.min.month}/${this.min.day}`;
                let max = `${this.max.year}/${this.max.month}/${this.max.day}`;
                let timestamp = new Date(date).getTime();
                if (timestamp >= new Date(min).getTime() && timestamp <= new Date(max).getTime()) {
                    bool = false;
                }
                return bool;
            },
            generateArray(start, end) {
                return Array.from(new Array(end + 1).keys()).slice(start);
            },
            formatNum(num) {
                return num < 10 ? '0' + num : num + '';
            },
            //一个月有多少天
            getMonthDay(year, month) {
                let days = new Date(year, month, 0).getDate();
                return days;
            },
            // èŽ·å–å½“å‰æ—¥æœŸæ˜¯æ˜ŸæœŸå‡ 
            getWeekday(year, month) {
                let date = new Date(`${year}/${month}/01 00:00:00`);
                return date.getDay();
            },
            changeMonth(isAdd) {
                if (isAdd) {
                    let month = this.month + 1;
                    let year = month > 12 ? this.year + 1 : this.year;
                    if (year > this.minYear || year < this.maxYear) {
                        this.month = month > 12 ? 1 : month;
                        this.year = year;
                        this.changeData();
                    }
                } else {
                    let month = this.month - 1;
                    let year = month < 1 ? this.year - 1 : this.year;
                    if (year > this.minYear || year < this.maxYear) {
                        this.month = month < 1 ? 12 : month;
                        this.year = year;
                        this.changeData();
                    }
                }
            },
            changeYear(isAdd) {
                let year = isAdd ? this.year + 1 : this.year - 1;
                if (year > this.minYear || year < this.maxYear) {
                    this.year = year;
                    this.changeData();
                }
            },
            changeData() {
                this.days = this.getMonthDay(this.year, this.month);
                this.daysArr = this.generateArray(1, this.days);
                this.weekday = this.getWeekday(this.year, this.month);
                this.weekdayArr = this.generateArray(1, this.weekday);
                this.showTitle = `${this.year}å¹´${this.month}月`;
                if (!this.isRange) {
                    this.confireBtnClick(true);
                }
            },
            dateClick: function(day) {
                day += 1;
                if (!this.isDisable(this.year, this.month, day)) {
                    this.day = day;
                    let date = `${this.year}-${this.month}-${day}`;
                    if (!this.isRange) {
                        this.activeDate = date;
                    } else {
                        let compare = new Date(date.replace(/\-/g, '/')).getTime() < new Date(this.startDate.replace(
                            /\-/g, '/')).getTime();
                        if (this.isStart || compare) {
                            this.startDate = date;
                            this.startYear = this.year;
                            this.startMonth = this.month;
                            this.startDay = this.day;
                            this.endYear = 0;
                            this.endMonth = 0;
                            this.endDay = 0;
                            this.endDate = '';
                            this.activeDate = '';
                            this.isStart = false;
                        } else {
                            this.endDate = date;
                            this.endYear = this.year;
                            this.endMonth = this.month;
                            this.endDay = this.day;
                            this.isStart = true;
                        }
                    }
                }
            },
            hide() {
                this.$emit('input', false)
            },
            getWeekText(date) {
                date = new Date(`${date.replace(/\-/g, '/')} 00:00:00`);
                let week = date.getDay();
                return '星期' + ['日', '一', '二', '三', '四', '五', '六'][week];
            },
            confireBtnClick(show) {
                if (!show) {
                    this.hide();
                }
                if (!this.isRange) {
                    let arr = this.activeDate.split('-');
                    let year = +arr[0];
                    let month = +arr[1];
                    let day = +arr[2];
                    //当前月有多少天
                    let days = this.getMonthDay(year, month);
                    let result = `${year}-${this.formatNum(month)}-${this.formatNum(day)}`;
                    let weekText = this.getWeekText(result);
                    let isToday = false;
                    if (`${year}-${month}-${day}` == this.today) {
                        //今天
                        isToday = true;
                    }
                    let lunar = calendar.solar2lunar(year, month, day);
                    this.$emit('change', {
                        year: year,
                        month: month,
                        day: day,
                        days: days,
                        result: result,
                        week: weekText,
                        isToday: isToday,
                        lunar: lunar
                    });
                } else {
                    if (!this.startDate || !this.endDate) return;
                    let startMonth = this.formatNum(this.startMonth);
                    let startDay = this.formatNum(this.startDay);
                    let startDate = `${this.startYear}-${startMonth}-${startDay}`;
                    let startWeek = this.getWeekText(startDate);
                    let startLunar = calendar.solar2lunar(this.startYear, startMonth, startDay);
                    let endMonth = this.formatNum(this.endMonth);
                    let endDay = this.formatNum(this.endDay);
                    let endDate = `${this.endYear}-${endMonth}-${endDay}`;
                    let endWeek = this.getWeekText(endDate);
                    let endLunar = calendar.solar2lunar(this.endYear, endMonth, endDay);
                    this.$emit('change', {
                        startYear: this.startYear,
                        startMonth: this.startMonth,
                        startDay: this.startDay,
                        startDate: startDate,
                        startWeek: startWeek,
                        startLunar: startLunar,
                        endYear: this.endYear,
                        endMonth: this.endMonth,
                        endDay: this.endDay,
                        endDate: endDate,
                        endWeek: endWeek,
                        endLunar: endLunar
                    });
                }
            }
        }
    };
</script>
<style lang="scss" scoped>
    @font-face {
        font-family: 'l-icons';
        src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTZa9XzsAAAjcAAAAHEdERUYAKQAOAAAIvAAAAB5PUy8yPDVJwwAAAVgAAABgY21hcMxRtw0AAAHUAAABYmdhc3D//wADAAAItAAAAAhnbHlm05h+ZAAAA0wAAAJ8aGVhZCQifFoAAADcAAAANmhoZWEHyAOSAAABFAAAACRobXR4EnYBLQAAAbgAAAAcbG9jYQKkAegAAAM4AAAAEm1heHABFgBMAAABOAAAACBuYW1lXoIBAgAABcgAAAKCcG9zdMeZtAYAAAhMAAAAaAABAAAAAQAA+jMzTF8PPPUACwQAAAAAAOCMnBkAAAAA4IycGQAA/6sD6gOAAAAACAACAAAAAAAAAAEAAAOA/4AAXAQLAAAAAAPqAAEAAAAAAAAAAAAAAAAAAAAGAAEAAAAIAEAABAAAAAAAAgAAAAoACgAAAP8AAAAAAAAABAQEAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZADA5gDm8AOA/4AAAAPcAIAAAAABAAAAAAAAAAAAAAAgAAEEAAAAAAAAAAFVAAAECwAWBAsAHgQAAPkBCwAAAAAAAwAAAAMAAAAcAAEAAAAAAFwAAwABAAAAHAAEAEAAAAAMAAgAAgAE5gDmB+Yf5iPm8P//AADmAOYH5h/mI+bw//8aAxn9GeYZ4xkXAAEAAAAAAAAAAAAAAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByAOAA9AEIAT4AAAAEABb/wQPiA0sAIQAkAD4APwAAAQYUFwEWHwE3Njc2JyYnJicBJwE2NzY3NicmJzEuAQYHCQE3ByU+ATc2JwEnNwE2Jy4BDwEGBw4BFwEWHwE3MQHuFhYBcRIZDAwvDQQDAwsFBf7IBQE3DgUJAgICAQQLLDET/o8BqAwM/kUbJwEBGf7HBgYBOhwGB1MiabFZFwEXAXESGAoJAbkWQxf+kBIEAgIKLQ8TDw4HBAE5BAE3DQgNDRINBQkYGAcT/o/+CAICAQIqGyIZATkEBQE6HCUsHh5psVgXRBf+kBIEAgEAAAAEAB7/tQPqAz8AIAAiADwAPQAAATY0JwEmLwEHBgcGFxYXFhcBFwEGBwYHBhcWFzEeATY3AwclDgEHBhcBFwcBBhceAT8BNjc+AScBJi8BBzECEhYW/o8SGQwMLw0EAwMLBQUBOAX+yQ4FCQICAgEECywxEzcMAccbJwEBGQE5Bgb+xhwGB1MiabFZFwEX/o8SGAoJAUcWQxcBcBIEAgIKLQ8TDw4HBP7HBP7JDQgNDRINBQkYGAcTA2kCAQIqGyIZ/scEBf7GHCUsHh5psVgXRBcBcBIEAgEAAAAAAQD5/68DSQOAAAUAADcXCQEHAflnAen+F2cBghZnAekB6Gf+fwAAAAEBC/+rAxgDVQAFAAAJARcJAQcBCwG9UP6JAWJRAYEB1Ez+dv52SgABAAD/sAPOA4AAGwAACQEWFAYiJwkBBiImNDcJASY0NjIXCQE2MhYUBwJPAWoVKzwW/pb+lhY8KxUBa/6VFSs8FgFqAWoWPCsVAZj+lRU9KxUBa/6VFSs9FQFrAWsVPSsV/pUBaxUrPRUAAAAAABIA3gABAAAAAAAAABMAKAABAAAAAAABAAgATgABAAAAAAACAAcAZwABAAAAAAADAAgAgQABAAAAAAAEAAgAnAABAAAAAAAFAAsAvQABAAAAAAAGAAgA2wABAAAAAAAKACsBPAABAAAAAAALABMBkAADAAEECQAAACYAAAADAAEECQABABAAPAADAAEECQACAA4AVwADAAEECQADABAAbwADAAEECQAEABAAigADAAEECQAFABYApQADAAEECQAGABAAyQADAAEECQAKAFYA5AADAAEECQALACYBaABDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AABDcmVhdGVkIGJ5IGljb25mb250AABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABSAGUAZwB1AGwAYQByAABSZWd1bGFyAABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABWAGUAcgBzAGkAbwBuACAAMQAuADAAAFZlcnNpb24gMS4wAABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAABHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuAABoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAABodHRwOi8vZm9udGVsbG8uY29tAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAEAAgECAQMBBAEFAQYKeW91amlhbnRvdQt5b3VqaWFudG91MQt5b3VqaWFudG91Mgp6dW9qaWFudG91B3NoYW5jaHUAAAAB//8AAgABAAAADAAAABYAAAACAAEAAwAHAAEABAAAAAIAAAAAAAAAAQAAAADVpCcIAAAAAOCMnBkAAAAA4IycGQ==') format('truetype');
        font-weight: normal;
        font-style: normal;
        font-display: swap;
    }
    .l-icons {
        font-family: 'l-icons';
        font-size: 38rpx;
        color: #333333;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale
    }
    .icon-shanchu:before {
        content: "\e6f0";
    }
    .icon-youjiantou:before {
        content: "\e600";
    }
    .icon-zuojiantou:before {
        content: "\e623";
    }
    .icon-youjiantou1:before {
        content: "\e607";
    }
    .icon-youjiantou2:before {
        content: "\e61f";
    }
    .l-calendar-box {
        width: 100%;
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 9999;
        visibility: hidden;
        transform: translate3d(0, 100%, 0);
        transform-origin: center;
        transition: all 0.3s ease-in-out;
        min-height: 20rpx;
        .calendar-top {
            width: 100%;
            height: 80rpx;
            padding: 0 40rpx;
            display: flex;
            justify-content: center;
            align-items: center;
            box-sizing: border-box;
            font-size: 30rpx;
            font-weight: bold;
            background-color: #fff;
            color: #333;
            position: relative;
            border-top-left-radius: 20rpx;
            border-top-right-radius: 20rpx;
            overflow: hidden;
            .close {
                position: absolute;
                right: 30rpx;
                top: 50%;
                transform: translateY(-50%);
                color: #999;
            }
        }
        .date-box {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 20rpx 0 30rpx;
            background-color: #fff;
            .date-arrowleft {
                margin-right: 32rpx;
            }
            .date-arrowright {
                margin-left: 32rpx;
            }
            .title-datetime {
                padding: 0 16rpx;
                color: #333;
                font-size: 30rpx;
                line-height: 30rpx;
                font-weight: bold;
            }
        }
        .date-weekday {
            width: 100%;
            display: flex;
            align-items: center;
            background-color: #fff;
            font-size: 24rpx;
            line-height: 24rpx;
            color: #555;
            box-shadow: 0 15rpx 20rpx -15rpx #efefef;
            position: relative;
            z-index: 2;
            .date-weekday-item {
                width: 14.2857%;
                display: flex;
                align-items: center;
                justify-content: center;
                padding: 12rpx 0;
                overflow: hidden;
                position: relative;
                z-index: 2;
            }
        }
        .date-content {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            padding: 12rpx 0;
            box-sizing: border-box;
            background-color: #fff;
            position: relative;
            align-content: flex-start;
            .date-weekday-item {
                width: 14.2857%;
                display: flex;
                align-items: center;
                justify-content: center;
                padding: 12rpx 0;
                overflow: hidden;
                position: relative;
                z-index: 2;
                .date-content-item {
                    width: 80rpx;
                    height: 80rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    flex-direction: column;
                    font-size: 32rpx;
                    line-height: 32rpx;
                    position: relative;
                    border-radius: 50%;
                    background-color: transparent;
                    .custom-desc {
                        width: 100%;
                        font-size: 24rpx;
                        line-height: 24rpx;
                        transform: scale(0.8);
                        transform-origin: center center;
                        text-align: center;
                    }
                }
                .date-content-item-desc {
                    width: 100%;
                    font-size: 24rpx;
                    line-height: 24rpx;
                    position: absolute;
                    left: 0;
                    transform: scale(0.8);
                    transform-origin: center center;
                    text-align: center;
                    bottom: 8rpx;
                    z-index: 2;
                }
            }
            .start-date {
                border-top-left-radius: 8rpx;
                border-bottom-left-radius: 8rpx;
            }
            .end-date {
                border-top-right-radius: 8rpx;
                border-bottom-right-radius: 8rpx;
            }
            .bg-mounth {
                position: absolute;
                font-size: 260rpx;
                line-height: 260rpx;
                left: 50%;
                top: 50%;
                transform: translate(-50%, -50%);
                color: #f5f5f7;
                z-index: 1;
            }
        }
        .calendar-text {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
            background-color: #fff;
            padding: 0 42rpx env(safe-area-inset-bottom);
            box-sizing: border-box;
            font-size: 24rpx;
            color: #666;
            .calendar-result {
                height: 48rpx;
                transform: scale(0.9);
                transform-origin: center 100%;
            }
            .calendar-btn {
                width: 100%;
                button {
                    background-color: #305ED5;
                    color: #fff;
                    height: 72rpx;
                    line-height: 72rpx;
                    font-size: 32rpx
                }
            }
        }
    }
    .mask {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.6);
        z-index: 9996;
        transition: all 0.3s ease-in-out;
        opacity: 0;
        visibility: hidden;
    }
    .mask-show {
        opacity: 1;
        visibility: visible;
    }
    /* @font-face {
        font-family: 'tuiDateFont';
        src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAVgAA0AAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAFRAAAABoAAAAci0/w50dERUYAAAUkAAAAHgAAAB4AKQANT1MvMgAAAaAAAABDAAAAVjxuSNNjbWFwAAAB+AAAAEoAAAFS5iPQt2dhc3AAAAUcAAAACAAAAAj//wADZ2x5ZgAAAlQAAAFHAAABvPf29TBoZWFkAAABMAAAADAAAAA2GMsN3WhoZWEAAAFgAAAAHQAAACQHjAOFaG10eAAAAeQAAAATAAAAFgzQAPJsb2NhAAACRAAAABAAAAAQAOoBSG1heHAAAAGAAAAAHgAAACABEwA3bmFtZQAAA5wAAAFJAAACiCnmEVVwb3N0AAAE6AAAADQAAABLUwjqHHjaY2BkYGAAYp5Gj5/x/DZfGbhZGEDg1tUn7+F00P/LzOuY9YFcDgYmkCgAa0gNlHjaY2BkYGBu+N/AEMPCAALM6xgYGVABCwBT4AMaAAAAeNpjYGRgYGBn0GZgYgABEMkFhAwM/8F8BgANaAFLAAB42mNgZGFgnMDAysDA1Ml0hoGBoR9CM75mMGLkAIoysDIzYAUBaa4pDA7PGJ49ZG7438AQw9zA0AAUZgTJAQDrcAy8AHjaY2GAABYIDgLCBQx1AAcEAc8AeNpjYGBgZoBgGQZGBhDwAfIYwXwWBgMgzQGETAwMzxifcTx7+P8/kMUAYUkxS/6VVIXqAgNGNgY4lxGoB6QPBTAyDHsAADDkDYkAAAAAAAAAAAAAADQAagC2AN542m2QsU7DMBCG/Tt1bNPUiUnkSgiVtqKpxJAgVLVbeAa6MaK+B4JXgJWBjY21UtW5gpkdMTFX7dzApaJLhXU6n8+n//ttxtn458N79XJWZ8eMxS00C4wy9A1EP8PQncAlIQzS4WgsVtPpSmwzV3OFRqLetH5TSQMK939X61ptPZ2p2EAttNMLBRMrtschQblDeS34aY50cIkCzg/B2Y5C+VpyQxhFkRgu515O8jvU5mmPM2O0wJ5Z27vhX+yMsV437WvCdTM+GI40MgwKfuGammC0uURqeqFMfe9cxaJclkt5GMaB1hIR1VobOgpEiKq+sLZcIrJWhO3/Jw7qWlYj1Jf21FaCtmd5bevrlk28O/7A4spXTl4KTh9MTlqQ8PESBRstReic+sRj0Dni9fIqmNS/pXNWCvWOeYBmx5S9Bsn9Ah+5WtAAeNp9kD1OAzEQhZ/zByQSQiCoXVEA2vyUKRMp9Ailo0g23pBo1155nUg5AS0VB6DlGByAGyDRcgpelkmTImvt6PObmeexAZzjGwr/3yXuhBWO8ShcwREy4Sr1F+Ea+V24jhY+hRvUf4SbuFUD4RYu1BsdVO2Eu5vSbcsKZxgIV3CKJ+Eq9ZVwjfwqXMcVPoQb1L+EmxjjV7iFa2WpDOFhMEFgnEFjig3jAjEcLJIyBtahOfRmEsxMTzd6ETubOBso71dilwMeaDnngCntPbdmvkon/mDLgdSYbh4FS7YpjS4idCgbXyyc1d2oc7D9nu22tNi/a4E1x+xRDWzU/D3bM9JIbAyvkJI18jK3pBJTj2hrrPG7ZynW814IiU68y/SIx5o0dTr3bmniwOLn8owcfbS5kj33qBw+Y1kIeb/dTsQgil2GP5PYcRkAAAB42mNgYoAALjDJyIAO2MGiTIxMjMyMLIys7GmJeRmlmWZQ2pQ5OSORLaU0Mz2/FACDfwlbAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMABgABAAQAAAACAAAAAHjaY2BgYGQAgqtL1DlA9K2rT97DaABNlwiuAAA=) format('woff');
        font-weight: normal;
        font-style: normal;
    }
    .tui-iconfont {
        font-family: 'tuiDateFont' !important;
        font-size: 36rpx;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }
    .tui-font-close:before {
        content: '\e608';
    }
    .tui-font-check:before {
        content: '\e6e1';
    }
    .date-arrowright:before {
        content: '\e600';
    }
    .date-arrowleft:before {
        content: '\e601';
    } */
    // .calendar-radius {
    //     border-top-left-radius: 20rpx;
    //     border-top-right-radius: 20rpx;
    //     overflow: hidden;
    // }
    .tui-btn-calendar {
        padding: 16rpx;
        box-sizing: border-box;
        text-align: center;
        text-decoration: none;
    }
    .l-opacity {
        opacity: 0.5;
    }
    .calendar-box-show {
        transform: translate3d(0, 0, 0);
        visibility: visible;
    }
    // .tui-lunar-unshow {
    //     position: absolute;
    //     left: 0;
    //     bottom: 8rpx;
    //     z-index: 2;
    // }
</style>
minipro_standard/uni_modules/l-calendar/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
{
  "id": "l-calendar",
  "displayName": "日历 æ—¥æœŸé€‰æ‹© é€‰æ‹©å¹´æœˆæ—¥",
  "version": "1.0.3",
  "description": "日历 æ—¥æœŸé€‰æ‹© é€‰æ‹©å¹´æœˆæ—¥ ä»…测过小程序其他自测",
  "keywords": [
    "日历",
    "日期选择",
    "选择年月日",
    "年月日",
    "l-calendar"
],
  "repository": "",
"engines": {
  },
  "dcloudext": {
    "type": "component-vue",
    "sale": {
      "regular": {
        "price": "0.00"
      },
      "sourcecode": {
        "price": "0.00"
      }
    },
    "contact": {
      "qq": ""
    },
    "declaration": {
      "ads": "无",
      "data": "插件不采集任何数据",
      "permissions": "无"
    },
    "npmurl": ""
  },
  "uni_modules": {
    "dependencies": [],
    "encrypt": [],
    "platforms": {
      "cloud": {
        "tcb": "y",
        "aliyun": "y"
      },
      "client": {
        "Vue": {
          "vue2": "y",
          "vue3": "y"
        },
        "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",
          "钉钉": "y",
          "快手": "y",
          "飞书": "y",
          "京东": "y"
        },
        "快应用": {
          "华为": "y",
          "联盟": "y"
        }
      }
    }
  }
}
minipro_standard/uni_modules/l-calendar/readme.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
# l-calendar
# ## ä½¿ç”¨æ–¹æ³•
配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
```html
<template>
    <l-calendar v-model="show" @change="change" :isRange="true"></l-calendar>
</template>
```
## ç»„件属性
| å±žæ€§ | ç±»åž‹ | é»˜è®¤å€¼ | è¯´æ˜Ž |
|:---:|:---:|:---:|---|
| value | Boolean | false | v-module åŒå‘绑定的值 |
| isRange | Boolean | false | æ˜¯å¦é€‰æ‹©èŒƒå›´ true是  false选择单个日期 |
| maxYear | Number | 2100 | å¯åˆ‡æ¢æœ€å¤§å¹´ä»½ |
| minYear | Number | 1920 | å¯åˆ‡æ¢æœ€å°å¹´ä»½ |
| minDate | String | '1920-01-01' | æœ€å°å¯é€‰æ—¥æœŸ ä¸åœ¨èŒƒå›´å†…日期禁选 |
| maxDate | String | '2100-1-1' | æœ€å¤§å¯é€‰æ—¥æœŸ ä¸åœ¨èŒƒå›´å†…日期禁选 |
| title | String | '日期选择' | ç»„件标题 |
| monthChangeColor | String | #999 | æœˆä»½åˆ‡æ¢ç®­å¤´é¢œè‰² |
| yearChangeColor | String | '#bfbfbf' | å¹´ä»½åˆ‡æ¢ç®­å¤´é¢œè‰² |
| color | String | #333 | é»˜è®¤æ—¥æœŸå­—体颜色 |
| activeColor | String | '#fff' | é€‰ä¸­æ—¥æœŸå­—体颜色 |
| activeBgColor | String | '#55BBF9' | é€‰ä¸­æ—¥æœŸèƒŒæ™¯è‰² |
| rangeBgColor | String | rgba(85, 187, 249, 0.1) | èŒƒå›´å†…日期背景色 |
| startText | String | å¼€å§‹ | èŒƒå›´é€‰æ‹©æ—¶ç”Ÿæ•ˆ å¼€å§‹æ—¥æœŸè‡ªå®šä¹‰æ–‡å­— |
| endText | String | ç»“束 | èŒƒå›´é€‰æ‹©æ—¶ç”Ÿæ•ˆ ç»“束日期自定义文字 |
| lunar | Boolean | true | æ˜¯å¦æ˜¾ç¤ºå†œåކ |
| initStartDate | String | '' | åˆå§‹åŒ–开始选中日期 æ ¼å¼ï¼š 2020-06-06 æˆ– 2020/06/06 |
| initEndDate | String | '' | åˆå§‹åŒ–开始选中日期 æ ¼å¼ï¼š 2020-06-06 æˆ– 2020/06/06 |
## ç»„件事件
| åç§° | è§¦å‘时机 |
|:---:|---|
| change | ç‚¹å‡»ç¡®å®šæŒ‰é’®é€‰æ‹©æ—¥æœŸ |