From 9a3e0b4d2e539bb16f42835c2df55e5c9f2f8e29 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期五, 17 十月 2025 08:36:31 +0800
Subject: [PATCH] 补充代码

---
 CLAUDE.md |  182 ++++++++++++++++++++++++++++++---------------
 1 files changed, 121 insertions(+), 61 deletions(-)

diff --git a/CLAUDE.md b/CLAUDE.md
index f0abede..01726ad 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,35 +4,39 @@
 
 ## Project Overview
 
-This is a **PDA (Personal Digital Assistant) web application** for the LongWei MES (Manufacturing Execution System). It's built as an ASP.NET Web Forms application targeting .NET Framework 4.8, designed for mobile/PDA devices used in manufacturing environments.
+This is a **PDA (Personal Digital Assistant) web application** for LanBao MES (Manufacturing Execution System). It's built as an ASP.NET Web Forms application targeting .NET Framework 4.8, designed for mobile/PDA devices used in manufacturing environments.
 
 The application handles various manufacturing operations including:
-- Material receiving/shipping (鏀惰揣/鍙戣揣)  
+- Material receiving/shipping (鏀惰揣/鍙戣揣)
 - Production reporting (鐢熶骇鎶ュ伐)
 - Quality control inspections (璐ㄩ噺妫�楠�)
-- Barcode scanning and printing
-- Bluetooth device integration
+- Barcode scanning and printing with thermal printers
+- Inventory management (鍦ㄥ簱鍒嗘枡, 搴撲綅鍙樻洿)
+- Purchase/sales operations (閲囪喘閫�璐�, 閿�鍞嚭搴�)
 
 ## Architecture & Technology Stack
 
 ### Backend
 - **ASP.NET Web Forms** (.NET Framework 4.8)
-- **Master Page**: `Mst.master` - provides common layout and references
-- **Code-behind**: C# files in `App_Code/` (e.g., `Utility.cs`)
-- **Configuration**: `Web.config` for app settings, `Scripts/config.js` for API endpoints
+- **Master Page**: `Mst.master` at root - provides common layout, script references, and Vue.js initialization
+- **Code-behind**: C# utility classes in `App_Code/` (e.g., `Utility.cs` for HTTP requests and authentication)
+- **Configuration**: `Web.config` for compilation settings, `Scripts/config.js` for API endpoints and global Vue extensions
 
 ### Frontend
-- **Vue.js 2.x** - primary frontend framework
-- **Vant UI** - mobile UI component library for Vue
-- **Axios** - HTTP client for API calls
-- **Flexible.js** - mobile responsive layout
-- **Custom components**: Navigation, loading, back button functionality
+- **Vue.js 2.x** - primary frontend framework (loaded from `/Scripts/vue.min.js`)
+- **Vant UI** - mobile-first component library for Vue (loaded from `/scripts/vant/`)
+- **Axios 0.25.0** - HTTP client for API calls
+- **lib-flexible** - responsive layout adaptation for different mobile screen sizes
+- **js.cookie** - Cookie management library
+- **uni.webview** - Bridge for native mobile app integration (printing, scanning)
 
 ### API Integration
-- **Primary API**: Configurable in `Scripts/config.js` (currently `localhost:5204/api/`)
-- **PC Backend**: Separate API for PC-related operations (`192.168.0.51:8081/`)
-- **Authentication**: Cookie-based with `loginGuid` and `loginAccount`
-- **HTTP wrapper**: `Vue.prototype.AxiosHttp` for standardized API calls
+- **Primary API**: Configurable in `Scripts/config.js` as `APIURL` (default: `http://192.168.0.51:8083/api/`)
+- **PC Backend**: Separate API as `APIURL_PC` (default: `http://192.168.0.51:8081/`)
+- **Authentication**: Cookie-based with `loginGuid` (user GUID) and `loginAccount` (username)
+- **HTTP wrapper**: `Vue.prototype.AxiosHttp(method, url, params, isToken, isPC)` for standardized API calls
+  - `isToken`: defaults to true, adds `loginGuid` as token header
+  - `isPC`: 0 for PDA API, 1 for PC API
 
 ## Directory Structure
 
@@ -48,23 +52,29 @@
 ## Development Workflow
 
 ### Building & Running
-- **Development**: Open `GsPdaApp.sln` in Visual Studio
-- **Debug mode**: Set in `Web.config` (`debug="true"`)
-- **Local server**: Uses IIS Express (typically port 51933)
-- **No build scripts**: Standard ASP.NET Web Forms compilation
+- **Solution**: Open `GsPdaApp.sln` in Visual Studio 2017 or later
+- **Debug mode**: Set in `Web.config` (`<compilation debug="true" targetFramework="4.8">`)
+- **Local server**: Uses IIS Express (development server)
+- **Build**: Standard ASP.NET Web Forms compilation (F5 to build and run)
+- **No separate build commands** - Visual Studio handles compilation automatically
 
 ### Key Configuration Files
-- `Web.config` - Server configuration, compilation settings
-- `Scripts/config.js` - API endpoints, global Vue.js extensions
-- `Mst.master` - Common page layout and script references
+- **`Web.config`** - ASP.NET compilation settings, assembly references
+- **`Scripts/config.js`** - API base URLs (`APIURL`, `APIURL_PC`), global Vue.js extensions and prototypes
+- **`Mst.master`** - Master page template with common scripts (Vue, Vant, Axios, flexible.js)
+- **Cache busting**: Query strings used in master page (e.g., `config.js?<%=123611131 %>`) to force browser refresh
 
 ### Code Conventions
-- **Page structure**: Each `.aspx` page has corresponding `.aspx.cs` (C#) and `.js` (Vue.js) files
-- **Vue instances**: Named `vm`, mounted to `#app` element
-- **API calls**: Use `this.AxiosHttp(method, url, params)` wrapper
-- **Authentication**: Check with `this.CHECKLOGIN()` or `this.GetLoginInfor()`
-- **Navigation**: Use `this.GoBack()` for consistent back navigation
-- **Styling**: Mobile-first with Vant UI components, custom CSS in `/Images/Style.css`
+- **Three-file pattern**: Each feature has `.aspx` (markup), `.aspx.cs` (code-behind), and `.js` (Vue.js logic)
+  - Example: `H5/BarCf.aspx` + `H5/BarCf.aspx.cs` + `H5/Js/BarCf.js`
+- **Vue instances**: Always named `vm`, mounted to `#app` element in `Mst.master`
+- **API calls**: Use `this.AxiosHttp(method, url, params, isToken, isPC)` - never use Axios directly
+- **Authentication**:
+  - Call `this.CHECKLOGIN()` in `mounted()` to verify session
+  - Use `this.GetLoginInfor()` to retrieve `loginGuid` and `loginAccount` from cookies
+- **Navigation**: Use `this.GoBack()` which redirects to `/H5/Default.aspx` with user context
+- **Focus management**: Use `v-focus.noKeyboard` directive to focus inputs without triggering mobile keyboard
+- **Number input sanitization**: Use `.replace(/[^\d.]/g, '')` pattern for decimal inputs
 
 ## Common Development Patterns
 
@@ -75,56 +85,106 @@
     data: function() {
         return {
             isLoading: false,
-            // page-specific data
+            userInfo: {
+                loginGuid: '',
+                loginAccount: '',
+            },
+            formData: {
+                barcode: "",
+                // other form fields
+            }
         }
     },
     mounted() {
-        this.CHECKLOGIN(); // Verify user authentication
-        // initialization logic
+        var that = this;
+        // Always authenticate first
+        this.userInfo = {
+            loginGuid: this.GetLoginInfor().loginGuid,
+            loginAccount: this.GetLoginInfor().loginAccount,
+        };
+        // Load initial data
     },
     methods: {
-        // page-specific methods
+        // Custom methods
     }
 });
 ```
 
-### API Integration
+### API Integration Pattern
 ```javascript
-// Standard API call pattern
-this.AxiosHttp('get', 'endpoint', params).then(res => {
-    if (res.success) {
-        // handle success
-        this.$playSound('success');
+// Standard API call - response format: { status: 0, message: "", data: { tbBillList: {} } }
+that.isLoading = true;
+that.AxiosHttp('post', 'endpoint/action', {
+    param1: value1,
+    param2: value2
+}, false)  // isToken=false for login, true for authenticated calls
+.then(function(res) {
+    var json = res;
+    if (json.status == 0) {  // Success - note: status is integer 0, not boolean
+        // Process data
+        var data = json.data.tbBillList;
+        that.$playSound('success');
+        that.$notify({ type: 'success', message: json.message });
     } else {
-        // handle error  
-        this.$playSound('error');
-        this.$toast.fail(res.message);
+        that.$toast.fail(json.message);
+        that.$playSound('error');
     }
+    that.isLoading = false;
+})
+.catch(function(error) {
+    that.isLoading = false;
+    that.$toast.fail("缃戠粶閿欒锛岃閲嶈瘯锛�");
+    console.log(error);
 });
 ```
 
 ### Audio Feedback
-- Success operations: `this.$playSound('success')` (plays `/audio/OK.wav`)
-- Error operations: `this.$playSound('error')` (plays `/audio/NG.wav`)
+- Success operations: `this.$playSound('success')` (plays `/audio/YES.wav`)
+- Error operations: `this.$playSound('error')` (plays `/audio/NO.wav`)
+- Audio playback is try-catch wrapped to handle failures gracefully
 
-### Barcode/Printing Integration
-- Printing functionality integrated via `uni.webView.postMessage()`
-- Print templates defined in `Vue.prototype.sendPrintMessage`
-- Barcode scanning integrated with mobile hardware
+### Barcode Scanning & Input Focus
+```javascript
+// Typical barcode input field with auto-focus
+<van-field
+    ref="barcode"
+    v-model="formData.barcode"
+    label="鐗╂枡鏉$爜"
+    v-focus.noKeyboard
+    @keyup.enter.native="getScan"
+></van-field>
 
-## Bluetooth Integration
-- Located in `/H5/Bluetooth/` directory  
-- Configuration via `BluetoothConfig.xml`
-- MAC address management through dedicated pages
+// After processing, refocus and clear
+that.$refs.barcode.focus();
+that.formData.barcode = null;
+```
+
+### Printing Integration
+- Uses `uni.webView.postMessage()` to send print commands to native wrapper app
+- Print templates defined in `Vue.prototype.sendPrintMessage` in `Scripts/config.js`
+- Supports thermal printers with custom TSPL commands
+- Print data format includes barcode, QR codes, item details, timestamps
+- Printer IP/Port configured per-function via API response (`tbBillList.printInfo`)
 
 ## Authentication & Session Management
-- **Login page**: `/UserLogin.aspx`  
-- **Session storage**: Browser cookies (`loginGuid`, `loginAccount`)
-- **Auto-redirect**: Unauthenticated users redirected to login
-- **Session validation**: `CHECKLOGIN()` method on each page
+- **Login endpoint**: `login/login` (POST with `userID` and `userPass`)
+- **Session storage**: Cookies managed by `js.cookie` library
+  - `loginGuid` - User GUID (used as API token)
+  - `loginAccount` - Username
+  - `loginName` - User display name
+  - `orgId`, `orgNo`, `orgName` - Organization information
+  - `passwd`, `rememberPwd` - Optional password persistence
+- **Session validation**:
+  - `CHECKLOGIN()` - Redirects to `/UserLogin.aspx` if not authenticated
+  - `GetLoginInfor()` - Returns login object or redirects if invalid
+- **Token header**: Automatically added to API calls as `token: loginGuid` when `isToken=true`
 
-## Mobile Optimization
-- **Viewport**: Configured for mobile devices, no user scaling
-- **Responsive**: Uses lib-flexible for different screen sizes  
-- **Touch-friendly**: Vant UI components optimized for touch
-- **Performance**: Minimized resource loading, efficient Vue.js patterns
\ No newline at end of file
+## Mobile Optimization & UX
+- **Viewport**: `user-scalable=no` prevents zoom, optimized for industrial PDA devices
+- **Responsive layout**: lib-flexible adapts to different screen DPIs
+- **Input handling**:
+  - `v-focus.noKeyboard` directive focuses without triggering soft keyboard
+  - `.replace(/[^\d.]/g, '')` for numeric input sanitization
+- **Loading states**: Global `comLoading` component triggered by `isLoading` flag
+- **Navigation**: Standardized `GoBack()` preserves user context and tab index
+- **Vant components**: Optimized for touch (van-button, van-field, van-nav-bar, van-notice-bar, van-toast)
\ No newline at end of file

--
Gitblit v1.9.3