chenhaozhe
2026-01-08 0407d386bea756ac23597c6c4174f50dc90527a9
新增设备维修检验单 设备保养单 保养规程选择模块
3个文件已添加
7个文件已修改
2351 ■■■■ 已修改文件
components/MJGL/BillSelectorPopup.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBillList.vue 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBillList.vue 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBill.vue 736 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBillList.vue 472 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/style/MJBillStyle.scss 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/style/MJListStyle.scss 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/tab3.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
components/MJGL/BillSelectorPopup.vue
New file
@@ -0,0 +1,315 @@
<template>
    <view>
        <uni-popup ref="popup" type="bottom" @change="popupChangeHandler">
            <view class="content">
                <view class="search-condition">
                    <view class="title"><text>单据号: </text></view>
                    <view class="right"><input type="text" v-model="HBillNo" @confirm="getBillList" /></view>
                </view>
                <view class="buttons">
                    <view style="flex: 1;"></view>
                    <button size="mini" type="primary" @click="search">查询</button>
                    <button size="mini" type="primary" @click="exit">退出</button>
                </view>
                <scroll-view id="#BillListPanel" scroll-y="true" style="height: 55vh;">
                    <view class="card-item" v-show="HBillList.length != 0">
                        <uni-card
                            v-for="(bill, index) in HBillList[curPage-1]" :key="index" @tap="clickCard(bill, index)">
                                <view class="card-detail" v-for="(HBillField, index) in emptyValueFilter(bill,HBillFieldsList).slice(0,10)" :key="index">
                                    <template v-if="HBillField.ColmType == 'DateTime'"><text>{{ HBillField.ColmCols }}:</text>{{  bill[HBillField.ColmCols] ? dayjs(bill[HBillField.ColmCols]).format("YYYY-MM-DD HH:mm:ss") : "" }} </template>
                                    <template v-else><text>{{ HBillField.ColmCols }}:</text>{{  bill[HBillField.ColmCols] }}</template>
                                </view>
                                <view class="card-detail" v-if="showDetail == index">
                                    <view class="card-detail" v-for="(HBillField, index) in emptyValueFilter(bill,HBillFieldsList).slice(10,-1)" :key="index">
                                        <template v-if="HBillField.ColmType == 'DateTime'"><text>{{ HBillField.ColmCols }}:</text>{{  bill[HBillField.ColmCols] ? dayjs(bill[HBillField.ColmCols]).format("YYYY-MM-DD HH:mm:ss") : "" }} </template>
                                        <template v-else><text>{{ HBillField.ColmCols }}:</text>{{  bill[HBillField.ColmCols] }}</template>
                                    </view>
                                </view>
                            <view class="more" v-if="showDetail == index && operations != index">
                                <view class="part" style="border-right: 1px solid #eee;" @tap.stop="showDetail = -1">
                                    <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14" ></uni-icons>收起
                                </view>
                                <!-- <view class="part" @tap.stop="operations = operations==index?-1:index">
                                    <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                        size="14"></uni-icons>操作
                                </view> -->
                            </view>
                            <view class="more" v-if="showDetail != index && operations != index">
                                <view class="part" style="border-right: 1px solid #eee;" @tap.stop="showDetail = index">
                                    <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>更多信息
                                </view>
                                <!-- <view class="part" @tap.stop="operations = operations==index?-1:index">
                                    <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                        size="14"></uni-icons>操作
                                </view> -->
                            </view>
                        </uni-card>
                    </view>
                    <view class="over" v-show="HBillList.length == 0">暂无数据</view>
                </scroll-view>
                <uni-pagination id="#pagination" title="标题文字" v-model="curPage" :pageSize="size"
                    :total="length"></uni-pagination>
            </view>
        </uni-popup>
    </view>
</template>
<script>
    import dayjs from 'dayjs';
    import {
        CommonUtils
    } from '@/utils/common';
    import {
        getUserInfo
    } from '@/utils/auth';
    export default {
        name: "billSelectorPopup",
        emits: ["update:modelValue"],
        data() {
            return {
                showDetail: -1,
                operations: -1,
                dayjs: dayjs,
                enablefocus: false,
                size: 20,
                curPage: 1,
                length: 0,
                page: 0,
                HName: '',
                HCode: '',
                HBillNo: '',
                HBillList: [], // 表单数据集合
                HBillFieldsList: [], // 表单字段集合
                panelHeight: 0,
                refTargetKey: 0,
                multiSouceBillList: [],
            };
        },
        props: {
            HStockOrgID: {
                type: [String, Number],
            },
        },
        mounted() {},
        methods: {
            popupChangeHandler(e) {
                if (e.show === true) {
                }
            },
            async exit() {
                this.size = 20
                this.curPage = 1
                this.length = 0
                this.page = 0
                this.HSourceBillNo = ''
                this.HMater = ''
                this.HCustom = ''
                this.HBillList = []
                this.enablefocus = false
                this.multiSouceBillList = []
                // 需要等待页面内的数据赋值完毕
                await this.$nextTick()
                this.$refs.popup.close();
            },
            search() {
                this.getBillList()
            },
            async showPopup(index) {
                this.$refs.popup.open();
                this.refTargetKey = index
                this.getBillList()
            },
            clickCard(bill, index) {
                console.log('this.HBillList: ',this.HBillList);
                let retVal = {}
                retVal[this.refTargetKey] = this.HBillList[0].filter(item => item.hmainid == bill.hmainid)
                this.$emit("update", {
                    retVal: retVal,
                    index: this.refTargetKey
                })
            },
            getsWhere() {
                let sWhere =
                    ``
                // if (this.HCode) {
                //     swhere += ` and 不良原因代码 like '%${this.HCode}%'`
                // }
                if (this.HBillNo) {
                    sWhere += ` and 单据号 like '%${this.HBillNo}%'`
                }
                if(this.refTargetKey) {
                    sWhere += ` and 设备ID = ${this.refTargetKey}`
                }
                return sWhere
            },
            getBillList() {
                let sWhere = this.getsWhere()
                console.log('sWhere: ',sWhere);
                this.HBillList = []
                this.length = 0
                this.page = 0
                this.curPage = 1
                CommonUtils.doRequest(
                    "/Web/GetEquipmentBillsList", {
                        sWhere: sWhere,
                        user: getUserInfo()['Czymc'],
                        Type: "BY"
                    },
                    (res) => {
                        let {
                            data,
                            count,
                            list,
                            Message
                        } = res.data
                        if (count == 1) {
                            this.length = Array.from(data).length
                            const result = [];
                            for (let i = 0; i < data.length; i += this.size) {
                                result.push(data.slice(i, i + this.size));
                            }
                            this.HBillList = result
                            // 过滤不需要显示的字段
                            this.HBillFieldsList = Array.from(list)
                                .filter(e => this.shouldShowField(e.ColmCols) == true)
                            this.page = result.length
                            setTimeout(() => {
                                this.enablefocus = true
                            }, 500)
                        } else {
                            setTimeout(() => {
                                this.enablefocus = true
                            }, 500)
                            uni.showModal({
                                title: '温馨提示',
                                content: Message
                            })
                        }
                    }
                )
            },
            // 判断哪些字段需要显示
            shouldShowField(key) {
                // 排除不需要显示的字段
                const excludeKeys = []; // 这些字段已经在其他地方显示了
                // 判断key是否全英文(不包含中文)
                const isAllEnglish = /^[a-zA-Z]+$/.test(key);
                // 判断key是否包含"ID"(不区分大小写)
                const containsID = key.toUpperCase().includes('ID');
                return !excludeKeys.includes(key) &&
                       !isAllEnglish && // 排除全英文的key
                       !containsID // 排除包含ID的key
            },
            emptyValueFilter(item, fieldList){
                return fieldList.filter(e => item[e.ColmCols])
            }
        },
    }
</script>
<style lang="scss" scoped>
    .content {
        box-sizing: border-box;
        border-radius: 15rpx 15rpx 0 0;
        padding: 20rpx 20rpx 40rpx 20rpx;
        background-color: #fff;
        display: flex;
        flex-direction: column;
        gap: 10rpx;
        .search-condition {
            display: flex;
            flex-direction: row;
            align-items: center;
            gap: 20rpx;
            font-size: 30rpx;
            .title {
                width: 5rem;
                text-align: right;
            }
            .right {
                flex: 1;
                border-radius: 22rpx;
                border: 1px solid #acacac;
                height: auto;
                padding: 8rpx 16rpx;
                input {
                    width: 100%;
                    font-size: 30rpx;
                }
            }
        }
        .buttons {
            display: flex;
            flex-direction: row;
            gap: 20rpx;
            justify-content: flex-end;
            >button {
                display: inline-flex;
                width: 4rem;
            }
        }
        .card-item {
            .card-detail {
                width: 100%;
                display: flex;
                flex-wrap: wrap;
                justify-content: flex-start;
                line-height: 120%;
                .detail {
                    // width: 50%;
                    font-size: 26rpx;
                    margin-bottom: 12rpx;
                    color: #555;
                    margin-right: 20rpx;
                    text {
                        color: #999;
                        font-size: 26rpx;
                    }
                }
            }
        }
        .uni-card--is-active {
            background-color: rgba(0, 122, 255, 0.2);
        }
        .daterange {
            display: flex;
            flex-direction: row;
            gap: 10rpx;
            justify-content: center;
            align-items: center;
        }
    }
    .more {
        color: #888;
        font-size: 24rpx;
        display: flex;
        border-top: 1px solid #eee;
        padding-top: 20rpx;
        .part {
            width: 50%;
            text-align: center;
        }
    }
</style>
pages.json
@@ -1436,16 +1436,28 @@
            "path" : "pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBillList",
            "style" : 
            {
                "navigationBarTitleText" : "设备点检记录单缓存",
                "enablePullDownRefresh": true
                "navigationBarTitleText" : "设备点检记录单缓存"
            }
        },
        {
            "path" : "pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBillList",
            "style" : 
            {
                "navigationBarTitleText" : "设备保养记录单缓存",
                "enablePullDownRefresh": true
                "navigationBarTitleText" : "设备保养记录单缓存"
            }
        },
        {
            "path" : "pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBill",
            "style" :
            {
                "navigationBarTitleText" : "设备维修验收单"
            }
        },
        {
            "path" : "pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBillList",
            "style" :
            {
                "navigationBarTitleText" : "设备维修验收单缓存"
            }
        }
        
pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBillList.vue
@@ -1,135 +1,129 @@
<template>
    <view class="content">
        <view class="tabs">
            <view :class="tabs == 0 ? 'on':''" @tap="changeTab(0)">缓存列表</view>
            <!-- <view :class="tabs == 1 ? 'on':''" @tap="changeTab(1)">已上传列表</view> -->
        </view>
        <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view class="form" v-if="tabs == 0">
            <view class="buttons" @tap="add">
                <uni-icons type="plus" style="margin-right: 10rpx;" size="22"></uni-icons>新增
            </view>
        </view>
        <view class="form" v-if="tabs == 1">
        <view class="form">
            <view class="form-item">
                <view class="title">单据号:</view>
                <view class="title">开始时间:</view>
                <view class="right">
                    <input v-model="hform.HBillNo" placeholder="请输入单据号" />
                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HBeginDate">
                        <input :value="hform.HBeginDate" />
                    </uni-datetime-picker>
                </view>
            </view>
            <view class="form-item">
                <view class="title">源单单号:</view>
                <view class="title">结束时间:</view>
                <view class="right">
                    <input v-model="hform.HSourceBillNo" placeholder="请输入源单单号" />
                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HEndDate">
                        <input :value="hform.HEndDate" />
                    </uni-datetime-picker>
                </view>
            </view>
            <view v-if="showmore">
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="right">
                        <input v-model="hform.HBillNo" placeholder="请输入单据号" />
                    </view>
                </view>
            </view>
            <view class="other">
                <view v-if="!showmore" @tap="changeShowMore">
                    展开其他条件<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="bottom"></uni-icons>
                </view>
                <view v-if="showmore" @tap="changeShowMore">
                    折叠其他条件<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="top"></uni-icons>
                </view>
            </view>
            <view class="buttons">
                <button class="btn-a" size="mini" type="default" @tap="clear">重置</button>
                <button class="btn-b" size="mini" type="default" @tap="creat">新增</button>
                <button class="btn-c" size="mini" type="default" @tap="search">查询</button>
            </view>
        </view>
        <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;" id="divide"></view>
        <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==0">
            <uni-card :title="item.制单日期.substr(0,10)" :extra="item.单据号" style="margin: 10px;"
                @tap="showDetail = showDetail==index?-1:index">
                <view class="card-detail">
                    <view class="detail" v-if="item.制单人">
                        <text>制单人:</text>{{item.制单人}}
                    </view>
                    <view class="detail" v-if="item.设备代码">
                        <text>设备代码:</text>{{item.设备代码}}
                    </view>
                    <view class="detail" v-if="item.设备名称">
                        <text>设备名称:</text>{{item.设备名称}}
                    </view>
                    <view class="detail" v-if="item.表头备注">
                        <text>表头备注:</text>{{item.表头备注}}
                    </view>
                    <view class="detail" v-if="item.开始日期">
                        <text>开始日期:</text>{{dayjs(item.开始日期).format("YYYY-MM-DD HH:mm:DD")}}
                    </view>
                    <view class="detail" v-if="item.结束日期">
                        <text>结束日期:</text>{{dayjs(item.结束日期).format("YYYY-MM-DD HH:mm:DD")}}
                    </view>
                    <view class="detail" v-if="item.点检计划编号">
                        <text>点检计划编号:</text>{{item.点检计划编号}}
                    </view>
                    <view class="detail" v-if="item.点检计划">
                        <text>点检计划:</text>{{item.点检计划}}
                    </view>
                    <view class="detail" v-if="item.摘要">
                        <text>摘要:</text>{{item.摘要}}
                    </view>
                    <view class="detail" v-if="item.点检规格摘要">
                        <text>点检规格摘要:</text>{{item.点检规格摘要}}
                    </view>
                    <view class="detail" v-if="item.hmainid">
                        <text>内部单据号:</text>{{item.hmainid}}
                    </view>
                    <view class="detail" v-if="item.最终结论">
                        <text>最终结论:</text>{{item.最终结论}}
                    </view>
                </view>
        <view :style="{
            height: calcContentHeight + 'px',
            overflowY: 'auto'
        }">
                <view class="more">
                    <!-- <view class="part" style="border-right: 1px solid #eee;color: #3a78ff;" @tap.stop="edit(item)">
                        <uni-icons type="compose" style="color: #3a78ff;margin-right: 10rpx;" size="18"></uni-icons>编辑
                    </view> -->
                    <view style="flex: 1"></view>
                    <view class="part" style="color: #da0000;" @tap.stop="del(item)">
                        <uni-icons type="trash" style="color: #da0000;margin-right: 10rpx;" size="18"></uni-icons>删除
            <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==0">
                <uni-card :title="item.制单日期.substr(0,10)" :extra="item.单据号" style="margin: 10px;"
                    @tap="showDetail = showDetail==index?-1:index">
                    <view class="card-detail">
                        <view class="detail" v-if="item.制单人">
                            <text>制单人:</text>{{item.制单人}}
                        </view>
                        <view class="detail" v-if="item.设备代码">
                            <text>设备代码:</text>{{item.设备代码}}
                        </view>
                        <view class="detail" v-if="item.设备名称">
                            <text>设备名称:</text>{{item.设备名称}}
                        </view>
                        <view class="detail" v-if="item.最终结论">
                            <text>最终结论:</text>{{item.最终结论}}
                        </view>
                        <view class="card-detail" v-if="showDetail == index">
                            <view class="detail" v-if="item.表头备注">
                                <text>表头备注:</text>{{item.表头备注}}
                            </view>
                            <view class="detail" v-if="item.开始日期">
                                <text>开始日期:</text>{{dayjs(item.开始日期).format("YYYY-MM-DD HH:mm:DD")}}
                            </view>
                            <view class="detail" v-if="item.结束日期">
                                <text>结束日期:</text>{{dayjs(item.结束日期).format("YYYY-MM-DD HH:mm:DD")}}
                            </view>
                            <view class="detail" v-if="item.点检计划编号">
                                <text>点检计划编号:</text>{{item.点检计划编号}}
                            </view>
                            <view class="detail" v-if="item.点检计划">
                                <text>点检计划:</text>{{item.点检计划}}
                            </view>
                            <view class="detail" v-if="item.摘要">
                                <text>摘要:</text>{{item.摘要}}
                            </view>
                            <view class="detail" v-if="item.点检规格摘要">
                                <text>点检规格摘要:</text>{{item.点检规格摘要}}
                            </view>
                            <view class="detail" v-if="item.hmainid">
                                <text>内部单据号:</text>{{item.hmainid}}
                            </view>
                        </view>
                    </view>
                </view>
            </uni-card>
                    <view class="more" v-if="showDetail == index && operations != index">
                        <view class="part" style="border-right: 1px solid #eee;">
                            <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>收起
                        </view>
                        <view class="part" @tap.stop="operations = operations==index?-1:index">
                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                size="14"></uni-icons>操作
                        </view>
                    </view>
                    <view class="more" v-if="showDetail != index && operations != index">
                        <view class="part" style="border-right: 1px solid #eee;">
                            <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>更多信息
                        </view>
                        <view class="part" @tap.stop="operations = operations==index?-1:index">
                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                size="14"></uni-icons>操作
                        </view>
                    </view>
                    <view class="op" v-if="operations == index">
                        <!-- <button class="op3" size="mini" plain @tap.stop="edit(item)">编辑</button> -->
                        <button class="op4" size="mini" plain @tap.stop="del(item)">删除</button>
                        <button class="op5" size="mini" plain @tap.stop="operations = -1">取消操作</button>
                    </view>
                </uni-card>
            </view>
        </view>
        <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==1">
            <uni-card :title="item.日期" :extra="item.单据号" style="margin: 10px;"
                @tap="showDetail = showDetail==index?-1:index">
                <view class="card-detail">
                    <view class="detail" v-if="item.状态">
                        <text>状态:</text>{{item.状态}}
                    </view>
                    <view class="detail" v-if="item.制单人">
                        <text>制单人:</text>{{item.制单人}}
                    </view>
                    <view class="detail" v-if="item.数量">
                        <text>数量:</text>{{item.数量}}
                    </view>
                    <view class="detail" v-if="item.源单单号">
                        <text>源单单号:</text>{{item.源单单号}}
                    </view>
                    <view class="detail" v-if="item.物料代码">
                        <text>物料代码:</text>{{item.物料代码}}
                    </view>
                    <view class="detail" v-if="item.物料名称">
                        <text>物料名称:</text>{{item.物料名称}}
                    </view>
                    <view class="detail" v-if="item.规格型号">
                        <text>规格型号:</text>{{item.规格型号}}
                    </view>
                    <view class="detail" v-if="item.组织">
                        <text>组织:</text>{{item.组织}}
                    </view>
                </view>
                <view class="more">
                    <view class="part" style="color: #3a78ff;width: 100%;" @tap.stop="qrCodeDisplay(item)">
                        <uni-icons type="scan" style="color: #3a78ff;margin-right: 10rpx;" size="18"></uni-icons>显示二维码
                    </view>
                    <view class="part" style="color: #d98d00;width: 100%;" @tap.stop="revoke(item)">
                        <uni-icons type="undo" style="color: #d98d00;margin-right: 10rpx;" size="18"></uni-icons>撤销
                    </view>
                </view>
            </uni-card>
        <view class="pagination-zone" id="pagination-zone">
            <uni-pagination show-icon :page-size="size" :total="dataLength" :current="page"
                @change="onPaginationChangeHandler"></uni-pagination>
        </view>
        <view class="over" v-if="!listData || listData.length == 0">暂无数据</view>
        <view class="over" v-if="listData.length != 0 && listData.length != showList.length">加载中...</view>
        <view class="over" v-if="listData.length != 0 && listData.length == showList.length">已到底</view>
        <BarCodePopupVue ref="barcodePopup"></BarCodePopupVue>
    </view>
</template>
@@ -152,6 +146,7 @@
                tabs: 0,
                urls: '/Web/GetEquipmentBillsList',
                MvarReportTitle: '设备点检记录单缓存',
                showmore: false,
                hform: {
                    HBillNo: '',
                    HSourceBillNo: '',
@@ -160,13 +155,20 @@
                    HStockOrgID: uni.getStorageSync('OrganizationID'),
                    Type: "DJ",
                    sWhere: "",
                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
                },
                sWhere: '',
                listData: [],
                showList: [],
                showDetail: -1,
                operations: -1,
                page: 1,
                size: 50,
                dataLength: 0,
                divideBottom: 0,
                paginationTop: 0,
            }
        },
        onShow() {
@@ -178,19 +180,45 @@
        components: {
            BarCodePopupVue
        },
        onReachBottom: function() {
            this.page++
            setTimeout(() => {
                this.showList = this.showList.concat(this.getPage(this.page, this.listData))
            }, 100)
        computed: {
            calcContentHeight: {
                get() {
                    return this.paginationTop - this.divideBottom
                }
            }
        },
        onPullDownRefresh: function() {
            this.clear()
            setTimeout(() => {
                uni.stopPullDownRefresh();
            }, 1000);
        // onPullDownRefresh: function() {
        //     this.clear()
        //     setTimeout(() => {
        //         uni.stopPullDownRefresh();
        //     }, 1000);
        // },
        onReady() {
            this.getCalcHeight()
        },
        methods: {
            changeShowMore() {
                this.showmore = !this.showmore
                this.$nextTick(() => {
                    // 重新计算内容视口高度
                    this.getCalcHeight()
                })
            },
            getCalcHeight() {
                let query = uni.createSelectorQuery().in(this)
                query
                    .select("#divide")
                    .boundingClientRect()
                    .select("#pagination-zone")
                    .boundingClientRect()
                    .exec(res => {
                        this.divideBottom = Math.ceil(res[0].bottom)
                        this.paginationTop = Math.floor(res[1].top)
                    })
            },
            async qrCodeDisplay(item) {
                this.$refs.barcodePopup.setCodeInfo(item.HBillNo)
                await this.$nextTick()
@@ -220,9 +248,15 @@
                    },
                });
            },
            getPage(page, list) {
                let sindex = (parseInt(page) - 1) * 20
                let eindex = parseInt(page) * 20
            onPaginationChangeHandler({
                current
            }) {
                this.page = current
                this.showList = this.getPage(current, this.size, this.listData)
            },
            getPage(page, size, list) {
                let sindex = (parseInt(page) - 1) * size
                let eindex = parseInt(page) * size
                let newList = list.slice(sindex, eindex)
                return newList
            },
@@ -237,9 +271,10 @@
                // if (this.tabs == 1) {
                //     this.urls = '/WEBSController/GetKf_ICStockBillQueryList_User_Json'
                // }
                this.getList()
                this.search()
            },
            async getList() {
                console.log('this.hform: ', this.hform);
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: this.urls,
@@ -253,8 +288,12 @@
                    } = res.data
                    if (count == 1) {
                        if(data == null) {
                           data = []
                        }
                        this.listData = data
                        this.showList = this.getPage(this.page, data)
                        this.showList = this.getPage(this.page, this.size, data)
                        this.dataLength = data.length
                    } else {
                        CommonUtils.showTips({
                            title: "温馨提示",
@@ -270,18 +309,19 @@
            },
            search() {
                this.sWhere = ''
                this.hform.sWhere = ''
                this.listData = []
                this.page = 1
                this.showList = []
                console.log(this.hform)
                // if (this.hform.HBillNo) {
                //     this.sWhere += " and 单据号 like '%" + this.hform.HBillNo + "%'";
                // }
                // if (this.hform.HSourceBillNo) {
                //     this.sWhere += " and 设备类型 like '%" + this.hform.HSourceBillNo + "%'";
                // }
                if (this.hform.HBillNo) {
                    this.hform.sWhere += " and 单据号 like '%" + this.hform.HBillNo + "%'";
                }
                if (this.hform.HBeginDate && this.hform.HEndDate) {
                    this.hform.sWhere +=
                        ` and 日期 between convert(date, '${this.hform.HBeginDate}') and convert(date, '${this.hform.HEndDate}')`;
                }
                this.getList()
            },
            clear() {
@@ -293,13 +333,15 @@
                this.hform = {
                    HBillNo: '',
                    HSourceBillNo: '',
                    HBillType: 1206,
                    HBillType: 3903,
                    user: uni.getStorageSync('HUserName'),
                    HStockOrgID: uni.getStorageSync('OrganizationID'),
                    sWhere: '',
                    Type: "DJ"
                    Type: "DJ",
                    HBeginDate: dayjs(new Date()).subtract(30, 'd').format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD")
                }
                this.getList()
                this.search()
            },
            add() {
                uni.navigateTo({
pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue
@@ -14,9 +14,9 @@
            }">
                <view class="form-item">
                    <view class="title">设备条码:</view>
                    <view class="right">
                        <input v-model="hform.HBarCode" @confirm="GetMessageByBarCode(hform.HBarCode)"
                            placeholder="请输入(或扫描)设备条码" />
                    <view :class="enableEdit?'right':'righton'">
                        <input :disabled="!enableEdit" v-model="hform.HBarCode"
                            @confirm="GetMessageByBarCode(hform.HBarCode)" placeholder="请输入(或扫描)设备条码" />
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="scan" size="20" @click="toScanCode"></uni-icons>
@@ -254,6 +254,7 @@
            <button class="btn-c" size="mini" @tap="goBack">退出</button>
        </view>
        <xe-upload ref="XeUpload" :options="uploadOptions" @callback="handleUploadCallback"></xe-upload>
        <BillSelectorPopupVue @update="billSelectHandler" ref="billSelector"></BillSelectorPopupVue>
    </view>
</template>
@@ -268,11 +269,12 @@
    import {
        getUserInfo
    } from "../../../utils/auth";
    import {
        TrackOpTypes
    } from "vue";
    import BillSelectorPopupVue from "../../../components/MJGL/BillSelectorPopup.vue";
    export default {
        name: 'sb_EquipMaintainBill',
        components: {
            BillSelectorPopupVue
        },
        data() {
            return {
                tabs: 0,
@@ -282,6 +284,7 @@
                HModName: "sb_EquipMaintainBill",
                HBillType: '3901',
                operationType: 1,
                enableEdit: true,
                uploadOptions: {},
                HDeptList: [],
@@ -354,6 +357,81 @@
        },
        methods: {
            billSelectHandler(billData) {
                console.log('billData: ', billData);
                let data = billData.retVal[0]
                this.get_DocCheckItem2(data.hmainid)
            },
            // 获取保养规程
            async get_DocCheckItem2(HEquipMaintainRuleInterID) {
                try{
                    let res = await CommonUtils.doRequest2Async({
                        url: "/Web/GetMaintainItemByMaintainRuleID",
                        data: {
                            "HEquipMaintainRuleInterID": HEquipMaintainRuleInterID
                        },
                    })
                    let {data, count, Message} = res.data
                    if(count == 1) {
                        console.log('data: ',data);
                        this.HCheckFileList = Array.from(data).map(item => {
                            return {
                                "HMaintainResult": item.默认结论 == 1 ? true : false,
                                "HMaintainItemID": item.HMaintainItemID,
                                "HMaintainNumber": item.保养项目代码,
                                "HMaintainItem": item.保养项目,
                                "HMaintainPart": item.保养部位,
                                "HClaim": item.具体要求,
                                "HManagerID": item.负责人ID,
                                "HManagerNumber": item.负责人代码,
                                "HManagerName": item.负责人名称,
                                "HRemark": "",
                                "HSourceInterID": item.保养计划ID || 0,
                                "HSourceEntryID": item.保养计划子ID || 0,
                                "HSourceBillNo": item.保养计划单 || ""
                            }
                        })
                        this.enableEdit = false
                        this.$refs["billSelector"].exit()
                    }else {
                        CommonUtils.showTips({
                            message: Message
                        })
                    }
                }catch(err) {
                    CommonUtils.showTips({
                        message: err
                    })
                }
            },
            toCheckFile() {
                if(this.hform.HEquipID == 0) {
                    return CommonUtils.showTips({
                        message: '不能选择保养规程,请先扫描设备条码!!!'
                    })
                }
                console.log('this.$refs: ', this.$refs);
                this.$refs['billSelector'].showPopup(0)
            },
            ValidCheck() {
                if (this.hform.HEquipID == 0) {
                    return {
                        Message: "未录入设备信息,请先录入设备信息!",
                        state: false
                    }
                }
                return {
                    Message: "",
                    state: true
                }
            },
            addNew() {
                uni.redirectTo({
                    url: './Sb_EquipMaintainBill?operationType=1'
@@ -585,6 +663,8 @@
                            }
                        })
                        this.enableEdit = false
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
@@ -630,6 +710,13 @@
                }
            },
            async submit() {
                let valid = this.ValidCheck()
                if (!valid.state) {
                    return CommonUtils.showTips({
                        message: valid.Message
                    })
                }
                try {
                    let oMain = JSON.stringify(this.hform);
                    let sSubStr = JSON.stringify(this.HCheckFileList);
pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBillList.vue
@@ -1,135 +1,128 @@
<template>
    <view class="content">
        <view class="tabs">
            <view :class="tabs == 0 ? 'on':''" @tap="changeTab(0)">缓存列表</view>
            <!-- <view :class="tabs == 1 ? 'on':''" @tap="changeTab(1)">已上传列表</view> -->
        </view>
        <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view class="form" v-if="tabs == 0">
            <view class="buttons" @tap="add">
                <uni-icons type="plus" style="margin-right: 10rpx;" size="22"></uni-icons>新增
            </view>
        </view>
        <view class="form" v-if="tabs == 1">
        <view class="form">
            <view class="form-item">
                <view class="title">单据号:</view>
                <view class="title">开始时间:</view>
                <view class="right">
                    <input v-model="hform.HBillNo" placeholder="请输入单据号" />
                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HBeginDate">
                        <input :value="hform.HBeginDate" />
                    </uni-datetime-picker>
                </view>
            </view>
            <view class="form-item">
                <view class="title">源单单号:</view>
                <view class="title">结束时间:</view>
                <view class="right">
                    <input v-model="hform.HSourceBillNo" placeholder="请输入源单单号" />
                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HEndDate">
                        <input :value="hform.HEndDate" />
                    </uni-datetime-picker>
                </view>
            </view>
            <view v-if="showmore">
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="right">
                        <input v-model="hform.HBillNo" placeholder="请输入单据号" />
                    </view>
                </view>
            </view>
            <view class="other">
                <view v-if="!showmore" @tap="changeShowMore">
                    展开其他条件<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="bottom"></uni-icons>
                </view>
                <view v-if="showmore" @tap="changeShowMore">
                    折叠其他条件<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="top"></uni-icons>
                </view>
            </view>
            <view class="buttons">
                <button class="btn-a" size="mini" type="default" @tap="clear">重置</button>
                <button class="btn-b" size="mini" type="default" @tap="add">新增</button>
                <button class="btn-c" size="mini" type="default" @tap="search">查询</button>
            </view>
        </view>
        <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view id="divide" style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view :style="{
            height: calcContentHeight + 'px',
            overflowY: 'auto'
        }">
            <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==0">
                <uni-card :title="item.制单日期.substr(0,10)" :extra="item.单据号" style="margin: 10px;"
                    @tap="showDetail = showDetail==index?-1:index">
                    <view class="card-detail">
                        <view class="detail" v-if="item.制单人">
                            <text>制单人:</text>{{item.制单人}}
                        </view>
                        <view class="detail" v-if="item.设备代码">
                            <text>设备代码:</text>{{item.设备代码}}
                        </view>
                        <view class="detail" v-if="item.设备名称">
                            <text>设备名称:</text>{{item.设备名称}}
                        </view>
                        <view class="detail" v-if="item.最终结论">
                            <text>最终结论:</text>{{item.最终结论}}
                        </view>
                        <view class="card-detail" v-if="showDetail == index">
        <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==0">
            <uni-card :title="item.制单日期.substr(0,10)" :extra="item.单据号" style="margin: 10px;"
                @tap="showDetail = showDetail==index?-1:index">
                <view class="card-detail">
                    <view class="detail" v-if="item.制单人">
                        <text>制单人:</text>{{item.制单人}}
                    </view>
                    <view class="detail" v-if="item.设备代码">
                        <text>设备代码:</text>{{item.设备代码}}
                    </view>
                    <view class="detail" v-if="item.设备名称">
                        <text>设备名称:</text>{{item.设备名称}}
                    </view>
                    <view class="detail" v-if="item.表头备注">
                        <text>表头备注:</text>{{item.表头备注}}
                    </view>
                    <view class="detail" v-if="item.开始日期">
                        <text>开始日期:</text>{{dayjs(item.开始日期).format("YYYY-MM-DD HH:mm:DD")}}
                    </view>
                    <view class="detail" v-if="item.结束日期">
                        <text>结束日期:</text>{{dayjs(item.结束日期).format("YYYY-MM-DD HH:mm:DD")}}
                    </view>
                    <view class="detail" v-if="item.保养计划编号">
                        <text>保养计划编号:</text>{{item.保养计划编号}}
                    </view>
                    <view class="detail" v-if="item.保养计划">
                        <text>保养计划:</text>{{item.保养计划}}
                    </view>
                    <view class="detail" v-if="item.摘要">
                        <text>摘要:</text>{{item.摘要}}
                    </view>
                    <view class="detail" v-if="item.点检规格摘要">
                        <text>点检规格摘要:</text>{{item.点检规格摘要}}
                    </view>
                    <view class="detail" v-if="item.hmainid">
                        <text>内部单据号:</text>{{item.hmainid}}
                    </view>
                    <view class="detail" v-if="item.最终结论">
                        <text>最终结论:</text>{{item.最终结论}}
                    </view>
                </view>
                <view class="more">
                    <!-- <view class="part" style="border-right: 1px solid #eee;color: #3a78ff;" @tap.stop="edit(item)">
                        <uni-icons type="compose" style="color: #3a78ff;margin-right: 10rpx;" size="18"></uni-icons>编辑
                    </view> -->
                    <view style="flex: 1"></view>
                    <view class="part" style="color: #da0000;" @tap.stop="del(item)">
                        <uni-icons type="trash" style="color: #da0000;margin-right: 10rpx;" size="18"></uni-icons>删除
                            <view class="detail" v-if="item.表头备注">
                                <text>表头备注:</text>{{item.表头备注}}
                            </view>
                            <view class="detail" v-if="item.开始日期">
                                <text>开始日期:</text>{{dayjs(item.开始日期).format("YYYY-MM-DD HH:mm:DD")}}
                            </view>
                            <view class="detail" v-if="item.结束日期">
                                <text>结束日期:</text>{{dayjs(item.结束日期).format("YYYY-MM-DD HH:mm:DD")}}
                            </view>
                            <view class="detail" v-if="item.保养计划编号">
                                <text>保养计划编号:</text>{{item.保养计划编号}}
                            </view>
                            <view class="detail" v-if="item.保养计划">
                                <text>保养计划:</text>{{item.保养计划}}
                            </view>
                            <view class="detail" v-if="item.摘要">
                                <text>摘要:</text>{{item.摘要}}
                            </view>
                            <view class="detail" v-if="item.点检规格摘要">
                                <text>点检规格摘要:</text>{{item.点检规格摘要}}
                            </view>
                            <view class="detail" v-if="item.hmainid">
                                <text>内部单据号:</text>{{item.hmainid}}
                            </view>
                        </view>
                    </view>
                </view>
            </uni-card>
                    <view class="more" v-if="showDetail == index && operations != index">
                        <view class="part" style="border-right: 1px solid #eee;">
                            <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>收起
                        </view>
                        <view class="part" @tap.stop="operations = operations==index?-1:index">
                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                size="14"></uni-icons>操作
                        </view>
                    </view>
                    <view class="more" v-if="showDetail != index && operations != index">
                        <view class="part" style="border-right: 1px solid #eee;">
                            <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>更多信息
                        </view>
                        <view class="part" @tap.stop="operations = operations==index?-1:index">
                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                size="14"></uni-icons>操作
                        </view>
                    </view>
                    <view class="op" v-if="operations == index">
                        <!-- <button class="op3" size="mini" plain @tap.stop="edit(item)">编辑</button> -->
                        <button class="op4" size="mini" plain @tap.stop="del(item)">删除</button>
                        <button class="op5" size="mini" plain @tap.stop="operations = -1">取消操作</button>
                    </view>
                </uni-card>
            </view>
        </view>
        <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==1">
            <uni-card :title="item.日期" :extra="item.单据号" style="margin: 10px;"
                @tap="showDetail = showDetail==index?-1:index">
                <view class="card-detail">
                    <view class="detail" v-if="item.状态">
                        <text>状态:</text>{{item.状态}}
                    </view>
                    <view class="detail" v-if="item.制单人">
                        <text>制单人:</text>{{item.制单人}}
                    </view>
                    <view class="detail" v-if="item.数量">
                        <text>数量:</text>{{item.数量}}
                    </view>
                    <view class="detail" v-if="item.源单单号">
                        <text>源单单号:</text>{{item.源单单号}}
                    </view>
                    <view class="detail" v-if="item.物料代码">
                        <text>物料代码:</text>{{item.物料代码}}
                    </view>
                    <view class="detail" v-if="item.物料名称">
                        <text>物料名称:</text>{{item.物料名称}}
                    </view>
                    <view class="detail" v-if="item.规格型号">
                        <text>规格型号:</text>{{item.规格型号}}
                    </view>
                    <view class="detail" v-if="item.组织">
                        <text>组织:</text>{{item.组织}}
                    </view>
                </view>
                <view class="more">
                    <view class="part" style="color: #3a78ff;width: 100%;" @tap.stop="qrCodeDisplay(item)">
                        <uni-icons type="scan" style="color: #3a78ff;margin-right: 10rpx;" size="18"></uni-icons>显示二维码
                    </view>
                    <view class="part" style="color: #d98d00;width: 100%;" @tap.stop="revoke(item)">
                        <uni-icons type="undo" style="color: #d98d00;margin-right: 10rpx;" size="18"></uni-icons>撤销
                    </view>
                </view>
            </uni-card>
        <view class="pagination-zone" id="pagination-zone">
            <uni-pagination show-icon :page-size="size" :total="dataLength" :current="page"
                @change="onPaginationChangeHandler"></uni-pagination>
        </view>
        <view class="over" v-if="!listData || listData.length == 0">暂无数据</view>
        <view class="over" v-if="listData.length != 0 && listData.length != showList.length">加载中...</view>
        <view class="over" v-if="listData.length != 0 && listData.length == showList.length">已到底</view>
        <BarCodePopupVue ref="barcodePopup"></BarCodePopupVue>
    </view>
</template>
@@ -160,13 +153,28 @@
                    HStockOrgID: uni.getStorageSync('OrganizationID'),
                    Type: "BY",
                    sWhere: "",
                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
                },
                sWhere: '',
                listData: [],
                showList: [],
                showDetail: -1,
                operations: -1,
                page: 1,
                size: 20,
                dataLength: 0,
                divideBottom: 0,
                paginationTop: 0,
                showmore: false,
            }
        },
        computed: {
            calcContentHeight: {
                get() {
                    return this.paginationTop - this.divideBottom
                }
            }
        },
        onShow() {
@@ -178,19 +186,35 @@
        components: {
            BarCodePopupVue
        },
        onReachBottom: function() {
            this.page++
            setTimeout(() => {
                this.showList = this.showList.concat(this.getPage(this.page, this.listData))
            }, 100)
        },
        onPullDownRefresh: function() {
            this.clear()
            setTimeout(() => {
                uni.stopPullDownRefresh();
            }, 1000);
        },
        onReady() {
            this.getCalcHeight()
        },
        methods: {
            changeShowMore() {
                this.showmore = !this.showmore
                this.$nextTick(() => {
                    // 重新计算内容视口高度
                    this.getCalcHeight()
                })
            },
            getCalcHeight() {
                let query = uni.createSelectorQuery().in(this)
                query
                    .select("#divide")
                    .boundingClientRect()
                    .select("#pagination-zone")
                    .boundingClientRect()
                    .exec(res => {
                        this.divideBottom = Math.ceil(res[0].bottom)
                        this.paginationTop = Math.floor(res[1].top)
                    })
            },
            async qrCodeDisplay(item) {
                this.$refs.barcodePopup.setCodeInfo(item.HBillNo)
                await this.$nextTick()
@@ -220,9 +244,15 @@
                    },
                });
            },
            getPage(page, list) {
                let sindex = (parseInt(page) - 1) * 20
                let eindex = parseInt(page) * 20
            onPaginationChangeHandler({
                current
            }) {
                this.page = current
                this.showList = this.getPage(current, this.size, this.listData)
            },
            getPage(page, size, list) {
                let sindex = (parseInt(page) - 1) * size
                let eindex = parseInt(page) * size
                let newList = list.slice(sindex, eindex)
                return newList
            },
@@ -237,7 +267,7 @@
                // if (this.tabs == 1) {
                //     this.urls = '/WEBSController/GetKf_ICStockBillQueryList_User_Json'
                // }
                this.getList()
                this.search()
            },
            async getList() {
                try {
@@ -253,8 +283,13 @@
                    } = res.data
                    if (count == 1) {
                        if(data == null) {
                           data = []
                        }
                        this.listData = data
                        this.showList = this.getPage(this.page, data)
                        this.showList = this.getPage(this.page, this.size, data)
                        console.log('this.showList: ', this.showList);
                        this.dataLength = data.length
                    } else {
                        CommonUtils.showTips({
                            title: "温馨提示",
@@ -270,18 +305,19 @@
            },
            search() {
                this.sWhere = ''
                this.hform.sWhere = ''
                this.listData = []
                this.page = 1
                this.showList = []
                console.log(this.hform)
                // if (this.hform.HBillNo) {
                //     this.sWhere += " and 单据号 like '%" + this.hform.HBillNo + "%'";
                // }
                // if (this.hform.HSourceBillNo) {
                //     this.sWhere += " and 设备类型 like '%" + this.hform.HSourceBillNo + "%'";
                // }
                if (this.hform.HBillNo) {
                    this.hform.sWhere += " and 单据号 like '%" + this.hform.HBillNo + "%'";
                }
                if (this.hform.HBeginDate && this.hform.HEndDate) {
                    this.hform.sWhere +=
                        ` and 日期 between convert(date, '${this.hform.HBeginDate}') and convert(date, '${this.hform.HEndDate}')`;
                }
                this.getList()
            },
            clear() {
@@ -297,9 +333,11 @@
                    user: uni.getStorageSync('HUserName'),
                    HStockOrgID: uni.getStorageSync('OrganizationID'),
                    sWhere: '',
                    Type: "BY"
                    Type: "BY",
                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
                }
                this.getList()
                this.search()
            },
            add() {
                uni.navigateTo({
pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBill.vue
New file
@@ -0,0 +1,736 @@
<template>
    <view>
        <view class="tabs" id="tabs">
            <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">基本信息</view>
            <!-- <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">明细信息</view> -->
            <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">其他信息</view>
            <!-- <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">附件信息</view> -->
        </view>
        <!-- 基本信息 -->
        <template v-if="tabs == 0">
            <view class="form" :style="{
                height: containerHeight + 'px',
                overflow: 'auto'
            }">
                <view class="form-item">
                    <view class="title">设备条码:</view>
                    <view :class="enableEdit?'right':'righton'">
                        <input v-model="hform.HBarCode" :disabled="!enableEdit"
                            @confirm="GetMessageByBarCode(hform.HBarCode)" placeholder="请输入(或扫描)设备条码" />
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="scan" size="20" @click="toScanCode"></uni-icons>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">最终结论:</view>
                    <view class="right none-border">
                        <radio-group @change="radioChange" class="radio_Container">
                            <label>
                                <view>
                                    <radio value="OK" :checked="hform.HCheckResult == 'OK'" />
                                    <text>OK</text>
                                </view>
                            </label>
                            </label>
                            <view>
                                <radio value="NG" :checked="hform.HCheckResult == 'NG'" />
                                <text>NG</text>
                            </view>
                            </label>
                        </radio-group>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">验证内容:</view>
                    <view class="right">
                        <textarea v-model="hform.HRepairCheckMainContent" placeholder="请输入验证内容" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HBillNo" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">单据日期:</view>
                    <view class="righton">
                        <input disabled v-model="hform.HDate" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title required">部门:</view>
                    <zxz-uni-data-select required class="right" :localdata="HDeptList" dataKey="部门名称"
                        dataValue="HItemID" v-model="hform.HDeptID">
                    </zxz-uni-data-select>
                    <!-- <input disabled v-model="hform.HDeptName" placeholder="请选择部门" /> -->
                </view>
                <view class="form-item">
                    <view class="title required">验收人:</view>
                    <zxz-uni-data-select required class="right" :localdata="HEmpList" dataKey="HName"
                        dataValue="HItemID" v-model="hform.HEmpID">
                    </zxz-uni-data-select>
                    <!-- <input disabled v-model="hform.HDeptName" placeholder="请选择部门" /> -->
                </view>
                <view class="form-item">
                    <view class="title required">验证项目:</view>
                    <zxz-uni-data-select required class="right" :localdata="HRepairCheckList" dataKey="维修验收项目"
                        dataValue="hitemid" v-model="hform.HRepairCheckMainID">
                    </zxz-uni-data-select>
                    <!-- <input disabled v-model="hform.HDeptName" placeholder="请选择部门" /> -->
                </view>
                <view class="form-item">
                    <view class="title required">负责人:</view>
                    <zxz-uni-data-select required class="right" :localdata="HEmpList" dataKey="HName"
                        dataValue="HItemID" v-model="hform.HManagerID">
                    </zxz-uni-data-select>
                    <!-- <input disabled v-model="hform.HDeptName" placeholder="请选择部门" /> -->
                </view>
                <view class="form-item">
                    <view class="title">设备名称:</view>
                    <view class="righton">
                        <input v-model="hform.HBarName" disabled />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">设备规格:</view>
                    <view class="righton">
                        <input v-model="hform.HBarSpec" disabled />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">设备型号:</view>
                    <view class="righton">
                        <input v-model="hform.HBarModel" disabled />
                    </view>
                </view>
            </view>
        </template>
        <!-- 其他信息 -->
        <template v-if="tabs == 2">
            <view class="form" :style="{
                height: containerHeight + 'px',
                overflow: 'auto'
            }">
                <view class="form-item">
                    <view class="title">创建人:</view>
                    <view class="righton">
                        <input v-model="hform.HMaker" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">创建日期:</view>
                    <view class="righton">
                        <input v-model="hform.HMakeDate" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">修改人:</view>
                    <view class="righton">
                        <input v-model="hform.HUpDater" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">修改日期:</view>
                    <view class="righton">
                        <input v-model="hform.HUpDateDate" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">审核人:</view>
                    <view class="righton">
                        <input v-model="hform.HChecker" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">审核时间:</view>
                    <view class="righton">
                        <input v-model="hform.HCheckDate" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">作废人:</view>
                    <view class="righton">
                        <input v-model="hform.HDeleteMan" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">作废日期:</view>
                    <view class="righton">
                        <input v-model="hform.HDeleteDate" />
                    </view>
                </view>
            </view>
        </template>
        <!-- 操作按钮 -->
        <view class="buttons" id="buttons">
            <button class="btn-a" size="mini" @tap="submit">提交</button>
            <view style="flex: 1;"></view>
            <button class="btn-a" size="mini" @tap="addNew">新增</button>
            <button class="btn-c" size="mini" @tap="goBack">退出</button>
        </view>
        <xe-upload ref="XeUpload" :options="uploadOptions" @callback="handleUploadCallback"></xe-upload>
    </view>
</template>
<script>
    import dayjs from "dayjs";
    import {
        CommonUtils
    } from "@/utils/common";
    import {
        MpaasScan
    } from "@/utils/mpaasScan.js"
    import {
        getUserInfo
    } from "../../../utils/auth";
    export default {
        name: 'sb_EquipRepairCheckBill',
        data() {
            return {
                tabs: 0,
                HMainSourceBillType: "",
                btnTop: 0,
                tabsBottom: 0,
                HModName: "sb_EquipRepairCheckBill",
                HBillType: '3911',
                operationType: 1,
                uploadOptions: {},
                enableEdit: true,
                HDeptList: [],
                HRepairCheckList: [],
                HEmpList: [],
                hform: {
                    "HBarCode": "",
                    "HCheckBeginDate": dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
                    "HCheckResult": "OK",
                    "HRepairCheckMainContent": "",
                    "HBillNo": "",
                    "HInterID": 0,
                    "HDate": dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
                    "HDeptName": "",
                    "HDeptID": 0,
                    "HEmpName": "",
                    "HEmpID": 0,
                    "HRepairCheckMainName": "",
                    "HRepairCheckMainID": 0,
                    "HManagerName": "",
                    "HManagerID": 0,
                    "HBarName": "",
                    "HEquipID": 0,
                    "HBarSpec": "",
                    "HBarModel": "",
                    "HMaker": getUserInfo()["Czymc"],
                    "HMakeDate": dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
                    "HUpDater": "",
                    "HUpDateDate": "",
                    "HChecker": "",
                    "HCheckDate": "",
                    "HDeleteMan": "",
                    "HDeleteDate": "",
                    "lngBillKey": "",
                    "lngBillSubKey": ""
                },
                HBillSub: [{ // 后端接口需要。否则数据不会显示在缓存中
                    "HRepairID": 0,
                    "HRepairCode": "",
                    "HRepairName": "",
                    "HManagerID": 0,
                    "HManagerCode": "",
                    "HManagerName": "",
                    "HRepairExplanation": "",
                    "HRemark": "",
                    "LAY_TABLE_INDEX": 0
                }]
            };
        },
        computed: {
            containerHeight: {
                get() {
                    return this.btnTop - this.tabsBottom - 5
                }
            },
        },
        methods: {
            // 提交数据有效性校验
            ValidCheck() {
                if (this.hform.HEquipID == 0) {
                    return {
                        Message: "未录入设备信息,请先录入设备信息!",
                        state: false
                    }
                }
                if (this.hform.HDeptID == 0) {
                    return {
                        Message: "部门不得为空!",
                        state: false
                    }
                }
                if (this.hform.HEmpID == 0) {
                    return {
                        Message: "验收人不得为空!",
                        state: false
                    }
                }
                if (this.hform.HRepairCheckMainID == 0) {
                    return {
                        Message: "验证项目不得为空!",
                        state: false
                    }
                }
                if (this.hform.HManagerID == 0) {
                    return {
                        Message: "负责人不得为空!",
                        state: false
                    }
                }
                return {
                    Message: "",
                    state: true
                }
            },
            addNew() {
                uni.redirectTo({
                    url: './Sb_EquipRepairCheckBill?operationType=1'
                })
            },
            goBack() {
                uni.navigateBack()
            },
            checkBoxChangeHandler(index, e) {
                let cr = e.detail.value
                if (cr.length == 0) {
                    this.HCheckFileList[index]["HDotCheckResult"] = false
                } else {
                    this.HCheckFileList[index]["HDotCheckResult"] = true
                }
            },
            uploadFile(index) {
                console.log('filePath: ', this.attachmentInfo[index].filePath);
                // 通过临时路径读取文件
                uni.uploadFile({
                    url: CommonUtils.getServerUrl() + "/Sb_EquipDotCheckBill/UploadFile",
                    filePath: this.attachmentInfo[index].filePath,
                    name: 'file',
                    formData: {
                        HBillNo: this.hform.HBillNo,
                        HRemark: "",
                        HUserName: getUserInfo()["Czymc"]
                    },
                    success: (uploadRes) => {
                        CommonUtils.showTips({
                            message: "上传成功"
                        })
                        this.attachmentInfo[index].status = "上传成功"
                    },
                    fail: (err) => {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: `上传失败: ${err}`
                        })
                    }
                })
            },
            delFile(index) {
                console.log('attachmentInfo: ', this.attachmentInfo[index]);
                uni.showModal({
                    title: '提示',
                    content: '确认要删除 " ' + this.attachmentInfo[index].fileName + ' " 删除后将不可恢复!',
                    success: (res) => {
                        if (res.confirm) {
                            this.attachmentInfo.splice(index, 1)
                        }
                    },
                })
            },
            handleUploadCallback(res) { // 文件上传回调
                console.log('file: ', res);
                let fileInfo = res.data[0]
                this.attachmentInfo.push({
                    fileName: fileInfo.name,
                    size: fileInfo.size,
                    status: '等待上传',
                    filePath: fileInfo.tempFilePath
                })
            },
            // 上传文件
            fileUpload() {
                this.$refs.XeUpload.upload('file', {});
            },
            //获取班次数据
            async getShiftList() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: '/Web/GetGy_ShiftsList_Json',
                        data: {
                            Shifts: "",
                        }
                    })
                    let {
                        data,
                        count,
                        Message
                    } = res.data
                    if (count == 1) {
                        this.HShiftsList = data
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: '温馨提示',
                        message: err
                    })
                }
            },
            //获取使用部门数据
            async getHDeptList() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: '/Gy_Department/list',
                        data: {
                            sWhere: "",
                            user: uni.getStorageSync('HUserName'),
                            Organization: uni.getStorageSync('Organization')
                        }
                    })
                    let {
                        data,
                        count,
                        Message
                    } = res.data
                    if (count == 1) {
                        this.HDeptList = data
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: '温馨提示',
                        message: err
                    })
                }
            },
            // 获取职员数据
            async getEmpList() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: '/PublicPageMethod/UserList',
                        data: {
                            sWhere: " where 1=1",
                        }
                    })
                    let {
                        data,
                        count,
                        Message
                    } = res.data
                    if (count == 1) {
                        this.HEmpList = data
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: '温馨提示',
                        message: err
                    })
                }
            },
            // 获取验证项目数据
            async getCheckProjList() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: '/Gy_RepairCheck/GetRepairCheckList',
                        data: {
                            sWhere: "",
                            user: uni.getStorageSync('HUserName'),
                        }
                    })
                    let {
                        data,
                        count,
                        Message
                    } = res.data
                    if (count == 1) {
                        this.HRepairCheckList = data
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: '温馨提示',
                        message: err
                    })
                }
            },
            toScanCode() {
                MpaasScan.scanCode(cb => {
                    this.hfrom.HBarCode = cb
                    this.GetMessageByBarCode(cb)
                })
            },
            async GetMessageByBarCode(HBarCode) {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: "/Sb_PDA_EquipDotCheckBill/txtHBarCode_KeyDown_List",
                        data: {
                            HBarCode: HBarCode,
                        },
                    })
                    if (!res) {
                        return
                    }
                    let {
                        data,
                        count,
                        Message
                    } = res.data
                    if (count == 1) {
                        console.log('data: ', data);
                        this.hform.HEquipID = data[0].hmainid
                        this.hform.HBarName = data[0].设备名称
                        this.hform.HBarSpec = data[0].设备规格
                        this.hform.HBarModel = data[0].设备型号
                        this.hform.HQty = 1
                        this.enableEdit = false
                    } else {
                        CommonUtils.showTips({
                            title: "温馨提示",
                            message: Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: "温馨提示",
                        message: err
                    })
                }
            },
            async GetItemByEquipFile() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: "/Web/GetItemByEquipFile",
                        data: {
                            "EquipProjectID": this.hform.HEquipID,
                            "Type": "DJ",
                            "HDate": this.hform.HBeginDate
                        }
                    })
                    let {
                        data,
                        Message,
                        count
                    } = res.data
                    if (count == 1) {
                        this.hform.HEquipDotCheckRuleInterID = data[0].点检规程ID
                        this.hform.HEquipDotCheckRuleInterNo = data[0].点检规程单号
                        this.hform.HPlanNo = data[0].点检计划单
                        this.hform.HPlanInterID = (data[0].点检计划ID == null ? 0 : data[0].点检计划ID) == "" ? 0 : data[0]
                            .点检计划ID
                        this.hform.HPlanEntryID = (data[0].点检计划子ID == null ? 0 : data[0].点检计划子ID) == "" ? 0 : data[
                            0].点检计划子ID
                        this.HCheckFileList = Array.from(data).map(item => {
                            return {
                                "HDotCheckItemID": item.HDotCheckItemID,
                                "HDotCheckCode": item.点检项目代码,
                                "HDotCheckItem": item.点检项目,
                                "HDotCheckPart": item.点检部位,
                                "HClaim": item.具体要求,
                                "HManagerID": item.负责人ID,
                                "HManagerCode": item.负责人代码,
                                "HManagerName": item.负责人名称,
                                "HSourceInterID": item.点检计划ID == null ? 0 : item.点检计划ID,
                                "HSourceEntryID": item.点检计划子ID == null ? 0 : item.点检计划子ID,
                                "HSourceBillNo": item.点检计划单,
                                "HDotCheckItemClassID": 0,
                                "HDotCheckItemClassName": "",
                                "HDotCheckItemMethodID": 0,
                                "HDotCheckItemMethodName": "",
                                "HDotCheckResult": item.默认结论 == 1 ? true : false
                            }
                        })
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: `获取点检规程错误: ${Message}`
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: '温馨提示',
                        message: `获取点检规程错误: ${err}`
                    })
                }
            },
            radioChange({
                detail: {
                    value
                }
            }) {
                this.hform.HCheckResult = value
            },
            async getMaxNum() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: "/Web/GetMAXNum",
                        data: {
                            "HBillType": this.HBillType
                        }
                    })
                    let {
                        count,
                        data,
                        Message
                    } = res.data
                    console.log('data: ', data);
                    this.hform.HInterID = 0
                    this.hform.HBillNo = data[0]["HBillNo"]
                } catch (err) {
                    CommonUtils.showTips({
                        title: "温馨提示",
                        message: "获取单据信息异常: " + err
                    })
                }
            },
            async submit() {
                let valid = this.ValidCheck()
                if (!valid.state) {
                    CommonUtils.showTips({
                        message: valid.Message
                    })
                    return
                }
                try {
                    let oMain = JSON.stringify(this.hform);
                    let sSubStr = JSON.stringify(this.HBillSub);
                    let sMainSub = oMain + ';' + sSubStr + ';' + getUserInfo()['Czymc'];
                    let res = await CommonUtils.doRequest2Sync({
                        url: "/Sb_EqpRepairWorkBill/SaveGetEqpRepairCheckBillList",
                        data: {
                            "msg": sMainSub
                        },
                        method: "POST"
                    })
                    if (!res) {
                        return
                    }
                    let {
                        count,
                        Message
                    } = res.data
                    if (count == 1) {
                        uni.showModal({
                            title: '提示',
                            content: res.data.Message + '。是否继续新增?(点击取消返回上级页面)',
                            success: (res) => {
                                if (res.confirm) {
                                    console.log('用户点击确定');
                                    uni.redirectTo({
                                        url: '/pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBill?operationType=1'
                                    })
                                } else if (res.cancel) {
                                    console.log('用户点击取消');
                                    setTimeout(() => {
                                        uni.navigateBack();
                                    }, 50)
                                }
                            }
                        });
                    } else {
                        CommonUtils.showTips({
                            title: "温馨提示",
                            message: "提交单据失败: " + Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: "温馨提示",
                        message: "提交单据失败: " + err
                    })
                }
            }
        },
        onLoad(e) {
            console.log('e: ', e);
            if (!e.operationType) {
                this.operationType = 1
            } else {
                this.operationType = e.operationType
            }
            if (this.operationType == 1) {
                // 新增
                this.getMaxNum()
            } else if (this.operationType == 2) {
                // 复制
            } else if (this.operationType == 3) {
                // 编辑
            } else if (this.operationType == 4) {
                // 浏览
            }
            this.getHDeptList()
            this.getEmpList()
            this.getCheckProjList()
        },
        onReady() {
            const query = uni.createSelectorQuery().in(this)
            query.select("#buttons")
                .boundingClientRect()
                .select("#tabs")
                .boundingClientRect()
                .exec(res => {
                    this.btnTop = Math.floor(res[0].top)
                    this.tabsBottom = Math.ceil(res[1].bottom)
                })
        }
    }
</script>
<style lang="scss" scoped>
    @import "@/pages/MJGL/style/MJBillStyle.scss"
</style>
pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBillList.vue
New file
@@ -0,0 +1,472 @@
<template>
    <view class="content">
        <view class="form">
            <view class="form-item">
                <view class="title">开始时间:</view>
                <view class="right">
                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HBeginDate">
                        <input :value="hform.HBeginDate" />
                    </uni-datetime-picker>
                </view>
            </view>
            <view class="form-item">
                <view class="title">结束时间:</view>
                <view class="right">
                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HEndDate">
                        <input :value="hform.HEndDate" />
                    </uni-datetime-picker>
                </view>
            </view>
            <view v-if="showmore">
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="right">
                        <input v-model="hform.HBillNo" placeholder="请输入单据号" />
                    </view>
                </view>
            </view>
            <view class="other">
                <view v-if="!showmore" @tap="changeShowMore">
                    展开其他条件<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="bottom"></uni-icons>
                </view>
                <view v-if="showmore" @tap="changeShowMore">
                    折叠其他条件<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="top"></uni-icons>
                </view>
            </view>
            <view class="buttons">
                <button class="btn-a" size="mini" type="default" @tap="clear">重置</button>
                <button class="btn-b" size="mini" type="default" @tap="add">新增</button>
                <button class="btn-c" size="mini" type="default" @tap="search">查询</button>
            </view>
        </view>
        <view id="divide" style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
        <view :style="{
            height: calcContentHeight + 'px',
            overflowY: 'auto'
        }">
            <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==0">
                <uni-card :title="item.制单日期.substr(0,10)" :extra="item.单据号" style="margin: 10px;"
                    @tap="showDetail = showDetail==index?-1:index">
                    <view class="card-detail">
                        <view class="detail" v-if="item.制单人">
                            <text>制单人:</text>{{item.制单人}}
                        </view>
                        <view class="detail" v-if="item.设备代码">
                            <text>设备代码:</text>{{item.设备代码}}
                        </view>
                        <view class="detail" v-if="item.设备名称">
                            <text>设备名称:</text>{{item.设备名称}}
                        </view>
                        <view class="detail" v-if="item.负责人">
                            <text>负责人:</text>{{item.负责人}}
                        </view>
                        <view class="detail" v-if="item.维修部门名称">
                            <text>维修部门:</text>{{item.维修部门名称}}
                        </view>
                        <view class="detail" v-if="item.验收人">
                            <text>验收人:</text>{{item.验收人}}
                        </view>
                        <view class="card-detail" v-if="showDetail == index">
                            <view class="detail" v-if="item.表头备注">
                                <text>表头备注:</text>{{item.表头备注}}
                            </view>
                            <view class="detail" v-if="item.发生日期">
                                <text>开始日期:</text>{{dayjs(item.发生日期).format("YYYY-MM-DD HH:mm:DD")}}
                            </view>
                            <view class="detail" v-if="item.验收人代码">
                                <text>验收人代码:</text>{{item.验收人代码}}
                            </view>
                            <view class="detail" v-if="item.维修部门代码">
                                <text>维修部门代码:</text>{{item.维修部门代码}}
                            </view>
                            <view class="detail" v-if="item.负责人代码">
                                <text>负责人代码:</text>{{item.负责人代码}}
                            </view>
                            <view class="detail" v-if="item.hmainid">
                                <text>内部单据号:</text>{{item.hmainid}}
                            </view>
                        </view>
                    </view>
                    <view class="more" v-if="showDetail == index && operations != index">
                        <view class="part" style="border-right: 1px solid #eee;">
                            <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>收起
                        </view>
                        <view class="part" @tap.stop="operations = operations==index?-1:index">
                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                size="14"></uni-icons>操作
                        </view>
                    </view>
                    <view class="more" v-if="showDetail != index && operations != index">
                        <view class="part" style="border-right: 1px solid #eee;">
                            <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>更多信息
                        </view>
                        <view class="part" @tap.stop="operations = operations==index?-1:index">
                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
                                size="14"></uni-icons>操作
                        </view>
                    </view>
                    <view class="op" v-if="operations == index">
                        <!-- <button class="op3" size="mini" plain @tap.stop="edit(item)">编辑</button> -->
                        <button class="op4" size="mini" plain @tap.stop="del(item)">删除</button>
                        <button class="op5" size="mini" plain @tap.stop="operations = -1">取消操作</button>
                    </view>
                </uni-card>
            </view>
        </view>
        <view class="pagination-zone" id="pagination-zone">
            <uni-pagination show-icon :page-size="size" :total="dataLength" :current="page"
                @change="onPaginationChangeHandler"></uni-pagination>
        </view>
        <BarCodePopupVue ref="barcodePopup"></BarCodePopupVue>
    </view>
</template>
<script>
    import {
        getUserInfo
    } from "@/utils/auth.js";
    import BarCodePopupVue from "@/components/BarCodePopup/BarCodePopup.vue";
    import {
        CommonUtils
    } from "../../../utils/common";
    import dayjs from "dayjs";
    export default {
        data() {
            return {
                dayjs,
                userInfo: getUserInfo(),
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
                tabs: 0,
                urls: '/Web/GetEquipmentBillsList',
                MvarReportTitle: '设备点检记录单缓存',
                hform: {
                    HBillNo: '',
                    HSourceBillNo: '',
                    HBillType: 3901,
                    user: uni.getStorageSync('HUserName'),
                    HStockOrgID: uni.getStorageSync('OrganizationID'),
                    Type: "YS",
                    sWhere: "",
                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
                },
                sWhere: '',
                listData: [],
                showList: [],
                showDetail: -1,
                operations: -1,
                page: 1,
                size: 20,
                dataLength: 0,
                divideBottom: 0,
                paginationTop: 0,
                showmore: false,
            }
        },
        computed: {
            calcContentHeight: {
                get() {
                    return this.paginationTop - this.divideBottom
                }
            }
        },
        onShow() {
            //用户模块权限判断
            this.CheckModRight()
            this.changeTab(0)
            console.log(this.userInfo, uni.getStorageSync('HUserName'))
        },
        components: {
            BarCodePopupVue
        },
        onPullDownRefresh: function() {
            this.clear()
            setTimeout(() => {
                uni.stopPullDownRefresh();
            }, 1000);
        },
        onReady() {
            this.getCalcHeight()
        },
        methods: {
            changeShowMore() {
                this.showmore = !this.showmore
                this.$nextTick(() => {
                    // 重新计算内容视口高度
                    this.getCalcHeight()
                })
            },
            getCalcHeight() {
                let query = uni.createSelectorQuery().in(this)
                query
                    .select("#divide")
                    .boundingClientRect()
                    .select("#pagination-zone")
                    .boundingClientRect()
                    .exec(res => {
                        this.divideBottom = Math.ceil(res[0].bottom)
                        this.paginationTop = Math.floor(res[1].top)
                    })
            },
            async qrCodeDisplay(item) {
                this.$refs.barcodePopup.setCodeInfo(item.HBillNo)
                await this.$nextTick()
                this.$refs.barcodePopup.open()
            },
            CheckModRight() {
                uni.request({
                    url: this.serverUrl + '/WEBSController/CheckModRight_Json',
                    data: {
                        ModRightName: 'CE_OtherOut',
                        HUserName: uni.getStorageSync('HUserName')
                    },
                    success: (res) => {
                        if (res.data.count == 1) {} else {
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.showToast({
                            title: '接口请求失败',
                            icon: 'none'
                        })
                    },
                });
            },
            onPaginationChangeHandler({
                current
            }) {
                this.page = current
                this.showList = this.getPage(current, this.size, this.listData)
            },
            getPage(page, size, list) {
                let sindex = (parseInt(page) - 1) * size
                let eindex = parseInt(page) * size
                let newList = list.slice(sindex, eindex)
                return newList
            },
            changeTab(e) {
                this.tabs = e
                this.page = 1
                this.showList = []
                if (this.tabs == 0) {
                    this.urls = '/Web/GetEquipmentBillsList'
                }
                // if (this.tabs == 1) {
                //     this.urls = '/WEBSController/GetKf_ICStockBillQueryList_User_Json'
                // }
                this.search()
            },
            async getList() {
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: this.urls,
                        data: this.hform
                    })
                    let {
                        count,
                        data,
                        Message
                    } = res.data
                    if (count == 1) {
                        if(data == null) {
                           data = []
                        }
                        this.listData = data
                        console.log('data: ', data);
                        this.showList = this.getPage(this.page, this.size, data)
                        this.dataLength = data.length
                    } else {
                        CommonUtils.showTips({
                            title: "温馨提示",
                            message: `获取设备点检记录单失败: ${Message}`
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: "温馨提示",
                        message: `获取设备点检记录单失败: ${err}`
                    })
                }
            },
            search() {
                this.hform.sWhere = ''
                this.listData = []
                this.page = 1
                this.showList = []
                console.log(this.hform)
                if (this.hform.HBillNo) {
                    this.hform.sWhere += " and 单据号 like '%" + this.hform.HBillNo + "%'";
                }
                if (this.hform.HBeginDate && this.hform.HEndDate) {
                    this.hform.sWhere +=
                        ` and convert(date,日期) between convert(date, '${this.hform.HBeginDate}') and convert(date, '${this.hform.HEndDate}')`;
                }
                this.getList()
            },
            clear() {
                this.listData = []
                this.page = 1
                this.showList = []
                this.sWhere = ''
                this.hform = {
                    HBillNo: '',
                    HSourceBillNo: '',
                    HBillType: 3911,
                    user: uni.getStorageSync('HUserName'),
                    HStockOrgID: uni.getStorageSync('OrganizationID'),
                    sWhere: '',
                    Type: "YS",
                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
                }
                this.search()
            },
            add() {
                uni.navigateTo({
                    url: '/pages/MJGL/Sb_EquipRepariCheckBill/Sb_EquipRepariCheckBill?operationType=1'
                })
            },
            //编辑
            edit(item) {
                console.log(item)
                uni.request({
                    url: this.serverUrl + '/WEBSController/TempList_Modify_Json',
                    data: {
                        "HInterID": item.HInterID,
                        "HBillNo": item.单据号,
                        "HBillType": this.hform.HBillType
                    },
                    success: (res) => {
                        console.log(1, res);
                        if (res.data.count == 1) {
                            uni.navigateTo({
                                url: './OtherOutBill?OperationType=2&HInterID=' + item.HInterID
                            })
                        } else {
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                        }
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.hideLoading()
                        uni.showToast({
                            title: '接口请求失败',
                            icon: 'none'
                        })
                    },
                })
            },
            //删除
            del(item) {
                // console.log(item.hmainid,uni.getStorageSync('HUserName'))
                uni.showModal({
                    title: '提示',
                    content: '确认要删除记录?删除后不能恢复',
                    success: (res) => {
                        if (res.confirm) {
                            console.log('用户点击确定');
                            uni.request({
                                url: this.serverUrl +
                                    '/Sb_EquipMaintainBill/DeltetEquipMaintainBillList',
                                data: {
                                    HInterID: item.hmainid,
                                    user: uni.getStorageSync('HUserName'),
                                },
                                success: (res) => {
                                    console.log(1, res);
                                    if (res.data.count == 1) {
                                        this.clear()
                                    }
                                    uni.showToast({
                                        title: res.data.Message,
                                        icon: 'none'
                                    })
                                },
                                fail: (res) => {
                                    console.log(res);
                                    uni.hideLoading()
                                    uni.showToast({
                                        title: '接口请求失败',
                                        icon: 'none'
                                    })
                                },
                            });
                        } else if (res.cancel) {
                            console.log('用户点击取消');
                        }
                    }
                });
            },
            //撤销
            revoke(item) {
                // console.log(item.hmainid,uni.getStorageSync('HUserName'))
                uni.showModal({
                    title: '提示',
                    content: '是否确认撤销',
                    success: (res) => {
                        if (res.confirm) {
                            console.log('用户点击确定');
                            uni.request({
                                url: this.serverUrl +
                                    '/WEBSController/set_DeleteICStockBillAndWMS_Json',
                                data: {
                                    HInterID: item.HInterID,
                                    HBillNo: item.单据号,
                                    HBillType: this.hform.HBillType,
                                    HMaker: uni.getStorageSync('HUserName'),
                                    MvarReportTitle: this.MvarReportTitle,
                                },
                                success: (res) => {
                                    console.log(1, res);
                                    if (res.data.count == 1) {
                                        this.clear()
                                    }
                                    uni.showToast({
                                        title: res.data.Message,
                                        icon: 'none'
                                    })
                                },
                                fail: (res) => {
                                    console.log(res);
                                    uni.hideLoading()
                                    uni.showToast({
                                        title: '接口请求失败',
                                        icon: 'none'
                                    })
                                },
                            });
                        } else if (res.cancel) {
                            console.log('用户点击取消');
                        }
                    }
                });
            },
        }
    }
</script>
<style lang="scss" scoped>
    @import "@/pages/MJGL/style/MJListStyle.scss"
</style>
pages/MJGL/style/MJBillStyle.scss
@@ -86,7 +86,13 @@
        }
    }
    
    .required::after{
          content: "*";
          color: red;
          margin-left: 4px;
          font-weight: bold;
    }
    .right {
        // width: 450rpx;
        flex: 1;
@@ -119,6 +125,7 @@
    textarea {
        width: 98%;
        height: 6em;
        padding: 8rpx 20rpx;
        font-size: 30rpx;
    }
pages/MJGL/style/MJListStyle.scss
@@ -1,8 +1,18 @@
    .form {
        width: 640rpx;
        margin: 20rpx auto;
        margin-top: 90rpx;
        padding: 20rpx;
        width: 100%;
        display: flex;
        flex-direction: column;
        align-items: center;
    }
    .other {
        margin-top: 8rpx;
        text-align: center;
        font-size: 28rpx;
        padding: 4rpx 18rpx;
        color: #1890FF;
    }
    .tabs {
        width: 100%;
@@ -105,9 +115,8 @@
            .detail {
                // width: 50%;
                font-size: 26rpx;
                margin-bottom: 12rpx;
                color: #555;
                margin-right: 20rpx;
                padding-bottom: 20rpx;
                text {
                    color: #999;
@@ -130,4 +139,55 @@
                justify-content: center;
            }
        }
    }
        .op {
            display: flex;
            justify-content: space-around;
            margin-top: 20rpx;
            button {
                padding: 0;
                width: 150rpx;
                font-size: 25rpx;
            }
            .op1 {
                border: 1px solid #41a863;
                color: #41a863;
            }
            .op2 {
                border: 1px solid #d98d00;
                color: #d98d00;
            }
            .op3 {
                border: 1px solid #3a78ff;
                color: #3a78ff;
            }
            .op4 {
                border: 1px solid #da0000;
                color: #da0000;
            }
            .op5 {
                border: 1px solid #888;
                color: #888;
            }
        }
    }
    .pagination-zone {
        position: fixed;
        bottom: 0;
        box-sizing: border-box;
        background-color: #fff;
        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
        padding: 20rpx 40rpx 20rpx 40rpx;
        display: flex;
        flex-direction: column;
        gap: 20rpx;
        justify-content: space-between;
        width: 100%;
    }
pages/index/tab3.vue
@@ -179,6 +179,20 @@
                        "url": "/pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBill",
                        "id": 55,
                        "hidden": false
                    },
                    {
                        "img": "../../static/icon/icon8.png",
                        "text": "设备维修验收单列表",
                        "url": "/pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBillList",
                        "id": 56,
                        "hidden": false
                    },
                    {
                        "img": "../../static/icon/icon8.png",
                        "text": "设备维修验收单",
                        "url": "/pages/MJGL/Sb_EquipRepairCheckBill/Sb_EquipRepairCheckBill",
                        "id": 57,
                        "hidden": false
                    }
                ]
            }