#
zhou zhou
2 天以前 8d3ebc610d048289f8ca4d8bc86ac11208a60fef
pages/inspect/check.vue
@@ -2,258 +2,294 @@
   <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>