2 lines
9.9 KiB
JavaScript
2 lines
9.9 KiB
JavaScript
import{g as e,e as a,f as l,c as t,w as o,i as s,o as n,a as c,n as r,u,b as i,p as d,q as f,F as m,t as p,x as g,B as h,j as b,E as w,G as _,H as $,s as x,l as v,d as y,S as k,I as C,C as S,J as U,K as D,L as T,N as V}from"./index-D5I0Z0FC.js";import{_ as R}from"./ic_back.BKIFUCMS.js";import{o as j}from"./uni-app.es.w-mylrOk.js";import{c as N}from"./trunk.BzuUoYMJ.js";import{p as I}from"./api.CP5REl0r.js";import{_ as M}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./index.DRG29rml.js";function F(e,a){return new Promise(((l,t)=>{(async function(e,a){let l;if(a.startsWith("data:")){const e=await fetch(a);l=await e.blob()}else{const e=await fetch(a);l=await e.blob()}const t=await fetch(e,{method:"PUT",headers:{"Content-Type":"image/jpeg"},body:l});if(!t.ok)throw new Error(`COS上传失败: ${t.status}`)})(e,a).then(l).catch(t)}))}function E(e,a,l){return"string"==typeof a&&(a=[a]),new Promise((l=>{const t=setTimeout((()=>{console.warn("[watermark] timeout"),l(e)}),1e4);(function(e,a,l){return function(e,a){return new Promise(((l,t)=>{const o=new Image;o.crossOrigin="anonymous",o.onload=()=>{try{const e=o.naturalWidth,t=o.naturalHeight,s=document.createElement("canvas");s.width=e,s.height=t;const n=s.getContext("2d");n.drawImage(o,0,0,e,t),function(e,a,l,t,o){const s=Math.max(Math.floor(.03*a),14),n=Math.floor(.8*s),c=s+n,r=c*t.length+n;o?(e.setFillStyle("rgba(0,0,0,0.4)"),e.fillRect(0,l-r,a,r),e.setFillStyle("#ffffff"),e.setFontSize(s),t.forEach(((a,t)=>{e.fillText(a,n,l-r+n+c*t)}))):(e.fillStyle="rgba(0,0,0,0.4)",e.fillRect(0,l-r,a,r),e.fillStyle="#ffffff",e.font=`${s}px sans-serif`,e.textBaseline="middle",t.forEach(((a,t)=>{e.fillText(a,n,l-r+n/2+c*t+s/2)})))}(n,e,t,a,!1),l(s.toDataURL("image/jpeg",.9))}catch(e){t(e)}},o.onerror=t,o.src=e}))}(e,a)})(e,a).then((a=>{clearTimeout(t),l(a||e)})).catch((a=>{clearTimeout(t),console.warn("[watermark]",a),l(e)}))}))}const P=M({__name:"index",setup(M){const P=e().statusBarHeight||0,H=a([]),A=a(""),O=a(!1),G=a(100),L=a(100),z=V(),B=l({faultTime:"",personnel:"",faultReason:"",mileage:"",mileageCorrection:"",cableName:"",latitude:0,longitude:0,remark:""});function q(){b()}function J(){w({count:1,sourceType:["camera"],success(e){const a=e.tempFilePaths[0];if(H.value.push(a),1===H.value.length){const e=new Date,a=e.getFullYear(),l=String(e.getMonth()+1).padStart(2,"0"),t=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),s=String(e.getMinutes()).padStart(2,"0");B.faultTime=`${a}/${l}/${t} ${o}:${s}`}}})}function K(){_({title:"定位中...",mask:!0}),window.AMap?AMap.plugin("AMap.Geolocation",(()=>{new AMap.Geolocation({enableHighAccuracy:!0,timeout:1e4}).getCurrentPosition(((e,a)=>{$(),"complete"===e&&a.position?(B.longitude=a.position.lng,B.latitude=a.position.lat,x({title:"获取成功",icon:"success"})):(console.error("[GPS-H5] 高德定位失败:",a),x({title:"获取位置失败,请检查浏览器定位权限",icon:"none"}))}))})):($(),x({title:"地图SDK加载失败",icon:"none"}))}async function W(){if(0!==H.value.length)if(A.value){if(!O.value){O.value=!0,_({title:"处理图片中...",mask:!0});try{const a=Date.now();console.log("[fault-add] ====== 开始提交流程 ======"),console.log(`[fault-add] 照片数量: ${H.value.length}`),console.log("[fault-add] [步骤1] 开始水印处理...");const l=[`${B.faultTime} ${B.personnel}`,`故障原因:${B.faultReason||""}`,`经度:${B.longitude} 纬度:${B.latitude}`],t=[];for(let u=0;u<H.value.length;u++){const a=H.value[u],o=Date.now();try{const e=await E(a,l,z.proxy);t.push(e),console.log(`[fault-add] [步骤1] 第${u+1}张水印完成, 耗时${Date.now()-o}ms`),await D()}catch(e){console.warn(`[fault-add] [步骤1] 第${u+1}张水印失败, 使用原图, err:`,e),t.push(a)}}console.log(`[fault-add] [步骤1] 水印处理全部完成, 总耗时${Date.now()-a}ms`),console.log(`[fault-add] [步骤2] 请求COS预签名URL, count=${t.length}...`),_({title:"准备上传...",mask:!0});const o=Date.now(),s=await async function(e,a=".jpg"){const l=await I("/business/CosUpload/presignUrl",{count:e,ext:a},{timeout:12e4});if(200!==l.code)throw new Error(l.msg||"获取上传地址失败");return l.data}(t.length,".jpg");console.log(`[fault-add] [步骤2] 预签名URL获取成功, 耗时${Date.now()-o}ms, 数量:${s.length}`),console.log("[fault-add] [步骤3] 开始上传图片到COS...");const n=[];for(let e=0;e<t.length;e++){_({title:`上传图片 ${e+1}/${t.length}`,mask:!0});const a=Date.now();console.log(`[fault-add] [步骤3] 第${e+1}张开始上传, presignUrl: ${s[e].presignUrl.substring(0,80)}...`),await F(s[e].presignUrl,t[e]),console.log(`[fault-add] [步骤3] 第${e+1}张上传成功, 耗时${Date.now()-a}ms`),n.push(s[e].accessUrl)}console.log(`[fault-add] [步骤3] 全部图片上传完成, 总耗时${Date.now()-a}ms`),console.log("[fault-add] [步骤4] 提交故障表单..."),_({title:"提交中...",mask:!0});const c=Date.now(),r=await N({cableId:Number(A.value),faultTime:B.faultTime,personnel:B.personnel,faultReason:B.faultReason,mileage:B.mileage,mileageCorrection:B.mileageCorrection,latitude:Number(B.latitude),longitude:Number(B.longitude),remark:B.remark,imageUrls:n});console.log(`[fault-add] [步骤4] 表单提交返回, 耗时${Date.now()-c}ms, code:${r.code}, msg:${r.msg}`),200===r.code?(console.log(`[fault-add] ====== 提交成功, 总耗时${Date.now()-a}ms ======`),x({title:"提交成功",icon:"success"}),setTimeout((()=>{T({url:"/pages/fault-list/index?cableId="+A.value+"&cableName="+encodeURIComponent(B.cableName)})}),1500)):(console.warn(`[fault-add] 业务失败: code=${r.code}, msg=${r.msg}`),x({title:r.msg||"提交失败",icon:"none"}))}catch(e){console.error(`[fault-add] ====== 提交异常, 总耗时${Date.now()-t0}ms ======`),console.error("[fault-add] 错误详情:",JSON.stringify(e)),x({title:e.message||"网络异常,请重试",icon:"none"})}finally{$(),O.value=!1}}}else x({title:"所属光缆信息缺失,无法提交",icon:"none"});else x({title:"请至少拍摄一张照片",icon:"none"})}return j((e=>{e.cableId&&(A.value=e.cableId),e.cableName&&(B.cableName=decodeURIComponent(e.cableName))})),(e,a)=>{const l=v,b=y,w=s,_=k,$=C,x=S,D=U;return n(),t(w,{class:"fault-add-page"},{default:o((()=>[c(w,{class:"content"},{default:o((()=>[c(w,{class:"nav-bar",style:r({paddingTop:u(P)+"px"})},{default:o((()=>[c(w,{class:"nav-bar-inner"},{default:o((()=>[c(l,{class:"nav-icon",src:R,mode:"aspectFit",onClick:q}),c(b,{class:"nav-title"},{default:o((()=>[i("新增故障")])),_:1}),c(w,{class:"nav-icon-placeholder"})])),_:1})])),_:1},8,["style"]),c(w,{class:"photo-area"},{default:o((()=>[c(_,{class:"photo-scroll","scroll-x":""},{default:o((()=>[c(w,{class:"photo-list"},{default:o((()=>[c(w,{class:"photo-add-btn",onClick:J},{default:o((()=>[c(b,{class:"plus-icon"},{default:o((()=>[i("+")])),_:1}),c(b,{class:"add-text"},{default:o((()=>[i("点击拍摄")])),_:1})])),_:1}),(n(!0),d(m,null,f(H.value,((e,a)=>(n(),t(l,{class:"photo-thumb",key:a,src:e,mode:"aspectFill"},null,8,["src"])))),128))])),_:1})])),_:1})])),_:1}),c(w,{class:"form-area"},{default:o((()=>[c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("故障时间")])),_:1}),c(w,{class:"form-display"},{default:o((()=>[c(b,{class:"display-text"},{default:o((()=>[i(p(B.faultTime||"拍摄第一张照片后自动填充"),1)])),_:1})])),_:1})])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("人员")])),_:1}),c($,{class:"form-input",modelValue:B.personnel,"onUpdate:modelValue":a[0]||(a[0]=e=>B.personnel=e),placeholder:"请输入","placeholder-class":"input-placeholder"},null,8,["modelValue"])])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("故障原因")])),_:1}),c($,{class:"form-input",modelValue:B.faultReason,"onUpdate:modelValue":a[1]||(a[1]=e=>B.faultReason=e),placeholder:"请输入","placeholder-class":"input-placeholder"},null,8,["modelValue"])])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("表显故障里程")])),_:1}),c($,{class:"form-input",modelValue:B.mileage,"onUpdate:modelValue":a[2]||(a[2]=e=>B.mileage=e),placeholder:"请输入","placeholder-class":"input-placeholder"},null,8,["modelValue"])])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("表显里程矫正")])),_:1}),c($,{class:"form-input",modelValue:B.mileageCorrection,"onUpdate:modelValue":a[3]||(a[3]=e=>B.mileageCorrection=e),placeholder:"选填","placeholder-class":"input-placeholder"},null,8,["modelValue"])])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("所属光缆")])),_:1}),c(w,{class:"form-display"},{default:o((()=>[c(b,{class:"display-text"},{default:o((()=>[i(p(B.cableName),1)])),_:1})])),_:1})])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("地点")])),_:1}),c(w,{class:"location-btn",onClick:K},{default:o((()=>[c(b,{class:"location-btn-text"},{default:o((()=>[i("点击获取当前经纬度")])),_:1})])),_:1}),c(b,{class:"location-text"},{default:o((()=>[i("当前经度:"+p(B.longitude)+" 当前纬度:"+p(B.latitude),1)])),_:1})])),_:1}),c(w,{class:"form-group"},{default:o((()=>[c(b,{class:"form-label"},{default:o((()=>[i("备注")])),_:1}),c(x,{class:"form-textarea",modelValue:B.remark,"onUpdate:modelValue":a[4]||(a[4]=e=>B.remark=e),placeholder:"请输入","placeholder-class":"input-placeholder"},null,8,["modelValue"])])),_:1})])),_:1})])),_:1}),c(w,{class:"bottom-bar"},{default:o((()=>[c(w,{class:g(["submit-btn",{"submit-btn-disabled":O.value}]),onClick:h(W,["stop"])},{default:o((()=>[c(b,{class:"submit-btn-text"},{default:o((()=>[i(p(O.value?"提交中...":"提交故障"),1)])),_:1})])),_:1},8,["class"])])),_:1}),c(D,{"canvas-id":"watermarkCanvas",style:r({position:"fixed",left:"0px",top:"0px",width:G.value+"px",height:L.value+"px",opacity:0,pointerEvents:"none",zIndex:-1})},null,8,["style"])])),_:1})}}},[["__scopeId","data-v-ac9fac27"]]);export{P as default};
|