11c52061e55be42d4cd630a49fa2fbde82650f52..8dbae264b163b253e46bec4638914c7ec58f28c5
2025-12-19 zhou zhou
#
8dbae2 对比 | 目录
2025-12-19 zhou zhou
#
0d8927 对比 | 目录
4个文件已修改
995 ■■■■ 已修改文件
manifest.json 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mat/matSelected.vue 223 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/pakin/pakin.vue 727 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/stock/stockQuery.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json
@@ -122,5 +122,10 @@
    "uniStatistics" : {
        "enable" : false
    },
    "vueVersion" : "2"
    "vueVersion" : "2",
    "h5" : {
        "devServer" : {
            "port" : 8100
        }
    }
}
pages/mat/matSelected.vue
@@ -1,36 +1,64 @@
<template>
    <view>
        <view class="form">
            <view class="form-item">
                <view class="form-item-desc"><text>商品编码</text></view>
                <view class="form-item-content"><text>{{mat.matnr}}</text></view>
    <view class="page-container">
        <!-- 表单区域 -->
        <view class="form-section">
            <view class="form-header">
                <uni-icons type="box" size="24" color="#667eea"></uni-icons>
                <text class="form-title">商品信息</text>
            </view>
            <view class="form-item">
                <view class="form-item-desc"><text>商品名称</text></view>
                <view class="form-item-content" style="word-break: break-all;line-height: 1.5;"><text>{{mat.maktx}}</text></view>
            </view>
            <view class="form-item">
                <view class="form-item-desc"><text>规格</text></view>
                <view class="form-item-content"><text>{{mat.specs}}</text></view>
            </view>
            <view class="form-item">
                <view class="form-item-desc"><text>批号</text></view>
                <view class="form-item-content">
                    <view class="form-input">
                        <input type="text" v-model="mat.batch">
                    </view>
                <view class="form-label">
                    <text class="label-text">商品编码</text>
                </view>
                <view class="form-value">
                    <text class="value-text code">{{mat.matnr}}</text>
                </view>
            </view>
            <view class="form-item">
                <view class="form-item-desc"><text>数量</text></view>
                <view class="form-item-content">
                    <uni-number-box :value="mat.anfme" :max="99999999" :step='1' color="#747474" @change="changeValue" />
                <view class="form-label">
                    <text class="label-text">商品名称</text>
                </view>
                <view class="form-value">
                    <text class="value-text name">{{mat.maktx}}</text>
                </view>
            </view>
            <view class="form-item">
                <view class="form-label">
                    <text class="label-text">规格</text>
                </view>
                <view class="form-value">
                    <text class="value-text">{{mat.specs || '-'}}</text>
                </view>
            </view>
            <view class="form-item">
                <view class="form-label">
                    <text class="label-text">批号</text>
                </view>
                <view class="form-input-wrap">
                    <input class="form-input" type="text" placeholder="请输入批号" v-model="mat.batch" />
                </view>
            </view>
            <view class="form-item no-border">
                <view class="form-label">
                    <text class="label-text">数量</text>
                </view>
                <view class="form-number">
                    <uni-number-box :value="mat.anfme" :max="99999999" :step='1' color="#667eea" @change="changeValue" />
                </view>
            </view>
        </view>
        <!-- 底部操作按钮 -->
        <view class="buttom">
            <button size="mini" type="primary" @click="back()">提取</button>
        <view class="bottom-bar">
            <view class="btn-submit" @click="back()">
                <uni-icons type="checkbox" size="18" color="#ffffff"></uni-icons>
                <text class="btn-text">确认提取</text>
            </view>
        </view>
    </view>
</template>
@@ -93,41 +121,130 @@
<style>
    @import url('../../static/css/wms.css/wms.css');
    .form {
        min-height: 80rpx;
        background-color: #FFF;
        margin-top: 10px;
        color: #606266;
        box-shadow: 0px 0px 50px 0px rgba(0,0,0,0.2) ;
    }
    .form-item {
        min-height: 100rpx;
        line-height: 1;
        border-bottom: 1px solid #DCDFE6;
        margin-left: 40rpx;
        display: flex;
        align-items: center;
    }
    .form-item-desc {
        width: 30%;
    }
    .form-item-content {
        width: 60%;
    page {
        height: 100%;
        background: #f5f7fa;
    }
    
    .form-item:last-child {
        border: none;
    .page-container {
        min-height: 100vh;
        background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
        padding-bottom: 110rpx;
        box-sizing: border-box;
    }
    .form-input {
    /* 表单区域 */
    .form-section {
        background: #ffffff;
        margin: 20rpx;
        border-radius: 16rpx;
        box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
        overflow: hidden;
    }
    .form-header {
        display: flex;
        align-items: center;
        width: 50vw;
        height: 50rpx;
        padding: 2px 5px;
        border-bottom: 1px solid #E4E7ED;
        border-radius: 5rpx;
        padding: 24rpx;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    }
    .form-input input{
        color: #606266;
    .form-title {
        font-size: 30rpx;
        color: #ffffff;
        font-weight: 600;
        margin-left: 12rpx;
    }
    .form-item {
        display: flex;
        align-items: center;
        padding: 20rpx 24rpx;
        border-bottom: 1rpx solid #f0f0f0;
    }
    .form-item.no-border {
        border-bottom: none;
    }
    .form-label {
        width: 150rpx;
        flex-shrink: 0;
    }
    .label-text {
        font-size: 26rpx;
        color: #909399;
    }
    .form-value {
        flex: 1;
    }
    .value-text {
        font-size: 28rpx;
        color: #303133;
        word-break: break-all;
        line-height: 1.5;
    }
    .value-text.code {
        color: #667eea;
        font-weight: 600;
    }
    .value-text.name {
        font-weight: 500;
    }
    .form-input-wrap {
        flex: 1;
        background: #f5f7fa;
        border-radius: 8rpx;
        padding: 0 16rpx;
        height: 64rpx;
        display: flex;
        align-items: center;
    }
    .form-input {
        flex: 1;
        height: 64rpx;
        font-size: 28rpx;
        color: #303133;
    }
    .form-number {
        flex: 1;
        display: flex;
        justify-content: flex-start;
    }
    /* 底部操作栏 */
    .bottom-bar {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        padding: 16rpx 20rpx;
        background: #ffffff;
        box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
    }
    .btn-submit {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 80rpx;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        border-radius: 40rpx;
    }
    .btn-submit .btn-text {
        font-size: 30rpx;
        color: #ffffff;
        font-weight: 500;
        margin-left: 8rpx;
    }
</style>
pages/pakin/pakin.vue
@@ -1,147 +1,169 @@
<template>
    <view>
        <view class="code">
            <view class="item">
                <view class="code-decs">托盘码:</view>
                <input type="text" placeholder=" 扫码 / 输入" v-model="barcode" :focus="barcodeFocus"
                    @input="barcodeInput()">
    <view class="page-container">
        <!-- 表单区域 -->
        <view class="form-section">
            <view class="form-item">
                <view class="form-label">
                    <uni-icons type="scan" size="18" color="#667eea"></uni-icons>
                    <text class="label-text">托盘码</text>
                </view>
                <view class="form-input-wrap">
                    <input class="form-input" type="text" placeholder="扫码 / 输入托盘码" v-model="barcode"
                        :focus="barcodeFocus" @input="barcodeInput()" />
                    <uni-icons v-if="barcode" type="clear" size="18" color="#c0c4cc" @click="clearBarcode"></uni-icons>
                </view>
            </view>
            <view class="item">
                <view class="code-decs">物料码:</view>
                <input type="text" placeholder=" 扫码 / 输入" v-model="matnr" :focus="matFocus" @input="findMat()">
                <!-- <view class="item-right">
                    <button></button>
                    <text style="text-align: right;color: #409EFF;" @click="selectMat()">提取+</text>
                    <uni-icons type="right" color="#c1c1c1"></uni-icons>
                </view> -->
            <view class="form-item">
                <view class="form-label">
                    <uni-icons type="list" size="18" color="#667eea"></uni-icons>
                    <text class="label-text">物料码</text>
                </view>
                <view class="form-input-wrap">
                    <input class="form-input" type="text" placeholder="扫码 / 输入物料码" v-model="matnr"
                        :focus="matFocus" @input="findMat()" />
                    <uni-icons v-if="matnr" type="clear" size="18" color="#c0c4cc" @click="clearMatnr"></uni-icons>
                </view>
            </view>
            <!-- <view class="item">
                <view class="code-decs">满托:</view>
                <radio-group @change="isFrozen">
                    <label>
                        <radio :checked="ck1" style="margin-left: 10rpx;"/><text>是</text>
                    </label>
                    <label>
                        <radio :checked="ck2" style="margin-left: 50rpx;"/><text>否</text>
                    </label>
                </radio-group>
            </view> -->
        </view>
        <view class="mat-list-title">
            商品列表
        <!-- 列表头部 -->
        <view class="list-header">
            <view class="header-left">
                <text class="header-title">商品列表</text>
                <view class="count-badge" v-if="dataList.length > 0">
                    <text class="count-text">{{dataList.length}}</text>
                </view>
            </view>
        </view>
        <scroll-view>
            <view class="list" v-for="(item,i) in dataList" :key="i">
                <view class="list-left">
                    <view class="list-left-item">
                        <view class="desc">No:</view>
                        <view class="left-item">{{i + 1}}</view>
        <!-- 商品列表 -->
        <view class="list-container">
            <view class="mat-card" v-for="(item, i) in dataList" :key="i">
                <!-- 卡片头部 -->
                <view class="card-top">
                    <view class="card-index">{{i + 1}}</view>
                    <view class="mat-code-wrap">
                        <text class="mat-code">{{item.matnr}}</text>
                    </view>
                    <view class="list-left-item">
                        <view class="desc">编码:</view>
                        <view class="left-item">
                            <uni-tag :text="item.matnr" type="primary"></uni-tag>
                        </view>
                    </view>
                    <view class="list-left-item">
                        <view class="desc">品名:</view>
                        <view class="left-item" style="word-break: break-all;">{{item.maktx}}</view>
                    </view>
                    <view class="list-left-item">
                        <view class="desc">规格:</view>
                        <view class="left-item">{{item.specs}}</view>
                    </view>
                    <view class="list-left-item">
                        <view class="desc">批号:</view>
                        <view class="left-item">
                            <uni-tag :text="item.batch" type="warning"></uni-tag>
                        </view>
                    </view>
                    <!-- <view class="list-left-item">
                        <view class="desc">重量:</view>
                        <view class="left-item">
                            <uni-tag :text="item.weight" type="warning"></uni-tag>
                        </view>
                    <!-- <view class="qty-badge">
                        <text class="qty-text">{{item.anfme}}</text>
                    </view> -->
                    <view class="list-left-item">
                        <view class="desc">数量:</view>
                        <view class="left-item">{{item.anfme}}</view>
                </view>
                <!-- 卡片内容 -->
                <view class="card-content">
                    <view class="info-row">
                        <view class="info-col">
                            <text class="info-label">品名</text>
                            <text class="info-value">{{item.maktx || '-'}}</text>
                        </view>
                    </view>
                    <view class="info-row">
                        <view class="info-col half">
                            <text class="info-label">规格</text>
                            <text class="info-value">{{item.specs || '-'}}</text>
                        </view>
                        <view class="info-col half">
                            <text class="info-label">批号</text>
                            <text class="info-value highlight">{{item.batch || '-'}}</text>
                        </view>
                    </view>
                    <view class="info-row">
                        <view class="info-col half">
                            <text class="info-label">数量</text>
                            <text class="info-value qty">{{item.anfme}}</text>
                        </view>
                    </view>
                </view>
                <view class="list-right">
                    <uni-icons type="compose" color="#9add8b" size="24" @click="revise(item,i)"></uni-icons>
                    <uni-icons type="trash" color="#f58a8a" size="24" @click="remove(item,i,'warn')"></uni-icons>
                <!-- 卡片操作 -->
                <view class="card-actions">
                    <view class="action-btn edit-btn" @click="revise(item, i)">
                        <uni-icons type="compose" size="18" color="#667eea"></uni-icons>
                        <text class="action-text">修改</text>
                    </view>
                    <view class="action-btn delete-btn" @click="remove(item, i, 'warn')">
                        <uni-icons type="trash" size="18" color="#f56c6c"></uni-icons>
                        <text class="action-text delete-text">移除</text>
                    </view>
                </view>
            </view>
        </scroll-view>
            <!-- 空状态 -->
            <view class="empty-state" v-if="dataList.length === 0">
                <uni-icons type="cart" size="60" color="#CCCCCC"></uni-icons>
                <text class="empty-text">暂无商品</text>
                <text class="empty-hint">请扫描物料码添加商品</text>
            </view>
            <!-- 底部占位 -->
            <view class="bottom-placeholder"></view>
        </view>
        <!-- 底部操作按钮 -->
        <view class="buttom">
            <button size="mini" @click="reset('warn')">重置</button>
            <button size="mini" type="primary" @click="combConfirm('warn')">组托</button>
        <view class="bottom-bar">
            <view class="btn-reset" @click="reset('warn')">
                <uni-icons type="refresh" size="18" color="#909399"></uni-icons>
                <text class="btn-text">重置</text>
            </view>
            <view class="btn-submit" :class="{'btn-disabled': dataList.length === 0}" @click="combConfirm('warn')">
                <uni-icons type="checkbox" size="18" color="#ffffff"></uni-icons>
                <text class="btn-text">确认组托</text>
            </view>
        </view>
        <!-- 弹窗 -->
        <!-- 弹窗区域 -->
        <!-- 修改数量 -->
        <view>
            <uni-popup ref="revise" type="dialog">
                <view class="popup">
                    <!-- 标题 -->
                    <view class="title">修改</view>
                    <view class="popup-item">
                        <view class="popup-item-left">编码:</view>
                        <view class="popup-item-right">
                            <input type="text" v-model="matnr" disabled="true"
                                style="background-color: #f7f7f7;padding: 0;color: #d5d5d5;">
                        </view>
        <uni-popup ref="revise" type="dialog">
            <view class="popup-card">
                <view class="popup-header">
                    <text class="popup-title">修改信息</text>
                </view>
                <view class="popup-body">
                    <view class="popup-row">
                        <text class="popup-label">编码</text>
                        <view class="popup-value disabled">{{editMatnr}}</view>
                    </view>
                    <view class="popup-item">
                        <view class="popup-item-left">批号:</view>
                        <view class="popup-item-right"><input type="text" v-model="batch"></view>
                    <view class="popup-row">
                        <text class="popup-label">批号</text>
                        <input class="popup-value input" type="text" v-model="batch" placeholder="输入批号" />
                    </view>
                    <!-- <view class="popup-item">
                        <view class="popup-item-left">重量:</view>
                        <view class="popup-item-right"><input type="text" v-model="weight"></view>
                    </view> -->
                    <view class="popup-item">
                        <view class="popup-item-left">数量:</view>
                        <view class="popup-item-right" style="border: none;justify-content: center;">
                    <view class="popup-row">
                        <text class="popup-label">数量</text>
                        <view class="popup-value number">
                            <uni-number-box :value="count" :step='0.01' :max="9999999" color="#747474" @change="changeValue" />
                        </view>
                    </view>
                    <view class="btn">
                        <view class="btn-left" @click="reviseClose">取消</view>
                        <view class="btn-right" @click="reviseConfirm()">修改</view>
                    </view>
                </view>
            </uni-popup>
        </view>
                <view class="popup-footer">
                    <view class="popup-btn cancel" @click="reviseClose">取消</view>
                    <view class="popup-btn confirm" @click="reviseConfirm()">确认</view>
                </view>
            </view>
        </uni-popup>
        <!-- 移除确认 -->
        <view>
            <!-- 提示窗示例 -->
            <uni-popup ref="alertDialog" type="dialog">
                <uni-popup-dialog :type="msgType" confirmText="移除" :title="title" :content="content"
                    @confirm="removeConfirm()" @close="removeClose"></uni-popup-dialog>
            </uni-popup>
        </view>
        <view>
            <!-- 提示信息弹窗 -->
            <uni-popup ref="message" type="message">
                <uni-popup-message :type="msgType1" :message="messageText" :duration="2000"></uni-popup-message>
            </uni-popup>
        </view>
        <uni-popup ref="alertDialog" type="dialog">
            <uni-popup-dialog :type="msgType" confirmText="移除" :title="title" :content="content"
                @confirm="removeConfirm()" @close="removeClose"></uni-popup-dialog>
        </uni-popup>
        <!-- 提示信息弹窗 -->
        <uni-popup ref="message" type="message">
            <uni-popup-message :type="msgType1" :message="messageText" :duration="2000"></uni-popup-message>
        </uni-popup>
        <!-- 确认组托 -->
        <view>
            <uni-popup ref="combConfirm" type="dialog">
                <uni-popup-dialog :type="msgType" cancelText="取消" confirmText="确认" :title="title" :content="content"
                    @confirm="comb" @close="combClose"></uni-popup-dialog>
            </uni-popup>
        </view>
        <uni-popup ref="combConfirm" type="dialog">
            <uni-popup-dialog :type="msgType" cancelText="取消" confirmText="确认" :title="title" :content="content"
                @confirm="comb" @close="combClose"></uni-popup-dialog>
        </uni-popup>
        <!-- 确认重置 -->
        <view>
            <uni-popup ref="resetConfirm" type="dialog">
                <uni-popup-dialog :type="msgType" cancelText="取消" confirmText="确认" :title="title" :content="content"
                    @confirm="resetConfirm" @close="resetClose"></uni-popup-dialog>
            </uni-popup>
        </view>
        <uni-popup ref="resetConfirm" type="dialog">
            <uni-popup-dialog :type="msgType" cancelText="取消" confirmText="确认" :title="title" :content="content"
                @confirm="resetConfirm" @close="resetClose"></uni-popup-dialog>
        </uni-popup>
    </view>
</template>
@@ -156,6 +178,7 @@
                count: 0,
                rowNum: '',
                matnr: '',
                editMatnr: '',
                batch: '',
                weight: '',
                msgType1: 'success',
@@ -180,6 +203,20 @@
            this.token = uni.getStorageSync('token');
        },
        methods: {
            clearBarcode() {
                this.barcode = '';
                this.barcodeFocus = false;
                setTimeout(() => {
                    this.barcodeFocus = true;
                }, 100);
            },
            clearMatnr() {
                this.matnr = '';
                this.matFocus = false;
                setTimeout(() => {
                    this.matFocus = true;
                }, 100);
            },
            isFrozen() {
                this.isFull = !this.isFull
                console.log(this.isFull);
@@ -224,13 +261,12 @@
            },
            // 搜索物料
            findMat() {
                let that = this
                let m = that.matnr.split(";")
                let matnr1 = m[0].slice(3)
                let that = this
                uni.request({
                    url: that.baseUrl + '/mat/auth',
                    data: {
                        matnr: matnr1
                        matnr: that.matnr
                    },
                    header: {
                        'token': uni.getStorageSync('token')
@@ -335,7 +371,7 @@
            },
            // 修改批号
            revise(item, i) {
                this.matnr = this.dataList[i].matnr
                this.editMatnr = this.dataList[i].matnr
                this.count = this.dataList[i].anfme
                this.batch = this.dataList[i].batch
                this.weight = this.dataList[i].weight
@@ -350,8 +386,8 @@
            remove(item, i, type) {
                this.removeNum  = i
                this.msgType = type
                this.title = '警告'
                this.content = '是否移除当前商品!'
                this.title = '确认移除'
                this.content = '是否移除该商品?'
                this.$refs.alertDialog.open(i)
            },
            // 确认移除
@@ -368,7 +404,7 @@
                this.dataList[this.rowNum].anfme = this.count
                this.dataList[this.rowNum].batch = this.batch
                this.dataList[this.rowNum].weight = this.weight
                this.matnr = ''
                this.editMatnr = ''
                this.messageText = "修改成功"
                this.messageToggle('success')
                this.$refs.revise.close()
@@ -380,9 +416,10 @@
                this.count = value
            },
            combConfirm(type) {
                if (this.dataList.length === 0) return;
                this.msgType = type
                this.title = '警告'
                this.content = '是否现在组托!'
                this.title = '确认组托'
                this.content = '确认将商品组托入库?'
                this.$refs.combConfirm.open()
            },
            combClose() {
@@ -424,9 +461,9 @@
                            that.resst();
                            that.messageText = "组托成功"
                            that.messageToggle('success')
                            const innerAudioContext = uni.createInnerAudioContext();
                            innerAudioContext.src = '/static/music/pakinOk.mp3';
                            innerAudioContext.play()
                            // const innerAudioContext = uni.createInnerAudioContext();
                            // innerAudioContext.src = '/static/music/pakinOk.mp3';
                            // innerAudioContext.play()
                        } else if (res.code == 403) {
                            that.messageText = res.msg
                            that.messageToggle('error')
@@ -444,13 +481,14 @@
            },
            reset(type) {
                this.msgType = type
                this.title = '警告'
                this.content = '是否重置!'
                this.title = '确认重置'
                this.content = '是否清空所有商品?'
                this.$refs.resetConfirm.open()
            },
            // 确认重置
            resetConfirm() {
                this.dataList = []
                this.barcode = ''
                this.messageText = "重置完成"
                this.messageToggle('success')
            },
@@ -471,56 +509,399 @@
<style>
    @import url('../../static/css/wms.css/wms.css');
    .code {
        width: 100%;
        position: fixed;
        min-height: 200rpx;
        background-color: #FFF;
        z-index: 10;
    page {
        height: 100%;
        background: #f5f7fa;
    }
    .item {
    .page-container {
        min-height: 100vh;
        background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
        padding-bottom: 110rpx;
        box-sizing: border-box;
    }
    /* 表单区域 */
    .form-section {
        background: #ffffff;
        padding: 12rpx 20rpx;
        box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
    }
    .form-item {
        display: flex;
        align-items: center;
        height: 100rpx;
        margin-left: 20rpx;
        border-bottom: 1px solid #DCDFE6;
        padding: 12rpx 0;
        border-bottom: 1rpx solid #f0f0f0;
    }
    .item input {
        height: 50rpx;
        line-height: 50rpx;
        /* font-family: PingFang SC; uniapp 默认字体不居中 */
        font-size: 36upx;
        font-family: PingFang SC;
        width: 55vw;
    .form-item:last-child {
        border-bottom: none;
    }
    .code-decs {
        width: 20vw;
        font-size: 18px;
    .form-label {
        display: flex;
        align-items: center;
        width: 140rpx;
        flex-shrink: 0;
    }
    .label-text {
        font-size: 26rpx;
        color: #303133;
        margin-left: 6rpx;
    }
    .form-input-wrap {
        flex: 1;
        display: flex;
        align-items: center;
        background: #f5f7fa;
        border-radius: 6rpx;
        padding: 0 16rpx;
        height: 60rpx;
    }
    .form-input {
        flex: 1;
        height: 60rpx;
        font-size: 26rpx;
        color: #303133;
    }
    .item-right {
        margin-left: auto;
        margin-right: 20rpx;
    /* 列表头部 */
    .list-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 16rpx 20rpx;
        background: #ffffff;
        margin-top: 12rpx;
        box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
    }
    .mat-list-title {
        height: 80rpx;
        line-height: 80rpx;
        width: 100%;
        background-color: white;
        position: fixed;
        margin-top: 200rpx;
        z-index: 9;
        /* border-top: 1px solid #DCDFE6; */
        text-align: center;
        box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.5);
    .header-left {
        display: flex;
        align-items: center;
    }
    .list:first-child {
        margin-top: 250rpx;
    .header-title {
        font-size: 28rpx;
        color: #303133;
        font-weight: 600;
    }
    .count-badge {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        border-radius: 16rpx;
        padding: 2rpx 12rpx;
        margin-left: 12rpx;
    }
    .count-text {
        font-size: 20rpx;
        color: #ffffff;
        font-weight: 500;
    }
    /* 商品列表 */
    .list-container {
        padding: 0 20rpx;
    }
    .mat-card {
        background: #ffffff;
        border-radius: 12rpx;
        margin-top: 12rpx;
        box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
        overflow: hidden;
    }
    .card-top {
        display: flex;
        align-items: center;
        padding: 14rpx 16rpx;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    }
    .card-index {
        width: 36rpx;
        height: 36rpx;
        background: rgba(255, 255, 255, 0.25);
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 22rpx;
        color: #ffffff;
        font-weight: 600;
        margin-right: 12rpx;
    }
    .mat-code-wrap {
        flex: 1;
    }
    .mat-code {
        font-size: 26rpx;
        color: #ffffff;
        font-weight: 600;
    }
    .qty-badge {
        background: rgba(255, 255, 255, 0.3);
        padding: 4rpx 14rpx;
        border-radius: 16rpx;
    }
    .qty-text {
        font-size: 24rpx;
        color: #ffffff;
        font-weight: 600;
    }
    /* 卡片内容 */
    .card-content {
        padding: 12rpx 16rpx;
    }
    .info-row {
        display: flex;
        margin-bottom: 8rpx;
    }
    .info-row:last-child {
        margin-bottom: 0;
    }
    .info-col {
        flex: 1;
    }
    .info-col.half {
        width: 50%;
        flex: none;
    }
    .info-label {
        font-size: 20rpx;
        color: #909399;
        display: block;
    }
    .info-value {
        font-size: 24rpx;
        color: #303133;
        display: block;
        margin-top: 2rpx;
    }
    .info-value.highlight {
        color: #667eea;
        font-weight: 500;
    }
    .info-value.qty {
        font-size: 28rpx;
        color: #303133;
        font-weight: 600;
    }
    /* 卡片操作 */
    .card-actions {
        display: flex;
        border-top: 1rpx solid #f0f0f0;
    }
    .action-btn {
        flex: 1;
        display: flex;
        align-items: center;
        justify-content: center;
        padding: 14rpx 0;
    }
    .edit-btn {
        border-right: 1rpx solid #f0f0f0;
    }
    .action-text {
        font-size: 24rpx;
        color: #667eea;
        margin-left: 6rpx;
    }
    .delete-text {
        color: #f56c6c;
    }
    /* 空状态 */
    .empty-state {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        padding: 80rpx 0;
    }
    .empty-text {
        font-size: 26rpx;
        color: #909399;
        margin-top: 16rpx;
    }
    .empty-hint {
        font-size: 22rpx;
        color: #c0c4cc;
        margin-top: 8rpx;
    }
    .bottom-placeholder {
        height: 20rpx;
    }
    /* 底部操作栏 */
    .bottom-bar {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        display: flex;
        padding: 16rpx 20rpx;
        background: #ffffff;
        box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
    }
    .btn-reset {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 160rpx;
        height: 72rpx;
        background: #f5f7fa;
        border-radius: 36rpx;
        margin-right: 16rpx;
    }
    .btn-reset .btn-text {
        font-size: 26rpx;
        color: #909399;
        margin-left: 6rpx;
    }
    .btn-submit {
        flex: 1;
        display: flex;
        align-items: center;
        justify-content: center;
        height: 72rpx;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        border-radius: 36rpx;
    }
    .btn-submit .btn-text {
        font-size: 28rpx;
        color: #ffffff;
        font-weight: 500;
        margin-left: 6rpx;
    }
    .btn-disabled {
        opacity: 0.6;
    }
    /* 弹窗样式 */
    .popup-card {
        width: 600rpx;
        background: #ffffff;
        border-radius: 16rpx;
        overflow: hidden;
    }
    .popup-header {
        padding: 24rpx;
        text-align: center;
        border-bottom: 1rpx solid #f0f0f0;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    }
    .popup-title {
        font-size: 30rpx;
        color: #ffffff;
        font-weight: 600;
    }
    .popup-body {
        padding: 24rpx;
    }
    .popup-row {
        display: flex;
        align-items: center;
        margin-bottom: 20rpx;
        height: 70rpx;
    }
    .popup-row:last-child {
        margin-bottom: 0;
    }
    .popup-label {
        width: 80rpx;
        font-size: 26rpx;
        color: #606266;
        flex-shrink: 0;
    }
    .popup-value {
        flex: 1;
        height: 70rpx;
        background: #f5f7fa;
        border-radius: 8rpx;
        padding: 0 16rpx;
        font-size: 26rpx;
        color: #303133;
        display: flex;
        align-items: center;
        box-sizing: border-box;
    }
    .popup-value.disabled {
        color: #909399;
        background: #f0f0f0;
    }
    .popup-value.input {
        padding: 0 16rpx;
    }
    .popup-value.number {
        justify-content: center;
        background: transparent;
        padding: 0;
    }
    .popup-footer {
        display: flex;
        border-top: 1rpx solid #f0f0f0;
    }
    .popup-btn {
        flex: 1;
        height: 90rpx;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 28rpx;
    }
    .popup-btn.cancel {
        color: #909399;
        border-right: 1rpx solid #f0f0f0;
    }
    .popup-btn.confirm {
        color: #667eea;
        font-weight: 600;
    }
</style>
pages/stock/stockQuery.vue
@@ -42,9 +42,9 @@
                    <view class="loc-info">
                        <text class="loc-no">{{item.locNo}}</text>
                    </view>
                    <view class="qty-badge">
                    <!-- <view class="qty-badge">
                        <text class="qty-text">{{item.anfme}}</text>
                    </view>
                    </view> -->
                </view>
                <view class="card-body">
                    <view class="info-row">
@@ -67,6 +67,12 @@
                        <view class="info-col half">
                            <text class="info-label">批号</text>
                            <text class="info-value batch">{{item.batch || '-'}}</text>
                        </view>
                    </view>
                    <view class="info-row">
                        <view class="info-col half">
                            <text class="info-label">数量</text>
                            <text class="info-value qty">{{item.anfme}}</text>
                        </view>
                    </view>
                </view>
@@ -132,22 +138,22 @@
            // 搜索物料
            findMat() {
                let that = this;
                let m = that.matnr.split(";");
                let matnr1 = m[0].slice(3);
                setTimeout(() => {
                    that.matnr = matnr1;
                }, 100);
                // let m = that.matnr.split(";");
                // let matnr1 = m[0].slice(3);
                // setTimeout(() => {
                //     that.matnr = matnr1;
                // }, 100);
            },
            search() {
                let that = this;
                that.loading = true;
                uni.request({
                    url: that.baseUrl + '/manLocDetl/list/auth',
                    url: that.baseUrl + '/locDetl/list/auth',
                    header: { 'token': uni.getStorageSync('token') },
                    data: {
                        curr: 1,
                        limit: 100,
                        loc_no: that.locNo,
                        locNo: that.locNo,
                        matnr: that.matnr
                    },
                    method: "GET",
@@ -288,7 +294,7 @@
    }
    
    .count-badge {
        background: linear-gradient(135deg, #F4C823 0%, #E6A817 100%);
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        border-radius: 16rpx;
        padding: 2rpx 12rpx;
        margin-left: 12rpx;
@@ -317,7 +323,7 @@
        display: flex;
        align-items: center;
        padding: 14rpx 16rpx;
        background: linear-gradient(135deg, #F4C823 0%, #E6A817 100%);
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    }
    
    .card-index {
@@ -393,12 +399,18 @@
    }
    
    .info-value.code {
        color: #F4C823;
        color: #303133;
        font-weight: 600;
    }
    
    .info-value.batch {
        color: #e6a23c;
        color: #667eea;
    }
    .info-value.qty {
        font-size: 28rpx;
        color: #303133;
        font-weight: 600;
    }
    
    /* 空状态 */