Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
| | |
| | | |
| | | // 3. 定义父级列processList,包含动态子列 |
| | | const processList = { |
| | | title: t('其他列'), |
| | | title: t('basicData.otherColumns'), |
| | | field: 'process', |
| | | children: otherColumns // 将动态列作为子列 |
| | | }; |
| | |
| | | |
| | | |
| | | <div style="margin-top: 10px"> |
| | | <el-button @click="emitParent()" style="width: 80px;height: 30px" type="primary" size="small">保存</el-button> |
| | | <el-button @click="emitParent()" style="width: 80px;height: 30px" type="primary" size="small">{{$t('basicData.save')}}</el-button> |
| | | </div> |
| | | |
| | | </div> |
| | |
| | | if(dataList.value.edgingProcess.edgingType!=null){ |
| | | emit('getEdgingProcess', dataList.value,dataList.value.edgingProcess.edgingType) |
| | | }else{ |
| | | ElMessage.error(t('请选择磨边类型')) |
| | | ElMessage.error(t('order.msg.pleaseProcessType')) |
| | | } |
| | | |
| | | } |
| | |
| | | } from '@element-plus/icons-vue' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import request from "@/utils/requestByFile" |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const { t } = useI18n() |
| | | const uploadRef = ref() |
| | | const fileList = ref([]) |
| | | const converting = ref(false) |
| | |
| | | request.post(`/orderFile/deleteOrderNumberFile/${props.orderId}/${props.rowIndex.orderNumber}`).then(res=>{ |
| | | result.value = null |
| | | conversionResult.value = null |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t("basicData.msg.deleteSuccess")) |
| | | }) |
| | | } |
| | | |
| | |
| | | const loadSupportedFormats = async () => { |
| | | try { |
| | | if (fileList.value.length === 0) { |
| | | ElMessage.warning('请先选择要上传的DWG文件') |
| | | ElMessage.warning(t("order.msg.pleaseUploadPicture1")) |
| | | return |
| | | } |
| | | loadingFormats.value = true |
| | |
| | | converting.value = true |
| | | progressPercentage.value = 0 |
| | | progressStatus.value = '' |
| | | progressText.value = '准备上传...' |
| | | progressText.value = t("order.msg.pleaseUploadPicture2") |
| | | |
| | | // 模拟进度更新 |
| | | const progressInterval = setInterval(() => { |
| | | if (progressPercentage.value < 80) { |
| | | progressPercentage.value += 10 |
| | | progressText.value = `上传中... ${progressPercentage.value}%` |
| | | progressText.value = t("order.msg.pleaseUploadPicture3")+progressPercentage.value+'%' |
| | | } |
| | | }, 500) |
| | | |
| | | |
| | | const data ={ |
| | | file:fileList.value[0].raw |
| | | file:fileList.value[0].raw, |
| | | name:fileList.value[0].raw.name |
| | | } |
| | | request.post(`/orderFile/updateOrderFileByOrderNumber/${props.orderId}/${props.rowIndex.orderNumber}`,data).then(res=>{ |
| | | if (res.code === '200') { |
| | |
| | | clearInterval(progressInterval) |
| | | progressPercentage.value = 100 |
| | | progressStatus.value = 'success' |
| | | progressText.value = '上传完成!' |
| | | progressText.value = t("order.msg.pleaseUploadPicture4") |
| | | uploadRef.value.clearFiles() |
| | | fileList.value = [] |
| | | setTimeout(() => { |
| | |
| | | } |
| | | }) |
| | | } catch (error) { |
| | | ElMessage.error('上传失败') |
| | | ElMessage.error(t("order.msg.pleaseUploadPicture5")) |
| | | } finally { |
| | | loadingFormats.value = false |
| | | } |
| | | } |
| | | |
| | | const fileTypeCheck = (file) => { |
| | | const fileName = file.raw.name.toLowerCase(); |
| | | |
| | | switch (true) { |
| | | case /\.dwg$/.test(fileName): |
| | | case /\.png$/.test(fileName): |
| | | case /\.jpg$/.test(fileName): |
| | | return true; |
| | | default: |
| | | return false; |
| | | } |
| | | }; |
| | | |
| | | |
| | | |
| | | const handleFileChange = (file) => { |
| | | console.log(file) |
| | | if (!(file.raw.name.toLowerCase().endsWith('.dwg') )) { |
| | | const fileTypeCheckBoole = fileTypeCheck(file) |
| | | if (!(fileTypeCheckBoole )) { |
| | | //ElMessage.error('请选择DWG或DXF格式的文件') |
| | | ElMessage.error('请选择DWG格式的文件') |
| | | ElMessage.error(t("order.msg.pleaseUploadPicture6")) |
| | | uploadRef.value.clearFiles() |
| | | return |
| | | } |
| | | |
| | | if (file.raw.size > 50 * 1024 * 1024) { |
| | | ElMessage.error('文件大小不能超过50MB') |
| | | ElMessage.error(t("order.msg.pleaseUploadPicture7")) |
| | | uploadRef.value.clearFiles() |
| | | return |
| | | } |
| | | fileList.value = [file] |
| | | ElMessage.success(`已选择文件: ${file.name}`) |
| | | ElMessage.success(t("order.msg.pleaseUploadPicture8")+file.name) |
| | | } |
| | | |
| | | const handleFileRemove = () => { |
| | |
| | | <div class="card-header"> |
| | | <span class="header-title"> |
| | | <el-icon><Document /></el-icon> |
| | | DWG文件上传 |
| | | {{$t("order.msg.pleaseUploadPicture9")}} |
| | | </span> |
| | | |
| | | </div> |
| | |
| | | :on-remove="handleFileRemove" |
| | | :file-list="fileList" |
| | | :limit="1" |
| | | :accept="'.dwg' || '.dxf' " |
| | | :disabled="converting" |
| | | > |
| | | <el-icon class="el-icon--upload"><UploadFilled /></el-icon> |
| | | <div class="el-upload__text"> |
| | | 拖拽DWG文件到此处或 <em>点击选择文件</em> |
| | | {{$t("order.msg.pleaseUploadPicture10")}} <em>{{$t("order.msg.pleaseUploadPicture11")}}</em> |
| | | </div> |
| | | <template #tip> |
| | | <div class="el-upload__tip"> |
| | | 仅支持 .dwg 格式文件,且文件大小不超过50MB |
| | | {{$t("order.msg.pleaseUploadPicture12")}} |
| | | </div> |
| | | </template> |
| | | </el-upload> |
| | |
| | | <template #icon> |
| | | <el-icon><MagicStick /></el-icon> |
| | | </template> |
| | | 保存 |
| | | {{$t("basicData.save")}} |
| | | </el-button> |
| | | |
| | | <el-button @click="handleReset" |
| | |
| | | <template #icon> |
| | | <el-icon><RefreshLeft /></el-icon> |
| | | </template> |
| | | 重置 |
| | | {{$t("craft.reset")}} |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 转换进度 --> |
| | | <div v-if="converting" class="conversion-progress"> |
| | | <el-divider content-position="left">上传进度</el-divider> |
| | | <el-divider content-position="left">{{$t("order.msg.pleaseUploadPicture13")}}</el-divider> |
| | | <el-progress |
| | | :percentage="progressPercentage" |
| | | :status="progressStatus" |
| | |
| | | |
| | | <!-- 转换结果 --> |
| | | <div v-if="conversionResult" class="conversion-result"> |
| | | <el-divider content-position="left">上传结果</el-divider> |
| | | <el-divider content-position="left">{{$t("order.msg.pleaseUploadPicture14")}}</el-divider> |
| | | |
| | | <el-result |
| | | icon="success" |
| | | :sub-title="`文件已成功转格式`" |
| | | :sub-title='t("order.msg.pleaseUploadPicture15")' |
| | | > |
| | | <template #extra> |
| | | <div class="result-content"> |
| | |
| | | ><template #icon> |
| | | <el-icon><Download/></el-icon> |
| | | </template> |
| | | 下载 |
| | | {{$t("order.msg.pleaseUploadPicture16")}} |
| | | </el-button> |
| | | <el-button |
| | | @click = 'deleteFile' |
| | |
| | | ><template #icon> |
| | | <el-icon><Delete /></el-icon> |
| | | </template> |
| | | 删除 |
| | | {{$t("basicData.delete")}} |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | |
| | | remarks2:'备注2', |
| | | remarks3:'备注3', |
| | | remarks4:'备注4', |
| | | otherColumns:'其他列', |
| | | msg:{ |
| | | max255:'أدخل 255 حرفًا كحد أقصى', |
| | | max10:"最多输入10个字符", |
| | |
| | | updateOrderIdErrorDiscrepancyInLength:'输入订单号长度不符', |
| | | updateOrderIdErrorInputNumber:'请输入数字', |
| | | updateOrderIdErrorNotNo1:'不能修改第一个单子', |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!' |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!', |
| | | pleaseProcessType:'请选择磨边类型', |
| | | pleaseUploadPicture1:"请先选择要上传的DWG文件或图片文件", |
| | | pleaseUploadPicture2:"准备上传...", |
| | | pleaseUploadPicture3:"上传中...", |
| | | pleaseUploadPicture4:"上传完成!", |
| | | pleaseUploadPicture5:"上传失败!", |
| | | pleaseUploadPicture6:"请选择DWG文件或JPG、PNG格式的图片文件", |
| | | pleaseUploadPicture7:"文件大小不能超过50MB", |
| | | pleaseUploadPicture8:"已选择文件:", |
| | | pleaseUploadPicture9:"文件上传", |
| | | pleaseUploadPicture10:"拖拽文件到此处或", |
| | | pleaseUploadPicture11:"点击选择文件", |
| | | pleaseUploadPicture12:"仅支持 .dwg、.jpg、.png 格式文件,且文件大小不超过50MB", |
| | | pleaseUploadPicture13:"上传进度", |
| | | pleaseUploadPicture14:"上传结果", |
| | | pleaseUploadPicture15:"文件已成功转格式", |
| | | pleaseUploadPicture16:"下载", |
| | | }, |
| | | preciseMode:'精确模式', |
| | | ambiguityModels:'模糊模式', |
| | |
| | | layer:'单片模式', |
| | | notFinish:'待完成', |
| | | processCardCollect:'流程卡汇总', |
| | | fileUpload:'文件上传' |
| | | |
| | | }, |
| | | searchOrder:{ |
| | |
| | | quantity:'工程用数量', |
| | | print1:'11列4行', |
| | | print2:'6行3列', |
| | | glassId:'玻璃编号', |
| | | polysId:'小片序号', |
| | | msg:{ |
| | | msg1:'流程卡创建失败', |
| | | msg2:'请输入小于等于待分数量的数字', |
| | |
| | | pleaseMsg1:'订单存在其他金额单价没有填写', |
| | | print1:'洛阳打印无尺寸', |
| | | print2:'洛阳打印有尺寸', |
| | | orderAdd:'订单添加', |
| | | |
| | | }, |
| | | replenish:{ |
| | |
| | | changeUserName:'تعديل اسم المستخدم', |
| | | userNameCannotBeEmpty:'لا يمكن ان يكون اسم المستخدم فارغاً', |
| | | }, |
| | | userLog:{ |
| | | page:{ |
| | | userListLog:'日志首页', |
| | | }, |
| | | loginName:'登录名', |
| | | userName:'用户名', |
| | | loginDate:'登录时间', |
| | | }, |
| | | orderBasicData:{ |
| | | page:{ |
| | | searchOrderBasicData:'النوع الأساسي', |
| | | searchGlassType:'نوع الزجاج', |
| | | searchProcessAttributeConfig:'工艺属性类别', |
| | | }, |
| | | glassCategory:'نوع الزجاج', |
| | | order:'طلب', |
| | |
| | | laminatingProcessB:'中空后合片工序', |
| | | laminatingProcessC:'夹胶工序', |
| | | laminatingProcessD:'中空工序', |
| | | please1:'请选择类别', |
| | | please2:'请输入名称', |
| | | please3:'请输入别名', |
| | | }, |
| | | machine:{ |
| | | page:{ |
| | |
| | | remarks2:'备注2', |
| | | remarks3:'备注3', |
| | | remarks4:'备注4', |
| | | otherColumns:'其他列', |
| | | msg:{ |
| | | max255:"The value contains a maximum of 255 characters", |
| | | max10:"最多输入10个字符", |
| | |
| | | updateOrderIdErrorDiscrepancyInLength:'输入订单号长度不符', |
| | | updateOrderIdErrorInputNumber:'请输入数字', |
| | | updateOrderIdErrorNotNo1:'不能修改第一个单子', |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!' |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!', |
| | | pleaseProcessType:'请选择磨边类型', |
| | | pleaseUploadPicture1:"请先选择要上传的DWG文件或图片文件", |
| | | pleaseUploadPicture2:"准备上传...", |
| | | pleaseUploadPicture3:"上传中...", |
| | | pleaseUploadPicture4:"上传完成!", |
| | | pleaseUploadPicture5:"上传失败!", |
| | | pleaseUploadPicture6:"请选择DWG文件或JPG、PNG格式的图片文件", |
| | | pleaseUploadPicture7:"文件大小不能超过50MB", |
| | | pleaseUploadPicture8:"已选择文件:", |
| | | pleaseUploadPicture9:"文件上传", |
| | | pleaseUploadPicture10:"拖拽文件到此处或", |
| | | pleaseUploadPicture11:"点击选择文件", |
| | | pleaseUploadPicture12:"仅支持 .dwg、.jpg、.png 格式文件,且文件大小不超过50MB", |
| | | pleaseUploadPicture13:"上传进度", |
| | | pleaseUploadPicture14:"上传结果", |
| | | pleaseUploadPicture15:"文件已成功转格式", |
| | | pleaseUploadPicture16:"下载", |
| | | }, |
| | | preciseMode:'精确模式', |
| | | ambiguityModels:'模糊模式', |
| | |
| | | layer:'单片模式', |
| | | notFinish:'待完成', |
| | | processCardCollect:'流程卡汇总', |
| | | fileUpload:'文件上传' |
| | | |
| | | }, |
| | | searchOrder:{ |
| | |
| | | quantity:'工程用数量', |
| | | print1:'11列4行', |
| | | print2:'6行3列', |
| | | glassId:'玻璃编号', |
| | | polysId:'小片序号', |
| | | msg:{ |
| | | msg1:'流程卡创建失败', |
| | | msg2:'请输入小于等于待分数量的数字', |
| | |
| | | pleaseMsg1:'There are other amounts in the order and the unit price is not filled in', |
| | | print1:'洛阳打印无尺寸', |
| | | print2:'洛阳打印有尺寸', |
| | | orderAdd:'订单添加', |
| | | |
| | | }, |
| | | replenish:{ |
| | |
| | | changeUserName:'Modifying a user name', |
| | | userNameCannotBeEmpty:'The user name cannot be empty', |
| | | }, |
| | | userLog:{ |
| | | page:{ |
| | | userListLog:'日志首页', |
| | | }, |
| | | loginName:'登录名', |
| | | userName:'用户名', |
| | | loginDate:'登录时间', |
| | | }, |
| | | orderBasicData:{ |
| | | page:{ |
| | | searchOrderBasicData:'Base type', |
| | | searchGlassType:'Type of glass', |
| | | searchProcessAttributeConfig:'工艺属性类别', |
| | | }, |
| | | glassCategory:'Type of glass', |
| | | order:'Order', |
| | |
| | | laminatingProcessB:'中空后合片工序', |
| | | laminatingProcessC:'夹胶工序', |
| | | laminatingProcessD:'中空工序', |
| | | please1:'请选择类别', |
| | | please2:'请输入名称', |
| | | please3:'请输入别名', |
| | | }, |
| | | machine:{ |
| | | page:{ |
| | |
| | | remarks2:'备注2', |
| | | remarks3:'备注3', |
| | | remarks4:'备注4', |
| | | otherColumns:'其他列', |
| | | msg:{ |
| | | max255:"최대 255자 입력 가능", |
| | | max10:"最多输入10个字符", |
| | |
| | | updateOrderIdErrorDiscrepancyInLength:'주문번호 자릿수 불일치', |
| | | updateOrderIdErrorInputNumber:'숫자 입력 필요', |
| | | updateOrderIdErrorNotNo1:'첫 번째 항목 수정 불가', |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!' |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!', |
| | | pleaseProcessType:'请选择磨边类型', |
| | | pleaseUploadPicture1:"请先选择要上传的DWG文件或图片文件", |
| | | pleaseUploadPicture2:"准备上传...", |
| | | pleaseUploadPicture3:"上传中...", |
| | | pleaseUploadPicture4:"上传完成!", |
| | | pleaseUploadPicture5:"上传失败!", |
| | | pleaseUploadPicture6:"请选择DWG文件或JPG、PNG格式的图片文件", |
| | | pleaseUploadPicture7:"文件大小不能超过50MB", |
| | | pleaseUploadPicture8:"已选择文件:", |
| | | pleaseUploadPicture9:"文件上传", |
| | | pleaseUploadPicture10:"拖拽文件到此处或", |
| | | pleaseUploadPicture11:"点击选择文件", |
| | | pleaseUploadPicture12:"仅支持 .dwg、.jpg、.png 格式文件,且文件大小不超过50MB", |
| | | pleaseUploadPicture13:"上传进度", |
| | | pleaseUploadPicture14:"上传结果", |
| | | pleaseUploadPicture15:"文件已成功转格式", |
| | | pleaseUploadPicture16:"下载", |
| | | }, |
| | | preciseMode:'精确模式', |
| | | ambiguityModels:'模糊模式', |
| | |
| | | layer:'单片模式', |
| | | notFinish:'待完成', |
| | | processCardCollect:'流程卡汇总', |
| | | fileUpload:'文件上传' |
| | | |
| | | }, |
| | | searchOrder:{ |
| | |
| | | isStorage:'입고 완료된 주문은 시스템 되돌리기가 불가능 합니다.', |
| | | BackSure:'해당 프로세스를 원클릭으로 되돌리시겠습니까?', |
| | | filterError:'请输入正确格式的筛选条件' |
| | | |
| | | }, |
| | | updateOrderId:'주문 번호 수정', |
| | | reportingTransfer:'작업 실적 이관' |
| | |
| | | quantity:'工程用数量', |
| | | print1:'11列4行', |
| | | print2:'6行3列', |
| | | glassId:'玻璃编号', |
| | | polysId:'小片序号', |
| | | msg:{ |
| | | msg1:'流程卡创建失败', |
| | | msg2:'请输入小于等于待分数量的数字', |
| | |
| | | pleaseMsg1:'주문서 기타금액 단가가 기입되지 않았습니다', |
| | | print1:'洛阳打印无尺寸', |
| | | print2:'洛阳打印有尺寸', |
| | | orderAdd:'订单添加', |
| | | |
| | | }, |
| | | replenish:{ |
| | |
| | | changeUserName:'사용자 명 수정', |
| | | userNameCannotBeEmpty:'사용자 이름은 필수 입력 항목입니다', |
| | | }, |
| | | userLog:{ |
| | | page:{ |
| | | userListLog:'日志首页', |
| | | }, |
| | | loginName:'登录名', |
| | | userName:'用户名', |
| | | loginDate:'登录时间', |
| | | }, |
| | | orderBasicData:{ |
| | | page:{ |
| | | searchOrderBasicData:'기본 유형', |
| | | searchGlassType:'유리 분류', |
| | | searchProcessAttributeConfig:'工艺属性类别', |
| | | }, |
| | | glassCategory:'유리 분류', |
| | | order:'주문 관리', |
| | |
| | | laminatingProcessB:'중공 후 접합 공정', |
| | | laminatingProcessC:'적층 공정', |
| | | laminatingProcessD:'중공 유리 제조 공정', |
| | | please1:'请选择类别', |
| | | please2:'请输入名称', |
| | | please3:'请输入别名', |
| | | }, |
| | | machine:{ |
| | | page:{ |
| | |
| | | remarks2:'备注2', |
| | | remarks3:'备注3', |
| | | remarks4:'备注4', |
| | | otherColumns:'其他列', |
| | | msg:{ |
| | | max255:"Введите 255 символов.", |
| | | max10:"最多输入10个字符", |
| | |
| | | updateOrderIdErrorDiscrepancyInLength:'输入订单号长度不符', |
| | | updateOrderIdErrorInputNumber:'请输入数字', |
| | | updateOrderIdErrorNotNo1:'不能修改第一个单子', |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!' |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!', |
| | | pleaseProcessType:'请选择磨边类型', |
| | | pleaseUploadPicture1:"请先选择要上传的DWG文件或图片文件", |
| | | pleaseUploadPicture2:"准备上传...", |
| | | pleaseUploadPicture3:"上传中...", |
| | | pleaseUploadPicture4:"上传完成!", |
| | | pleaseUploadPicture5:"上传失败!", |
| | | pleaseUploadPicture6:"请选择DWG文件或JPG、PNG格式的图片文件", |
| | | pleaseUploadPicture7:"文件大小不能超过50MB", |
| | | pleaseUploadPicture8:"已选择文件:", |
| | | pleaseUploadPicture9:"文件上传", |
| | | pleaseUploadPicture10:"拖拽文件到此处或", |
| | | pleaseUploadPicture11:"点击选择文件", |
| | | pleaseUploadPicture12:"仅支持 .dwg、.jpg、.png 格式文件,且文件大小不超过50MB", |
| | | pleaseUploadPicture13:"上传进度", |
| | | pleaseUploadPicture14:"上传结果", |
| | | pleaseUploadPicture15:"文件已成功转格式", |
| | | pleaseUploadPicture16:"下载", |
| | | }, |
| | | preciseMode:'精确模式', |
| | | ambiguityModels:'模糊模式', |
| | |
| | | layer:'单片模式', |
| | | notFinish:'待完成', |
| | | processCardCollect:'流程卡汇总', |
| | | |
| | | fileUpload:'文件上传' |
| | | }, |
| | | searchOrder:{ |
| | | createOrder:'Выписать заказ', |
| | |
| | | quantity:'工程用数量', |
| | | print1:'11列4行', |
| | | print2:'6行3列', |
| | | glassId:'玻璃编号', |
| | | polysId:'小片序号', |
| | | msg:{ |
| | | msg1:'流程卡创建失败', |
| | | msg2:'请输入小于等于待分数量的数字', |
| | |
| | | pleaseMsg1:'订单存在其他金额单价没有填写', |
| | | print1:'洛阳打印无尺寸', |
| | | print2:'洛阳打印有尺寸', |
| | | orderAdd:'订单添加', |
| | | |
| | | }, |
| | | replenish:{ |
| | |
| | | changeUserName:'修改用户名称', |
| | | userNameCannotBeEmpty:'用户名称不能为空', |
| | | }, |
| | | userLog:{ |
| | | page:{ |
| | | userListLog:'日志首页', |
| | | }, |
| | | loginName:'登录名', |
| | | userName:'用户名', |
| | | loginDate:'登录时间', |
| | | }, |
| | | orderBasicData:{ |
| | | page:{ |
| | | searchOrderBasicData:'Базовый тип', |
| | | searchGlassType:'Стекло категории', |
| | | searchProcessAttributeConfig:'工艺属性类别', |
| | | }, |
| | | glassCategory:'Стекло категории', |
| | | order:'Заказы', |
| | |
| | | laminatingProcessB:'中空后合片工序', |
| | | laminatingProcessC:'夹胶工序', |
| | | laminatingProcessD:'中空工序', |
| | | please1:'请选择类别', |
| | | please2:'请输入名称', |
| | | please3:'请输入别名', |
| | | }, |
| | | machine:{ |
| | | page:{ |
| | |
| | | remarks2:'备注2', |
| | | remarks3:'备注3', |
| | | remarks4:'备注4', |
| | | otherColumns:'其他列', |
| | | msg:{ |
| | | max255:"最多输入255个字符", |
| | | max10:"最多输入10个字符", |
| | |
| | | updateOrderIdErrorDiscrepancyInLength:'输入订单号长度不符', |
| | | updateOrderIdErrorInputNumber:'请输入数字', |
| | | updateOrderIdErrorNotNo1:'不能修改第一个单子', |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!' |
| | | updateOrderError:'此订单已工艺审核或修改无法再次修改,页面将自动刷新!', |
| | | pleaseProcessType:'请选择磨边类型', |
| | | pleaseUploadPicture1:"请先选择要上传的DWG文件或图片文件", |
| | | pleaseUploadPicture2:"准备上传...", |
| | | pleaseUploadPicture3:"上传中...", |
| | | pleaseUploadPicture4:"上传完成!", |
| | | pleaseUploadPicture5:"上传失败!", |
| | | pleaseUploadPicture6:"请选择DWG文件或JPG、PNG格式的图片文件", |
| | | pleaseUploadPicture7:"文件大小不能超过50MB", |
| | | pleaseUploadPicture8:"已选择文件:", |
| | | pleaseUploadPicture9:"文件上传", |
| | | pleaseUploadPicture10:"拖拽文件到此处或", |
| | | pleaseUploadPicture11:"点击选择文件", |
| | | pleaseUploadPicture12:"仅支持 .dwg、.jpg、.png 格式文件,且文件大小不超过50MB", |
| | | pleaseUploadPicture13:"上传进度", |
| | | pleaseUploadPicture14:"上传结果", |
| | | pleaseUploadPicture15:"文件已成功转格式", |
| | | pleaseUploadPicture16:"下载", |
| | | }, |
| | | preciseMode:'精确模式', |
| | | ambiguityModels:'模糊模式', |
| | |
| | | layer:'单片模式', |
| | | notFinish:'待完成', |
| | | processCardCollect:'流程卡汇总', |
| | | fileUpload:'文件上传' |
| | | |
| | | }, |
| | | searchOrder:{ |
| | |
| | | quantity:'工程用数量', |
| | | print1:'11列4行', |
| | | print2:'6行3列', |
| | | glassId:'玻璃编号', |
| | | polysId:'小片序号', |
| | | msg:{ |
| | | msg1:'流程卡创建失败', |
| | | msg2:'请输入小于等于待分数量的数字', |
| | |
| | | pleaseMsg1:'订单存在其他金额单价没有填写', |
| | | print1:'洛阳打印无尺寸', |
| | | print2:'洛阳打印有尺寸', |
| | | orderAdd:'订单添加', |
| | | |
| | | }, |
| | | replenish:{ |
| | |
| | | changeUserName:'修改用户名称', |
| | | userNameCannotBeEmpty:'用户名称不能为空', |
| | | }, |
| | | userLog:{ |
| | | page:{ |
| | | userListLog:'日志首页', |
| | | }, |
| | | loginName:'登录名', |
| | | userName:'用户名', |
| | | loginDate:'登录时间', |
| | | }, |
| | | orderBasicData:{ |
| | | page:{ |
| | | searchOrderBasicData:'基础类型', |
| | | searchGlassType:'玻璃类别', |
| | | searchProcessAttributeConfig:'工艺属性类别', |
| | | }, |
| | | glassCategory:'玻璃类别', |
| | | order:'订单', |
| | |
| | | laminatingProcessB:'中空后合片工序', |
| | | laminatingProcessC:'夹胶工序', |
| | | laminatingProcessD:'中空工序', |
| | | please1:'请选择类别', |
| | | please2:'请输入名称', |
| | | please3:'请输入别名', |
| | | }, |
| | | machine:{ |
| | | page:{ |
| | |
| | | {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'area',width: '100', title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'squareMillimeter',width: '100', title: t('平方毫米')}, |
| | | {field: 'squareMillimeter',width: '100', title: t('report.thicknessArea')}, |
| | | {field: 'money',width: '100', title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project',width: '100', title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerName',width: '100', title: t('order.customers'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | |
| | | {field: 'order.customerName',width: '100', title: t('order.customers'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.orderType',width: '100', title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'area',width: '100', title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'squareMillimeter',width: '100', title: t('平方毫米')}, |
| | | {field: 'squareMillimeter',width: '100', title: t('report.thicknessArea')}, |
| | | {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | |
| | | <div style="display: flex; height: 90vh;">
|
| | | <!-- Sidebar -->
|
| | | <div class="sidebar" style="width: 200px; background: #f4f4f4; padding: 10px; height: 93%; overflow-y: auto; max-height: 90vh; border-radius: 8px;">
|
| | | <div class="folder">
|
| | | <div
|
| | | class="folder-header" style="padding: 8px; background: #e0e0e0; margin-bottom: 5px; border-radius: 4px; user-select: none; display: flex; justify-content: space-between; align-items: center;"
|
| | | >
|
| | | <span @click="toggleFolder('pending')" style="flex: 1; cursor: pointer;">待切割原片</span>
|
| | | <button
|
| | | @click="toggleFolder('pending')" style="background: none; border: none; cursor: pointer; font-size: 14px; padding: 2px 5px; border-radius: 3px;"
|
| | | :title="openFolders.pending ? '收起' : '展开'"
|
| | | >
|
| | | <el-icon v-if="openFolders.pending"><ArrowUp /></el-icon>
|
| | | <el-icon v-else><ArrowDown /></el-icon>
|
| | | </button>
|
| | | </div>
|
| | | <div v-show="openFolders.pending" class="folder-content" style="padding-left: 15px;">
|
| | | <div
|
| | | v-for="(layout, layoutIndex) in layouts"
|
| | | :key="layoutIndex"
|
| | |
| | | >
|
| | | {{ layout.realWidth }} × {{ layout.realHeight }} × {{ layout.quantity }}
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <!-- 待补片队列文件夹 -->
|
| | | <div class="folder">
|
| | | <div
|
| | | class="folder-header" style="padding: 8px; background: #e0e0e0; margin-bottom: 5px; border-radius: 4px; user-select: none; display: flex; justify-content: space-between; align-items: center;"
|
| | | >
|
| | | <span @click="toggleFolder('patchQueue')" style="flex: 1; cursor: pointer;">待补片队列</span>
|
| | | <button
|
| | | @click="toggleFolder('patchQueue')" style="background: none; border: none; cursor: pointer; font-size: 14px; padding: 2px 5px; border-radius: 3px;"
|
| | | :title="openFolders.patchQueue ? '收起' : '展开'"
|
| | | >
|
| | | <el-icon v-if="openFolders.patchQueue"><ArrowUp /></el-icon>
|
| | | <el-icon v-else><ArrowDown /></el-icon>
|
| | | </button>
|
| | | </div>
|
| | | <div v-show="openFolders.patchQueue" class="folder-content" style="padding-left: 15px;">
|
| | | <div style="padding: 10px; color: #666; font-style: italic;">
|
| | | 暂无补片任务
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <!-- 添加自定义尺寸文件夹 -->
|
| | | <div class="folder">
|
| | | <div
|
| | | class="folder-header" style="padding: 8px; background: #e0e0e0; margin-bottom: 5px; border-radius: 4px; user-select: none; display: flex; justify-content: space-between; align-items: center;"
|
| | | >
|
| | | <span @click="toggleFolder('customSize')" style="flex: 1; cursor: pointer;">添加自定义尺寸</span>
|
| | | <button
|
| | | @click="toggleFolder('customSize')" style="background: none; border: none; cursor: pointer; font-size: 14px; padding: 2px 5px; border-radius: 3px;"
|
| | | :title="openFolders.customSize ? '收起' : '展开'"
|
| | | >
|
| | | <el-icon v-if="openFolders.customSize"><ArrowUp /></el-icon>
|
| | | <el-icon v-else><ArrowDown /></el-icon>
|
| | | </button>
|
| | | </div>
|
| | | <div v-show="openFolders.customSize" class="folder-content" style="padding-left: 15px;">
|
| | | <div style="padding: 10px;">
|
| | | <button
|
| | | @click="showAddCustomSizeDialog" style="width: 100%; padding: 8px; background: #409eff; color: white; border: none; border-radius: 4px; cursor: pointer;"
|
| | | >
|
| | | + 添加自定义尺寸
|
| | | </button>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | |
|
| | | </div>
|
| | |
|
| | | <!-- Main Layout Panel -->
|
| | |
| | | <script setup>
|
| | | import { ref, reactive, onMounted, onUnmounted } from 'vue';
|
| | | import { useRouter } from 'vue-router';
|
| | | import { ArrowUp, ArrowDown } from '@element-plus/icons-vue'
|
| | | import request from "@/utils/request";
|
| | | const router = useRouter();
|
| | | import { useI18n } from "vue-i18n";
|
| | |
| | | ElMessage.warning(res.msg);
|
| | | }
|
| | | });
|
| | | };
|
| | |
|
| | | const openFolders = ref({
|
| | | pending: true, // 默认展开"待切割原片"文件夹
|
| | | patchQueue: false, // 默认收起"待补片队列"文件夹
|
| | | customSize: false // 默认收起"添加自定义尺寸"文件夹
|
| | | });
|
| | |
|
| | | // 切换文件夹展开/收起状态
|
| | | const toggleFolder = (folderName) => {
|
| | | openFolders.value[folderName] = !openFolders.value[folderName];
|
| | | };
|
| | |
|
| | |
|
| | |
|
| | | const showAddCustomSizeDialog = () => {
|
| | | // 检查是否选择了版图
|
| | | if (selectedLayoutIndex.value === null || layouts.value.length === 0) {
|
| | | ElMessage.warning('请先选择一个版图');
|
| | | return;
|
| | | }
|
| | |
|
| | | // 使用现有的添加成品逻辑,传入当前选中的版图索引
|
| | | showAddDialog(selectedLayoutIndex.value);
|
| | | };
|
| | |
|
| | | //查询设置的基础信息架号,矩形颜色,订单序号等
|
| | |
| | | .context-menu div:hover {
|
| | | background-color: #f0f0f0;
|
| | | }
|
| | |
|
| | | .folder-header {
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .folder-header:hover {
|
| | | background-color: #d0d0d0 !important;
|
| | | }
|
| | |
|
| | | .folder-content {
|
| | | border-left: 2px solid #ccc;
|
| | | margin-left: 5px;
|
| | | }
|
| | | </style>
|
| | |
| | | return |
| | | } |
| | | if (printMerge.value === null || printMerge.value === '') { |
| | | ElMessage.warning('请填入需要合并的层') |
| | | ElMessage.warning(t('rework.msg1')) |
| | | return |
| | | } |
| | | |
| | |
| | | return |
| | | } |
| | | if (printMerge.value === null || printMerge.value === '') { |
| | | ElMessage.warning('请填入需要合并的层') |
| | | ElMessage.warning(t('rework.msg1')) |
| | | return |
| | | } |
| | | |
| | |
| | | }, |
| | | { |
| | | field: 'polys_id', |
| | | title: t('小片序号'), |
| | | title: t('processCard.polysId'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'glass_id', |
| | | title: t('玻璃编号'), |
| | | title: t('processCard.glassId'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/orderBasicData/searchBasicData' }">{{ $t('orderBasicData.page.searchOrderBasicData') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/orderBasicData/searchGlassType' }">{{ $t('orderBasicData.page.searchGlassType') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/orderBasicData/searchProcessAttributeConfig' }">{{ $t('工艺属性类别') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/orderBasicData/searchProcessAttributeConfig' }">{{ $t('orderBasicData.page.searchProcessAttributeConfig') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",}, |
| | | {type: 'seq', title: t('basicData.number'), width: 80 ,fixed:"left",}, |
| | | {field:'level',title: t('orderBasicData.level')}, |
| | | {field:'processType',title: t('别名'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field:'processType',title: t('orderBasicData.alias'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field:'processName',title: t('orderBasicData.name'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | | {field:'inputType',title: t('类型')}, |
| | | {field:'inputType',title: t('machine.type')}, |
| | | {field:'createTime',title: t('basicData.creationTime')} |
| | | ], |
| | | |
| | |
| | | |
| | | const saveBasicData = (type) =>{ |
| | | if(submit.value.glassLevel[0]===null){ |
| | | ElMessage.warning("请选择类别") |
| | | ElMessage.warning(t('orderBasicData.please1')) |
| | | return |
| | | } |
| | | if(submit.value.processName===null||submit.value.processName===""){ |
| | | ElMessage.warning("请输入名称") |
| | | ElMessage.warning(t('orderBasicData.please2')) |
| | | return |
| | | } |
| | | if(submit.value.processType===null||submit.value.processType===""){ |
| | | ElMessage.warning("请输入别名") |
| | | ElMessage.warning(t('orderBasicData.please3')) |
| | | return |
| | | } |
| | | submit.value.type = type |
| | |
| | | /> |
| | | </el-row> |
| | | <el-row> |
| | | 别名:<el-input style="width: 250px;" v-model="submit.processType"/> |
| | | {{ $t('orderBasicData.alias') }}:<el-input style="width: 250px;" v-model="submit.processType"/> |
| | | </el-row> |
| | | <el-row> |
| | | 名称:<el-input style="width: 250px;" v-model="submit.processName"/> |
| | | {{ $t('orderBasicData.name') }}:<el-input style="width: 250px;" v-model="submit.processName"/> |
| | | </el-row> |
| | | <el-row> |
| | | 类型:<el-input style="width: 250px;" v-model="submit.inputType"/> |
| | | {{ $t('machine.type') }}:<el-input style="width: 250px;" v-model="submit.inputType"/> |
| | | </el-row> |
| | | <el-row> |
| | | <el-button v-if="!rowIndex" @click="saveBasicData('add')" type="primary">{{ $t('basicData.insert') }}</el-button> |
| | |
| | | {'code': 'addToExamine', 'name': t('reportingWorks.saveAndReview'),status: 'primary',icon: 'vxe-icon-save'}, |
| | | {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'}, |
| | | {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'}, |
| | | //{'code': 'addOtherOrders','name': t('订单添加'),'status': 'primary'} |
| | | //{'code': 'addOtherOrders','name': t('delivery.orderAdd'),'status': 'primary'} |
| | | //{'code': 'glassShelf', 'name': t('finishedGlassShelf.finishedGlassShelfEmit'),status: 'primary'} |
| | | ], |
| | | /*import: false, |
| | |
| | | |
| | | <el-dialog |
| | | v-model="dialogSelectOrderVisible" |
| | | :title="t('订单添加')" |
| | | :title="t('delivery.orderAdd')" |
| | | style="width: 70%;height:75% " |
| | | destroy-on-close |
| | | :close-on-click-modal="false" |
| | |
| | | { code: 'updateOrderId', name: t('searchOrder.updateOrderId'), prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: false }, |
| | | { code: 'reportingTransfer', name: t('searchOrder.reportingTransfer'), prefixIcon: 'vxe-icon-send', visible: true, disabled: true }, |
| | | { code: 'uploadPicture', name: t('order.graphic'),prefixIcon: 'vxe-icon-picture-fill', visible: true, }, |
| | | { code: 'fileUpload', name: t('上传DWG文件'),prefixIcon: 'vxe-icon-picture-fill', visible: true, } |
| | | { code: 'fileUpload', name: t('order.fileUpload'),prefixIcon: 'vxe-icon-picture-fill', visible: true, } |
| | | ] |
| | | ] |
| | | } |
| | |
| | | { |
| | | field: 'processAttribute', |
| | | width: 160, |
| | | title: t('工艺属性'), |
| | | title: t('craft.processAttribute'), |
| | | filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged |
| | | }, |
| | | {field: 'processingNote',width:200, title: t('order.processingNote'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | |
| | | const { t } = useI18n() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | const dialogVisible = ref(false) |
| | | const dialogVisibleProcess = ref(false) |
| | | let roleList = ref([]) |
| | | //工序 |
| | | const processValue = ref() |
| | |
| | | //表头参数 |
| | | columns:[ |
| | | {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"}, |
| | | {field: 'operator_id',width:120, title: t('登录名'), sortable: true, filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'operator',width:120, title: t('用户名'), sortable: true, filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'format_create_time',width:160, title: t('登录时间'),sortable: true}, |
| | | {field: 'operator_id',width:120, title: t('userLog.loginName'), sortable: true, filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'operator',width:120, title: t('userLog.userName'), sortable: true, filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'format_create_time',width:160, title: t('userLog.loginDate'),sortable: true}, |
| | | ], |
| | | |
| | | //表头按钮 |
| | |
| | | |
| | | const getTableRow = (row,type) => { |
| | | switch (type) { |
| | | case 'edit': { |
| | | userRole.value.roles = [] |
| | | dialogVisible.value = true |
| | | row.userRoleList.forEach(item=>{ |
| | | userRole.value.roles.push(item.roleId) |
| | | }) |
| | | userRole.value.userId = row.id |
| | | break |
| | | } |
| | | case 'delete': { |
| | | request.post(`/userInfo/userDelete/${row.id}`).then((res) => { |
| | | if(res.code==200 && res.data ===true){ |
| | | ElMessage.success(t('searchOrder.msgDeleteSuccess')) |
| | | router.push({path:'/main/user/userList',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning(t('searchOrder.msgDeleteFail')) |
| | | } |
| | | }) |
| | | break |
| | | } |
| | | case 'editProcess': { |
| | | dialogVisibleProcess.value = true |
| | | processRow.value.userId = row.id |
| | | break |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | </div> |
| | | </template> |
| | | |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('user.setUpRoles') }}</el-button> |
| | | <el-button @click="getTableRow(row,'editProcess')" link type="primary" size="small">{{ $t('user.setProcess') }}</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')"> |
| | | <template #reference> |
| | | <el-button link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | | </el-popconfirm> |
| | | </template> |
| | | |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | | <div> |
| | |
| | | </vxe-grid> |
| | | </div> |
| | | |
| | | <el-dialog |
| | | v-model="dialogVisible" |
| | | :title="$t('user.roleSelection')" |
| | | width="30%" |
| | | :before-close="handleClose" |
| | | > |
| | | <span> |
| | | <el-radio v-for="(item) in roleList" |
| | | :label="item.id" |
| | | v-model="userRole.roles" > |
| | | {{item.role}} |
| | | </el-radio> |
| | | </span> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">{{ $t('basicData.cancelButtonText') }}</el-button> |
| | | <el-button type="primary" @click="roleUpdate"> |
| | | {{ $t('basicData.confirmButtonText') }} |
| | | </el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog |
| | | v-model="dialogVisibleProcess" |
| | | :title="$t('user.roleSelection')" |
| | | width="30%" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-select v-model="processValue" clearable :placeholder="$t('reportingWorks.selectProcess')" default-value="default_city" style="width: 120px"> |
| | | <el-option |
| | | v-for="item in processRow['process']" |
| | | :key="item.id" |
| | | :label="item.basic_name" |
| | | :value="item.basic_name" |
| | | /> |
| | | </el-select> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogVisibleProcess = false">{{ $t('basicData.cancelButtonText') }}</el-button> |
| | | <el-button type="primary" @click="updateProcess"> |
| | | {{ $t('basicData.confirmButtonText') }} |
| | | </el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <div id="main-div"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/userLog/userListLog' }">{{$t('日志首页')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/userLog/userListLog' }">{{$t('userLog.page.userListLog')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" /> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.sql.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | @RestController |
| | |
| | | } |
| | | |
| | | |
| | | @PostMapping("/calculate") |
| | | public ResponseEntity<Map<String, Object>> receiveOptimizeRequest( |
| | | @RequestBody Map<String, Object> requestData) { |
| | | |
| | | Map<String, Object> response = new HashMap<>(); |
| | | |
| | | try { |
| | | // 立即返回接收成功的响应 |
| | | response.put("code", "200"); |
| | | response.put("msg", "success"); |
| | | response.put("data", ""); |
| | | |
| | | // 异步处理计算任务 |
| | | // glassOptimizeService.processExternalOptimizeRequest(requestData); |
| | | System.out.println(requestData); |
| | | |
| | | return ResponseEntity.ok(response); |
| | | } catch (Exception e) { |
| | | response.put("code", 201); |
| | | response.put("msg", "false: " + e.getMessage()); |
| | | response.put("data", ""); |
| | | return ResponseEntity.status(500).body(response); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | |
| | | private final OrderFileService orderFileService; |
| | | |
| | | @PostMapping("/updateOrderFileByOrderNumber/{orderId}/{orderNumber}") |
| | | public Result updateOrderFileByOrderNumber(@RequestParam("file") MultipartFile file, @PathVariable String orderId, @PathVariable String orderNumber) throws IOException { |
| | | public Result updateOrderFileByOrderNumber( |
| | | @RequestParam("file") MultipartFile file, |
| | | @RequestParam("name") String name, |
| | | @PathVariable String orderId, |
| | | @PathVariable String orderNumber) throws IOException { |
| | | |
| | | return Result.success(orderFileService.updateOrderFileByOrderNumber(file,orderId,orderNumber)); |
| | | return Result.success(orderFileService.updateOrderFileByOrderNumber(file,name,orderId,orderNumber)); |
| | | } |
| | | @PostMapping("/getOrderFilePicture") |
| | | public Result getOrderFilePicture(@RequestBody List<Map<String,Object>> orderDetails) throws NoSuchFieldException { |
| | |
| | | return orderFiles; |
| | | } |
| | | |
| | | public Object updateOrderFileByOrderNumber(MultipartFile file,String orderId,String orderNumber) throws IOException { |
| | | public Object updateOrderFileByOrderNumber(MultipartFile file,String name,String orderId,String orderNumber) throws IOException { |
| | | //判断是否规定的格式后缀名 |
| | | if(!isAllowedFile(name)){ |
| | | return null; |
| | | } |
| | | |
| | | |
| | | try (InputStream is = License.class.getResourceAsStream("/lisence.xml")) { |
| | | String base64 = null; |
| | | if(name.toLowerCase().endsWith(".dwg")){ |
| | | |
| | | License license = new License(); |
| | | license.setLicense(is); |
| | | |
| | |
| | | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| | | image.save(outputStream, options); |
| | | byte[] imageBytes = outputStream.toByteArray(); |
| | | String base64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes); |
| | | base64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes); |
| | | }else{ |
| | | base64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(file.getBytes()); |
| | | } |
| | | |
| | | OrderFile orderFile = new OrderFile(); |
| | | orderFile.setImageBase64(base64); |
| | | orderFile.setFileName(file.getName()); |
| | |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | public Object getOrderNumberFile(String orderId, String orderNumber) { |
| | |
| | | .eq("order_number", orderNumber) |
| | | ) > 0; |
| | | } |
| | | |
| | | public static boolean isAllowedFile(String fileName) { |
| | | List<String> allowedExtensions = Arrays.asList(".dwg", ".png", ".jpg"); |
| | | if (fileName == null || fileName.isEmpty()) { |
| | | return false; |
| | | } |
| | | |
| | | String lowerFileName = fileName.toLowerCase(); |
| | | |
| | | for (String ext : allowedExtensions) { |
| | | if (!ext.startsWith(".")) { |
| | | ext = "." + ext; |
| | | } |
| | | if (lowerFileName.endsWith(ext)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | } |