| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/QC/SJ/BarcodeScan", |
| | | "style": { |
| | | "navigationBarTitleText": "æ«ç ", |
| | | "enablePullDownRefresh": false, |
| | | "app-plus": { |
| | | "titleNView": false |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/QC/SJ/BarcodeScanPlus", |
| | | "style": { |
| | | "navigationBarTitleText": "", |
| | | "enablePullDownRefresh": false, |
| | | "app-plus": { |
| | | "titleNView": false |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/QC/XJ/List", |
| | | "style": { |
| | | "enablePullDownRefresh": true, |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="barcode-container"> |
| | | <!-- nvue 宿¹æ«ç ç»ä»¶ --> |
| | | <barcode |
| | | ref="barcode" |
| | | class="barcode-view" |
| | | :autostart="false" |
| | | background="#000000" |
| | | frameColor="#007aff" |
| | | scanbarColor="#007aff" |
| | | :filters="barcodeFilters" |
| | | @marked="onBarcodeMarked" |
| | | @error="onBarcodeError" |
| | | /> |
| | | |
| | | <!-- 顶鍿 颿 --> |
| | | <view class="header"> |
| | | <text class="header-title">{{ scanTitle }}</text> |
| | | <text class="header-close" @click="closeScan">â</text> |
| | | </view> |
| | | |
| | | <!-- åºé¨æ§å¶æ --> |
| | | <view class="footer"> |
| | | <view class="controls"> |
| | | <view class="control-btn" @click="toggleLight"> |
| | | <text class="btn-text">{{ lightOn ? 'å
³é' : 'æå¼' }}éªå
ç¯</text> |
| | | </view> |
| | | <view class="control-btn" @click="manualInput"> |
| | | <text class="btn-text">â¨ï¸ æå¨è¾å
¥</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="tips"> |
| | | <text class="tips-text">ð¡ å°æ¡ç å¯¹åæ«ææ¡å
ï¼ä¿æ15-30cmè·ç¦»</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | scanTitle: 'SN确认', |
| | | lightOn: false, |
| | | // å
³é®ä¼åï¼åªå¯ç¨å·¥ä¸å¸¸ç¨çæ¡ç ç±»åï¼æé«è¯å«é度åæåç |
| | | barcodeFilters: [ |
| | | 8, // CODE39 - å·¥ä¸å¸¸ç¨ |
| | | 10, // CODE128 - 工䏿叏ç¨ï¼æ¯æç¹æ®å符ï¼/ - _ çï¼ |
| | | ] |
| | | }; |
| | | }, |
| | | |
| | | onLoad(options) { |
| | | // è·åæ«ç æ é¢ |
| | | if (options.title) { |
| | | this.scanTitle = decodeURIComponent(options.title); |
| | | } |
| | | }, |
| | | |
| | | onReady() { |
| | | console.log('BarcodeScan 页é¢åå¤å®æ'); |
| | | // 页é¢å è½½å®æåå»¶è¿å¯å¨æ«ç ï¼çå¾
çé¢å®å
¨æ¸²æï¼ |
| | | setTimeout(() => { |
| | | console.log('åå¤å¯å¨æ«ç ...'); |
| | | this.startScan(); |
| | | }, 500); |
| | | }, |
| | | |
| | | onUnload() { |
| | | // 页é¢å¸è½½æ¶åæ¶æ«ç |
| | | this.cancelScan(); |
| | | }, |
| | | |
| | | methods: { |
| | | // å¼å§æ«ç |
| | | startScan() { |
| | | console.log('startScan 被è°ç¨'); |
| | | |
| | | if (!this.$refs.barcode) { |
| | | console.error('é误ï¼barcode ç»ä»¶å¼ç¨ä¸åå¨'); |
| | | uni.showToast({ |
| | | title: 'æ«ç ç»ä»¶åå§å失败', |
| | | icon: 'none' |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | console.log('å¼å§æ«ç - å¯ç¨ç å¶: CODE39, CODE128'); |
| | | this.$refs.barcode.start({ |
| | | conserve: false, // ä¸ä¿åæªå¾ |
| | | vibrate: true, // éå¨æç¤º |
| | | sound: 'default', // ææ¾æç¤ºé³ |
| | | filename: '' // ä¸ä¿åæä»¶ |
| | | }); |
| | | console.log('æ«ç å·²å¯å¨'); |
| | | } catch (error) { |
| | | console.error('å¯å¨æ«ç 失败:', error); |
| | | uni.showModal({ |
| | | title: 'æ«ç å¯å¨å¤±è´¥', |
| | | content: 'å¯è½åå ï¼\n1. ç¸æºæéæªæäº\n2. ç¸æºè¢«å
¶ä»åºç¨å ç¨\n\nè¯·æ£æ¥ç¸æºæéæéå¯åºç¨', |
| | | confirmText: 'æå¨è¾å
¥', |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | this.manualInput(); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // åæ¶æ«ç |
| | | cancelScan() { |
| | | if (this.$refs.barcode) { |
| | | this.$refs.barcode.cancel(); |
| | | } |
| | | }, |
| | | |
| | | // 忢éªå
ç¯ |
| | | toggleLight() { |
| | | this.lightOn = !this.lightOn; |
| | | if (this.$refs.barcode) { |
| | | this.$refs.barcode.setFlash(this.lightOn); |
| | | } |
| | | }, |
| | | |
| | | // æ«ç æååè° |
| | | onBarcodeMarked(e) { |
| | | console.log('æ«ç æå - åå§æ°æ®:', e); |
| | | console.log('æ«ç æå - 宿´detail:', e.detail); |
| | | |
| | | const result = e.detail.message; // æ«ç ç»æ |
| | | const type = e.detail.code; // æ¡ç ç±»å |
| | | |
| | | console.log('æ«ç ç»æ:', result); |
| | | console.log('æ¡ç ç±»å:', type); |
| | | console.log('ç»æé¿åº¦:', result ? result.length : 0); |
| | | |
| | | if (result) { |
| | | // å»é¤é¦å°¾ç©ºæ ¼ |
| | | const cleanResult = result.trim(); |
| | | console.log('æ¸
çåç»æ:', cleanResult); |
| | | console.log('æ¸
çåé¿åº¦:', cleanResult.length); |
| | | |
| | | // éå¨åé¦ |
| | | uni.vibrateShort(); |
| | | |
| | | // æ¾ç¤ºæåæç¤º |
| | | uni.showToast({ |
| | | title: 'æ«ç æå', |
| | | icon: 'success', |
| | | duration: 800 |
| | | }); |
| | | |
| | | // å»¶è¿å
³éï¼è®©ç¨æ·çå°æç¤º |
| | | setTimeout(() => { |
| | | // è¿åä¸ä¸é¡µå¹¶ä¼ éæ«ç ç»æ |
| | | const pages = getCurrentPages(); |
| | | const prevPage = pages[pages.length - 2]; |
| | | if (prevPage) { |
| | | // è°ç¨ä¸ä¸é¡µçåè°æ¹æ³ |
| | | if (prevPage.$vm && prevPage.$vm.onScanSuccess) { |
| | | console.log('åå¤ä¼ éç»æå°ä¸ä¸é¡µ:', cleanResult); |
| | | prevPage.$vm.onScanSuccess(cleanResult); |
| | | } else { |
| | | console.error('ä¸ä¸é¡µæ²¡æ onScanSuccess æ¹æ³'); |
| | | } |
| | | } |
| | | |
| | | // å
³éå½åé¡µé¢ |
| | | uni.navigateBack(); |
| | | }, 800); |
| | | } else { |
| | | console.error('è¦åï¼æ«ç ç»æä¸ºç©º'); |
| | | uni.showToast({ |
| | | title: 'æ«ç ç»æä¸ºç©ºï¼è¯·éè¯', |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // æ«ç 失败åè° |
| | | onBarcodeError(e) { |
| | | console.error('æ«ç é误 - 详ç»ä¿¡æ¯:', e); |
| | | console.error('é误对象:', JSON.stringify(e)); |
| | | |
| | | // æ ¹æ®é误类åç»åºä¸åæç¤º |
| | | let errorMsg = 'æ«ç 失败'; |
| | | if (e && e.detail) { |
| | | if (e.detail.code === -1) { |
| | | errorMsg = 'ç¸æºæéæªæäº'; |
| | | } else if (e.detail.code === -2) { |
| | | errorMsg = 'ç¸æºå¯å¨å¤±è´¥'; |
| | | } else { |
| | | errorMsg = `æ«ç é误: ${e.detail.message || 'æªç¥é误'}`; |
| | | } |
| | | } |
| | | |
| | | uni.showModal({ |
| | | title: errorMsg, |
| | | content: '建议ï¼\n1. æ£æ¥ç¸æºæé\n2. éå¯åºç¨\n3. ä½¿ç¨æå¨è¾å
¥', |
| | | confirmText: 'æå¨è¾å
¥', |
| | | cancelText: 'éè¯', |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | this.manualInput(); |
| | | } else if (res.cancel) { |
| | | // éæ°å¯å¨æ«ç |
| | | setTimeout(() => { |
| | | this.startScan(); |
| | | }, 300); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // æå¨è¾å
¥ |
| | | manualInput() { |
| | | const self = this; |
| | | uni.showModal({ |
| | | title: `è¾å
¥${this.scanTitle}`, |
| | | editable: true, |
| | | placeholderText: '请è¾å
¥æ¡ç å
容', |
| | | success(res) { |
| | | if (res.confirm && res.content) { |
| | | // è¿åä¸ä¸é¡µå¹¶ä¼ éè¾å
¥ç»æ |
| | | const pages = getCurrentPages(); |
| | | const prevPage = pages[pages.length - 2]; |
| | | if (prevPage && prevPage.$vm && prevPage.$vm.onScanSuccess) { |
| | | prevPage.$vm.onScanSuccess(res.content.trim()); |
| | | } |
| | | uni.navigateBack(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // å
³éæ«ç |
| | | closeScan() { |
| | | this.cancelScan(); |
| | | uni.navigateBack(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | .barcode-container { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | background-color: #000000; |
| | | } |
| | | |
| | | .barcode-view { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | width: 750rpx; |
| | | background-color: #000000; |
| | | } |
| | | |
| | | /* 顶鍿 颿 */ |
| | | .header { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | height: 120rpx; |
| | | background-color: rgba(0, 122, 255, 0.9); |
| | | flex-direction: row; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding-left: 30rpx; |
| | | padding-right: 30rpx; |
| | | z-index: 10; |
| | | } |
| | | |
| | | .header-title { |
| | | font-size: 36rpx; |
| | | font-weight: bold; |
| | | color: #ffffff; |
| | | } |
| | | |
| | | .header-close { |
| | | font-size: 48rpx; |
| | | font-weight: bold; |
| | | color: #ffffff; |
| | | padding-left: 20rpx; |
| | | padding-right: 20rpx; |
| | | } |
| | | |
| | | /* åºé¨æ§å¶æ */ |
| | | .footer { |
| | | position: absolute; |
| | | bottom: 0; |
| | | left: 0; |
| | | right: 0; |
| | | background-color: rgba(0, 0, 0, 0.7); |
| | | z-index: 10; |
| | | } |
| | | |
| | | .controls { |
| | | flex-direction: row; |
| | | justify-content: space-around; |
| | | padding-top: 20rpx; |
| | | padding-bottom: 20rpx; |
| | | padding-left: 20rpx; |
| | | padding-right: 20rpx; |
| | | } |
| | | |
| | | .control-btn { |
| | | flex: 1; |
| | | height: 80rpx; |
| | | background-color: #007aff; |
| | | border-radius: 10rpx; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-left: 10rpx; |
| | | margin-right: 10rpx; |
| | | } |
| | | |
| | | .btn-text { |
| | | font-size: 28rpx; |
| | | color: #ffffff; |
| | | } |
| | | |
| | | .tips { |
| | | padding-top: 20rpx; |
| | | padding-bottom: 30rpx; |
| | | padding-left: 20rpx; |
| | | padding-right: 20rpx; |
| | | background-color: rgba(255, 251, 230, 0.9); |
| | | align-items: center; |
| | | } |
| | | |
| | | .tips-text { |
| | | font-size: 26rpx; |
| | | color: #333333; |
| | | text-align: center; |
| | | font-weight: bold; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="scan-container"> |
| | | <view class="scan-header"> |
| | | <text class="header-title">{{ scanTitle }}</text> |
| | | <text class="header-close" @click="closeScan">â</text> |
| | | </view> |
| | | |
| | | <view class="scan-body"> |
| | | <view class="scan-tips"> |
| | | <text class="tips-icon">ð·</text> |
| | | <text class="tips-text">æ£å¨å¯å¨ç¸æº...</text> |
| | | <text class="tips-desc">è¯·å°æ¡ç 对å忝æ¡å
</text> |
| | | </view> |
| | | |
| | | <view class="scan-controls"> |
| | | <button class="control-btn primary" @click="startScan"> |
| | | <text class="btn-text">å¼å§æ«ç </text> |
| | | </button> |
| | | <button class="control-btn" @click="manualInput"> |
| | | <text class="btn-text">æå¨è¾å
¥</text> |
| | | </button> |
| | | </view> |
| | | |
| | | <view class="scan-info"> |
| | | <text class="info-title">ð¡ æ«ç æç¤º</text> |
| | | <text class="info-item">â¢ ä¿æ15-30cmè·ç¦»</text> |
| | | <text class="info-item">⢠确ä¿å
线å
è¶³</text> |
| | | <text class="info-item">⢠æ¡ç æ¸
æ°æ ç ´æ</text> |
| | | <text class="info-item">â¢ æ¯æå·¥ä¸æ¡ç ï¼CODE128/CODE39ï¼</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | scanTitle: 'SN确认', |
| | | }; |
| | | }, |
| | | |
| | | onLoad(options) { |
| | | if (options.title) { |
| | | this.scanTitle = decodeURIComponent(options.title); |
| | | } |
| | | |
| | | // èªå¨å¯å¨æ«ç |
| | | setTimeout(() => { |
| | | this.startScan(); |
| | | }, 500); |
| | | }, |
| | | |
| | | methods: { |
| | | // ä½¿ç¨ uni.scanCode API æ«ç ï¼è¯å«çæ´é«ï¼ |
| | | startScan() { |
| | | const self = this; |
| | | |
| | | // #ifdef APP-PLUS |
| | | uni.scanCode({ |
| | | // å
³é®ä¼å1ï¼åªæ«ææ¡å½¢ç ï¼æé«è¯å«é度åæåç |
| | | scanType: ['barCode'], |
| | | // å
³é®ä¼å2ï¼ä»
使ç¨ç¸æº |
| | | onlyFromCamera: true, |
| | | |
| | | success(res) { |
| | | console.log('æ«ç æå - åå§ç»æ:', res); |
| | | console.log('æ«ç æå - æ¡ç å
容:', res.result); |
| | | console.log('æ«ç æå - æ¡ç ç±»å:', res.scanType); |
| | | console.log('æ«ç æå - å符é:', res.charSet); |
| | | |
| | | let scanResult = res.result || ''; |
| | | |
| | | // å¤çæ«ç ç»æ |
| | | scanResult = scanResult.trim(); |
| | | |
| | | console.log('å¤çåçç»æ:', scanResult); |
| | | |
| | | if (!scanResult) { |
| | | console.error('è¦åï¼æ«ç ç»æä¸ºç©º'); |
| | | uni.showToast({ |
| | | title: 'æ«ç ç»æä¸ºç©ºï¼è¯·éè¯', |
| | | icon: 'none', |
| | | duration: 1500 |
| | | }); |
| | | // èªå¨éæ°æ«ç |
| | | setTimeout(() => { |
| | | self.startScan(); |
| | | }, 1500); |
| | | return; |
| | | } |
| | | |
| | | // éå¨åé¦ |
| | | uni.vibrateShort(); |
| | | |
| | | // æ¾ç¤ºæåæç¤º |
| | | uni.showToast({ |
| | | title: 'æ«ç æå', |
| | | icon: 'success', |
| | | duration: 800 |
| | | }); |
| | | |
| | | // è¿åä¸ä¸é¡µå¹¶ä¼ éç»æ |
| | | setTimeout(() => { |
| | | const pages = getCurrentPages(); |
| | | const prevPage = pages[pages.length - 2]; |
| | | if (prevPage && prevPage.$vm && prevPage.$vm.onScanSuccess) { |
| | | prevPage.$vm.onScanSuccess(scanResult); |
| | | } |
| | | uni.navigateBack(); |
| | | }, 800); |
| | | }, |
| | | |
| | | fail(err) { |
| | | console.error('æ«ç 失败 - 详ç»ä¿¡æ¯:', err); |
| | | console.error('é误代ç :', err.errCode); |
| | | console.error('éè¯¯æ¶æ¯:', err.errMsg); |
| | | |
| | | // 妿æ¯ç¨æ·åæ¶ï¼ç´æ¥è¿å |
| | | if (err.errMsg && err.errMsg.indexOf('cancel') > -1) { |
| | | console.log('ç¨æ·åæ¶æ«ç '); |
| | | return; |
| | | } |
| | | |
| | | // å
¶ä»éè¯¯ï¼æç¤ºç¨æ·å¹¶æä¾éè¯é项 |
| | | uni.showModal({ |
| | | title: 'æ«ç 失败', |
| | | content: `å»ºè®®ï¼ |
| | | 1. ä¿æ15-25cmè·ç¦» |
| | | 2. ç¡®ä¿å
线å
è¶³ |
| | | 3. æ¡ç 水平对å |
| | | 4. å°è¯æ
¢æ
¢ç§»å¨è·ç¦» |
| | | |
| | | å¦ä»å¤±è´¥ï¼å¯ä½¿ç¨æå¨è¾å
¥`, |
| | | confirmText: 'éæ°æ«ç ', |
| | | cancelText: 'æå¨è¾å
¥', |
| | | success(modalRes) { |
| | | if (modalRes.confirm) { |
| | | // éæ°æ«ç |
| | | setTimeout(() => { |
| | | self.startScan(); |
| | | }, 300); |
| | | } else if (modalRes.cancel) { |
| | | // æå¨è¾å
¥ |
| | | self.manualInput(); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | // #endif |
| | | |
| | | // #ifdef H5 |
| | | uni.showModal({ |
| | | title: 'æç¤º', |
| | | content: 'H5ç¯å¢ä¸æ¯ææ«ç ï¼è¯·ä½¿ç¨æå¨è¾å
¥åè½', |
| | | showCancel: false, |
| | | success() { |
| | | self.manualInput(); |
| | | } |
| | | }); |
| | | // #endif |
| | | |
| | | // #ifdef MP-WEIXIN |
| | | uni.scanCode({ |
| | | scanType: ['barCode', 'qrCode'], |
| | | success(res) { |
| | | const scanResult = res.result.trim(); |
| | | const pages = getCurrentPages(); |
| | | const prevPage = pages[pages.length - 2]; |
| | | if (prevPage && prevPage.$vm && prevPage.$vm.onScanSuccess) { |
| | | prevPage.$vm.onScanSuccess(scanResult); |
| | | } |
| | | uni.navigateBack(); |
| | | }, |
| | | fail(err) { |
| | | console.error('æ«ç 失败:', err); |
| | | self.manualInput(); |
| | | } |
| | | }); |
| | | // #endif |
| | | }, |
| | | |
| | | // æå¨è¾å
¥ |
| | | manualInput() { |
| | | const self = this; |
| | | uni.showModal({ |
| | | title: `è¾å
¥${this.scanTitle}`, |
| | | editable: true, |
| | | placeholderText: '请è¾å
¥æ¡ç å
容ï¼å¦ï¼51105/ARAAZF5V553990ï¼', |
| | | success(res) { |
| | | if (res.confirm && res.content) { |
| | | const inputValue = res.content.trim(); |
| | | |
| | | // è¿åä¸ä¸é¡µå¹¶ä¼ éè¾å
¥ç»æ |
| | | const pages = getCurrentPages(); |
| | | const prevPage = pages[pages.length - 2]; |
| | | if (prevPage && prevPage.$vm && prevPage.$vm.onScanSuccess) { |
| | | prevPage.$vm.onScanSuccess(inputValue); |
| | | } |
| | | uni.navigateBack(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // å
³éæ«ç |
| | | closeScan() { |
| | | uni.navigateBack(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .scan-container { |
| | | min-height: 100vh; |
| | | background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| | | padding: 20rpx; |
| | | } |
| | | |
| | | .scan-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding: 30rpx 20rpx; |
| | | background-color: rgba(255, 255, 255, 0.95); |
| | | border-radius: 20rpx; |
| | | margin-bottom: 40rpx; |
| | | box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .header-title { |
| | | font-size: 36rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | } |
| | | |
| | | .header-close { |
| | | font-size: 48rpx; |
| | | color: #999; |
| | | padding: 0 20rpx; |
| | | } |
| | | |
| | | .scan-body { |
| | | flex: 1; |
| | | } |
| | | |
| | | .scan-tips { |
| | | background-color: rgba(255, 255, 255, 0.95); |
| | | border-radius: 20rpx; |
| | | padding: 60rpx 40rpx; |
| | | margin-bottom: 30rpx; |
| | | text-align: center; |
| | | box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .tips-icon { |
| | | font-size: 120rpx; |
| | | display: block; |
| | | margin-bottom: 30rpx; |
| | | } |
| | | |
| | | .tips-text { |
| | | font-size: 32rpx; |
| | | color: #333; |
| | | font-weight: bold; |
| | | display: block; |
| | | margin-bottom: 20rpx; |
| | | } |
| | | |
| | | .tips-desc { |
| | | font-size: 28rpx; |
| | | color: #666; |
| | | display: block; |
| | | } |
| | | |
| | | .scan-controls { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | gap: 20rpx; |
| | | margin-bottom: 30rpx; |
| | | } |
| | | |
| | | .control-btn { |
| | | flex: 1; |
| | | height: 90rpx; |
| | | background-color: rgba(255, 255, 255, 0.95); |
| | | border-radius: 15rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | box-shadow: 0 4rpx 15rpx rgba(0, 0, 0, 0.1); |
| | | border: none; |
| | | } |
| | | |
| | | .control-btn.primary { |
| | | background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| | | } |
| | | |
| | | .control-btn.primary .btn-text { |
| | | color: #fff; |
| | | } |
| | | |
| | | .btn-text { |
| | | font-size: 30rpx; |
| | | color: #333; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .scan-info { |
| | | background-color: rgba(255, 255, 255, 0.95); |
| | | border-radius: 20rpx; |
| | | padding: 40rpx; |
| | | box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .info-title { |
| | | font-size: 32rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | display: block; |
| | | margin-bottom: 30rpx; |
| | | } |
| | | |
| | | .info-item { |
| | | font-size: 28rpx; |
| | | color: #666; |
| | | line-height: 2; |
| | | display: block; |
| | | } |
| | | </style> |
| | |
| | | <view class="title">SN确认</view> |
| | | |
| | | <view v-if="current === 'true'" class="remark"> |
| | | 夿³¨ï¼ç¹å»"æ«ç "æé®æ«æSNç ï¼å次ç¹å»å¯è¦ç䏿¬¡è®°å½ |
| | | 夿³¨ï¼ç¹å»"æ«ç "æé®æå¼ä¸ä¸æ«ç çé¢ï¼å
è´¹å®æ¹ç»ä»¶ï¼ |
| | | </view> |
| | | |
| | | <view class="scan-table"> |
| | |
| | | mid: null, // MES主表ID |
| | | scanItems: [], // ä» MES_SJ_SCAN_ITEM_CK è·å |
| | | current: 'true', // æ§å¶æ¯å¦å¯ç¼è¾ |
| | | currentScanIndex: -1, // å½åæ«æçç´¢å¼ |
| | | }; |
| | | }, |
| | | |
| | | onLoad(options) { |
| | | // è°è¯ä¿¡æ¯ï¼æå°æ¥æ¶å°çåæ° |
| | | console.log('ScanCode页颿¥æ¶å°çåæ°:', options); |
| | | |
| | | // å设ä»ä¸ä¸é¡µä¼ å
¥ mid |
| | | this.mid = options.id || null; |
| | | this.current = options.current || 'true'; // é»è®¤ä¸ºå¯ç¼è¾ç¶æ |
| | | |
| | | // è°è¯ä¿¡æ¯ï¼æå°midå¼ |
| | | console.log('midå¼:', this.mid); |
| | | console.log('currentå¼:', this.current); |
| | | |
| | | // ä¸´æ¶æµè¯ï¼å¦æmid为空ï¼ä½¿ç¨é»è®¤å¼ |
| | | if (!this.mid) { |
| | | console.warn('è¦åï¼mid为空ï¼ä½¿ç¨æµè¯æ°æ®'); |
| | | // åæ¶æ³¨éä¸é¢ä¸è¡å¯ä»¥ç´æ¥æ¾ç¤ºæµè¯æ°æ® |
| | | // this.loadTestData(); |
| | | // return; |
| | | } |
| | | |
| | | this.getScanItems(); |
| | | }, |
| | | |
| | | methods: { |
| | | // ä¸´æ¶æµè¯æ¹æ³ï¼å è½½æµè¯æ°æ® |
| | | loadTestData() { |
| | | console.log('å è½½æµè¯æ°æ®'); |
| | | this.scanItems = [ |
| | | { id: 1, scanItem: '产åSN', snNo: '' }, |
| | | { id: 2, scanItem: 'æºæ¶å·', snNo: '' }, |
| | | { id: 3, scanItem: 'çµæºç¼å·', snNo: '' }, |
| | | ]; |
| | | uni.showToast({ |
| | | title: 'å·²å è½½æµè¯æ°æ®', |
| | | icon: 'success' |
| | | }); |
| | | }, |
| | | |
| | | // ä» MES_SJ_SCAN_ITEM_CK è·åæ°æ® |
| | | getScanItems() { |
| | | if (!this.mid) return; |
| | | console.log('å¼å§è·åSNå表, mid:', this.mid); |
| | | |
| | | if (!this.mid) { |
| | | console.error('midä¸ºç©ºï¼æ æ³è·åå表'); |
| | | uni.showToast({ |
| | | title: "缺å°å¿
è¦åæ°", |
| | | icon: "none" |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | uni.showLoading({ title: "å è½½ä¸..." }); |
| | | |
| | | console.log('åå¤è°ç¨æ¥å£ï¼/SJ/GetList, åæ°:', { mid: this.mid }); |
| | | |
| | | this.$post({ |
| | | url: "/SJ/GetList", |
| | | data: { mid: this.mid } |
| | | }).then(res => { |
| | | console.log('æ¥å£è¿åç»æ:', res); |
| | | |
| | | if (res.status === 0) { |
| | | console.log('è¿åçæ°æ®:', res.data); |
| | | |
| | | this.scanItems = res.data.map(x => ({ |
| | | id: x.id, |
| | | scanItem: x.scanItem, |
| | | snNo: x.snNo || "", |
| | | })); |
| | | |
| | | console.log('å¤çåçscanItems:', this.scanItems); |
| | | |
| | | if (this.scanItems.length === 0) { |
| | | uni.showToast({ |
| | | title: "ææ æ«ç 项ç®", |
| | | icon: "none" |
| | | }); |
| | | } |
| | | } else { |
| | | console.error('æ¥å£è¿åé误:', res.message); |
| | | uni.showToast({ |
| | | title: res.message || "å 载失败", |
| | | icon: "none" |
| | |
| | | }); |
| | | }, |
| | | |
| | | // æ«ç åè½ |
| | | // æ«ç æååè°ï¼ç± nvue æ«ç 页é¢è°ç¨ï¼ |
| | | onScanSuccess(scanResult) { |
| | | console.log('æ«ç ç»æ:', scanResult); |
| | | |
| | | if (this.currentScanIndex >= 0 && this.currentScanIndex < this.scanItems.length) { |
| | | // æ´æ°å¯¹åºé¡¹ç®çSNç |
| | | this.scanItems[this.currentScanIndex].snNo = scanResult.trim(); |
| | | |
| | | uni.showToast({ |
| | | title: 'æ«ç æå', |
| | | icon: 'success' |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // æå¼æ«ç 页é¢ï¼ä½¿ç¨è¯å«çæ´é«çæ¹æ¡ï¼ |
| | | onScan(index) { |
| | | const self = this; |
| | | |
| | | // #ifdef MP-WEIXIN |
| | | uni.scanCode({ |
| | | success(res){ |
| | | self.scanItems[index].snNo = res.result; |
| | | }, |
| | | fail(err) { |
| | | console.log("æ«ç 失败", err); |
| | | }, |
| | | this.currentScanIndex = index; |
| | | const itemName = this.scanItems[index].scanItem; |
| | | |
| | | // è·³è½¬å° nvue æ«ç 页é¢ï¼ä½¿ç¨å®æ¹ Barcode ç»ä»¶ï¼è¯å«ç 90%+ï¼ |
| | | uni.navigateTo({ |
| | | url: `/pages/QC/SJ/BarcodeScan?title=${encodeURIComponent(itemName)}` |
| | | }); |
| | | // #endif |
| | | |
| | | // #ifdef H5 |
| | | uni.showToast({ |
| | | title: "è¯·ä½¿ç¨æ«ç æªè¾å
¥å°SNè¾å
¥æ¡", |
| | | icon: "none", |
| | | }); |
| | | // #endif |
| | | |
| | | // #ifdef APP-PLUS |
| | | uni.scanCode({ |
| | | scanType: ['barCode'], // æ°å¢è¿ä¸è¡ |
| | | autoDecodeCharset: true, // èªå¨è§£ç å符é |
| | | success(res) { |
| | | console.log(res) |
| | | self.scanItems[index].snNo = res.result; |
| | | }, |
| | | }); |
| | | // #endif |
| | | }, |
| | | |
| | | // ä¿å SN æ°æ®å° MES_SJ_SCAN_ITEM_CK |