index.dRjy-EqS.js 14 KB

123
  1. import{a as re,r as x,aj as k,at as ce,c as U,o as P,S as n,a8 as de,K as _,b as C,P as S,M as G,L as ve,a7 as fe,u as pe,Q as B,R as j,a9 as me,J as T,t as ge}from"./vue.D1BjjNmv.js";import{G as N,S as _e,a as he,C as ye,b as H}from"./api.ClvfjQyB.js";import{s as be,E as c}from"./index.DF96ZD82.js";import{_ as we}from"./_plugin-vue_export-helper.DlAUqK2U.js";const ke={class:"form-row"},Ce={key:0,class:"pending-list",style:{"margin-top":"15px","margin-bottom":"15px"}},xe={class:"pending-header"},Ve={class:"pending-title"},Se={class:"pending-actions"},Re={class:"pending-tags"},De={class:"dialog-footer"},$e=re({__name:"index",emits:["completed"],setup(Pe,{expose:J,emit:Q}){const z=Q,I=x(!1),$=x(""),h=x(""),R=x([]),b=x(null),D=x(!1),V=x(null),f=x([]),L=x(!1),F=x(!1),d=x({rfidLength:24,rfidPrefix:"E280",separator:" ",customSeparator:"",autoSplitSticky:!0,allowDuplicate:!0}),W=async(t,e)=>{if(console.log("checkNo::::::",t,"id::::::",e),h.value=t,e!=null)b.value=e;else try{const a=await N();if((a==null?void 0:a.code)===2e3){const i=A(t,a.data);b.value=(i==null?void 0:i.id)??null,console.log("通过 check_no 查询到的 id::",b.value)}}catch(a){console.error("查询盘点记录失败:",a),b.value=null}},q=async()=>{await ge(),setTimeout(()=>{if(!V.value||D.value)return;let t=null;if(typeof V.value.focus=="function"){V.value.focus();return}V.value.input?t=V.value.input:V.value.$el?t=V.value.$el.querySelector("input"):V.value instanceof HTMLElement&&(t=V.value.querySelector("input")),t&&(t.focus(),setTimeout(()=>{t==null||t.select()},10))},100)},X=()=>{d.value={rfidLength:24,rfidPrefix:"E280",separator:" ",customSeparator:"",autoSplitSticky:!0,allowDuplicate:!0},c.success("已重置为默认规则")},Y=()=>{if(d.value.rfidLength<1){c.warning("RFID标签长度必须大于0");return}if(d.value.separator==="custom"&&!d.value.customSeparator){c.warning("请设置自定义分隔符");return}F.value=!1,c.success("读取规则已保存")},Z=()=>{$.value="",R.value=[],b.value=null,f.value=[],L.value=!1},ee=()=>{q()},A=(t,e)=>(console.log("lists::::",e),Array.isArray(e)?e.find(a=>a.check_no===t):null),K=t=>{t.forEach(e=>{const a=R.value.findIndex(i=>i.device_code===e.device_code&&i.check_no===e.check_no);a!==-1?R.value[a]={...e,scanned_quantity:e.scanned_quantity||1}:R.value.push({...e,scanned_quantity:e.scanned_quantity||1})})},E=(t,e=!1)=>{if(!t)return[];const{rfidLength:a,rfidPrefix:i,autoSplitSticky:p}=d.value;if(!p)return[t];if(e){if(t.length<=a)return[t];if(t.length>a*2&&t.length%a===0){if(i&&i.trim()){const y=i.length,g=a-y;if(g>0)try{const r=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`${r}[0-9A-F]{${g}}`,"gi"),s=t.match(l);if(s&&s.length>1)return s}catch(r){console.warn("RFID前缀正则表达式构建失败:",r)}}const m=[];for(let y=0;y<t.length;y+=a){const g=t.substring(y,y+a);g.trim()&&m.push(g)}if(m.length>1)return m}return[t]}if(i&&i.trim()){const m=i.length,y=a-m;if(y>0)try{const g=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`${g}[0-9A-F]{${y}}`,"gi"),l=t.match(r);if(l&&l.length>1)return l}catch(g){console.warn("RFID前缀正则表达式构建失败:",g)}}if(t.length>a&&t.length%a===0){const m=[];for(let y=0;y<t.length;y+=a){const g=t.substring(y,y+a);g.trim()&&m.push(g)}if(m.length>1)return m}return[t]},te=t=>{const e=t.trim();if(!e)return[];const{separator:a,customSeparator:i}=d.value,p=a==="custom"?i:a;if(console.log("splitRFIDCodes - 输入:",e,"分隔符配置:",a,"实际分隔符:",p,"分隔符类型:",typeof p,"长度:",p==null?void 0:p.length),/[\r\n]/.test(e)){const r=e.split(/[\r\n]+/).filter(l=>l.trim());if(console.log("检测到换行符,分割结果:",r),r.length>1){const l=[];for(const s of r){const o=s.trim();if(o){const u=E(o,!0);l.push(...u)}}return console.log("换行符分割最终结果:",l),l.length>0?l:[e]}}if(p&&p.trim()!==""&&p!==`
  2. `&&p!==`\r
  3. `&&p!=="\r"){let r=[],l=!1;if(p===" ")l=e.includes(" "),l&&(r=e.split(/\t+/).filter(s=>s.trim()));else if(l=e.includes(p),l)try{const s=p.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(s+"+","g");r=e.split(o).filter(u=>u.trim())}catch(s){console.warn("分隔符正则表达式构建失败,使用字符串分割:",s),r=e.split(p).filter(o=>o.trim())}if(l&&r.length>0){const s=[];for(const o of r){const u=o.trim();if(u){const w=E(u,!0);s.push(...w)}}return console.log("配置分隔符分割最终结果:",s),s.length>0?s:[e]}}if(/\s/.test(e)){const r=e.split(/\s+/).filter(l=>l.trim());if(console.log("检测到空格,分割结果:",r),r.length>1){const l=[];for(const s of r){const o=s.trim();if(o){const u=E(o,!0);l.push(...u)}}return console.log("空格分割最终结果:",l),l.length>0?l:[e]}}const g=E(e);return console.log("粘连处理结果:",g),g},M=()=>{if(!$.value||!h.value){c.warning("请输入设备编号");return}const t=$.value.trim();if(!t){c.warning("设备编号不能为空");return}const e=te(t);if(console.log("分割结果:",e,"输入:",t,"配置:",d.value),e.length===0){c.warning("未识别到有效的设备编号");return}let a=e;if(!d.value.allowDuplicate&&(a=e.filter(i=>!f.value.includes(i)),a.length<e.length)){const i=e.length-a.length;c.warning(`已过滤 ${i} 个重复的设备编号(与待提交列表中的编码重复)`)}if(a.length===0){c.warning("没有可添加的设备编号(可能全部重复)");return}f.value.push(...a),e.length>1?c.success(`已自动分割并添加 ${a.length} 个设备编号`):c.success("已添加到待提交列表"),$.value="",q()},le=t=>{f.value.splice(t,1)},ae=()=>{f.value=[]},oe=async()=>{var a,i,p,m,y,g;if(f.value.length===0||!h.value){c.warning("没有待提交的设备编号");return}D.value=!0;const t=[],e=[];try{const r={check_no:h.value,device_codes:[...f.value]};try{const l=await _e(r);if((l==null?void 0:l.code)===2e3){const s=await N();if((s==null?void 0:s.code)===2e3){const o=A(h.value,s.data);b.value=(o==null?void 0:o.id)??null,l.data&&Array.isArray(l.data)?l.data.forEach(u=>{t.push({device_code:u.device_code||u.deviceCode,check_no:h.value,productName:u.productName||"未知商品",id:(o==null?void 0:o.id)||0,status_display:(o==null?void 0:o.status_display)||"",device_name:u.device_name||u.deviceName||"未知设备",device_category:u.device_category||u.deviceCategory||"未知分类",scanned_quantity:u.scanned_quantity||0})}):(a=l.data)!=null&&a.success_codes&&Array.isArray(l.data.success_codes)?(l.data.success_codes.forEach(u=>{t.push({device_code:u,check_no:h.value,productName:"未知商品",id:(o==null?void 0:o.id)||0,status_display:(o==null?void 0:o.status_display)||"",device_name:"未知设备",device_category:"未知分类",scanned_quantity:1})}),(i=l.data)!=null&&i.fail_codes&&Array.isArray(l.data.fail_codes)&&e.push(...l.data.fail_codes)):f.value.forEach(u=>{t.push({device_code:u,check_no:h.value,productName:"未知商品",id:(o==null?void 0:o.id)||0,status_display:(o==null?void 0:o.status_display)||"",device_name:"未知设备",device_category:"未知分类",scanned_quantity:1})}),K(t),t.length>0&&e.length===0?(f.value=[],c.success("提交成功")):t.length>0&&e.length>0?(f.value=e,c.warning(`成功提交 ${t.length} 个,失败 ${e.length} 个`)):(f.value=e,c.error(`提交失败,共 ${e.length} 个设备编号`));return}}else console.warn("批量提交失败,尝试逐个提交:",l)}catch(l){console.warn("批量提交接口不可用,使用逐个提交方式:",l)}for(const l of f.value)try{const s={device_code:l,check_no:h.value},o=await he(s);if((o==null?void 0:o.code)===2e3){const u=await N();if((u==null?void 0:u.code)===2e3){const w=A(h.value,u.data);t.push({...s,productName:((p=o.data)==null?void 0:p.productName)||"未知商品",id:(w==null?void 0:w.id)||0,status_display:(w==null?void 0:w.status_display)||"",device_name:((m=o.data)==null?void 0:m.device_name)||"未知设备",device_category:((y=o.data)==null?void 0:y.device_category)||"未知分类",scanned_quantity:((g=o.data)==null?void 0:g.scanned_quantity)||1}),b.value=(w==null?void 0:w.id)??null}}else e.push(l)}catch(s){console.error(`提交设备编号 ${l} 失败:`,s),e.push(l)}K(t),t.length>0&&e.length===0?(f.value=[],c.success(`成功提交 ${t.length} 个设备编号`)):t.length>0&&e.length>0?(f.value=e,c.warning(`成功提交 ${t.length} 个,失败 ${e.length} 个`)):(f.value=e,c.error(`提交失败,共 ${e.length} 个设备编号`))}finally{D.value=!1,q()}},ne=async()=>{if(!h.value)return;const t=await ye({check_no:h.value});(t==null?void 0:t.code)===2e3&&(c.success("完成盘点!"),L.value=!0,I.value=!1,z("completed"))},se=async()=>{if(!b.value)return;const t=await H(b.value);(t==null?void 0:t.code)===2e3&&(c.success("取消盘点成功!"),L.value=!0,I.value=!1,z("completed"))};J({visible:I,setCheckNo:W});const ie=async()=>{if(L.value){L.value=!1,h.value="",f.value=[],R.value=[],b.value=null;return}console.log("currentRecordId.value::",b.value,"check_no.value::",h.value);let t=b.value;if(!t&&h.value)try{const e=await N();if((e==null?void 0:e.code)===2e3){const a=A(h.value,e.data);t=(a==null?void 0:a.id)??null,console.log("通过 check_no 查询到的 id::",t)}}catch(e){console.error("查询盘点记录失败:",e)}if(t)try{const e=await H(t);(e==null?void 0:e.code)===2e3?c.success("取消盘点成功!"):c.warning((e==null?void 0:e.msg)||"取消盘点失败")}catch(e){console.error("取消盘点失败:",e),c.error("取消盘点失败")}h.value="",f.value=[],R.value=[],b.value=null};return(t,e)=>{const a=k("el-input"),i=k("el-button"),p=k("el-tag"),m=k("el-table-column"),y=k("el-table"),g=k("el-dialog"),r=k("el-input-number"),l=k("el-form-item"),s=k("el-option"),o=k("el-select"),u=k("el-switch"),w=k("el-form"),ue=ce("loading");return P(),U(j,null,[n(g,{modelValue:I.value,"onUpdate:modelValue":e[3]||(e[3]=v=>I.value=v),title:"开始盘点",width:"800px",onOpen:Z,onOpened:ee,onClose:ie},de({default:_(()=>[C("div",null,[C("div",ke,[n(a,{ref_key:"deviceCodeInputRef",ref:V,modelValue:$.value,"onUpdate:modelValue":e[0]||(e[0]=v=>$.value=v),placeholder:"设备编号(支持扫码枪/RFID批量录入)",autosize:{minRows:2,maxRows:4},type:"textarea",disabled:D.value},null,8,["modelValue","disabled"]),n(a,{modelValue:h.value,"onUpdate:modelValue":e[1]||(e[1]=v=>h.value=v),placeholder:"盘点编号",onKeyup:fe(M,["enter"]),disabled:!0},null,8,["modelValue"]),n(i,{type:"success",onClick:M,disabled:D.value},{default:_(()=>e[11]||(e[11]=[S("添加到待提交列表")])),_:1},8,["disabled"]),n(i,{type:"info",icon:pe(be),onClick:e[2]||(e[2]=v=>F.value=!0),disabled:D.value},{default:_(()=>e[12]||(e[12]=[S("读取规则")])),_:1},8,["icon","disabled"])]),f.value.length>0?(P(),U("div",Ce,[C("div",xe,[C("div",Ve,"待提交设备编号 ("+B(f.value.length)+"个):",1),C("div",Se,[n(i,{type:"primary",onClick:oe,loading:D.value,size:"small"},{default:_(()=>[S("批量提交("+B(f.value.length)+")",1)]),_:1},8,["loading"]),n(i,{type:"text",size:"small",onClick:ae},{default:_(()=>e[13]||(e[13]=[S("清空")])),_:1})])]),C("div",Re,[(P(!0),U(j,null,me(f.value,(v,O)=>(P(),T(p,{key:O,closable:"",onClose:Ie=>le(O),style:{"margin-right":"8px","margin-bottom":"8px"}},{default:_(()=>[S(B(v),1)]),_:2},1032,["onClose"]))),128))])])):G("",!0),ve((P(),T(y,{data:R.value,style:{"margin-top":"20px"}},{default:_(()=>[n(m,{type:"index",label:"序号",width:"60"}),n(m,{prop:"device_code",label:"设备编号"}),n(m,{prop:"device_name",label:"设备名称"}),n(m,{prop:"device_category",label:"设备分类"}),n(m,{prop:"check_no",label:"盘点编号"}),n(m,{prop:"scanned_quantity",label:"盘点数量"}),n(m,{prop:"status_display",label:"状态"})]),_:1},8,["data"])),[[ue,D.value]])])]),_:2},[R.value.length>0?{name:"footer",fn:_(()=>[C("div",De,[n(i,{onClick:se,disabled:!b.value},{default:_(()=>e[14]||(e[14]=[S("取消盘点")])),_:1},8,["disabled"]),n(i,{type:"primary",onClick:ne,disabled:!h.value},{default:_(()=>e[15]||(e[15]=[S("完成盘点")])),_:1},8,["disabled"])])]),key:"0"}:void 0]),1032,["modelValue"]),n(g,{modelValue:F.value,"onUpdate:modelValue":e[10]||(e[10]=v=>F.value=v),title:"设置读取规则",width:"600px"},{footer:_(()=>[n(i,{onClick:X},{default:_(()=>e[21]||(e[21]=[S("重置默认")])),_:1}),n(i,{type:"primary",onClick:Y},{default:_(()=>e[22]||(e[22]=[S("保存")])),_:1})]),default:_(()=>[n(w,{model:d.value,"label-width":"140px"},{default:_(()=>[n(l,{label:"RFID标签长度"},{default:_(()=>[n(r,{modelValue:d.value.rfidLength,"onUpdate:modelValue":e[4]||(e[4]=v=>d.value.rfidLength=v),min:1,max:100,style:{width:"100%"}},null,8,["modelValue"]),e[16]||(e[16]=C("div",{class:"form-tip"},"RFID标签的固定长度(字符数)",-1))]),_:1}),n(l,{label:"RFID标签前缀"},{default:_(()=>[n(a,{modelValue:d.value.rfidPrefix,"onUpdate:modelValue":e[5]||(e[5]=v=>d.value.rfidPrefix=v),placeholder:"例如:E280",style:{width:"100%"}},null,8,["modelValue"]),e[17]||(e[17]=C("div",{class:"form-tip"},"RFID标签的前缀(可选,留空则不限制前缀)",-1))]),_:1}),n(l,{label:"分隔符"},{default:_(()=>[n(o,{modelValue:d.value.separator,"onUpdate:modelValue":e[6]||(e[6]=v=>d.value.separator=v),placeholder:"选择分隔符",style:{width:"100%"}},{default:_(()=>[n(s,{label:"空格",value:" "}),n(s,{label:"逗号",value:","}),n(s,{label:"分号",value:";"}),n(s,{label:"制表符",value:"\\t"}),n(s,{label:"回车换行",value:"\\n"}),n(s,{label:"自定义",value:"custom"})]),_:1},8,["modelValue"]),d.value.separator==="custom"?(P(),T(a,{key:0,modelValue:d.value.customSeparator,"onUpdate:modelValue":e[7]||(e[7]=v=>d.value.customSeparator=v),placeholder:"请输入自定义分隔符",style:{width:"100%","margin-top":"10px"}},null,8,["modelValue"])):G("",!0),e[18]||(e[18]=C("div",{class:"form-tip"},"用于分割多个设备编号的分隔符",-1))]),_:1}),n(l,{label:"自动分割粘连"},{default:_(()=>[n(u,{modelValue:d.value.autoSplitSticky,"onUpdate:modelValue":e[8]||(e[8]=v=>d.value.autoSplitSticky=v)},null,8,["modelValue"]),e[19]||(e[19]=C("div",{class:"form-tip"},"是否自动分割粘连在一起的RFID标签",-1))]),_:1}),n(l,{label:"允许重复添加"},{default:_(()=>[n(u,{modelValue:d.value.allowDuplicate,"onUpdate:modelValue":e[9]||(e[9]=v=>d.value.allowDuplicate=v)},null,8,["modelValue"]),e[20]||(e[20]=C("div",{class:"form-tip"},"是否允许添加重复的设备编号",-1))]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])],64)}}}),Ne=we($e,[["__scopeId","data-v-4c4a29a3"]]);export{Ne as default};