소스 검색

选择工单弹窗

cjb 2 주 전
부모
커밋
c5ce8cded6

+ 6 - 6
entry/src/main/ets/common/util/request/ProcessRequest.ets

@@ -18,7 +18,7 @@ const baseUrl = "http://192.168.1.3:20010"//huajing
 const DEBUG = true //
 
 // 创建实例
-const WmsRequest = axios.create(
+const ProcessRequest = axios.create(
 
   {
     baseURL: baseUrl,
@@ -30,11 +30,11 @@ const WmsRequest = axios.create(
 )
 
 // 添加请求拦截器
-WmsRequest.interceptors.request.use((config: InternalAxiosRequestConfig) => {
+ProcessRequest.interceptors.request.use((config: InternalAxiosRequestConfig) => {
 
   // 以后登录之后可以在这里传
-  config.headers.Authorization = CommonConstants.AUTH_TOKEN
-  // config.headers.Authorization ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOnsiaWQiOjM3LCJsb2dpblR5cGUiOiJhaW8ifSwiZGV2aWNlIjoiYWlvIiwiZWZmIjoxNzE3NTExMjYwODI4LCJyblN0ciI6InRSenNBTGdlZ3lqS0FHeDZTSkdYZTNLbFY3eWh1OG1PIn0.FVAeESiz_PH1NtBFDmGZr0IwtXzubV2d8JTQdGdJnxc"
+  //config.headers.Authorization = CommonConstants.AUTH_TOKEN
+  config.headers.Authorization ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOnsiaWQiOjM3LCJsb2dpblR5cGUiOiJhaW8ifSwiZGV2aWNlIjoiYWlvIiwiZWZmIjoxNzE3NTExMjYwODI4LCJyblN0ciI6InRSenNBTGdlZ3lqS0FHeDZTSkdYZTNLbFY3eWh1OG1PIn0.FVAeESiz_PH1NtBFDmGZr0IwtXzubV2d8JTQdGdJnxc"
   printRequest(config)
   return config;
 }, (error: AxiosError) => {
@@ -45,7 +45,7 @@ WmsRequest.interceptors.request.use((config: InternalAxiosRequestConfig) => {
 
 
 // 添加响应拦截器
-WmsRequest.interceptors.response.use((response: AxiosResponse) => {
+ProcessRequest.interceptors.response.use((response: AxiosResponse) => {
   // 对响应数据做点什么
   printResponse(response)
   let res = handleRes(response)
@@ -67,7 +67,7 @@ WmsRequest.interceptors.response.use((response: AxiosResponse) => {
   return Promise.reject(error);
 });
 
-export default WmsRequest;
+export default ProcessRequest;
 
 
 

+ 23 - 0
entry/src/main/ets/entryability/EntryAbility.ets

@@ -16,6 +16,29 @@ export default class EntryAbility extends UIAbility {
   onWindowStageCreate(windowStage: window.WindowStage): void {
     // Main window is created, set main page for this ability
     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
+    //
+    // 1.获取应用主窗口。
+    let windowClass: window.Window
+    windowStage.getMainWindow((err, data) => {
+
+      if (err.code) {
+        console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
+        return;
+      }
+      windowClass = data;
+      console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
+      // 2.实现沉浸式效果:设置导航栏、状态栏不显示。
+      let names: [] = [];
+      windowClass.setWindowSystemBarEnable(names, (err) => {
+        if (err.code) {
+          console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err));
+          return;
+        }
+        console.info('Succeeded in setting the system bar to be visible.');
+      });
+
+      windowClass.setWindowLayoutFullScreen(true)
+    })
 
     windowStage.loadContent('pages/Index', (err) => {
       if (err.code) {

+ 10 - 1
entry/src/main/ets/pages/Index.ets

@@ -5,6 +5,7 @@ import CommonConstants from '../common/constants/CommonConstants';
 import ProcessRequest from '../common/util/request/ProcessRequest';
 import RequestParamModel from '../viewmodel/RequestParamModel';
 import OperationInfo from '../viewmodel/process/OperationInfo';
+import { SelectOrderDialog } from '../view/SelectOrderDialog';
 
 @Entry
 @Component
@@ -139,7 +140,15 @@ struct Index {
   pageNo: number = 1
   pageSize: number = 9
 
+  SelectOrderController: CustomDialogController = new CustomDialogController({
+    builder: SelectOrderDialog({}),
+    autoCancel: true, // 点击遮罩关闭
+    customStyle: true,
+    maskColor: 'rgba(0,0,0,0.8)',  // 黑色遮罩
+  })
+
   async aboutToAppear() {
+    this.SelectOrderController.open()
     if (!this.selectWorkOder || !this.selectWorkOder.workOrderCode) {
       // this.workOrders = await ProcessRequest.post('/api/v1/plan/workOrder/taskPage', {
       //   //查询未完成的工单
@@ -324,4 +333,4 @@ struct Index {
     .height('100%')
     .backgroundColor($r('app.color.000000'))
   }
-}
+}

+ 261 - 0
entry/src/main/ets/view/SelectOrderDialog.ets

@@ -0,0 +1,261 @@
+import ProcessRequest from '../common/util/request/ProcessRequest'
+import RequestParamModel from '../viewmodel/RequestParamModel'
+import WorkOrderInfo from '../viewmodel/WorkOrderInfo'
+import { WorkOrderPage } from '../viewmodel/WorkOrderPage'
+
+@CustomDialog
+export struct SelectOrderDialog {
+  private scrollerMaterial: Scroller = new Scroller()
+  //工单列表
+  @State workOrderList: WorkOrderInfo[] = []
+  @State selectedOrderIndex: number = -1
+  @State scanOrderValue:string = ''
+  controller: CustomDialogController
+  onConfirm: () => void = () => {
+  }
+
+  loadQueryOrders = async(orderNo:string)=>{
+    let queryRes = await ProcessRequest.post('/api/v1/plan/workOrder/page', {
+      workOrderCode:orderNo
+    } as RequestParamModel) as WorkOrderPage;
+    this.workOrderList = queryRes?.records??[]
+  }
+
+  loadWorkOrders = async () => {
+    // 获取未完成工单
+    let unfinishedRes = await ProcessRequest.post('/api/v1/plan/workOrder/taskPage', {
+      queryComplete: 0
+    } as RequestParamModel) as WorkOrderPage;
+
+    // 获取已完成工单
+    let finishedRes = await ProcessRequest.post('/api/v1/plan/workOrder/taskPage', {
+      queryComplete: 1
+    } as RequestParamModel) as WorkOrderPage;
+
+    // 创建新数组(避免使用展开运算符)
+    let combinedList: WorkOrderInfo[] = [];
+
+    // 添加未完成工单
+    if (unfinishedRes?.records) {
+      for (let item of unfinishedRes.records) {
+        combinedList.push({
+          orderName: item.orderName,
+          materialCode: item.materialCode,
+          orderCode: item.orderCode,
+          workOrderCode: item.workOrderCode,
+          completeNum: item.completeNum,
+          planNum: item.planNum,
+          isCompleted: false  // 新增完成状态
+        });
+      }
+    }
+    if (finishedRes?.records) {
+      for (let item of finishedRes.records) {
+        combinedList.push({
+          orderName: item.orderName,
+          materialCode: item.materialCode,
+          orderCode: item.orderCode,
+          workOrderCode: item.workOrderCode,
+          completeNum: item.completeNum,
+          planNum: item.planNum,
+          isCompleted: true  // 新增完成状态
+        });
+      }
+    }
+    this.workOrderList = combinedList;
+  };
+
+  private onSelectOrder(index: number) {
+    this.selectedOrderIndex = index
+  }
+
+  aboutToAppear(): void {
+    this.loadWorkOrders();
+  }
+
+  build() {
+    Column() {
+      Column() {
+        Text("选择工单")
+          .fontColor($r('app.color.FFFFFF'))
+          .fontSize($r('app.float.fontSize_38'))
+      }.height('8%')
+      .width('100%')
+      .justifyContent(FlexAlign.Center)
+
+      Row() {
+        // 左侧二维码图标
+        Image($r('app.media.qr_code'))
+          .width($r('app.float.virtualSize_32'))
+          .height($r('app.float.virtualSize_32'))
+          .fillColor($r('app.color.FFFFFF'))
+          .margin({ left: '2%'})
+        // 扫码输入框
+        TextInput({text:this.scanOrderValue, placeholder: '请扫描或录入订单或工单编号' })
+          .type(InputType.Normal)
+          .placeholderFont({ size: $r('app.float.fontSize_16') })
+          .placeholderColor($r('app.color.30FFFFFF'))
+          .fontSize($r('app.float.fontSize_30'))
+          .fontColor($r('app.color.FFFFFF'))
+          .enableKeyboardOnFocus(false)
+          .onSubmit(() => {
+
+          })
+          .onChange((value: string) => {
+            this.scanOrderValue = value;
+            if(this.scanOrderValue === '')
+            {
+              this.loadWorkOrders()
+              return
+            }
+            this.loadQueryOrders(this.scanOrderValue )
+          })
+      }
+      .height('6%')
+      .width('30%')
+      .borderRadius($r('app.float.virtualSize_16'))
+      .backgroundColor($r('app.color.000000'))
+      .margin({ left: '2%' ,top:'2%'})
+
+      Divider()
+        .vertical(false)
+        .strokeWidth(1)
+        .color($r('app.color.15FFFFFF'))
+        .margin({ top: '2%' ,bottom:'2%',left:'2%',right:'2%'})
+
+      Column() {
+        Grid(this.scrollerMaterial) {
+          ForEach(this.workOrderList, (order: WorkOrderInfo, index) => {
+            GridItem() {
+              Row(){
+                Column() {
+                  // 订单标题(带订单号)
+                  Text(`${order.orderName}`)
+                    .fontSize($r('app.float.fontSize_30'))
+                    .fontColor($r('app.color.FFFFFF'))
+                    .width('100%')
+                    .textAlign(TextAlign.Start)
+                    .margin({ bottom: '2%',left:'2%' })
+                  Column({ space: 3 }) {
+                    Text(`产品编号: ${order.materialCode}`)
+                      .fontColor($r('app.color.FFFFFF'))
+                      .fontSize($r('app.float.fontSize_16'))
+                      .fontWeight(FontWeight.Lighter)
+                      .textAlign(TextAlign.Start)
+                    Text(`订单编号: ${order.orderCode} `)
+                      .fontColor($r('app.color.FFFFFF'))
+                      .fontSize($r('app.float.fontSize_16'))
+                      .fontWeight(FontWeight.Lighter)
+                      .textAlign(TextAlign.Start)
+                    Text(`工单编号: ${order.workOrderCode}`)
+                      .fontColor($r('app.color.FFFFFF'))
+                      .fontSize($r('app.float.fontSize_16'))
+                      .fontWeight(FontWeight.Lighter)
+                      .textAlign(TextAlign.Start)
+                    Text(`完成/计划: ${order.completeNum}/${order.planNum}`)
+                      .fontColor($r('app.color.FFFFFF'))
+                      .fontSize($r('app.float.fontSize_16'))
+                      .fontWeight(FontWeight.Lighter)
+                      .textAlign(TextAlign.Start)
+                  }
+                  .width('100%')
+                  .margin({left:'2%'})
+                  .justifyContent(FlexAlign.Start)
+                  .alignItems(HorizontalAlign.Start)
+                }
+                .alignItems(HorizontalAlign.Start)
+                .width('70%')
+                .padding(8)
+                Stack(){
+                  if (order.isCompleted) {
+                    Image($r('app.media.order_complete'))
+                      .width($r('app.float.virtualSize_112'))
+                      .height($r('app.float.virtualSize_80'))
+                      .position({ x: '30%', y: '0%' })
+                      .fillColor($r('app.color.FFFFFF'))
+                      .zIndex(0)
+                  }
+                  Image($r('app.media.order_name_copy'))
+                    .width($r('app.float.virtualSize_56'))
+                    .height($r('app.float.virtualSize_56'))
+                    .fillColor($r('app.color.FFFFFF'))
+                    .zIndex(1)
+                    .onClick(()=>{
+                      this.scanOrderValue = this.workOrderList[index]?.workOrderCode ?? '';
+                    })
+                }
+                .width('30%')
+                .height('100%')
+              }
+            }
+            .height('27%')
+            .backgroundColor(index === this.selectedOrderIndex ? $r('app.color.2030D158') : $r('app.color.20FFFFFF')) // 选中状态加深
+            .borderRadius($r('app.float.virtualSize_24'))
+            //.padding(8)
+            .border({
+              width: 2,
+              color: index === this.selectedOrderIndex ? $r('app.color.2030D158') : $r('app.color.20FFFFFF')
+            })
+            .onClick(() => {
+              this.onSelectOrder(index)
+            })
+
+          })
+        }
+        .columnsTemplate('1fr 1fr 1fr')
+        // .rowsTemplate('1fr 1fr')
+        .columnsGap(10) // 移除网格内部列间距
+        .rowsGap(10) // 移除网格内部行间距
+        .width('100%') // 确保填满父容器
+        .height('97%')
+        .padding(10)
+      }
+      .height('68%')
+      .margin({left:'1%',right:'1%'})
+
+      Column() {
+        Divider()
+          .vertical(false)
+          .strokeWidth(1)
+          .color($r('app.color.15FFFFFF'))
+        Row() {
+          Row() {
+            Text('取消')
+              .fontColor($r('app.color.60FFFFFF'))
+              .fontSize($r('app.float.fontSize_30'))
+          }
+          .justifyContent(FlexAlign.Center)
+          .width('50%')
+          .onClick(() => this.controller.close())
+
+          Divider()
+            .vertical(true)
+            .strokeWidth(1)
+            .color($r('app.color.15FFFFFF'))
+          Row() {
+            Text('确定')
+              .fontColor($r('app.color.007AFF'))
+              .fontSize($r('app.float.fontSize_30'))
+          }
+          .justifyContent(FlexAlign.Center)
+          .width('50%')
+          .onClick(() => {
+            this.onConfirm();
+            this.controller.close();
+          })
+        }
+      }
+      .width('100%')
+      .height('8%')
+
+      }
+      .height('71%')
+      .width('62%')
+      .backgroundColor($r('app.color.2A2A2A'))
+      .justifyContent(FlexAlign.End)
+      .alignItems(HorizontalAlign.Start)
+      .borderColor($r('app.color.000000'))
+      .borderWidth(1)
+      .borderRadius($r('app.float.virtualSize_16'))
+  }
+}

+ 2 - 0
entry/src/main/ets/viewmodel/RequestParamModel.ets

@@ -58,4 +58,6 @@ export default class RequestParamModel {
   pageNo?: number;
   // 分页参数-每页几行
   pageSize?: number;
+  //工单表
+  orderCode?: string
 }

+ 2 - 0
entry/src/main/ets/viewmodel/WorkOrderInfo.ets

@@ -68,4 +68,6 @@ export default class WorkOrderInfo {
   // 齐套进度
   kitCompleteProgress?: number
   ops?: OperationInfo[]
+  //是否完成
+  isCompleted?:boolean
 }

+ 8 - 0
entry/src/main/ets/viewmodel/WorkOrderPage.ets

@@ -0,0 +1,8 @@
+import WorkOrderInfo from './WorkOrderInfo'
+
+export interface WorkOrderPage {
+
+  records?:WorkOrderInfo[]
+  pageNo?: number,
+  pageSize?:number,
+}

+ 8 - 0
entry/src/main/module.json5

@@ -11,6 +11,14 @@
     "deliveryWithInstall": true,
     "installationFree": false,
     "pages": "$profile:main_pages",
+    "requestPermissions":[
+      {
+        "name": "ohos.permission.INTERNET"
+      },
+      {
+        "name": "ohos.permission.GET_NETWORK_INFO"
+      }
+    ],
     "abilities": [
       {
         "name": "EntryAbility",

+ 8 - 0
entry/src/main/resources/base/element/font.json

@@ -1,6 +1,14 @@
 {
   "float": [
     {
+      "name": "virtualSize_112",
+      "value": "67.2vp"
+    },
+    {
+      "name": "virtualSize_80",
+      "value": "48vp"
+    },
+    {
       "name": "virtualSize_56",
       "value": "33.6vp"
     },

+ 8 - 8
entry/src/main/resources/base/element/font_size.json

@@ -2,31 +2,31 @@
   "float": [
     {
       "name": "fontSize_70",
-      "value": "42fp"
+      "value": "50.4fp"
     },
     {
       "name": "fontSize_48",
-      "value": "28.8fp"
+      "value": "34.56fp"
     },
     {
       "name": "fontSize_38",
-      "value": "22.8fp"
+      "value": "27.36fp"
     },
     {
       "name": "fontSize_30",
-      "value": "18fp"
+      "value": "21.6fp"
     },
     {
       "name": "fontSize_24",
-      "value": "14.4fp"
+      "value": "17.28fp"
     },
     {
       "name": "fontSize_16",
-      "value": "9.6fp"
+      "value": "11.52fp"
     },
     {
       "name": "fontSize_12",
-      "value": "7.2fp"
+      "value": "8.64fp"
     }
   ]
-}
+}

BIN
entry/src/main/resources/base/media/order_complete.png


+ 4 - 0
entry/src/main/resources/base/media/order_name_copy.svg

@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" viewBox="0 0 48 48">
+  <path d="m30 2.5.153.008A1.5 1.5 0 0 1 31.5 4v10.5H41a1.5 1.5 0 0 1 1.5 1.5v22a1.5 1.5 0 0 1-1.5 1.5H13a1.5 1.5 0 0 1-1.5-1.5V4l.008-.153A1.5 1.5 0 0 1 13 2.5h17Zm-15.5 34h25v-19H30a1.5 1.5 0 0 1-1.5-1.5V5.5h-14v31Z"/>
+  <path d="M28.986 2.895a1.5 1.5 0 0 1 2.01-.016l.11.107 11 12 .098.118a1.5 1.5 0 0 1-2.2 2.017l-.11-.107-11-12-.098-.118a1.5 1.5 0 0 1 .19-2.001ZM5.5 20a1.5 1.5 0 0 1 3 0v22.5H28a1.5 1.5 0 0 1 0 3H7A1.5 1.5 0 0 1 5.5 44V20ZM23 18.5a1.5 1.5 0 0 1 0 3h-4a1.5 1.5 0 0 1 0-3h4Zm8 8a1.5 1.5 0 0 1 0 3H19a1.5 1.5 0 0 1 0-3h12Z"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 3 - 0
entry/src/main/resources/base/media/qr_code.svg