diff --git a/src/api/device.ts b/src/api/device.ts new file mode 100644 index 0000000..ff636b2 --- /dev/null +++ b/src/api/device.ts @@ -0,0 +1,81 @@ +import { request} from '@/utils/request' +import { update } from 'three/examples/jsm/libs/tween.module.js' + +export interface Device{ + id:number, + deviceCode:string, + deviceName:string, + deviceTypeId:number, + deviceType:string, + sectionId:number, + spec:string, + manufacturer:string, + manufactureDate:string, + workshopId:number, + remark:string, + status:number, + createTime:string, + updateTime:string +} + + +export const deviceApi = { + + page(params:{ + page:number, + pageSize:number, + deviceCode:any + }) { + return request({ + url:"/biz/device/page", + method:"get", + params + }) + }, + + create(data:Device) { + return request({ + url:"/biz/device", + method:"post", + data + }) + }, + + update(data:Device) { + return request({ + url:"/biz/device", + method:"put", + data + }) + }, + + list(sectionId:number) { + return request({ + url:`/biz/device/list/${sectionId}`, + method:"get" + }) + }, + delete(ids:any) { + return request({ + url:`/biz/device/${ids.join(",")}`, + method:"delete" + }) + + }, + export( + params?:{ + ids?:string[], + deviceCode:any + }){ + const p:Record = {} + if(params?.ids?.length) p.ids = params.ids.join(',') + if(params?.deviceCode != undefined && params?.deviceCode !== null) p.sectionCode = params.deviceCode + return request({ + url:`/biz/device/report`, + method:"get", + params:p, + responseType:"blob" + }) + + } +} \ No newline at end of file diff --git a/src/api/plmModel.ts b/src/api/plmModel.ts index 27e0461..b276968 100644 --- a/src/api/plmModel.ts +++ b/src/api/plmModel.ts @@ -45,7 +45,7 @@ export const plmModelApi = { url: '/biz/plm/model/preview', method: 'get', params, - timeout: 360000, + timeout: 600000, }) }, } diff --git a/src/api/section.ts b/src/api/section.ts new file mode 100644 index 0000000..6dda158 --- /dev/null +++ b/src/api/section.ts @@ -0,0 +1,78 @@ +import { request } from '@/utils/request' +import { st } from 'vue-router/dist/router-CWoNjPRp.mjs' + +export interface Section{ + id?: number, + sectionCode?: string, + sectionName?: string, + workshopId?: number, + + createTime?:string, + updateTime?:string, + status?:number, + remark?:string +} + + +export const sectionApi = { + + page(params:{ + page:number, + pageSize:number, + sectionName:any, + sectionCode:any + }){ + return request({ + url:"biz/section/page", + method:"get", + params + }) + }, + + create(data:Section){ + return request({ + url:"biz/section/add", + method:"post", + data + }) + }, + update(data:Section) { + return request({ + url:"biz/section/update", + method:"put", + data + }) + }, + + delete(ids:any) { + return request({ + url:`/biz/section/${ids.join(",")}`, + method:"delete" + }) + }, + + export(params?:{ + ids?: string[], + sectionCode:any, + sectionName:any + }) { + const p:Record = {} + if(params?.ids?.length) p.ids = params.ids.join(',') + if(params?.sectionCode != undefined && params?.sectionCode !== null) p.sectionCode = params.sectionCode + if(params?.sectionName != undefined && params?.sectionName !== null) p.sectionName = params.sectionName + return request({ + url:`/biz/section/export`, + method:"get", + params:p, + responseType:'blob' + }) + }, + + list() { + return request({ + url:"/biz/section/list", + method:"get" + }) + } + +} \ No newline at end of file diff --git a/src/api/station.ts b/src/api/station.ts new file mode 100644 index 0000000..44be854 --- /dev/null +++ b/src/api/station.ts @@ -0,0 +1,69 @@ +import { request } from "@/utils/request"; +import { update } from "three/examples/jsm/libs/tween.module.js"; + +export interface Station{ + id?: number, + stationCode?:string, + stationName?:string, + workshopId?:number, + sectionId?:number, + remark?:string, + status?:number, + createTime?:string, + updateTime?:string +} + + +export const stationApi = { + + page(params:{ + page:number, + pageSize:number, + stationCode:any + }){ + return request({ + url:"biz/station/page", + method:"get", + params + }) + }, + + create(data:Station){ + return request({ + url:"biz/station/add", + method:"post", + data + }) + }, + update(data:Station) { + return request({ + url:"biz/station/update", + method:"put", + data + }) + }, + delete(ids:any) { + return request({ + url:`/biz/station/${ids.join(",")}`, + method:"delete" + }) + }, + export(params?:{ + ids?:string[], + stationCode:any + }){ + const p:Record = {} + if(params?.ids?.length) p.ids = params.ids.join(",") + if(params?.stationCode != undefined && params?.stationCode !== null) + console.log(params); + console.log(1111); + + return request({ + url:`/biz/station/export`, + method:"get", + params:p, + responseType:"blob" + }) + } + +} \ No newline at end of file diff --git a/src/components/CadModelViewer.vue b/src/components/CadModelViewer.vue index fd07a78..d992bef 100644 --- a/src/components/CadModelViewer.vue +++ b/src/components/CadModelViewer.vue @@ -8,6 +8,13 @@
复位 + + 下载GLB文件 + + + 下载源文件 + +
@@ -24,6 +31,12 @@ const props = defineProps({ modelUrl: { type: String, }, + glbDownloadUrl:{ + type: String + }, + stpDownloadUrl:{ + type: String + }, width: { type: String, default: '100%' @@ -197,6 +210,21 @@ const loadModel = () => { console.log('✅ 成功进入解析回调,开始处理模型') loading.value = false const model = gltf.scene + // model.traverse((obj) => { + // if (obj.isMesh) { + // // 给不同部件手动指定材质颜色 + // if(obj.name.includes("platform")){ + // obj.material = new THREE.MeshStandardMaterial({color:0xaaaaaa, metalness:0.2, roughness:0.7}) + // }else if(obj.name.includes("scissor")){ + // obj.material = new THREE.MeshStandardMaterial({color:0x666666, metalness:0.3, roughness:0.6}) + // }else if(obj.name.includes("motor")){ + // obj.material = new THREE.MeshStandardMaterial({color:0x333333, metalness:0.5, roughness:0.4}) + // }else{ + // obj.material = new THREE.MeshStandardMaterial({color:0x888888}) + // } + // obj.material.needsUpdate = true + // } + // }) currentModel = model fitModelToView(model) scene.add(model) @@ -241,6 +269,33 @@ function resetView() { } +async function openSelectFolderDownload(url) { + if(!url) return alert('暂无可下载的文件,请先完成模型转换') + + try{ + const dirHandle = await window.showDirectoryPicker() + const res = await fetch(url) + const blob = await res.blob() + + const urlParams = new URLSearchParams(url.split("?")[1]) + const materialCode = urlParams.get('materialCode') + const suffix = urlParams.get("suffix") + const fileName = `${materialCode}.${suffix}` + + const fileHandle = await dirHandle.getFileHandle(fileName,{create:true}) + const writable = await fileHandle.createWritable() + + await writable.write(blob) + await writable.close() + + alert(`保存成功!文件已写入你选中的文件夹:${fileName}`) + }catch(err) { + console.log('文件夹选择取消/浏览器不支持,降级普通下载', err) + window.open(url, '_blank') + } + +} + watch(() => props.modelUrl, (newVal) => newVal && loadModel(), { immediate: true }) onMounted(() => { diff --git a/src/components/PlmModelDrawer.vue b/src/components/PlmModelDrawer.vue index 851c96e..ed91e40 100644 --- a/src/components/PlmModelDrawer.vue +++ b/src/components/PlmModelDrawer.vue @@ -14,7 +14,11 @@ 首次查看可能需要 30 秒~数分钟 - + ({}) const resultMeta = ref(null) @@ -105,6 +111,8 @@ async function open(ctx: PlmModelOpenContext) { if (res.status === 'ready' && res.previewUrl) { previewUrl.value = res.previewUrl + glbDownloadUrl.value = res.glbDownloadUrl + stpDownloadUrl.value = res.stpDownloadUrl } else { error.value = res.message || (res.status === 'not_found' ? '未找到该物料的三维模型' : '模型预览失败') } diff --git a/src/views/biz/device/index.vue b/src/views/biz/device/index.vue new file mode 100644 index 0000000..2ff0169 --- /dev/null +++ b/src/views/biz/device/index.vue @@ -0,0 +1,459 @@ + + + + + \ No newline at end of file diff --git a/src/views/biz/orderProcessPlan/board.vue b/src/views/biz/orderProcessPlan/board.vue index 78ee727..4e7a7fe 100644 --- a/src/views/biz/orderProcessPlan/board.vue +++ b/src/views/biz/orderProcessPlan/board.vue @@ -265,29 +265,36 @@ - - + + + - - - + 当前工序: + {{dispatchform.name}} + + 计划数量: + {{dispatchform.quantity}} + + + - - - + 开始时间: + {{dispatchform.beginTime}} - - - - - - - - - + + 结束时间: + {{dispatchform.endTime}} + + + + ({ id: '', name: '', beginTime: '', endTime: '', quantity: '', - list: [{ userId: '', quantity: '' }], + list: [{ sectionId:'',deviceId:'',userId: '', quantity: '' }], }) const dispatchrules = {} @@ -599,11 +606,11 @@ function disphand(process: ProcessPlanItemVO, order?: OrderProcessPlanVO) { dispatchform.beginTime = entity.beginTime dispatchform.endTime = entity.endTime dispatchform.quantity = entity.quantity - dispatchform.list = [{ userId: '', quantity: '' }] + dispatchform.list = [{ sectionId:'',deviceId:'',userId: '', quantity: '' }] } function addpgnum() { - dispatchform.list.push({ userId: '', quantity: '' }) + dispatchform.list.push({ sectionId:'',deviceId:'',userId: '', quantity: '' }) } function deletenum(index: number) { @@ -866,4 +873,7 @@ onMounted(loadData) background: #fff; border-radius: 0 0 8px 8px; } +.pgClass { + font-weight: bold; +} diff --git a/src/views/biz/orderProcessPlan/pgitem.vue b/src/views/biz/orderProcessPlan/pgitem.vue index ff81789..718bbec 100644 --- a/src/views/biz/orderProcessPlan/pgitem.vue +++ b/src/views/biz/orderProcessPlan/pgitem.vue @@ -1,8 +1,58 @@