From 45226308c27f7236d620d2393fc577d75920149f Mon Sep 17 00:00:00 2001 From: JackLee <809262979@qq.com> Date: Thu, 9 Apr 2026 16:40:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B0=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6,=E5=AF=BC=E5=85=A5=E6=96=87=E4=BB=B6=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ets/pages/CustomController/ComboBox.ets | 10 +- .../src/main/ets/pages/EventSubWin/ExCom.ets | 10 +- .../ets/pages/EventSubWin/File/FileStr.ets | 14 ++ .../pages/EventSubWin/File/SWImportFile.ets | 149 ++++++++++++++++-- .../ets/pages/EventSubWin/File/SWNewFile.ets | 137 +++++++++------- .../src/main/ets/pages/EventSubWin/SWBase.ets | 9 +- entry/src/main/ets/pages/Index.ets | 4 +- 7 files changed, 244 insertions(+), 89 deletions(-) diff --git a/entry/src/main/ets/pages/CustomController/ComboBox.ets b/entry/src/main/ets/pages/CustomController/ComboBox.ets index c569e999..3aa738dc 100644 --- a/entry/src/main/ets/pages/CustomController/ComboBox.ets +++ b/entry/src/main/ets/pages/CustomController/ComboBox.ets @@ -24,20 +24,18 @@ export struct TextComboBox { }) }.fontSize(20) } + @Builder build() { - Row() { + Row({space:5}) { Text(this.name!=undefined?this.name:'') .fontSize(16) - .width('auto') Text(this.menu[this.selectIndex].eName) .bindMenu(this.EventMenu) - .width('50%') .fontSize(16) .backgroundColor('#ffe6e6e3') .height(mwInfo.height*0.02) - .margin({ top:0, left: 5, bottom: 0, right: 0 }) - }.width(ebWidth) - .height(mwInfo.width*0.01) + }.height(mwInfo.width*0.01) + .justifyContent(FlexAlign.Start) } } @ComponentV2 diff --git a/entry/src/main/ets/pages/EventSubWin/ExCom.ets b/entry/src/main/ets/pages/EventSubWin/ExCom.ets index 68af4f2f..099f2029 100644 --- a/entry/src/main/ets/pages/EventSubWin/ExCom.ets +++ b/entry/src/main/ets/pages/EventSubWin/ExCom.ets @@ -32,7 +32,7 @@ export class XCompInfos{ export let xcInfos:XCompInfos = AppStorageV2.connect(XCompInfos, () => new XCompInfos)!; export let ctInfo: XCompInfo = AppStorageV2.connect(XCompInfo, () => new XCompInfo)!; -function XNRandomId(): string { +export function XNRandomId(): string { // 获取当前时间戳(毫秒) const now = Date.now(); // 取时间戳的最后几位(例如4位)作为基础部分 @@ -97,16 +97,16 @@ export function ExecuteCommand(event:TitleButton){ const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.6,mwInfo.height*0.9); CreateAndShowSubWindow(winInfo); } else if(event?.eEvent=='Execute_NewFileWindow'){ - const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.6,mwInfo.height*0.9); + const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.4,mwInfo.height*0.4); CreateAndShowSubWindow(winInfo); }else if(event?.eEvent=='Execute_SaveAsFileWindow'){ - const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.6,mwInfo.height*0.9); + const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.4,mwInfo.height*0.4); CreateAndShowSubWindow(winInfo); }else if(event?.eEvent=='Execute_ImportFileWindow'){ - const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.6,mwInfo.height*0.9); + const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.4,mwInfo.height*0.4); CreateAndShowSubWindow(winInfo); }else if(event?.eEvent=='Execute_ExportFileWindow'){ - const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.6,mwInfo.height*0.9); + const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.4,mwInfo.height*0.4); CreateAndShowSubWindow(winInfo); } else if(event?.eEvent=='Open_NewModel'){ const winInfo:WinInfo=new WinInfo(event.eName,event.ePage,mwInfo.width*0.6,mwInfo.height*0.9); diff --git a/entry/src/main/ets/pages/EventSubWin/File/FileStr.ets b/entry/src/main/ets/pages/EventSubWin/File/FileStr.ets index 2ec6a0ed..81a541cc 100644 --- a/entry/src/main/ets/pages/EventSubWin/File/FileStr.ets +++ b/entry/src/main/ets/pages/EventSubWin/File/FileStr.ets @@ -1,5 +1,19 @@ import { FileInter } from "./FileInter"; import { ModelType } from "../../LayoutInterface/Layout/ModelType"; +import { TitleButton } from "../../LayoutInterface/Interface/ButtonInterface"; + +//创建模块类型 +export let CreateModelType:Array=[ + {eModel:[ModelType.BASE],eName:"BASE(基础模式)",eNamed:"",ePage:'',eIcon:"",eTips:"基础建模",eEvent:""}, + {eModel:[ModelType.BASE],eName:"CAD(制图模式)",eNamed:"",ePage:'',eIcon:"",eTips:"制图模块",eEvent:""}, + {eModel:[ModelType.BASE],eName:"CAM(加工模式)",eNamed:"",ePage:'',eIcon:"",eTips:"加工模块",eEvent:""}, + {eModel:[ModelType.BASE],eName:"CAE(仿真模式)",eNamed:"",ePage:'',eIcon:"",eTips:"仿真模块",eEvent:""}, +] +export let DocUnitsType:Array=[ + {eModel:[ModelType.BASE],eName:"mm(米制:毫米)",eNamed:"",ePage:'',eIcon:"",eTips:"毫米",eEvent:""}, + {eModel:[ModelType.BASE],eName:"m(米制:米)",eNamed:"",ePage:'',eIcon:"",eTips:"米",eEvent:""}, + {eModel:[ModelType.BASE],eName:"inch(英制:英寸)",eNamed:"",ePage:'',eIcon:"",eTips:"英制",eEvent:""}, +] export let FileStr:Array=[ { diff --git a/entry/src/main/ets/pages/EventSubWin/File/SWImportFile.ets b/entry/src/main/ets/pages/EventSubWin/File/SWImportFile.ets index 0bb2c96c..9eefc6fa 100644 --- a/entry/src/main/ets/pages/EventSubWin/File/SWImportFile.ets +++ b/entry/src/main/ets/pages/EventSubWin/File/SWImportFile.ets @@ -1,23 +1,144 @@ +import { picker } from '@kit.CoreFileKit'; +import { TextComboBox } from "../../CustomController/ComboBox"; +import { mwInfo } from '../../DispWinInfo/DispWinInfo'; +import { DocUnitsType } from './FileStr'; +import { common } from '@kit.AbilityKit'; @Entry @ComponentV2 export struct SWImportFile { - + @Local dir: string = '选择导入模型文件'; + //按钮宽度统一缩放系数 + @Local scaleBtn:number=0.05; + //文本宽度统一缩放系数 + @Local scalingText:number=0.04; build() { - Column({ space: 5 }) { + Column({space:5}) { + Column({space:5}){ + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .selectedColor(0x39a2db) + .shape(CheckBoxShape.ROUNDED_SQUARE) + .onChange((value: boolean) => { + console.info('Checkbox1 change is'+ value); + }) + .mark({ + strokeColor:Color.Black, + size: 50, + strokeWidth: 5 + }) + .unselectedColor(Color.Red) + .width(30) + .height(30) + Text('强制单位:').fontSize(20) + TextComboBox({menu:DocUnitsType}) + + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .selectedColor(0x39a2db) + .shape(CheckBoxShape.ROUNDED_SQUARE) + .onChange((value: boolean) => { + console.info('Checkbox1 change is'+ value); + }) + .mark({ + strokeColor:Color.Black, + size: 50, + strokeWidth: 5 + }) + .unselectedColor(Color.Red) + .width(30) + .height(30) + Text('默认单位').fontSize(20) + + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .selectedColor(0x39a2db) + .shape(CheckBoxShape.ROUNDED_SQUARE) + .onChange((value: boolean) => { + console.info('Checkbox1 change is'+ value); + }) + .mark({ + strokeColor:Color.Black, + size: 50, + strokeWidth: 5 + }) + .unselectedColor(Color.Red) + .width(30) + .height(30) + Text('文档单位').fontSize(20) + + } + } + Row({space:5}){ + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .selectedColor(0x39a2db) + .shape(CheckBoxShape.ROUNDED_SQUARE) + .onChange((value: boolean) => { + console.info('Checkbox1 change is'+ value); + }) + .mark({ + strokeColor:Color.Black, + size: 50, + strokeWidth: 5 + }) + .unselectedColor(Color.Red) + .width(30) + .height(30) + Text('导入到当前图层').fontSize(20) + + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .selectedColor(0x39a2db) + .shape(CheckBoxShape.ROUNDED_SQUARE) + .onChange((value: boolean) => { + console.info('Checkbox1 change is'+ value); + }) + .mark({ + strokeColor:Color.Black, + size: 50, + strokeWidth: 5 + }) + .unselectedColor(Color.Red) + .width(30) + .height(30) + Text('导入到全新图层').fontSize(20) + } + Blank().layoutWeight(1) + } + Row({space:5}){ + Text('导入模型路径:') + .width(mwInfo.width*this.scalingText) + TextInput({placeholder:this.dir}).layoutWeight(1) + Button('选择模型') + .width(mwInfo.width*this.scalingText) + .backgroundColor($r('sys.color.background_secondary')) + .fontColor($r('sys.color.font_emphasize')) + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .onClick(() => { + let context = getContext(this) as common.Context; + try { + let documentSelectOptions = new picker.DocumentSelectOptions(); + documentSelectOptions.selectMode = picker.DocumentSelectMode.FILE; + let documentPicker = new picker.DocumentViewPicker(context); + documentPicker.select(documentSelectOptions,(err: BusinessError,documentSelectResult: Array) => { + this.dir =documentSelectResult.toString(); + if (documentSelectResult.length === 0) { + return; + } + }) + } catch (error) { + const err: BusinessError = error as BusinessError; + console.error(`DocumentViewPicker failed with err: ${err.code}, ${err.message}`); + } + }) + } + Blank().layoutWeight(1) Row(){ - Text('保存目录:').width('10%') - TextInput().width('80%') - Button('选择目录').width('10%') - }.height('5%') - Row(){ - Text('文件名:') - TextInput() - }.height('5%') - Blank().height('85%') - Row(){ - Button('新建') + Button('确定') + .backgroundColor($r('sys.color.background_secondary')) + .fontColor($r('sys.color.font_emphasize')) + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) }.alignItems(VerticalAlign.Center) - }.margin({ top:0, left: 5, bottom: 0, right: 5 }) + }.margin({ top:5, left: 5, bottom: 5, right: 5 }) } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/EventSubWin/File/SWNewFile.ets b/entry/src/main/ets/pages/EventSubWin/File/SWNewFile.ets index c997eae0..5268d757 100644 --- a/entry/src/main/ets/pages/EventSubWin/File/SWNewFile.ets +++ b/entry/src/main/ets/pages/EventSubWin/File/SWNewFile.ets @@ -1,85 +1,112 @@ import { common } from '@kit.AbilityKit'; import { picker } from '@kit.CoreFileKit'; import type { BusinessError } from '@kit.BasicServicesKit'; +import { TextComboBox } from "../../CustomController/ComboBox"; +import {XNRandomId} from '../ExCom' +import { CreateModelType,DocUnitsType } from './FileStr'; +import { mwInfo } from '../../DispWinInfo/DispWinInfo' +function CurrentTime():string { + let now = new Date(); + // 格式化时间字符串 + let year = now.getFullYear().toString(); + let month = (now.getMonth() + 1).toString().padStart(2, '0'); // padStart 确保月份是两位数 + let date = now.getDate().toString().padStart(2, '0'); + let hours = now.getHours().toString().padStart(2, '0'); + let minutes = now.getMinutes().toString().padStart(2, '0'); + let seconds = now.getSeconds().toString().padStart(2, '0'); - + return`${year}-${month}-${date} ${hours}:${minutes}:${seconds}`; +} @Entry @ComponentV2 export struct SWNewFile { - @Local message: string = ''; + @Local dir: string = '选择文档保存路径'; + @Local fileName:string='模型文档名'; + @Local docCreateTime:string=''; + //按钮宽度统一缩放系数 + @Local scaleBtn:number=0.05; + //文本宽度统一缩放系数 + @Local scalingText:number=0.04; + aboutToAppear(): void { + this.docCreateTime=CurrentTime(); + } build() { - Column({ space: 5 }) { - Row(){ - Text('保存目录:').width('10%') - TextInput({placeholder:this.message}).width('80%') + Column({space:5}) { + Row({space:5}){ + TextComboBox({name:'创建文档模块:',menu:CreateModelType}) + Blank().layoutWeight(1) + } + Row({space:5}){ + TextComboBox({name:'建模单位:',menu:DocUnitsType}) + Blank().layoutWeight(1) + } + Row({space:5}){ + Text('保存目录:') + .width(mwInfo.width*this.scalingText) + TextInput({placeholder:this.dir}).layoutWeight(1) Button('选择目录') - .width('10%') + .width(mwInfo.width*this.scalingText) .backgroundColor($r('sys.color.background_secondary')) - .height(40) .fontColor($r('sys.color.font_emphasize')) .fontWeight(FontWeight.Medium) .fontSize($r('sys.float.Body_L')) .onClick(() => { let context = getContext(this) as common.Context; try { - const documentSelectOptions = new picker.DocumentSelectOptions(); + let documentSelectOptions = new picker.DocumentSelectOptions(); documentSelectOptions.selectMode = picker.DocumentSelectMode.FOLDER; - const documentPicker = new picker.DocumentViewPicker(context); - documentPicker.select(documentSelectOptions).then((documentSelectResult: Array) => { - this.message =documentSelectResult.toString(); + let documentPicker = new picker.DocumentViewPicker(context); + documentPicker.select(documentSelectOptions,(err: BusinessError,documentSelectResult: Array) => { + this.dir =documentSelectResult.toString(); if (documentSelectResult.length === 0) { return; } - // this.getUIContext().showAlertDialog( - // { - // title: '文件路径', - // message: this.message, - // autoCancel: true, - // alignment: DialogAlignment.Center, - // offset: { dx: 0, dy: -20 }, - // gridCount: 3, - // width: 300, - // height: 300, - // cornerRadius: $r('sys.float.corner_radius_level7'), - // borderWidth: 1, - // borderStyle: BorderStyle.Dashed, - // borderColor: Color.Blue, - // backgroundColor: Color.White, - // textStyle: { wordBreak: WordBreak.BREAK_ALL }, - // confirm: { - // value: '确定', - // action: () => { - // console.log('Confirm button is clicked.'); - // }, - // }, - // onWillDismiss: (dismissDialogAction: DismissDialogAction) => { - // if (dismissDialogAction.reason === DismissReason.PRESS_BACK) { - // dismissDialogAction.dismiss(); - // } - // if (dismissDialogAction.reason === DismissReason.TOUCH_OUTSIDE) { - // dismissDialogAction.dismiss(); - // } - // } - // } - // ) - }).catch((err: BusinessError) => { - console.error(`DocumentViewPicker.select failed with err: ${err.code}, ${err.message}`); - }); + }) } catch (error) { const err: BusinessError = error as BusinessError; console.error(`DocumentViewPicker failed with err: ${err.code}, ${err.message}`); } }) - }.height('5%') + } + Row({space:5}){ + Text('文件名:').width(mwInfo.width*this.scalingText) + TextInput({placeholder:this.fileName}).layoutWeight(1) + Button('随机文件名') + .width(mwInfo.width*this.scalingText) + .backgroundColor($r('sys.color.background_secondary')) + .fontColor($r('sys.color.font_emphasize')) + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .onClick(() => { + this.fileName='OpenCAX_'+XNRandomId(); + }) + } + Row({space:5}){ + Text('文档创建人:').width(mwInfo.width*this.scalingText) + TextInput({placeholder:this.fileName}).layoutWeight(1) + } + Row({space:5}){ + Text('文档创建时间:').width(mwInfo.width*this.scalingText) + TextInput({placeholder:this.docCreateTime}).layoutWeight(1) + Button('获取本地时间') + .width(mwInfo.width*this.scaleBtn) + .backgroundColor($r('sys.color.background_secondary')) + .fontColor($r('sys.color.font_emphasize')) + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) + .onClick(()=>{ + this.docCreateTime=CurrentTime(); + }) + } + Blank().layoutWeight(1) Row(){ - Text('文件名:') - TextInput({placeholder:'model.prt'}) - }.height('5%') - Blank().height('85%') - Row(){ - Button('新建') + Button('确定') + .backgroundColor($r('sys.color.background_secondary')) + .fontColor($r('sys.color.font_emphasize')) + .fontWeight(FontWeight.Medium) + .fontSize($r('sys.float.Body_L')) }.alignItems(VerticalAlign.Center) - }.margin({ top:0, left: 5, bottom: 0, right: 5 }) + }.margin({ top:5, left: 5, bottom: 5, right: 5 }) } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/EventSubWin/SWBase.ets b/entry/src/main/ets/pages/EventSubWin/SWBase.ets index c1b13660..1bf0eed4 100644 --- a/entry/src/main/ets/pages/EventSubWin/SWBase.ets +++ b/entry/src/main/ets/pages/EventSubWin/SWBase.ets @@ -30,6 +30,7 @@ export async function CreateAndShowSubWindow(winInfo:WinInfo) { outlineEnabled:true, }; + console.info('SubWindow Size:',winInfo.width,winInfo.height) await mwsInfo.winStage.createSubWindowWithOptions('subWindow', options).then((data) => { subWindow = data; //子窗口创建成功后,设置子窗口的位置、大小及相关属性等。 @@ -49,13 +50,7 @@ export async function CreateAndShowSubWindow(winInfo:WinInfo) { console.error("显示窗口失败:", err); } }); - //不允许窗口小于默认尺寸 - subWindow.on('windowSizeChange', (subWinData) => { - // if Size Change save to AppStorage - if(subWinData.width