| ¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | import QRCode from 'qrcode'; // äºç»´ç çæåº |
| | | import { ElDialog, ElButton, ElMessage ,ElImage,ElMessageBox } from 'element-plus';// å¼å
¥ElMessageï¼è§£å³æç¤ºæ ååº |
| | | import { h,createVNode, render } from 'vue'; |
| | | //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè
éæ°é
ç½®çæç代ç |
| | | let extension = { |
| | | components: { |
| | | //æ¥è¯¢ç颿©å±ç»ä»¶ |
| | | gridHeader: '', |
| | | gridBody: '', |
| | | gridFooter: '', |
| | | //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ |
| | | modelHeader: '', |
| | | modelBody: '', |
| | | modelFooter: '' |
| | | }, |
| | | tableAction: '', //æå®æå¼ 表çæé(è¿éå¡«å表å,é»è®¤ä¸ç¨å¡«å) |
| | | buttons: { view: [{ |
| | | name: 'çæäºç»´ç ', |
| | | type: 'success', |
| | | value: 'çæäºç»´ç ', |
| | | onClick: async function () { |
| | | // 1. æ ¡éªéä¸è¡ |
| | | const selectedRows = this.$refs.table.getSelected(); |
| | | if (selectedRows.length === 0) { |
| | | ElMessage.warning('请å
éæ©ä¸è¡æ°æ®'); |
| | | return; |
| | | } |
| | | if (selectedRows.length > 1) { |
| | | ElMessage.warning('ä»
æ¯æéæ©ä¸è¡æ°æ®çæäºç»´ç '); |
| | | return; |
| | | } |
| | | |
| | | // 2. è·ååæ®ç¼å· |
| | | const newMaterialBarCode = selectedRows[0].newMaterialBarCode; |
| | | if (!newMaterialBarCode) { |
| | | ElMessage.error('éä¸çæ°æ®ä¸æªæ¾å°åæ®ç¼å·'); |
| | | return; |
| | | } |
| | | |
| | | // 3. è·ååæ®æç»æ°æ®ï¼æ°å¢ï¼éè¿åæ®ç¼å·è·åQtyTransãMaterialCodeãMaterialNameï¼ |
| | | // let detailList = []; |
| | | // const loading = ElLoading.service({ text: 'è·ååæ®æç»ä¸...' }); |
| | | // try { |
| | | // const res = await http.post('/api/DocumentDetail/details', { transNo: transNo }); |
| | | // // æ ¡éªè¿åæ ¼å¼ï¼å¿
é¡»æ¯æ°ç»ä¸è³å°æä¸æ¡æ°æ®ï¼ |
| | | // if (!res.status || !Array.isArray(res.data) || res.data.length === 0) { |
| | | // throw new Error('æªæ¥è¯¢å°åæ®æç»æ°æ®'); |
| | | // } |
| | | // detailList = res.data; |
| | | |
| | | // // æ ¡éªæ¯æ¡æç»çå¿
å¡«åæ®µ |
| | | // detailList.forEach((item, index) => { |
| | | // if (!item.qtyTrans || !item.materialCode || !item.materialName) { |
| | | // throw new Error(`第${index + 1}æ¡æç»æ°æ®ä¸å®æ´`); |
| | | // } |
| | | // }); |
| | | // } catch (err) { |
| | | // ElMessage.error(err.message || 'è·ååæ®æç»å¤±è´¥'); |
| | | // loading.close(); |
| | | // return; |
| | | // } finally { |
| | | // loading.close(); |
| | | // } |
| | | |
| | | // 4. çæäºç»´ç |
| | | let qrCodeUrl = ''; |
| | | try { |
| | | qrCodeUrl = await QRCode.toDataURL(newMaterialBarCode, { |
| | | width: 200, // äºç»´ç 大å°éé
å¸å± |
| | | margin: 1 |
| | | }); |
| | | } catch (err) { |
| | | ElMessage.error('äºç»´ç çæå¤±è´¥ï¼è¯·éè¯'); |
| | | console.error('äºç»´ç çæé误ï¼', err); |
| | | return; |
| | | } |
| | | |
| | | // 5. åå»ºå¼¹çª |
| | | const mountNode = document.createElement('div'); |
| | | document.body.appendChild(mountNode); |
| | | |
| | | // æ·»å æå°ä¸ç¨æ ·å¼ |
| | | const addPrintStyle = () => { |
| | | const style = document.createElement('style'); |
| | | style.id = 'qr-print-style'; |
| | | style.textContent = ` |
| | | @media print { |
| | | body > *:not(.print-container) { display: none !important; } |
| | | .print-container { |
| | | position: fixed !important; |
| | | top: 50px !important; |
| | | left: 50px !important; |
| | | width: 90% !important; |
| | | height: auto !important; |
| | | } |
| | | /* æå°å
容å¸å± */ |
| | | .print-content { |
| | | display: flex !important; |
| | | flex-direction: column !important; |
| | | gap: 20px !important; |
| | | } |
| | | .qr-wrapper { |
| | | align-self: flex-start !important; /* äºç»´ç é å·¦ */ |
| | | } |
| | | .detail-fields { |
| | | display: flex !important; |
| | | justify-content: space-around !important; /* åæ®µåååå¸ */ |
| | | width: 100% !important; |
| | | margin-top: 20px !important; |
| | | font-size: 16px !important; |
| | | } |
| | | .field-item { |
| | | text-align: center !important; |
| | | padding: 10px !important; |
| | | border: 1px solid #eee !important; |
| | | border-radius: 4px !important; |
| | | width: 30% !important; /* æ¯ä¸ªå段å 1/3宽度 */ |
| | | } |
| | | .field-label { |
| | | font-weight: bold !important; |
| | | margin-bottom: 5px !important; |
| | | display: block !important; |
| | | } |
| | | } |
| | | `; |
| | | document.head.appendChild(style); |
| | | return style; |
| | | }; |
| | | |
| | | // æå°å½æ° |
| | | const printQrCode = () => { |
| | | // å建æå°å®¹å¨ |
| | | const printContainer = document.createElement('div'); |
| | | printContainer.className = 'print-container'; |
| | | printContainer.style = 'position:fixed; top:-9999px; left:-9999px;'; |
| | | document.body.appendChild(printContainer); |
| | | |
| | | // å¡«å
æå°å
容ï¼å¸å±ï¼äºç»´ç å·¦ä¸è§ + ä¸ä¸ªå段åååå¸ï¼ |
| | | printContainer.innerHTML = ` |
| | | <div class="print-content"> |
| | | <!-- äºç»´ç ï¼å·¦ä¸è§ï¼ --> |
| | | <div class="qr-wrapper"> |
| | | <img src="${qrCodeUrl}" style="width: 200px; height: 200px;" /> |
| | | <p style="margin-top: 10px; font-size: 16px;">åæ®ç¼å·ï¼${newMaterialBarCode}</p> |
| | | </div> |
| | | |
| | | <!-- æç»å段ï¼åååå¸ï¼ --> |
| | | <div class="detail-fields"> |
| | | <div class="field-item"> |
| | | <span class="field-label">äº¤ææ°é</span> |
| | | <span>${detailList[0].qtyTrans}</span> |
| | | </div> |
| | | <div class="field-item"> |
| | | <span class="field-label">ç©æç¼ç </span> |
| | | <span>${detailList[0].materialCode}</span> |
| | | </div> |
| | | <div class="field-item"> |
| | | <span class="field-label">ç©æåç§°</span> |
| | | <span>${detailList[0].materialName}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | `; |
| | | |
| | | // æ·»å æå°æ ·å¼ |
| | | const printStyle = addPrintStyle(); |
| | | |
| | | // æ¸
ç彿°ï¼é²æ¢éå¤ç§»é¤ï¼ |
| | | const cleanUp = () => { |
| | | if (printContainer.parentNode === document.body) { |
| | | document.body.removeChild(printContainer); |
| | | } |
| | | if (printStyle && printStyle.parentNode === document.head) { |
| | | document.head.removeChild(printStyle); |
| | | } |
| | | window.removeEventListener('afterprint', cleanUp); |
| | | }; |
| | | |
| | | // ç嬿å°å®æ |
| | | window.addEventListener('afterprint', cleanUp, { once: true }); |
| | | |
| | | // 触åæå° |
| | | window.print(); |
| | | }; |
| | | |
| | | // å¼¹çªç»ä»¶ï¼é¢è§å¸å±ï¼ |
| | | const vnode = createVNode(ElDialog, { |
| | | title: 'åæ®äºç»´ç åæç»', |
| | | width: '600px', |
| | | modelValue: true, |
| | | appendToBody: true, |
| | | 'onUpdate:modelValue': (isVisible) => { |
| | | if (!isVisible) { |
| | | const printStyle = document.getElementById('qr-print-style'); |
| | | if (printStyle && printStyle.parentNode === document.head) { |
| | | document.head.removeChild(printStyle); |
| | | } |
| | | render(null, mountNode); |
| | | if (mountNode.parentNode === document.body) { |
| | | document.body.removeChild(mountNode); |
| | | } |
| | | } |
| | | } |
| | | }, { |
| | | default: () => [ |
| | | // é¢è§åºå¸å±ï¼åæå°å¸å±ä¸è´ï¼ |
| | | h('div', { style: { padding: '20px' } }, [ |
| | | // äºç»´ç é¢è§ï¼å·¦ä¸è§ï¼ |
| | | h('div', { style: { marginBottom: '20px' } }, [ |
| | | h(ElImage, { |
| | | src: qrCodeUrl, |
| | | alt: 'åæ®äºç»´ç ', |
| | | style: { width: '200px', height: '200px' } |
| | | }), |
| | | h('p', { style: { marginTop: '10px', fontSize: '16px' } }, `åæ®ç¼å·ï¼${newMaterialBarCode}`) |
| | | ]), |
| | | // æç»å段é¢è§ï¼åååå¸ï¼ |
| | | // h('div', { style: { display: 'flex', justifyContent: 'space-around', gap: '10px' } }, [ |
| | | // h('div', { style: { textAlign: 'center', padding: '10px', border: '1px solid #eee', width: '30%' } }, [ |
| | | // h('div', { style: { fontWeight: 'bold', marginBottom: '5px' } }, 'äº¤ææ°é'), |
| | | // h('div', null, detailList[0].qtyTrans) |
| | | // ]), |
| | | // h('div', { style: { textAlign: 'center', padding: '10px', border: '1px solid #eee', width: '30%' } }, [ |
| | | // h('div', { style: { fontWeight: 'bold', marginBottom: '5px' } }, 'ç©æç¼ç '), |
| | | // h('div', null, detailList[0].materialCode) |
| | | // ]), |
| | | // h('div', { style: { textAlign: 'center', padding: '10px', border: '1px solid #eee', width: '30%' } }, [ |
| | | // h('div', { style: { fontWeight: 'bold', marginBottom: '5px' } }, 'ç©æåç§°'), |
| | | // h('div', null, detailList[0].materialName) |
| | | // ]) |
| | | // ]) |
| | | ]) |
| | | ], |
| | | footer: () => h('div', null, [ |
| | | h(ElButton, { |
| | | type: 'default', |
| | | onClick: () => { |
| | | const printStyle = document.getElementById('qr-print-style'); |
| | | if (printStyle) document.head.removeChild(printStyle); |
| | | render(null, mountNode); |
| | | if (mountNode.parentNode === document.body) { |
| | | document.body.removeChild(mountNode); |
| | | } |
| | | } |
| | | }, 'å
³é'), |
| | | h(ElButton, { |
| | | type: 'primary', |
| | | onClick: () => { |
| | | ElMessageBox.confirm( |
| | | 'æ¯å¦æå°è¯¥å
容ï¼', |
| | | 'æå°ç¡®è®¤', |
| | | { |
| | | confirmButtonText: '确认æå°', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'info' |
| | | } |
| | | ).then(async () => { |
| | | try { |
| | | // æ§è¡æå°å¹¶çå¾
å®æï¼æè·å¯è½çé误 |
| | | await printQrCode(); |
| | | setTimeout(() => { |
| | | render(null, mountNode); |
| | | if (mountNode.parentNode === document.body) { |
| | | document.body.removeChild(mountNode); |
| | | } |
| | | }, 500); |
| | | } catch (printErr) { |
| | | // æ¾ç¤ºçå®é误ï¼èéâ已忶âï¼ |
| | | ElMessage.error(`æå°å¤±è´¥ï¼${printErr.message || 'æªç¥é误'}`); |
| | | console.error('æå°é误ï¼', printErr); |
| | | } |
| | | }).catch((err) => { |
| | | // ä»
ç¨æ·ä¸»å¨åæ¶æ¶ææ¾ç¤ºâ已忶â |
| | | if (err === 'cancel' || err.name === 'CanceledError') { |
| | | ElMessage.info('已忶æå°'); |
| | | } |
| | | }); |
| | | } |
| | | }, 'æå°') |
| | | ]) |
| | | }); |
| | | |
| | | vnode.appContext = this.$.appContext; |
| | | render(vnode, mountNode); |
| | | } |
| | | }], box: [], detail: [] }, //æ©å±çæé® |
| | | methods: { |
| | | //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ |
| | | onInit() { |
| | | }, |
| | | onInited() { |
| | | //æ¡æ¶åå§åé
ç½®å |
| | | //妿è¦é
ç½®æç»è¡¨,卿¤æ¹æ³æä½ |
| | | //this.detailOptions.columns.forEach(column=>{ }); |
| | | }, |
| | | searchBefore(param) { |
| | | //ç颿¥è¯¢å,å¯ä»¥ç»param.wheresæ·»å æ¥è¯¢åæ° |
| | | //è¿åfalseï¼åä¸ä¼æ§è¡æ¥è¯¢ |
| | | return true; |
| | | }, |
| | | searchAfter(result) { |
| | | //æ¥è¯¢åï¼resultè¿åçæ¥è¯¢æ°æ®,å¯ä»¥å¨æ¾ç¤ºå°è¡¨æ ¼åå¤çè¡¨æ ¼çå¼ |
| | | return true; |
| | | }, |
| | | addBefore(formData) { |
| | | //æ°å»ºä¿ååformData为对象ï¼å
æ¬æç»è¡¨ï¼å¯ä»¥ç»ç»è¡¨å设置å¼ï¼èªå·±è¾åºçformDataçå¼ |
| | | return true; |
| | | }, |
| | | updateBefore(formData) { |
| | | //ç¼è¾ä¿ååformData为对象ï¼å
æ¬æç»è¡¨ãå é¤è¡çId |
| | | return true; |
| | | }, |
| | | rowClick({ row, column, event }) { |
| | | //æ¥è¯¢çé¢ç¹å»è¡äºä»¶ |
| | | this.$refs.table.$refs.table.toggleRowSelection(row); //åå»è¡æ¶éä¸å½åè¡; |
| | | }, |
| | | modelOpenAfter(row) { |
| | | //ç¹å»ç¼è¾ãæ°å»ºæé®å¼¹åºæ¡åï¼å¯ä»¥å¨æ¤å¤åé»è¾ï¼å¦ï¼ä»åå°è·åæ°æ® |
| | | //(1)夿æ¯ç¼è¾è¿æ¯æ°å»ºæä½ï¼ this.currentAction=='Add'; |
| | | //(2)ç»å¼¹åºæ¡è®¾ç½®é»è®¤å¼ |
| | | //(3)this.editFormFields.åæ®µ='xxx'; |
| | | //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é
置对åºdata屿§çkeyå¼ |
| | | //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) |
| | | } |
| | | } |
| | | }; |
| | | export default extension; |
| | |
| | | |
| | | <!-- æçæ¡ç è¾å
¥ --> |
| | | <div class="input-wrapper custom-input-group"> |
| | | <div class="input-label">æçæ¡ç </div> |
| | | <div class="input-label">æç®±ç </div> |
| | | <el-input |
| | | ref="trayInput" |
| | | v-model="trayBarcode" |
| | | placeholder="è¯·æ«ææè¾å
¥æçæ¡ç åæå车é®" |
| | | placeholder="è¯·æ«ææè¾å
¥æç®±ç åæå车é®" |
| | | clearable |
| | | @keyup.enter.native="handleTraySubmit" |
| | | @clear="handleTrayClear" |
| | |
| | | class="custom-input" |
| | | > |
| | | <template slot="prepend"> |
| | | <span>æçæ¡ç </span> |
| | | <span>æç®±ãç </span> |
| | | </template> |
| | | <template slot="append"> |
| | | <el-button |
| | |
| | | |
| | | //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè
éæ°é
ç½®çæç代ç |
| | | import http from '@/api/http.js' |
| | | import { defineAsyncComponent } from "vue"; |
| | | import { ElMessage } from 'element-plus'; // å¼å
¥ElMessageï¼è§£å³æç¤ºæ ååº |
| | | import { h,createVNode, render,reactive } from 'vue'; |
| | | import { ElDialog , ElForm, ElFormItem, ElInput, ElButton, ElMessage } from 'element-plus'; // å¼å
¥ElMessageï¼è§£å³æç¤ºæ ååº |
| | | |
| | | let extension = { |
| | | components: { |
| | |
| | | this.$emit('openPalletDialog', targetRow.inboundOrderNo); |
| | | } |
| | | }, |
| | | { |
| | | name: '空æçå
¥åº', |
| | | type: 'primary', |
| | | value: '空æçå
¥åº', |
| | | onClick: function () { |
| | | const mountNode = document.createElement('div'); |
| | | document.body.appendChild(mountNode); |
| | | |
| | | // ååºå¼è¡¨åæ°æ®ï¼æç®±ç æ¹ä¸ºå¯éå¡«ï¼åå§ç©ºåç¬¦ä¸²ï¼ |
| | | const formData = reactive({ |
| | | boxCode: '' // æç®±ç ï¼stringç±»åï¼å¯ç©ºï¼ |
| | | }); |
| | | |
| | | const vnode = createVNode(ElDialog, { |
| | | title: '空æçå
¥åº', |
| | | width: '400px', |
| | | modelValue: true, |
| | | appendToBody: true, |
| | | 'onUpdate:modelValue': (isVisible) => { |
| | | if (!isVisible) { |
| | | render(null, mountNode); |
| | | document.body.removeChild(mountNode); |
| | | } |
| | | } |
| | | }, { |
| | | default: () => h(ElForm, { |
| | | model: formData, |
| | | rules: { |
| | | // æç®±ç æ ¡éªï¼ä»
ä¿çå符串类åï¼ç§»é¤å¿
å¡«è¦æ±ï¼ç©ºå¼å¯éè¿ï¼ |
| | | boxCode: [ |
| | | { type: 'string', message: 'æç®±ç å¿
须为å符串', trigger: 'blur' } |
| | | ] |
| | | }, |
| | | ref: 'batchInForm' |
| | | }, [ |
| | | // æç®±ç è¾å
¥é¡¹ï¼å¯éå¡«ï¼ |
| | | h(ElFormItem, { label: 'æç®±ç ', prop: 'boxCode' }, [ |
| | | h(ElInput, { |
| | | type: 'text', |
| | | placeholder: 'å¯éè¾å
¥æç®±ç ï¼ä¸å¡«åé»è®¤å
¥åº', // æç¤ºå¯ç©ºè§å |
| | | modelValue: formData.boxCode, |
| | | 'onUpdate:modelValue': (val) => { |
| | | formData.boxCode = val; |
| | | } |
| | | }) |
| | | ]), |
| | | // åºé¨æé®åºï¼ä¿æä¸åï¼ |
| | | h('div', { style: { textAlign: 'right', marginTop: '16px' } }, [ |
| | | h(ElButton, { |
| | | type: 'text', |
| | | onClick: () => { |
| | | render(null, mountNode); |
| | | document.body.removeChild(mountNode); |
| | | ElMessage.info('åæ¶å
¥åºä»»å¡'); |
| | | } |
| | | }, 'åæ¶'), |
| | | h(ElButton, { |
| | | type: 'primary', |
| | | onClick: async () => { |
| | | const formRef = vnode.component.refs.batchInForm; |
| | | try { |
| | | await formRef.validate(); // 空å¼å¯éè¿æ ¡éª |
| | | } catch (err) { |
| | | return; |
| | | } |
| | | |
| | | // å
¥åºæ¥å£æäº¤ï¼æç®±ç 为空æ¶ä¼ é空å符串ï¼åç«¯éæ¯æè¯¥å段å¯é |
| | | http.post('/api/wmsTask/BatchInboundTask', { |
| | | boxCode: formData.boxCode // å¯ç©ºï¼ç¨æ·è¾å
¥æç©ºå符串 |
| | | }).then(({ data, status, message }) => { |
| | | if (status) { |
| | | ElMessage.success(`å
¥åºæå${formData.boxCode ? 'ï¼æç®±ç ï¼' + formData.boxCode : ''}`); |
| | | this.refresh(); |
| | | render(null, mountNode); |
| | | document.body.removeChild(mountNode); |
| | | } else { |
| | | ElMessage.error(message || data?.message || 'å
¥åºå¤±è´¥'); |
| | | } |
| | | }).catch(() => { |
| | | ElMessage.error('请æ±å¤±è´¥ï¼è¯·ç¨åéè¯'); |
| | | }); |
| | | } |
| | | }, 'ç¡®å®') |
| | | ]) |
| | | ]) |
| | | }); |
| | | |
| | | vnode.appContext = this.$.appContext; |
| | | render(vnode, mountNode); |
| | | } |
| | | } |
| | | ], box: [], detail: [] }, //æ©å±çæé® |
| | | methods: { |
| | | //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ |
| | |
| | | |
| | | //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè
éæ°é
ç½®çæç代ç |
| | | import http from '@/api/http.js' |
| | | import { defineAsyncComponent } from "vue"; |
| | | import { ElMessage } from 'element-plus'; // å¼å
¥ElMessageï¼è§£å³æç¤ºæ ååº |
| | | import { h,createVNode, render,reactive } from 'vue'; |
| | | import { ElDialog , ElForm, ElFormItem, ElInput, ElButton, ElMessage ,ElSelect, ElOption} from 'element-plus'; |
| | | |
| | | import gridBody from './extend/outOrderDetail.vue' |
| | | let extension = { |
| | |
| | | createDate: selectedRows[0].createDate || new Date().toLocaleDateString() // åºåºæ¥æ |
| | | }); |
| | | } |
| | | }, |
| | | { |
| | | name: '空æçåºåº', |
| | | type: 'primary', |
| | | value: '空æçåºåº', |
| | | onClick: function () { |
| | | |
| | | // 2. çæ3-12ç«å°é项ï¼é»è®¤ç¬¬ä¸ä¸ªä¸ºç«å°3ï¼ |
| | | const platformOptions = Array.from({ length: 10 }, (_, i) => { |
| | | const num = i + 3; |
| | | return { label: `ç«å°${num}`, value: `PLATFORM${num.toString().padStart(3, '0')}` }; |
| | | }); |
| | | |
| | | const mountNode = document.createElement('div'); |
| | | document.body.appendChild(mountNode); |
| | | |
| | | // 3. è¡¨åæ°æ®ï¼é»è®¤éä¸ç«å°3ï¼ |
| | | const formData = reactive({ |
| | | palletCode: '', |
| | | selectedPlatform: platformOptions[0].value // é»è®¤ç»å®ç«å°3çvalue |
| | | }); |
| | | |
| | | const vnode = createVNode(ElDialog, { |
| | | title: '空æçåºåº', |
| | | width: '500px', // å¾®è°å®½åº¦æ´åè° |
| | | modelValue: true, |
| | | appendToBody: true, |
| | | 'onUpdate:modelValue': (isVisible) => { |
| | | if (!isVisible) { |
| | | render(null, mountNode); |
| | | document.body.removeChild(mountNode); |
| | | } |
| | | }, |
| | | style: { |
| | | padding: '20px 0', // å¼¹çªå
ä¸ä¸çç½ï¼é¿å
å
å®¹ç´§è´´è¾¹æ¡ |
| | | borderRadius: '8px' // 轻微åè§ï¼æåè´¨æ |
| | | } |
| | | }, { |
| | | default: () => h(ElForm, { |
| | | model: formData, |
| | | rules: { |
| | | palletCode: [ |
| | | { type: 'string', message: 'æç®±å·å¿
须为å符串', trigger: 'blur' } |
| | | ], |
| | | selectedPlatform: [ |
| | | { required: true, message: 'è¯·éæ©åºåºç«å°', trigger: 'change' } |
| | | ] |
| | | }, |
| | | ref: 'batchOutForm', |
| | | labelWidth: '100px', // åºå®æ ç¾å®½åº¦ï¼ç¡®ä¿å¯¹é½ |
| | | style: { |
| | | padding: '0 30px', // 表åå·¦å³çç½ï¼å¢å å¼å¸æ |
| | | } |
| | | }, [ |
| | | // åºåºç«å°ï¼ä¸ï¼ä¼åæ ·å¼ï¼ |
| | | h(ElFormItem, { |
| | | label: 'åºåºç«å°', |
| | | prop: 'selectedPlatform', |
| | | style: { |
| | | marginBottom: '24px' // 表å项é´è·ä¼å |
| | | } |
| | | }, [ |
| | | h(ElSelect, { |
| | | placeholder: 'è¯·éæ©åºåºç«å°ï¼3-12ï¼', |
| | | modelValue: formData.selectedPlatform, |
| | | 'onUpdate:modelValue': (val) => { |
| | | formData.selectedPlatform = val; |
| | | }, |
| | | style: { |
| | | width: '100%', |
| | | height: '40px', // ç»ä¸ç»ä»¶é«åº¦ |
| | | borderRadius: '4px', |
| | | borderColor: '#dcdfe6' |
| | | } |
| | | }, platformOptions.map(platform => |
| | | h(ElOption, { label: platform.label, value: platform.value }) |
| | | )) |
| | | ]), |
| | | // æçç¼å·ï¼ä¸ï¼ä¼åæ ·å¼ï¼ |
| | | h(ElFormItem, { |
| | | label: 'æç®±å·', |
| | | prop: 'palletCode', |
| | | style: { |
| | | marginBottom: '16px' // 䏿é®åºæå¼åçé´è· |
| | | } |
| | | }, [ |
| | | h(ElInput, { |
| | | type: 'text', |
| | | placeholder: 'å¯éè¾å
¥æç®±å·ï¼ä¸å¡«åèªå¨åé
空æç®±', |
| | | modelValue: formData.palletCode, |
| | | 'onUpdate:modelValue': (val) => { |
| | | formData.palletCode = val; |
| | | }, |
| | | style: { |
| | | width: '100%', |
| | | height: '40px', // ä¸éæ©å¨é«åº¦ç»ä¸ |
| | | borderRadius: '4px', |
| | | borderColor: '#dcdfe6' |
| | | }, |
| | | attrs: { |
| | | placeholderStyle: 'color: #909399;' // å 使åé¢è²ä¼åï¼æ´æå |
| | | } |
| | | }) |
| | | ]), |
| | | // åºé¨æé®åºï¼æ ·å¼ä¼åï¼ |
| | | h('div', { |
| | | style: { |
| | | textAlign: 'right', |
| | | marginTop: '8px', |
| | | paddingRight: '4px' // æé®ä¸å³ä¾§å¯¹é½å¾®è° |
| | | } |
| | | }, [ |
| | | h(ElButton, { |
| | | type: 'text', |
| | | onClick: () => { |
| | | render(null, mountNode); |
| | | document.body.removeChild(mountNode); |
| | | ElMessage.info('åæ¶åºåºæä½'); |
| | | }, |
| | | style: { |
| | | marginRight: '8px', |
| | | color: '#606266' // åæ¶æé®é¢è²ä¼å |
| | | } |
| | | }, 'åæ¶'), |
| | | h(ElButton, { |
| | | type: 'primary', |
| | | onClick: async () => { |
| | | const formRef = vnode.component.refs.batchOutForm; |
| | | try { |
| | | await formRef.validate(); |
| | | } catch (err) { |
| | | return; |
| | | } |
| | | |
| | | http.post('/api/wmsTask/BatchOutboundTask', { |
| | | palletCode: formData.palletCode, |
| | | platform: formData.selectedPlatform |
| | | }).then(({ data, status, message }) => { |
| | | if (status) { |
| | | ElMessage.success(`åºåºæåï¼åé
çæçç¼å·ï¼${data.palletCode || formData.palletCode}`); |
| | | this.refresh(); |
| | | render(null, mountNode); |
| | | document.body.removeChild(mountNode); |
| | | } else { |
| | | ElMessage.error(message || data?.message || 'åºåºå¤±è´¥'); |
| | | } |
| | | }).catch(() => { |
| | | ElMessage.error('请æ±å¤±è´¥ï¼è¯·ç¨åéè¯'); |
| | | }); |
| | | }, |
| | | style: { |
| | | borderRadius: '4px', |
| | | padding: '8px 20px' // æé®å
è¾¹è·ä¼åï¼ç¹å»åºåæ´èé |
| | | } |
| | | }, 'ç¡®å®') |
| | | ]) |
| | | ]) |
| | | }); |
| | | |
| | | vnode.appContext = this.$.appContext; |
| | | render(vnode, mountNode); |
| | | } |
| | | } |
| | | ], box: [], detail: [] }, //æ©å±çæé® |
| | | methods: { |
| | | //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ |
| | |
| | | name: 'stockQuantityChangeRecord', |
| | | component: () => import('@/views/record/stockQuantityChangeRecord.vue') |
| | | }, { |
| | | path: '/locationStatusChangeRecord', |
| | | path: '/LocationStatusChangeRecord', |
| | | name: 'locationStatusChangeRecord', |
| | | component: () => import('@/views/record/locationStatusChangeRecord.vue') |
| | | }, { |
| | |
| | | name: 'mesOutboundOrder', |
| | | component: () => import('@/views/outbound/mesOutboundOrder.vue') |
| | | } |
| | | , { |
| | | path: '/materielToMes', |
| | | name: 'Dt_MaterielToMes', |
| | | component: () => import('@/views/inbound/Dt_MaterielToMes.vue') |
| | | } |
| | | ] |
| | | |
| | | export default viewgird |
| | | export default viewgird |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view-grid |
| | | ref="grid" |
| | | :columns="columns" |
| | | :detail="detail" |
| | | :editFormFields="editFormFields" |
| | | :editFormOptions="editFormOptions" |
| | | :searchFormFields="searchFormFields" |
| | | :searchFormOptions="searchFormOptions" |
| | | :table="table" |
| | | :extend="extend" |
| | | > |
| | | </view-grid> |
| | | </template> |
| | | <script> |
| | | import extend from "@/extension/inbound/Dt_MaterielToMes.js"; |
| | | import { ref, defineComponent } from "vue"; |
| | | export default defineComponent({ |
| | | setup() { |
| | | const table = ref({ |
| | | key: "id", |
| | | footer: "ç©æåæ´ç®¡ç", |
| | | cnName: "ç©æåæ´ä¿¡æ¯", |
| | | name: "Dt_MaterielToMes", |
| | | url: "/MaterielToMes/", |
| | | sortOrder: "desc", |
| | | autoIncrementKey: true |
| | | }); |
| | | |
| | | const editFormFields = ref({ |
| | | OldMaterialBarCode: "", |
| | | NewMaterialBarCode: "", |
| | | Unit: "", |
| | | factoryArea: "", |
| | | Qty: 0, |
| | | supplyCode: "", |
| | | warehouseCode: "", |
| | | BatchNo: "", |
| | | MaterielCode: "" |
| | | }); |
| | | |
| | | const searchFormFields = ref({ |
| | | OldMaterialBarCode: "", |
| | | NewMaterialBarCode: "", |
| | | BatchNo: "", |
| | | MaterielCode: "", |
| | | supplyCode: "", |
| | | factoryArea: "" |
| | | }); |
| | | |
| | | const searchFormOptions = ref([ |
| | | [ |
| | | { title: "æ§ç©æç¼å·", field: "OldMaterialBarCode", type: "text", placeholder: "æ¨¡ç³æç´¢æ§ç©æç¼å·" }, |
| | | { title: "æ°ç©æç¼å·", field: "NewMaterialBarCode", type: "text", placeholder: "æ¨¡ç³æç´¢æ°ç©æç¼å·" } |
| | | ], |
| | | [ |
| | | { title: "æ¹æ¬¡å·", field: "BatchNo", type: "text", placeholder: "æ¨¡ç³æç´¢æ¹æ¬¡å·" }, |
| | | { title: "ç©æç¼å·", field: "MaterielCode", type: "text", placeholder: "æ¨¡ç³æç´¢ç©æç¼å·" } |
| | | ], |
| | | [ |
| | | { title: "ä¾åºåID", field: "supplyCode", type: "text", placeholder: "æç´¢ä¾åºåID" }, |
| | | { title: "ååº", field: "factoryArea", type: "text", placeholder: "æç´¢ååº" } |
| | | ] |
| | | ]); |
| | | |
| | | const editFormOptions = ref([ |
| | | [ |
| | | { title: "æ§ç©æç¼å·", field: "OldMaterialBarCode" }, |
| | | { title: "æ°ç©æç¼å·", field: "NewMaterialBarCode" } |
| | | ], |
| | | [ |
| | | { title: "åä½", field: "Unit" }, |
| | | { title: "ååº", field: "factoryArea" }, |
| | | ], |
| | | [ |
| | | { title: "æ°é", field: "Qty" }, |
| | | { title: "ä¾åºåid", field: "supplyCode" } |
| | | ], |
| | | [ |
| | | { title: "ä»åºid", field: "warehouseCode" }, |
| | | { title: "æ¹æ¬¡å·", field: "BatchNo" } |
| | | ], |
| | | [ |
| | | { title: "ç©æç¼å·", field: "MaterielCode" } |
| | | ] |
| | | ]); |
| | | |
| | | const columns = ref([ |
| | | { |
| | | field: "Id", |
| | | title: "ID", |
| | | type: "int", |
| | | width: 80, |
| | | hidden: true, |
| | | readonly: true, |
| | | required: false, |
| | | edit: false, // ç¦æ¢åä¸è¡¨å |
| | | align: "left" |
| | | }, |
| | | { |
| | | field: "oldMaterialBarCode", |
| | | title: "æ§ç©æç¼å·", |
| | | type: "string", |
| | | width: 180, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "newMaterialBarCode", |
| | | title: "æ°ç©æç¼å·", |
| | | type: "string", |
| | | width: 180, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "unit", |
| | | title: "åä½", |
| | | type: "string", |
| | | width: 100, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "factoryArea", |
| | | title: "ååº", |
| | | type: "string", |
| | | width: 120, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "qty", |
| | | title: "æ°é", |
| | | type: "decimal", |
| | | width: 100, |
| | | align: "right", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "supplyCode", |
| | | title: "ä¾åºåID", |
| | | type: "string", |
| | | width: 150, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "warehouseCode", |
| | | title: "ä»åºID", |
| | | type: "string", |
| | | width: 150, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "BatchNo", |
| | | title: "æ¹æ¬¡å·", |
| | | type: "string", |
| | | width: 180, |
| | | align: "left", |
| | | sort: true |
| | | }, |
| | | { |
| | | field: "MaterielCode", |
| | | title: "ç©æç¼å·", |
| | | type: "string", |
| | | width: 180, |
| | | align: "left", |
| | | sort: true |
| | | } |
| | | ]); |
| | | |
| | | const detail = ref({ |
| | | cnName: "ç©æåæ´è¯¦æ
", |
| | | table: "MaterielChangeDetail", |
| | | columns: [], |
| | | sortName: "", |
| | | key: "" |
| | | }); |
| | | |
| | | return { |
| | | table, |
| | | extend, |
| | | searchFormFields, |
| | | searchFormOptions, |
| | | columns, |
| | | detail, |
| | | editFormFields, |
| | | editFormOptions |
| | | }; |
| | | } |
| | | }); |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using WIDESEA_Core.BaseController; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_Model.Models.Basic; |
| | | |
| | | namespace WIDESEA_WMSServer.Controllers.Basic |
| | | { |
| | | |
| | | [Route("api/MaterielToMes")] |
| | | [ApiController] |
| | | public class MaterielToMesController : ApiBaseController<IMaterielToMesService, Dt_MaterielToMes> |
| | | { |
| | | public MaterielToMesController(IMaterielToMesService service) : base(service) |
| | | { |
| | | } |
| | | } |
| | | } |