wangyi
2026-03-03 673f7a65d555188d4effe22359994342d8ceda33
环境检测单
2个文件已添加
2个文件已修改
593 ■■■■■ 已修改文件
.hbuilderx/launch.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
components/ZLGL/CheckEnvironmentTestItemPopup.vue 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
components/ZLGL/CheckSchemePopup.vue 320 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/WebSocketServices.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.hbuilderx/launch.json
@@ -22,11 +22,11 @@
            "type" : "uni-app:app-ios"
        },
        {
            "customPlaygroundType" : "local",
            "customPlaygroundType" : "device",
            "localRepoPath" : "C:/Users/19858/Desktop/智云迈思/APP/STUWMS/unpackage/debug",
            "openVueDevtools" : true,
            "packageName" : "com.iflytek.inputmethod",
            "playground" : "custom",
            "playground" : "standard",
            "type" : "uni-app:app-android"
        }
    ]
components/ZLGL/CheckEnvironmentTestItemPopup.vue
New file
@@ -0,0 +1,265 @@
<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="HCode" @confirm="getBillList" /></view>
                </view>
                <view class="search-condition">
                    <view class="title"><text>环境检测项目名称: </text></view>
                    <view class="right"><input type="text" v-model="HName" @confirm="getBillList" /></view>
                </view>
                <view class="buttons">
                    <button size="mini" type="primary" @click="search">查询</button>
                    <view style="flex: 1;"></view>
                    <button size="mini" type="primary" @click="exit">退出</button>
                </view>
                <scroll-view id="#BillListPanel" scroll-y="true" style="height: 55vh;">
                    <view class="options-wrapper" v-show="HBillList.length != 0">
                        <uni-card :is-active="bill.isActive" :class="bill.isActive?'uni-card--is-active':''"
                            v-for="(bill, index) in HBillList[curPage-1]" :key="index" :title="bill['环境检测项目名称']" :extra="`${bill['环境检测项目代码']}`"
                            @tap="clickCard(bill, index)">
                            <view class="item">
                                <view class="left">环境检测项目名称: </view>
                                <view class="right">{{bill['环境检测项目名称']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">环境检测项目代码: </view>
                                <view class="right">{{bill['环境检测项目代码']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">禁用标记: </view>
                                <view class="right">{{bill['禁用标记']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">备注: </view>
                                <view class="right">{{bill['备注']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">使用组织: </view>
                                <view class="right">{{bill['使用组织']}}</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: "SampleSchemePopup",
        emits: ["update:modelValue"],
        data() {
            return {
                dayjs: dayjs,
                enablefocus: false,
                size: 20,
                curPage: 1,
                length: 0,
                page: 0,
                HName: '',
                HCode: '',
                HBillList: [],
                panelHeight: 0,
                multiSouceBillList: []
            };
        },
        props: {
            bindKey: {
                type: [String, Number],
                required: true
            },
            HStockOrgID: {
                type: [String, Number],
            },
        },
        methods: {
            popupChangeHandler(e) {
                if (e.show === true) {
                    this.getBillList()
                }
            },
            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()
            },
            showPopup() {
                this.$refs.popup.open();
            },
            clickCard(bill, index) {
                let retVal = {}
                retVal[this.bindKey] = bill
                console.log('retVal: ', retVal);
                this.$emit("update", {
                    retVal: retVal
                })
            },
            getsWhere() {
                let sWhere = ` and 禁用标志 !='是' and  ISNULL(审核人,'')!=''  and HUSEORGID = '${ uni.getStorageSync("OrganizationID")}'`
               if (this.HCode) {
                   swhere += ` and 环境检测项目代码 like '%${this.HCode}%'`
               }
               if (this.HName) {
                   swhere += ` and 环境检测项目名称 like '%${this.HName}%'`
               }
                return sWhere
            },
            getBillList() {
                this.HBillList = []
                this.length = 0
                this.page = 0
                this.curPage = 1
                CommonUtils.doRequest(
                    "/Gy_BadReason/Gy_EnvironmentTestItemList", {
                        sWhere: this.getsWhere(),
                        user: getUserInfo()['Czymc']
                    },
                    (res) => {
                        let {
                            data,
                            count,
                            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.page = result.length
                            setTimeout(() => {
                                this.enablefocus = true
                            }, 500)
                        } else {
                            setTimeout(() => {
                                this.enablefocus = true
                            }, 500)
                            uni.showToast({
                                icon: 'none',
                                title: Message
                            })
                        }
                    }
                )
            },
        },
    }
</script>
<style lang="scss">
    .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;
            }
        }
        .options-wrapper {
            padding: 20rpx;
            display: grid;
            grid-template-columns: repeat(1, 1fr);
            gap: 20rpx;
            >view {
                margin: 0 !important;
                box-sizing: border-box;
            }
            .item {
                .left {
                    display: inline-block;
                    width: 6rem;
                }
                .right {
                    display: inline-block;
                }
            }
        }
        .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;
        }
    }
</style>
components/ZLGL/CheckSchemePopup.vue
New file
@@ -0,0 +1,320 @@
<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="HCode" @confirm="getBillList" /></view>
                </view>
                <view class="search-condition">
                    <view class="title"><text>检测项目: </text></view>
                    <view class="right"><input type="text" v-model="HName" @confirm="getBillList" /></view>
                </view>
                <view class="buttons">
                    <button size="mini" type="primary" @click="search">查询</button>
                    <view style="flex: 1;"></view>
                    <button size="mini" type="primary" @click="exit">退出</button>
                </view>
                <scroll-view id="#BillListPanel" scroll-y="true" style="height: 55vh;">
                    <view class="options-wrapper" v-show="HBillList.length != 0">
                        <uni-card :is-active="bill.isActive" :class="bill.isActive?'uni-card--is-active':''"
                            v-for="(bill, index) in HBillList[curPage-1]" :key="index" :title="bill['单据号']" :extra="`${bill['检测项目']}`"
                            @tap="clickCard(bill, index)">
                            <view class="item">
                                <view class="left">单据号: </view>
                                <view class="right">{{bill['单据号']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">检测项目: </view>
                                <view class="right">{{bill['检测项目']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">目标值: </view>
                                <view class="right">{{bill['目标值']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">上限值: </view>
                                <view class="right">{{bill['上限值']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">下限值: </view>
                                <view class="right">{{bill['下限值']}}</view>
                            </view>
                            <view class="item">
                                <view class="left">表头备注: </view>
                                <view class="right">{{bill['表头备注']}}</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: "SampleSchemePopup",
        emits: ["update:modelValue"],
        data() {
            return {
                dayjs: dayjs,
                enablefocus: false,
                size: 20,
                curPage: 1,
                length: 0,
                page: 0,
                HName: '',
                HCode: '',
                HBillList: [],
                panelHeight: 0,
                multiSouceBillList: []
            };
        },
        props: {
            bindKey: {
                type: [String, Number],
                required: true
            },
            HStockOrgID: {
                type: [String, Number],
            },
        },
        methods: {
            popupChangeHandler(e) {
                if (e.show === true) {
                    this.getBillList()
                }
            },
            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()
            },
            showPopup() {
                this.$refs.popup.open();
            },
           async clickCard(bill, index) {
               try {
                   // 显示加载提示
                   uni.showLoading({
                       title: '加载中...'
                   });
                   console.log('选中的主表数据:', bill);
                   // 使用同一个接口,但通过单据号查询所有相关数据
                   let res = await CommonUtils.doRequest2Async({
                       url: "/Gy_BaseInformation/getGy_EnvironmentTestSchemeBillMainList",
                       data: {
                           sWhere: ` and 单据号 = '${bill.单据号}'`,  // 根据单据号查询所有记录
                           user: getUserInfo()['Czymc']
                       }
                   });
                   let { data, count, Message } = res.data;
                   console.log('查询结果:', data);
                   if (count == 1 && data && data.length > 0) {
                       // 返回该主表下的所有子表数据(相同单据号的所有记录)
                       let retVal = {};
                       // 将所有数据放入返回对象中
                       data.forEach((item, index) => {
                           retVal[index] = item;
                       });
                       console.log('返回的所有数据: ', retVal);
                       this.$emit("update", {
                           retVal: retVal
                       });
                       // 关闭弹窗
                       this.exit();
                       uni.showToast({
                           title: `已加载 ${data.length} 条数据`,
                           icon: 'success'
                       });
                   } else {
                       uni.showToast({
                           title: '未找到数据',
                           icon: 'none'
                       });
                   }
               } catch (err) {
                   console.error('加载数据失败:', err);
                   uni.showToast({
                       title: '加载失败',
                       icon: 'none'
                   });
               } finally {
                   uni.hideLoading();
               }
           },
            getsWhere() {
                let sWhere = `  and  ISNULL(审核人,'')!=''  and HOrgID = '${ uni.getStorageSync("OrganizationID")}'`
               if (this.HCode) {
                   sWhere += ` and 单据号 like '%${this.HCode}%'`
               }
               if (this.HName) {
                   sWhere += ` and 检测项目 like '%${this.HName}%'`
               }
                return sWhere
            },
            getBillList() {
                this.HBillList = []
                this.length = 0
                this.page = 0
                this.curPage = 1
                CommonUtils.doRequest(
                    "/Gy_BaseInformation/getGy_EnvironmentTestSchemeBillMainList", {
                        sWhere: this.getsWhere(),
                        user: getUserInfo()['Czymc']
                    },
                    (res) => {
                        let {
                            data,
                            count,
                            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.page = result.length
                            setTimeout(() => {
                                this.enablefocus = true
                            }, 500)
                        } else {
                            setTimeout(() => {
                                this.enablefocus = true
                            }, 500)
                            uni.showToast({
                                icon: 'none',
                                title: Message
                            })
                        }
                    }
                )
            },
        },
    }
</script>
<style lang="scss">
    .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;
            }
        }
        .options-wrapper {
            padding: 20rpx;
            display: grid;
            grid-template-columns: repeat(1, 1fr);
            gap: 20rpx;
            >view {
                margin: 0 !important;
                box-sizing: border-box;
            }
            .item {
                .left {
                    display: inline-block;
                    width: 6rem;
                }
                .right {
                    display: inline-block;
                }
            }
        }
        .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;
        }
    }
</style>
utils/WebSocketServices.js
@@ -98,7 +98,7 @@
                // 处理业务消息
                if (message.Type === "MessageUnRead") { // 未读消息
                    let payload = {
                        pagePath: "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList",
                        pagePath: "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillQuery",
                        itemId: 0
                    }
                    const content = JSON.parse(message.Content);
@@ -107,7 +107,7 @@
                } else if (message.Type === "Message") {
                    const content = JSON.parse(message.Content)
                    let payload = {
                        pagePath: "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList",
                        pagePath: "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillQuery",
                        itemId: 0
                    }
                    this.showTaskTip(content[0]["内容"], payload, content[0]["主题"]);