hh 3 hete
szülő
commit
b0fba7e874

+ 2 - 0
entry/src/main/ets/common/constants/CommonConstants.ets

@@ -2,6 +2,8 @@ import DictValue from '../../viewmodel/DictValue'
 import HashMap from '@ohos.util.HashMap'
 
 export default class CommonConstants {
+  // perferences数据库名称
+  static readonly PREFERENCE_INSTANCE_NAME: string = 'myStore';
   static readonly RDB_NAME: string = 'Presentation.db'
   static readonly PRE_NAME: string = 'MyPreferences'
   static AUTH_TOKEN: string = ''

+ 115 - 0
entry/src/main/ets/common/util/PerferencesUtil.ets

@@ -0,0 +1,115 @@
+import preferences from '@ohos.data.preferences';
+import common from '@ohos.app.ability.common';
+
+// 定义支持的数据类型
+type ValueType = number | string | boolean | number[] | string[] | boolean[];
+type PreferencesData = Record<string, ValueType>;
+
+class PreferencesUtil {
+  // 缓存多个 Preferences 实例
+  private prefMap: Map<string, preferences.Preferences> = new Map();
+
+  /**
+  * 加载 Preferences 文件
+  * @param context 应用上下文
+  * @param name 文件名(如 'userConfig')
+  */
+  async loadPreference(context: common.Context, name: string): Promise<void> {
+    try {
+      const pref = await preferences.getPreferences(context, name);
+      this.prefMap.set(name, pref);
+      console.log(`[PreferencesUtil] 加载文件 "${name}" 成功`);
+    } catch (err) {
+      console.error(`[PreferencesUtil] 加载失败: ${JSON.stringify(err)}`);
+    }
+  }
+
+  /**
+  * 写入数据(自动刷盘)
+  * @param fileName 文件名
+  * @param key 键名
+  * @param value 值(支持6种类型)
+  */
+  async put(fileName: string, key: string, value: ValueType): Promise<void> {
+    const pref = this.prefMap.get(fileName);
+    if (!pref) {
+      console.warn(`[PreferencesUtil] 文件未加载: ${fileName}`);
+      return;
+    }
+
+    try {
+      await pref.put(key, value);
+      await pref.flush(); // 立即持久化
+      console.log(`[PreferencesUtil] 保存 ${fileName}.${key} = ${value}`);
+    } catch (err) {
+      console.error(`[PreferencesUtil] 写入失败: ${JSON.stringify(err)}`);
+    }
+  }
+
+  /**
+  * 读取数据(带默认值)
+  * @param fileName 文件名
+  * @param key 键名
+  * @param defaultValue 默认值
+  * @returns 类型安全的返回值
+  */
+  async get<T extends ValueType>(
+    fileName: string,
+    key: string,
+    defaultValue: T
+  ): Promise<T> {
+    const pref = this.prefMap.get(fileName);
+    if (!pref) {
+      console.warn(`[PreferencesUtil] 文件未加载: ${fileName}`);
+      return defaultValue;
+    }
+
+    try {
+      const value = await pref.get(key, defaultValue);
+      console.log(`[PreferencesUtil] 读取 ${fileName}.${key} = ${value}`);
+      return value as T; // 泛型类型断言
+    } catch (err) {
+      console.error(`[PreferencesUtil] 读取失败: ${JSON.stringify(err)}`);
+      return defaultValue;
+    }
+  }
+
+  /**
+  * 删除指定键值
+  * @param fileName 文件名
+  * @param key 键名
+  */
+  async delete(fileName: string, key: string): Promise<void> {
+    const pref = this.prefMap.get(fileName);
+    if (!pref) return;
+
+    try {
+      await pref.delete(key);
+      await pref.flush();
+      console.log(`[PreferencesUtil] 删除键值: ${fileName}.${key}`);
+    } catch (err) {
+      console.error(`[PreferencesUtil] 删除失败: ${JSON.stringify(err)}`);
+    }
+  }
+
+  /**
+  * 清空文件数据
+  * @param fileName 文件名
+  */
+  async clear(fileName: string): Promise<void> {
+    const pref = this.prefMap.get(fileName);
+    if (!pref) return;
+
+    try {
+      await pref.clear();
+      await pref.flush();
+      console.log(`[PreferencesUtil] 已清空文件: ${fileName}`);
+    } catch (err) {
+      console.error(`[PreferencesUtil] 清空失败: ${JSON.stringify(err)}`);
+    }
+  }
+}
+
+// 导出单例(全局使用)
+const preferencesUtil = new PreferencesUtil();
+export default preferencesUtil;

+ 7 - 3
entry/src/main/ets/entryability/EntryAbility.ets

@@ -5,22 +5,26 @@ import Want from '@ohos.app.ability.Want';
 import window from '@ohos.window';
 import ElectricScrewdriverPresetModel from '../model/ElectricScrewdriverPresetModel';
 import ElectricSolderingIronPresetModel from '../model/ElectricSolderingIronPresetModel';
+import preferencesUtil from '../common/util/PerferencesUtil';
+import CommonConstants from '../common/constants/CommonConstants';
 
 export default class EntryAbility extends UIAbility {
-  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
+  async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
     ElectricScrewdriverPresetModel.initTaskDB(this.context)
     ElectricSolderingIronPresetModel.initTaskDB(this.context)
+    await preferencesUtil.loadPreference(this.context, CommonConstants.PREFERENCE_INSTANCE_NAME);
   }
 
   onDestroy(): void {
     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
   }
 
-  onWindowStageCreate(windowStage: window.WindowStage): void {
+  onWindowStageCreate(windowStage: window.WindowStage) {
     // Main window is created, set main page for this ability
     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
-    //
+    // 重新打开需要清除preferences中保存的数据
+    preferencesUtil.clear(CommonConstants.PREFERENCE_INSTANCE_NAME)
     // 1.获取应用主窗口。
     let windowClass: window.Window
     windowStage.getMainWindow((err, data) => {

+ 3 - 3
entry/src/main/ets/pages/ProcessIndex.ets

@@ -100,7 +100,7 @@ struct ProcessIndex {
   @Provide('currentUserName') currentUserName: string =''
   @Provide('currentUserId') currentUserId: number = 0
   @Provide('bindTaskSeq') bindTaskSeq: BindTaskSeqVO[]=[]
-  @State reportList:ReportInfo[]=[]
+  @State reportList: ReportInfo[]=[]
   @State currentReporterIndex:number =0
   @State currentReportNumIndex:number =0
   @State currentUnqualifiedIndex:number =0
@@ -857,7 +857,7 @@ struct ProcessIndex {
             if (this.scanState === 0) {
               this.scanCodeToStartWork()
             } else if (this.scanState === 1) {
-              // todo 工序报工
+              this.processReportingController.open()
             }
           })
         }
@@ -998,7 +998,7 @@ struct ProcessIndex {
     maskColor: 'rgba(0,0,0,0.8)',
   })
   // 工序报工弹窗
-  ProcessReportingController: CustomDialogController = new CustomDialogController({
+  processReportingController: CustomDialogController = new CustomDialogController({
     builder: ProcessReportingDialog({
       onSelectReporter:(index:number)=>{
         this.currentReporterIndex = index;

+ 3 - 0
entry/src/main/ets/view/AuxiliaryOperationDialog.ets

@@ -112,6 +112,9 @@ export struct AuxiliaryOperationDialog {
             .fill($r('app.color.FF453A'))
         }
         .height('5%')
+        .onClick(()=>{
+          router.back()
+        })
 
         Blank().height('5.6%')
         Row({space: 12}) {

+ 1 - 1
entry/src/main/ets/view/SwitchingStationViews.ets

@@ -20,7 +20,7 @@ export struct SwitchingStationDialog{
   //工位列表
   @State stationsList : WorkstationInfo[]=[]
   loadStations = async () => {
-    this.stationsList = await ProcessRequest.get(`api/v1/base/station/getStationList/${this.currentPLCode}/0`, {})  as WorkstationInfo[];
+    this.stationsList = await ProcessRequest.post(`/api/v1/base/station/list`, {} as RequestParamModel) as WorkstationInfo[];
   };
   controller: CustomDialogController
   aboutToAppear(): void {