wtt
4 天以前 1ce2a5eea6140cb576cbb6494a00a5f1934973a8
Merge branch 'Dev' of http://101.37.171.70:10101/r/~jhz/STUWMS into Dev

# Conflicts:
# manifest.json
# pages/index/tab3.vue
# pages/index/tab4.vue
11个文件已修改
5个文件已添加
1425 ■■■■■ 已修改文件
components/FIFOListModule/FIFOListComponent.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBill.vue 708 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/style/MJBillStyle.scss 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/MJGL/style/MJListStyle.scss 补丁 | 查看 | 原始文档 | blame | 历史
pages/ZLGL/lailiaojianyan_fast/Kf_QCStockInCheckBill_Fast.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/ZLGL/zaikujianyandan/InStockCheckBillList.vue 333 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/login.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/tab3.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/tab4.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/shengchanbuliaojiaoyan/MateReplenishOutCheckBill.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/shengchandiaobo/MoveStockBill.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/shengchanlingliao/PPickingCheckBill.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
uni_modules/zxz-uni-data-select/components/zxz-uni-data-select/zxz-uni-data-select.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
components/FIFOListModule/FIFOListComponent.vue
@@ -25,6 +25,10 @@
                            <text>下架数量: </text>
                            {{ FIFOItem['下架数量'] }}
                        </view>
                        <view class="item">
                            <text>生产日期: </text>
                            {{ FIFOItem['控制值'] }}
                        </view>
                    </view>
                </uni-card>
            </view>
manifest.json
@@ -2,8 +2,8 @@
    "name" : "智云LMES",
    "appid" : "__UNI__B002F49",
    "description" : "",
    "versionName" : "2.0.43",
    "versionCode" : 243,
    "versionName" : "2.0.46",
    "versionCode" : 246,
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
pages.json
@@ -1410,6 +1410,27 @@
            {
                "navigationBarTitleText" : "在库检验单"
            }
        },
        {
            "path" : "pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill",
            "style" :
            {
                "navigationBarTitleText" : "设备保养记录单"
            }
        },
        {
            "path" : "pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBill",
            "style" :
            {
                "navigationBarTitleText" : "设备点检记录单"
            }
        },
        {
            "path" : "pages/ZLGL/zaikujianyandan/InStockCheckBillList",
            "style" :
            {
                "navigationBarTitleText" : "在库检验单列表"
            }
        }
        
    ],
pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBill.vue
New file
@@ -0,0 +1,708 @@
<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="right">
                        <input v-model="hform.HBarCode" @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">
                        <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 class="form-item">
                    <view class="title">数量:</view>
                    <view class="right">
                        <input type="number" v-model="hform.HQty" />
                    </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.HLastResult == 'OK'" />
                                    <text>OK</text>
                                </view>
                            </label>
                            </label>
                            <view>
                                <radio value="NG" :checked="hform.HLastResult == 'NG'" />
                                <text>NG</text>
                            </view>
                            </label>
                        </radio-group>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">异常情况记录:</view>
                    <view class="right">
                        <input v-model="hform.HErrNote" placeholder="请输入异常情况记录" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">重大安全隐患记录:</view>
                    <view class="right">
                        <input v-model="hform.HBigSafeNote" placeholder="请输入重大安全隐患记录" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">点检数据:</view>
                    <view class="right">
                        <input v-model="hform.HDotCheckNote" placeholder="请输入点检数据" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">生产班次:</view>
                    <zxz-uni-data-select class="right" :localdata="HShiftsList" dataKey="班次名称" dataValue="HItemID"
                        v-model="hform.HShiftsID">
                    </zxz-uni-data-select>
                </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">部门:</view>
                    <zxz-uni-data-select 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">备注:</view>
                    <view class="right">
                        <input v-model="hform.HRemark" placeholder="请输入备注" />
                    </view>
                </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 class="form-item">
                    <view class="title">点检计划:</view>
                    <view class="righton">
                        <input v-model="hform.HPlanNo" disabled />
                    </view>
                </view>
            </view>
        </template>
        <!-- 明细信息 -->
        <template v-if="tabs == 1">
            <view class="form">
                <view class="form-item">
                    <view class="left">
                        设备点检规程
                    </view>
                    <view class="right">
                        <input type="text" :value="hform.HEquipDotCheckRuleInterNo" />
                    </view>
                    <view class="icon-wrapper">
                        <uni-icons type="search" size="20" @click="toCheckFile"></uni-icons>
                    </view>
                </view>
            </view>
            <view class="list" v-for="(item,index) in HCheckFileList" :key="index">
                <uni-card style="margin: 10px;">
                    <view class="card-detail">
                        <view class="detail">
                            <text>序号:</text>{{index+1}}
                        </view>
                        <view class="detail">
                            <text>结果:</text>
                            <checkbox-group style="display: inline-block;"
                                @change="checkBoxChangeHandler(index, $event)">
                                <checkbox value="enabled" :checked="item.HDotCheckResult" />
                            </checkbox-group>
                        </view>
                        <view class="detail">
                            <text>点检项目分类:</text>{{item.HDotCheckItemClassName}}
                        </view>
                        <view class="detail">
                            <text>点检方法:</text>{{item.HDotCheckItemMethodName}}
                        </view>
                        <view class="detail">
                            <text>点检部位:</text>{{item.HDotCheckPart}}
                        </view>
                        <view class="detail">
                            <text>负责人名称:</text>{{item.HManagerName}}
                        </view>
                        <view class="detail">
                            <text>备注:</text>{{item.HRemark}}
                        </view>
                    </view>
                </uni-card>
            </view>
            <view class="over" v-if="HCheckFileList.length == 0">暂无数据</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>
        <!-- 附件信息 -->
        <template v-if="tabs == 3">
            <view class="card-item-wrapper">
                <view class="attachment-btns">
                    <button type="primary" size="mini" @tap="fileUpload">选择文件</button>
                    <view style="flex: 1;"></view>
                </view>
                <view v-for="(item, index) in attachmentInfo" :key="index">
                    <uni-card :title="item['fileName']" :thumbnail="item.filePath">
                        <view class="card-detail">
                            <view class="detail">
                                <text>大小:</text>{{item["size"]}}
                            </view>
                            <view class="detail">
                                <text>状态:</text>{{item["status"]}}
                            </view>
                            <view class="detail operation" v-if="item['status']!='上传成功'">
                                <text>操作:</text>
                                <button class="btn-a" size="mini" @tap.stop="uploadFile(index)">上传</button>
                                <button class="btn-b" size="mini" @tap.stop="delFile(index)">删除</button>
                            </view>
                        </view>
                    </uni-card>
                </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 "@/pages/MJGL/style/MJBillStyle.scss"
    import {
        getUserInfo
    } from "../../../utils/auth";
    import {
        TrackOpTypes
    } from "vue";
    export default {
        name: 'sb_EquipDotCheckBill',
        data() {
            return {
                tabs: 0,
                HMainSourceBillType: "",
                btnTop: 0,
                tabsBottom: 0,
                HModName: "sb_EquipDotCheckBill",
                HBillType: '3903',
                operationType: 1,
                uploadOptions: {},
                HDeptList: [],
                HShiftsList: [],
                HCheckFileList: [],
                attachmentInfo: [],
                hform: {
                    HBarCode: "",
                    HBeginDate: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
                    HQty: 0,
                    HErrNote: "",
                    HBigSafeNote: "",
                    HDotCheckNote: "",
                    HShiftsName: "",
                    HShiftsID: 0,
                    HBillNo: "",
                    HInterID: 0,
                    HDate: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss"),
                    HDeptName: "",
                    HDeptID: 0,
                    HRemark: "",
                    HBarName: "",
                    HEquipID: 0,
                    HBarSpec: "",
                    HBarModel: "",
                    HPlanNo: "",
                    HPlanInterID: 0,
                    HPlanEntryID: 0,
                    HEquipDotCheckRuleInterID: 0,
                    HEquipDotCheckRuleInterNo: "",
                    HMaker: getUserInfo()['Czymc'],
                    HMakeDate: dayjs(new Date()).format("YYYY-MM-DD"),
                    HUpDater: "",
                    HUpDateDate: "",
                    HChecker: "",
                    HCheckDate: "",
                    HDeleteMan: "",
                    HDeleteDate: "",
                    lngBillKey: 0,
                    lngBillSubKey: 0,
                    HLastResult: "OK"
                }
            };
        },
        computed: {
            containerHeight: {
                get() {
                    return this.btnTop - this.tabsBottom - 5
                }
            }
        },
        methods: {
            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
                    })
                }
            },
            toScanCode() {
                MpaasScan.scanCode(cb => {
                    this.hfrom.HBarCode = cb
                    this.GetMessageByBarCode(cb)
                })
            },
            async GetMessageByBarCode(HBarCode) {
                try {
                    let res = await CommonUtils.doRequest2Sync({
                        url: "/Gy_EquipFileBill/txtHBarCode_KeyDown",
                        data: {
                            HBarCode: HBarCode,
                            user: getUserInfo()["Czymc"]
                        },
                    })
                    if (!res) {
                        return
                    }
                    let {
                        data,
                        count,
                        Message
                    } = res.data
                    console.log('data: ', data);
                    this.hform.HEquipID = data[0].HInterID
                    this.hform.HBarName = data[0].设备名称
                    this.hform.HBarSpec = data[0].设备规格
                    this.hform.HBarModel = data[0].设备型号
                    this.hform.HQty = 1
                    // 获取检验规程
                    this.GetItemByEquipFile()
                } catch (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.HLastResult = 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() {
                try {
                    let oMain = JSON.stringify(this.hform);
                    let sSubStr = JSON.stringify(this.HCheckFileList);
                    let sMainSub = oMain + ';' + sSubStr;
                    let res = await CommonUtils.doRequest2Sync({
                        url: "/Sb_PDA_EquipDotCheckBill/SaveGetEquipDotCheckBillList",
                        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_EquipMaintainBill/Sb_EquipMaintainBill?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.getShiftList()
        },
        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">
</style>
pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue
New file
@@ -0,0 +1,19 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            };
        }
    }
</script>
<style lang="scss">
</style>
pages/MJGL/style/MJBillStyle.scss
New file
@@ -0,0 +1,264 @@
.buttons {
    box-sizing: border-box;
    width: 100%;
    height: 120rpx;
    position: fixed;
    bottom: 0;
    left: 0;
    background-color: #fff;
    box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
    padding: 30rpx 40rpx 40rpx 40rpx;
    display: flex;
    flex-direction: row;
    gap: 10rpx;
    button {
        border-radius: 50rpx;
        width: 180rpx;
        height: 66rpx;
        line-height: 66rpx;
        font-size: 28rpx;
    }
    .btn-a {
        background-color: #3a78ff;
        color: #fff;
    }
    .btn-b {
        background-color: #41a863;
        color: #fff;
    }
    .btn-c {
        background-color: #acacac;
        color: #fff;
        // position: absolute;
        // right: 120rpx;
    }
    .btn-d {
        background-color: #ff8901;
        color: #fff;
    }
    .placeholder-view {
        flex: 1;
    }
}
.tabs {
    width: 100%;
    display: flex;
    border-bottom: 1px solid #ddd;
    view {
        width: 25%;
        font-size: 30rpx;
        color: #555;
        text-align: center;
        padding: 16rpx 0;
    }
    .on {
        color: #3a78ff;
        font-weight: bold;
        border-bottom: 3px solid #3a78ff;
    }
}
.form {
    display: flex;
    flex-direction: column;
    gap: 10rpx;
    box-sizing: border-box;
    padding: 20rpx 40rpx;
}
.form-item {
    display: flex;
    align-items: center;
    font-size: 30rpx;
    padding: 6rpx 0;
    gap: 12rpx;
    .title {
        width: 208rpx;
        flex-shrink: 0;
        text {
            color: red;
            font-weight: bold;
        }
    }
    .right {
        // width: 450rpx;
        flex: 1;
        border-radius: 22rpx;
        border: 1px solid #acacac;
        position: relative;
        display: flex;
        picker {
            width: 100%;
        }
        .uni-combox {
            width: 100%
        }
    }
    .righton {
        width: 450rpx;
        border-radius: 22rpx;
        border: 1px solid #e4e4e4;
        background-color: #e4e4e4;
    }
    input {
        width: 100%;
        padding: 8rpx 20rpx;
        font-size: 30rpx;
    }
    textarea {
        width: 98%;
        padding: 8rpx 20rpx;
        font-size: 30rpx;
    }
    .icon-wrapper {
        background-color: #3A78FF;
        width: 52rpx;
        height: 52rpx;
        border-radius: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
        flex-shrink: 0;
        .uni-icons {
            color: #fff !important;
        }
    }
    .icon-wrapper[disabled] {
        background-color: rgba(228, 228, 228, 1);
        pointer-events: none;
        touch-action: none;
    }
}
.none-border {
    border: none !important;
}
.radio_Container {
    display: flex;
    flex-direction: row;
    gap: 30rpx;
}
 .list {
        width: 100%;
        .card-detail {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            line-height: 120%;
            .detail {
                // width: 50%;
                font-size: 26rpx;
                margin-bottom: 12rpx;
                color: #555;
                margin-right: 20rpx;
                text {
                    color: #999;
                    font-size: 26rpx;
                }
            }
        }
        .more {
            color: #888;
            font-size: 24rpx;
            display: flex;
            border-top: 1px solid #eee;
            padding-top: 20rpx;
            .part {
                width: 50%;
                text-align: center;
            }
        }
    }
.card-item-wrapper {
        display: flex;
        flex-direction: column;
        justify-content: center;
        box-sizing: border-box;
        padding: 20rpx 20rpx;
        .card-detail {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            line-height: 120%;
            .detail {
                // width: 50%;
                font-size: 26rpx;
                margin-bottom: 12rpx;
                color: #555;
                margin-right: 20rpx;
                text {
                    color: #999;
                    font-size: 26rpx;
                }
            }
            .operation {
                display: flex;
                align-items: center;
                gap: 10rpx;
                .btn-a {
                    background-color: #3A78FF;
                    color: #fff;
                }
                .btn-b {
                    background-color: rgb(255, 87, 34);
                    color: #fff;
                }
                uni-button {}
            }
        }
        .more {
            color: #888;
            font-size: 24rpx;
            display: flex;
            border-top: 1px solid #eee;
            padding-top: 20rpx;
            .part {
                width: 50%;
                text-align: center;
            }
        }
    }
    .attachment-btns {
        display: flex;
        flex-direction: row;
        justify-content: flex-start;
        gap: 6rpx;
    }
pages/MJGL/style/MJListStyle.scss
pages/ZLGL/lailiaojianyan_fast/Kf_QCStockInCheckBill_Fast.vue
@@ -461,8 +461,9 @@
                })
            },
            HKeeperNameChange(e) {
                console.log(e)
                let keeperItem = this.HKeeperList.find(elem => elem.HName = e)
                console.log(this.HKeeperList)
                let keeperItem = this.HKeeperList.find(elem => elem.HName == e)
                console.log(keeperItem)
                this.detailManifestItem.HKeeperID = keeperItem.HItemID
                this.detailManifestItem.HKeeperName = keeperItem.HName
pages/ZLGL/zaikujianyandan/InStockCheckBillList.vue
New file
@@ -0,0 +1,333 @@
<template>
    <view>
        <view class="header" id="list_header">
            <view class="form">
                <view class="form-item">
                    <view class="title">单据号:</view>
                    <view class="right">
                        <input name="HBillNo" v-model="hform.HBillNo" placeholder="请输入单据号" />
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">开始时间:</view>
                    <view class="right">
                        <picker mode="date" :value="hform.HBeginDate" @change="HBeginDateChange">
                            <view class="picker-overlay"></view>
                            <input name="HBeginDate" disabled :value="hform.HBeginDate" placeholder="请选择" />
                        </picker>
                    </view>
                </view>
                <view class="form-item">
                    <view class="title">结束时间:</view>
                    <view class="right">
                        <picker mode="date" :value="hform.HEndDate" @change="HEndDateChange">
                            <view class="picker-overlay"></view>
                            <input name="HEndDate" disabled :value="hform.HEndDate" placeholder="请选择" />
                        </picker>
                    </view>
                </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>
        <scroll-view scroll-y="true" @scroll="scrollHandler" :scroll-top="contentScrollTop"
            :style="{height: calcHeight + 'px'}" class="content">
            <view class="over" v-if="billList.length == 0">
                暂无数据
            </view>
            <view v-else  class="list" v-for="(item,index) in billList" :key="index">
                <uni-card style="margin: 10px;">
                    <view class="card-detail">
                        <view class="detail">
                            <text>单据号:</text>{{item["单据号"]}}
                        </view>
                        <view class="detail">
                            <text>物料代码:</text>{{item["物料代码"]}}
                        </view>
                        <view class="detail">
                            <text>物料名称:</text>{{item["物料名称"]}}
                        </view>
                        <view class="detail">
                            <text>规格型号:</text>{{item["规格型号"]}}
                        </view>
                        <view class="detail">
                            <text>计量单位:</text>{{item["计量单位"]}}
                        </view>
                        <view class="detail">
                            <text>合格数量:</text>{{item["合格数量"]}}
                        </view>
                        <view class="detail">
                            <text>不合格数量:</text>{{item["不合格数量"]}}
                        </view>
                    </view>
                </uni-card>
            </view>
        </scroll-view>
        <uni-pagination id="pagination" v-model="curPage" :pageSize="size" :total="length"></uni-pagination>
    </view>
</template>
<script>
    import dayjs from 'dayjs';
    import {
        CommonUtils
    } from '../../../utils/common';
    import {
        getUserInfo
    } from '../../../utils/auth';
    export default {
        name: "InStockCheckBillList",
        data() {
            return {
                contentScrollTop: 0,
                contentScrollTopOld: 0,
                headerHeight: 0,
                paginationHeight: 0,
                curPage: 1,
                size: 50,
                length: 0,
                hform: {
                    HBillNo: "",
                    HBeginDate: dayjs(new Date()).subtract(30, "d").format("YYYY-MM-DD"),
                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD")
                },
                billList: [],
            };
        },
        computed: {
            calcHeight: {
                get() {
                    console.log('this.paginationHeight - this.headerHeight: ', this.paginationHeight - this
                        .headerHeight);
                    return this.paginationHeight - this.headerHeight
                }
            }
        },
        onLoad() {
            this.getDisplayPage()
        },
        onReady() {
            this.getScrollHeight()
        },
        methods: {
            getScrollHeight() {
                const query = uni.createSelectorQuery().in(this)
                query
                    .select("#list_header")
                    .boundingClientRect()
                    .select("#pagination")
                    .boundingClientRect()
                    .exec(res => {
                        this.headerHeight = Math.ceil(res[0].bottom)
                        this.paginationHeight = Math.floor(res[1].top)
                    })
            },
            scrollToTop() {
                this.contentScrollTop = this.contentScrollTopOld;
                this.$nextTick(() => {
                    this.contentScrollTop = 0
                });
            },
            scrollHandler(e) {
                this.contentScrollTopOld = e.detail.scrollTop
            },
            creat() {
                uni.navigateTo({
                    url: "/pages/ZLGL/zaikujianyandan/InStockCheckBill?operationType=1"
                })
            },
            search() {
                this.getDisplayPage()
            },
            clear() {
                this.hform.HBillNo = ""
                this.hform.HBeginDate = dayjs(new Date()).subtract(7, 'd').format("YYYY-MM-DD")
                this.hform.HEndDate = dayjs(new Date()).format("YYYY-MM-DD")
                this.getDisplayPage()
            },
            async getDisplayPage() {
                let sWhere = ` and 日期
                  BETWEEN  CAST('${this.hform.HBeginDate}' AS DATE)
                  AND CAST('${this.hform.HEndDate}' AS DATE)
                `
                if(this.hform.HBillNo){
                    sWhere += ` and 单据号 like '${this.hform.HBillNo}'`
                }
                try {
                    let res = await CommonUtils.doRequest2Async({
                        url: 'QC_InStockCheckBillController/getListPage',
                        data: {
                            sWhere: sWhere,
                            user: getUserInfo()['Czymc'],
                            page: this.curPage,
                            size: this.size
                        }
                    })
                    let {
                        count,
                        data,
                        Message
                    } = res.data
                    if (count >= 0) {
                        console.log('data: ',data);
                        this.length = count
                        this.billList = data
                    } else {
                        CommonUtils.showTips({
                            title: '温馨提示',
                            message: '获取在库检验单失败: ' + Message
                        })
                    }
                } catch (err) {
                    CommonUtils.showTips({
                        title: '温馨提示',
                        message: '获取在库检验单失败: ' + err
                    })
                }
            }
        }
    }
</script>
<style lang="scss">
    .header {
        padding: 20rpx 20rpx;
    }
    .form {
        width: 640rpx;
    }
    .form-item {
        display: flex;
        align-items: center;
        font-size: 28rpx;
        padding: 6rpx 0;
        .title {
            width: 180rpx;
            text {
                color: red;
                font-weight: bold;
            }
        }
        .right {
            width: 450rpx;
            border-radius: 22rpx;
            border: 1px solid #acacac;
            position: relative;
        }
        .righton {
            width: 450rpx;
            border-radius: 22rpx;
            border: 1px solid #e4e4e4;
            background-color: #e4e4e4;
        }
        input {
            width: 100%;
            padding: 8rpx 20rpx;
            font-size: 30rpx;
        }
    }
    .buttons {
        width: 100%;
        display: flex;
        justify-content: center;
        padding-top: 20rpx;
        button {
            border-radius: 50rpx;
            width: 180rpx;
            height: 66rpx;
            line-height: 66rpx;
            font-size: 28rpx;
        }
        .btn-a {
            background-color: #acacac;
            color: #fff;
        }
        .btn-b {
            background-color: #41a863;
            color: #fff;
        }
        .btn-c {
            background-color: #3a78ff;
            color: #fff;
        }
    }
    #pagination {
        position: fixed;
        bottom: 0;
        width: 100%;
        padding: 20rpx 0;
    }
    .list {
        width: 100%;
        .card-detail {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            align-items: center;
            line-height: 120%;
            gap: 10rpx 0;
            input {
                font-size: 26rpx;
            }
            .detail {
                // width: 50%;
                box-sizing: border-box;
                font-size: 26rpx;
                color: #555;
                padding-right: 20rpx;
                text {
                    color: #999;
                    font-size: 26rpx;
                }
            }
            .editable {
                width: 50%;
                display: inline-flex;
                flex-direction: row;
                align-items: center;
                text {
                    flex-shrink: 0;
                }
                .sampleDestory {
                    border: 1px solid #acacac;
                    border-radius: 5rpx;
                    padding: 0 12rpx;
                }
            }
        }
    }
</style>
pages/index/login.vue
@@ -105,7 +105,7 @@
                    "杭州凯贝奈特外网": 'http://erp.hzcabinet.cn:9090/API/',
                    "翁涛涛本地测试": 'http://localhost:81/API/',
                    "陈镐哲本地测试": 'http://192.168.0.121:81/API/',
                    "陈镐哲本地测试2": 'http://192.168.0.102:81/API/',
                    "陈镐哲本地测试2": 'http://192.168.89.27:81/API/',
                    "张瑞广本地测试": 'http://localhost:8082/API/',
                    "余思杰本地测试": 'http://localhost:8082/LuBaoAPI/',
                    // 小卫内外网
pages/index/tab3.vue
@@ -131,6 +131,26 @@
                        id: 14,
                        hidden: true,
                    }, 
                        "img": "../../static/icon/icon8.png",
                        "text": "模具报废出库单列表",
                        "url": "/pages/MJGL/MouldScrapOutBill/MouldScrapOutBillList",
                        "id": 51,
                        "hidden": false
                    },
                    {
                        "img": "../../static/icon/icon8.png",
                        "text": "设备保养记录单",
                        "url": "/pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill",
                        "id": 53,
                        "hidden": false
                    },
                    {
                        "img": "../../static/icon/icon8.png",
                        "text": "设备点检记录单",
                        "url": "/pages/MJGL/Sb_EquipDotCheckBill/Sb_EquipDotCheckBill",
                        "id": 55,
                        "hidden": false
                    }
                ]
            }
        },
pages/index/tab4.vue
@@ -112,7 +112,28 @@
                        "id": 55,
                        "hidden": false
                    },
                    {
                    
                        "img": "../../static/icon/icon8.png",
                        "text": "车间自检单查询",
                        "url": "/pages/ZLGL/WorkSelfCheckBill/WorkSelfCheckBillList",
                        "id": 55,
                        "hidden": false
                    },
{
                        "img": "../../static/icon/icon8.png",
                        "text": "在库检验单",
                        "url": "/pages/ZLGL/zaikujianyandan/InStockCheckBill",
                        "id": 57,
                        "hidden": false
                    },
                    {
                        "img": "../../static/icon/icon8.png",
                        "text": "在库检验单缓存",
                        "url": "/pages/ZLGL/zaikujianyandan/InStockCheckBillList",
                        "id": 57,
                        "hidden": false
                    }
                    
                ]
            }
pages/shengchanbuliaojiaoyan/MateReplenishOutCheckBill.vue
@@ -502,7 +502,7 @@
                for (var i = 0; i < this.HStockPlaceNameList.length; i++) {
                    if (this.HStockPlaceNameList[i].仓位名称 == e) {
                        this.hform.HStockPlaceName = this.HStockPlaceNameList[i].仓位名称
                        this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HItemID
                        this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HMainID
                    }
                }
            },
pages/shengchandiaobo/MoveStockBill.vue
@@ -439,6 +439,7 @@
                console.log('调入仓库: ',e);
                for (var i = 0; i < this.HWHNameList.length; i++) {
                    if (this.HWHNameList[i].仓库名称 == e) {
                        console.log('调入仓库: ',this.HWHNameList[i]);
                        this.hform.HWHName = this.HWHNameList[i].仓库名称
                        this.hform.HWHID = this.HWHNameList[i].HItemID
@@ -457,12 +458,13 @@
                console.log('调出仓库: ',e);
                for (var i = 0; i < this.HWHNameList.length; i++) {
                    if (this.HWHNameList[i].仓库名称 == e) {
                        console.log('调出仓库: ',this.HWHNameList[i]);
                        this.hform.HSCWHName = this.HWHNameList[i].仓库名称
                        this.hform.HSCWHID = this.HWHNameList[i].HItemID
                        if (this.HWHNameList[i]['启用仓位'] == 'Y') {
                            this.showHSCStockPlaceName = true
                        } else {
                            this.hform.HStockPlaceName = ''
                            this.hform.HSCSPName = ''
                            this.showHSCStockPlaceName = false
                        }
                    }
@@ -473,7 +475,7 @@
                for (var i = 0; i < this.HStockPlaceNameList.length; i++) {
                    if (this.HStockPlaceNameList[i].仓位名称 == e) {
                        this.hform.HStockPlaceName = this.HStockPlaceNameList[i].仓位名称
                        this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HItemID
                        this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HMainID
                    }
                }
            },
@@ -482,7 +484,7 @@
                for (var i = 0; i < this.HStockPlaceNameList.length; i++) {
                    if (this.HStockPlaceNameList[i].仓位名称 == e) {
                        this.hform.HSCSPName = this.HStockPlaceNameList[i].仓位名称
                        this.hform.HSCSPID = this.HStockPlaceNameList[i].HItemID
                        this.hform.HSCSPID = this.HStockPlaceNameList[i].HMainID
                    }
                }
            },
@@ -649,7 +651,6 @@
                var sOldBarCode = HBarCode
                var HDeleteFlag = sOldBarCode.substring(0, 1);
                var sBarCode = sOldBarCode.slice(1);
                var sHWHID = this.hform.HWHID
                var sHSPID = this.hform.HStockPlaceID
                let sHSCWHID = this.hform.HSCWHID
@@ -750,10 +751,10 @@
                                HBillType: this.hform.HBillType,
                                HBillNo: this.hform.HBillNo,
                                HMaker: this.hform.HMaker,
                                HWhID: sHWHID,
                                HSPID: sHSPID,
                                HSCWHID: sHSCWHID,
                                HSCSPID: sHSCSPID,
                                HWhID: this.hform.HSCWHID,
                                HSPID: this.hform.HSCSPID,
                                HSCWHID: this.hform.HWHID,
                                HSCSPID: this.hform.HStockPlaceID,
                                HQty: sHQty,
                                // HRedBlueFlag: this.hform.HRedBlueFlag,
                                // SourceFlag: HSourceFlag,
pages/shengchanlingliao/PPickingCheckBill.vue
@@ -598,8 +598,9 @@
            HStockPlaceNameChange(e) {
                for (var i = 0; i < this.HStockPlaceNameList.length; i++) {
                    if (this.HStockPlaceNameList[i].仓位名称 == e) {
                        console.log('e: ',this.HStockPlaceNameList[i]);
                        this.hform.HStockPlaceName = this.HStockPlaceNameList[i].仓位名称
                        this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HItemID
                        this.hform.HStockPlaceID = this.HStockPlaceNameList[i].HMainID
                    }
                }
            },
uni_modules/zxz-uni-data-select/components/zxz-uni-data-select/zxz-uni-data-select.vue
@@ -604,7 +604,7 @@
        box-sizing: border-box;
        //border-radius: 4px;
        border-radius: 22rpx;
        border: 1px solid #acacac;
        // border: 1px solid #acacac;
        padding: 0 5px;
        padding-left: 10px;
        position: relative;