| | |
| | | <view class="has-foot">
|
| | | <form>
|
| | | <view class="cu-form-group margin-top">
|
| | | <view class="title">容器号</view>
|
| | | <input placeholder="请扫描容器编码" v-model="isptCode" focus></input>
|
| | | <text class='cuIcon-search text-blue' @click="search"></text>
|
| | | <view class="title">托盘码</view>
|
| | | <input
|
| | | placeholder="请扫描托盘码"
|
| | | v-model="container"
|
| | | focus
|
| | | />
|
| | | </view>
|
| | |
|
| | | <view class="cu-form-group ">
|
| | | <view class="title">物料号</view>
|
| | | <input placeholder="请扫描物料编码" v-model="barcode"></input>
|
| | | <text class='cuIcon-search text-blue' @click="scrollTo"></text>
|
| | | <view class="cu-form-group">
|
| | | <view class="title">物料标签</view>
|
| | | <input
|
| | | placeholder="请扫描物料标签"
|
| | | v-model="barcode"
|
| | | />
|
| | | <text
|
| | | class="cuIcon-search text-blue"
|
| | | @click="search"
|
| | | ></text>
|
| | | </view>
|
| | | </form>
|
| | | <view class="flex solid-bottom padding-sm justify-between">
|
| | | <view class="text-blue">物料种类:{{ list.length }}</view>
|
| | | <view class="text-red">锁定数量:{{ allCount }}</view>
|
| | | </view>
|
| | | <view
|
| | | class="flex solid-bottom padding-sm justify-between"
|
| | | v-if="list.length"
|
| | | >
|
| | | <view class="text-blue">库位号:{{ list[0].locCode }}</view>
|
| | | </view>
|
| | |
|
| | | <view class="padding-lr margin-top-sm">
|
| | | <block v-for="(item, index) in list" :key="index">
|
| | | <view class="cu-list det menu sm-border margin-bottom-sm " :class="[item.matnrCode===barcode&&'act']"
|
| | | :ref="item.matnrCode+'ref'">
|
| | |
|
| | | <view class="cu-bar bg-white solid-bottom ">
|
| | | <view class="action">
|
| | | <view class="index">
|
| | | {{index+1}}
|
| | | </view>
|
| | | <view class="text-blue">
|
| | | {{`${item.maktx}`}}
|
| | | </view>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
|
| | | <view
|
| | | class="cu-list det menu sm-border padding"
|
| | | style="padding-bottom: 60px"
|
| | | >
|
| | | <block
|
| | | v-for="(item, index) in list"
|
| | | :key="index"
|
| | | >
|
| | | <view class="cu-bar bg-white solid-bottom margin-top-sm">
|
| | | <view class="action">
|
| | | <!-- <view class="index">
|
| | | {{index+1}}
|
| | | </view> -->
|
| | | <view class="text-blue">
|
| | | {{ `${item.maktx}` }}
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">ASN:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.asnCode}}</text>
|
| | | <!-- <view class="action">
|
| | | <view class="cu-tag radius bg-red">不合格</view>
|
| | | </view> -->
|
| | |
|
| | | <!-- <view class="action" v-if="!isconfirm">
|
| | | <text @click="remove(index)" class="cuIcon-close text-red" style="font-size: 24px;"></text>
|
| | | </view> -->
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">物料编码:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey">{{ item.matnrCode }}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">计划跟踪号:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey">{{ item.platWorkCode }}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">单号:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey">{{ item.asnCode }}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">供应商批次:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey">{{ item.splrBatch }}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">库存单位:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey">{{ item.stockUnit }}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <!-- <view class="cu-item">
|
| | | <view class="content">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">数量:</view>
|
| | | <input
|
| | | class="text-right"
|
| | | type="number"
|
| | | placeholder="请输入数量"
|
| | | v-model="item.receiptQty"
|
| | | focus
|
| | | />
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">供应商:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.splrName}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">供应商批次:</text>
|
| | | </view>
|
| | | <view class="action">
|
| | | <text class="text-grey ">{{item.splrBatch}}</text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <text class="text-black">收货数量: <text class="text-grey ">{{item.rcptQty}}</text></text>
|
| | | </view>
|
| | |
|
| | | <view class="content">
|
| | | <text class="text-black">送货数量: <text class="text-grey ">{{item.dlyQty}}</text></text>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">合格数量:</view>
|
| | | <input type="number" placeholder="请输入合格数量" v-model="item.safeQty"></input>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">不合格数量:</view>
|
| | | <input type="number" placeholder="请输入不合格数量" v-model="item.disQty"></input>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-item">
|
| | | <view class="content">
|
| | | <view class="cu-form-group padding-lr-0">
|
| | | <view class="title text-blue">质检结论:</view>
|
| | |
|
| | | <uni-data-select placement='top' v-model="item.isptResult" :localdata="range"
|
| | | placeholder="请输入质检结论"></uni-data-select>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="cu-form-group align-start">
|
| | | <view class="title text-blue">备注</view>
|
| | | <textarea v-model="item.memo" placeholder="请输入备注"></textarea>
|
| | | </view>
|
| | |
|
| | | <!-- <view class="cu-form-group">
|
| | | <uni-file-picker limit="9" title="照片"></uni-file-picker>
|
| | | </view> -->
|
| | |
|
| | |
|
| | | <view class="margin-top-sm flex">
|
| | | <uni-data-checkbox
|
| | | mode="tag"
|
| | | v-model="item.status"
|
| | | :localdata="types"
|
| | | ></uni-data-checkbox>
|
| | | </view>
|
| | | </block>
|
| | | </view>
|
| | |
|
| | | <view class="cu-bar btn-group foot">
|
| | | <button class="cu-btn text-blue line-blue shadow" @click="clear">清空</button>
|
| | | <button class="cu-btn bg-blue shadow-blur" @click="confirm">解锁</button>
|
| | | <button
|
| | | v-if="hasButtonPermission('reset')"
|
| | | class="cu-btn text-blue line-blue shadow"
|
| | | @click="clear"
|
| | | >
|
| | | 清空
|
| | | </button>
|
| | | <button
|
| | | v-if="hasButtonPermission('submit')"
|
| | | class="cu-btn bg-blue shadow-blur"
|
| | | @click="confirm"
|
| | | >
|
| | | 解锁
|
| | | </button>
|
| | | </view>
|
| | |
|
| | | <ConfirmModal
|
| | | :visible="showModal"
|
| | | @update:visible="showModal = $event"
|
| | | icon="check"
|
| | | title="解锁确认"
|
| | | message="是否确定解锁?"
|
| | | cancelText="不需要"
|
| | | confirmText="确定"
|
| | | :isconfirm="isconfirm"
|
| | | @cancel="handleNo"
|
| | | @confirm="handleYes"
|
| | | ></ConfirmModal>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import {
|
| | | request
|
| | | } from '../../common/request.js'
|
| | | import {
|
| | | mapState,
|
| | | mapMutations,
|
| | | mapActions,
|
| | | mapGetters
|
| | | } from 'vuex';
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | barcode: '',
|
| | | isptCode: '',
|
| | | list: [],
|
| | | range: [{
|
| | | value: '1',
|
| | | text: '合格'
|
| | | }, {
|
| | | value: '2',
|
| | | text: '不合格'
|
| | | }, {
|
| | | value: '3',
|
| | | text: '待定'
|
| | | }, {
|
| | | value: '4',
|
| | | text: '部分合格'
|
| | | }],
|
| | | }
|
| | | },
|
| | | computed: {
|
| | | ...mapState('user', ['dynamicFields']),
|
| | | },
|
| | | mounted() {},
|
| | | methods: {
|
| | | async search() {
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/inspect/query', {
|
| | | isptCode: this.isptCode,
|
| | | })
|
| | | if (code === 200) {
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | position: 'top'
|
| | | })
|
| | | import { request } from '../../common/request.js'
|
| | | import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue'
|
| | |
|
| | | export default {
|
| | | components: {
|
| | | ConfirmModal
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | barcode: '',
|
| | | container: '',
|
| | | list: [],
|
| | | range: [],
|
| | | isconfirm: false,
|
| | | types: [
|
| | | {
|
| | | text: '正常',
|
| | | value: 1
|
| | | },
|
| | | {
|
| | | text: '锁定',
|
| | | value: 0
|
| | | }
|
| | |
|
| | |
|
| | | },
|
| | | remove(index) {
|
| | | this.list.splice(index, 1);
|
| | | },
|
| | | clear() {
|
| | | this.list = []
|
| | | this.barcode = ''
|
| | | },
|
| | | scrollTo() {
|
| | | const ref = this.$refs[`${this.barcode}ref`][0];
|
| | | uni.pageScrollTo({
|
| | | scrollTop: ref.$el.offsetTop,
|
| | | duration: 300
|
| | | })
|
| | | },
|
| | | async confirm() {
|
| | | const {
|
| | | code,
|
| | | data,
|
| | | msg
|
| | | } = await request('/inspect/check/update', this.list)
|
| | | ],
|
| | | showModal: false,
|
| | | buttonPermissions: [] // 按钮权限列表
|
| | | }
|
| | | },
|
| | | computed: {
|
| | | allCount() {
|
| | | return this.list.reduce(
|
| | | (acc, row) => (row.status == 0 ? acc + 1 : acc),
|
| | | 0
|
| | | )
|
| | | }
|
| | | },
|
| | | mounted() {
|
| | | this.buttonPermissions = uni.getStorageSync('buttonPermissions') || []
|
| | | },
|
| | | methods: {
|
| | | // 检查按钮权限
|
| | | hasButtonPermission(route) {
|
| | | return this.buttonPermissions.includes(route)
|
| | | },
|
| | | handleNo() {
|
| | | this.showModal = false
|
| | | },
|
| | | async handleYes() {
|
| | | this.isconfirm = true
|
| | | try {
|
| | | const { code, data, msg } = await request(
|
| | | '/other/inspectConfirm2',
|
| | | {
|
| | | matnrList: this.list
|
| | | },
|
| | | 'post'
|
| | | )
|
| | | if (code === 200) {
|
| | | uni.showToast({
|
| | | title: '质检成功'
|
| | | title: '提交成功'
|
| | | })
|
| | | this.list = []
|
| | | this.barcode = ''
|
| | | this.container = ''
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: "none",
|
| | | icon: 'none',
|
| | | position: 'top'
|
| | | })
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | },
|
| | |
|
| | | } finally {
|
| | | this.showModal = false
|
| | | this.isconfirm = false
|
| | | }
|
| | | },
|
| | | // 关闭AGV确认弹窗
|
| | | closeModal() {
|
| | | this.showModal = false
|
| | | },
|
| | | async search() {
|
| | | const { code, data, msg } = await request(
|
| | | '/other/inspectList',
|
| | | {
|
| | | containerNo: this.container,
|
| | | matnrCode: this.barcode
|
| | | },
|
| | | 'post'
|
| | | )
|
| | | if (code === 200) {
|
| | | this.list = data
|
| | | } else {
|
| | | uni.showToast({
|
| | | title: msg,
|
| | | icon: 'none',
|
| | | position: 'top'
|
| | | })
|
| | | }
|
| | | },
|
| | | async confirm() {
|
| | | this.showModal = true
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style>
|
| | | .index {
|
| | | border: 1px solid #e54d42;
|
| | | color: #e54d42;
|
| | | border-radius: 50%;
|
| | | display: block;
|
| | | width: 50rpx;
|
| | | height: 50rpx;
|
| | | line-height: 48rpx;
|
| | | text-align: center;
|
| | | margin-right: 20rpx;
|
| | | font-size: 30rpx;
|
| | | }
|
| | | .index {
|
| | | border: 1px solid #e54d42;
|
| | | color: #e54d42;
|
| | | border-radius: 50%;
|
| | | display: block;
|
| | | width: 50rpx;
|
| | | height: 50rpx;
|
| | | line-height: 48rpx;
|
| | | text-align: center;
|
| | | margin-right: 20rpx;
|
| | | font-size: 30rpx;
|
| | | }
|
| | |
|
| | | .text-blue {
|
| | | color: #0081ff !important;
|
| | | .text-blue {
|
| | | color: #0081ff !important;
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | .act {
|
| | | border: 1px solid #e54d42;
|
| | | }
|
| | |
|
| | | .item {
|
| | | position: relative;
|
| | | display: flex;
|
| | | min-height: 80upx;
|
| | | align-items: center;
|
| | | }
|
| | |
|
| | | .uni-file-picker {
|
| | | width: 100%;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | |
|
| | | .uni-select__selector {
|
| | | z-index: 999;
|
| | | }
|
| | | </style> |
| | | .item {
|
| | | position: relative;
|
| | | display: flex;
|
| | | min-height: 80upx;
|
| | | align-items: center;
|
| | | }
|
| | | </style>
|