云
13 小时以前 829b168a2b9b8deaa23a5fcb023d7d3702a023f4
src/views/mobile/query.vue
@@ -75,7 +75,7 @@
function removeBag(index:number){bags.value.splice(index,1);if(bags.value.length<palletSize.value){thresholdPrompt.value=false;thresholdPassed.value=false;}}
function clearPending(){pending.value=undefined;sessionStorage.removeItem(storageKey);}
async function createAndBindPallet(){
  if(busy.value||pending.value||bags.value.length<palletSize.value)return;
  if(busy.value||pending.value||!bags.value.length)return;
  const ids=bags.value.map(b=>b.data.id!);
  const operation:PendingBind={kind:'auto-bags',ids,targetId:0,stage:'creating'};
  pending.value=operation;sessionStorage.setItem(storageKey,JSON.stringify(operation));busy.value=true;error.value='';thresholdPrompt.value=false;
@@ -137,11 +137,11 @@
      <h2 class="m-title">{{!target?(key==='bags'?'先扫描目标托盘':'先扫描目标批次'):(key==='bags'?'逐袋采集':'扫描待绑定托盘')}}</h2>
      <div v-if="target" class="m-panel"><p>目标:{{target.code}}</p><p class="m-muted">{{target.data.itemName||'未录入品种'}} · {{target.data.batchCode||'未绑定批次'}}</p></div>
    </template>
    <template v-if="autoPacking"><h2 class="m-title">扫描袋码生成托盘</h2><p class="m-muted">{{palletSize}} 袋型 · 已采集 {{bags.length}} 袋<span v-if="bags.length<palletSize">,还需 {{palletSize-bags.length}} 袋</span>。生成后将自动绑定本次采集的袋码。</p></template>
    <template v-if="autoPacking"><h2 class="m-title">扫描袋码生成托盘</h2><p class="m-muted">{{palletSize}} 袋为提醒节点 · 已采集 {{bags.length}} 袋。达到节点会提醒,可随时生成并绑定。</p></template>
    <Scanner :disabled="busy||thresholdPrompt" :continuous="autoPacking" @code="identify"/>
    <section v-if="autoPacking&&thresholdPrompt" class="m-panel" role="alert" aria-labelledby="pallet-threshold-title" aria-describedby="pallet-threshold-description">
      <h2 id="pallet-threshold-title" class="m-title">已扫描 {{palletSize}} 袋</h2>
      <p id="pallet-threshold-description">现在生成并绑定托盘码,或继续扫描更多袋码加入本托盘。</p>
      <h2 id="pallet-threshold-title" class="m-title">已达到 {{palletSize}} 袋提醒节点</h2>
      <p id="pallet-threshold-description">可立即生成并绑定托盘码,也可继续扫描更多袋码加入本托盘。</p>
      <div class="m-action-bar"><button class="m-primary" :disabled="busy" @click="createAndBindPallet">生成并绑定托盘码</button><button class="m-secondary" :disabled="busy" @click="thresholdPrompt=false;thresholdPassed=true">继续扫码绑定</button></div>
    </section>
    <div v-if="detail&&!binding" class="m-panel">
@@ -157,11 +157,11 @@
      <p v-if="key==='bags'" class="m-muted">已采集 {{bags.length}} 袋,尚未提交绑定</p>
      <article v-for="(bag,i) in bags" :key="bag.data.id" class="m-record"><p>{{bag.code}}</p><button class="m-detail-toggle" :disabled="busy" @click="removeBag(i)">移除</button></article>
      <p v-if="binding&&key==='pallets'&&detail">待绑定托盘:{{detail.code}}</p>
      <div v-if="autoPacking&&!thresholdPrompt" class="m-action-bar"><button class="m-primary" :disabled="busy||bags.length<palletSize" @click="createAndBindPallet">{{busy?'正在生成…':'生成并绑定托盘码'}}</button><button class="m-secondary" :disabled="busy" @click="stopAutoPack">取消本次扫码</button></div>
      <div v-if="autoPacking&&!thresholdPrompt" class="m-action-bar"><button class="m-primary" :disabled="busy||!bags.length" @click="createAndBindPallet">{{busy?'正在生成…':'生成并绑定托盘码'}}</button><button class="m-secondary" :disabled="busy" @click="stopAutoPack">取消本次扫码</button></div>
      <div v-else-if="binding" class="m-action-bar"><button class="m-primary" :disabled="busy||!target||(key==='bags'?!bags.length:!detail)" @click="submitBind">{{busy?'正在绑定…':'确认绑定'}}</button><button class="m-secondary" :disabled="busy" @click="binding=false;bags=[];target=undefined;detail=undefined">取消本次绑定</button></div>
    </template>
    <template v-else>
      <div v-if="canAutoPack" class="m-panel"><h2 class="m-title">扫描袋码自动生成托盘</h2><label class="m-field"><span>托盘码类型</span><select v-model.number="palletSize" :disabled="busy"><option :value="48">48 袋</option><option :value="100">100 袋</option></select></label><button class="m-primary" :disabled="busy" @click="startAutoPack">开始扫码生成托盘</button></div>
      <div v-if="canAutoPack" class="m-panel"><h2 class="m-title">扫描袋码自动生成托盘</h2><label class="m-field"><span>提醒节点</span><select v-model.number="palletSize" :disabled="busy"><option :value="48">48 袋</option><option :value="100">100 袋</option></select></label><p class="m-muted">仅作装托提醒,不限制生成和绑定袋数。</p><button class="m-primary" :disabled="busy" @click="startAutoPack">开始扫码生成托盘</button></div>
      <button v-if="canBind" class="m-primary" :disabled="busy" @click="startBind">{{key==='bags'?'开始袋码绑定托盘':'开始托盘绑定批次'}}</button>
      <h2 class="m-section-title">对象列表</h2>
      <form class="m-stack" @submit.prevent="load(true)"><label class="m-field"><span>按码值查询</span><input v-model="filter" placeholder="输入码值" /></label><button class="m-secondary" :disabled="busy">查询列表</button></form>