tjx
2025-10-24 cd6496f2fadb885056c35a67fb3caf1a1a765ab1
补充文档
已修改2个文件
已添加1个文件
93 ■■■■■ 文件已修改
DevApp/Gs.DevApp/DevFrm/QC/Frm_MesQaItemsDetect01.Designer.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/Rk/Frm_MesInvItemArn.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp_Onboarding.md 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DevApp/Gs.DevApp/DevFrm/QC/Frm_MesQaItemsDetect01.Designer.cs
@@ -777,7 +777,7 @@
            this.gridColumn17.Width = 94;
            // 
            // gridColumn23
            //
            //
            this.gridColumn23.Caption = "采购单号";
            this.gridColumn23.FieldName = "cgdNo";
            this.gridColumn23.MinWidth = 25;
@@ -785,9 +785,9 @@
            this.gridColumn23.Visible = true;
            this.gridColumn23.VisibleIndex = 22;
            this.gridColumn23.Width = 94;
            //
            //
            // gridColumn_cgdCreate
            //
            //
            this.gridColumn_cgdCreate.Caption = "采购订单创建人";
            this.gridColumn_cgdCreate.FieldName = "cgdCreate";
            this.gridColumn_cgdCreate.MinWidth = 25;
@@ -795,7 +795,7 @@
            this.gridColumn_cgdCreate.Visible = true;
            this.gridColumn_cgdCreate.VisibleIndex = 23;
            this.gridColumn_cgdCreate.Width = 100;
            //
            //
            // gridColumn30
            // 
            this.gridColumn30.Caption = "类型";
DevApp/Gs.DevApp/DevFrm/Rk/Frm_MesInvItemArn.cs
@@ -43,6 +43,8 @@
           }, tips);
            // æ·»åŠ gridView1的RowStyle事件,当退货标识th=1时整行标红
            gridView1.RowStyle += GridView1_RowStyle;
            // æ·»åŠ gvMx1的RowStyle事件,当处理意见clyj为"退货"时整行标红
            gvMx1.RowStyle += GvMx1_RowStyle;
            Gs.DevApp.ToolBox.UtilityHelper.SetTabParameter(gridView1, xtraTabControl1, pageBar1, (value) =>
            {
                getModel(value);
@@ -141,6 +143,8 @@
                        gvMx1.BestFitColumns();
                        Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gvMx1);
                        ConfigureOaColumns();
                        // åˆ·æ–°è§†å›¾æ ·å¼ï¼Œä½¿RowStyle事件生效
                        gvMx1.RefreshData();
                    }
                    catch (Exception ex)
                    {
@@ -176,6 +180,37 @@
                    {
                        e.Appearance.BackColor = System.Drawing.Color.Red;
                        e.Appearance.ForeColor = System.Drawing.Color.White;
                    }
                }
            }
        }
        /// <summary>
        /// gvMx1的RowStyle事件,当处理意见clyj为"退货"时整行标红
        /// </summary>
        private void GvMx1_RowStyle(object sender, RowStyleEventArgs e)
        {
            if (e.RowHandle >= 0)
            {
                var view = sender as GridView;
                if (view != null)
                {
                    try
                    {
                        var clyjValue = view.GetRowCellValue(e.RowHandle, "clyj");
                        if (clyjValue != null && !string.IsNullOrEmpty(clyjValue.ToString()))
                        {
                            string clyj = clyjValue.ToString().Trim();
                            if (clyj == "退货")
                            {
                                e.Appearance.BackColor = System.Drawing.Color.Red;
                                e.Appearance.ForeColor = System.Drawing.Color.White;
                            }
                        }
                    }
                    catch
                    {
                        // å¦‚果列不存在,忽略错误
                    }
                }
            }
@@ -583,6 +618,8 @@
                        gvMx1.BestFitColumns();
                        Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gvMx1);
                        ConfigureOaColumns();
                        // åˆ·æ–°è§†å›¾æ ·å¼ï¼Œä½¿RowStyle事件生效
                        gvMx1.RefreshData();
                    }
                    else
                    {
DevApp/Gs.DevApp_Onboarding.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
# Gs.DevApp å¿«é€Ÿä¸Šæ‰‹æ‰‹å†Œ
## ç›®å½•速览
- `DevFrm/`:各业务模块的 WinForms çª—体,例如 `BasicData/Frm_MesWorkshopLine.cs`、`QC/Frm_FqcDetect01.cs`。所有查询与 CRUD å…¥å£éƒ½åœ¨è¿™äº›çª—体里。
- `ToolBox/UtilityHelper.cs`:通用方法库,包含 HTTP è°ƒç”¨ã€è¡¨æ ¼ç¿»é¡µã€æŽ§ä»¶å¯ç”¨æŽ§åˆ¶ç­‰ã€‚
- `ToolBox/MsgHelper.cs`:统一的消息提示封装。
- `Entity/`:接口交互模型,例如 `PageQueryModel`、`ReturnModel<T>`,用于分页/返回值解析。
- `UserControl/UcToolBarMenu.cs`:工具条控件,定义了 `btnAddClick`、`btnSaveClick` ç­‰å›ºå®šäº‹ä»¶ã€‚
## æŸ¥è¯¢å›ºå®šå…¥å£ï¼šgetPageList
1. è§¦å‘链路:`pageBar1.PagerEvent`、`toolBarMenu1.btnLoadClick`、`toolBarMenu1.btnQueryClick` æœ€ç»ˆéƒ½ä¼šè°ƒç”¨ `getPageList(int curPage)`(参见 `DevFrm\BasicData\Frm_Customer.cs:36`)。
2. æ–¹æ³•必做三件事:
   - æž„造 `PageQueryModel` å¹¶åºåˆ—化:`new PageQueryModel(curPage, pageBar1.RowsCount, sortName, "asc", "", UtilityHelper.GetSearchWhere(_filterList))`。
   - è°ƒç”¨æŽ¥å£ï¼š`UtilityHelper.HttpPost("", _webServiceName + "GetListPage", json)`。
   - è§£æžå¹¶ç»‘定:`UtilityHelper.ReturnToTablePage(strReturn)` â†’ ç»‘定到 `gcMain1`,同步 `pageBar1.TotalPages/RecordCount`。
3. å¦‚果要改查询条件,查 `_filterList` çš„æž„建流程(`UtilityHelper.GetDilter` + `ShowFilter` è‡ªå®šä¹‰ç­›é€‰ï¼‰ã€‚
## æ˜Žç»†åŠ è½½ï¼šgetModel
- åˆ‡æ¢åˆ°æ˜Žç»†é¡µæˆ–执行编辑时,`UtilityHelper.SetTabParameter` ä¼šæ‹‰èµ· `getModel(string guid)`。
- è¯¥æ–¹æ³•调用 `_webServiceName + "GetModel"`,通过 `UtilityHelper.SetValueByObj(layoutMx1.Controls, data, isEdit)` ç»™æŽ§ä»¶å›žå¡«ï¼›å½“ `toolBarMenu1.currentAction == "edit"` æ—¶å…è®¸ç¼–辑。
- è‹¥çœ‹åˆ°â€œæ˜Žç»†ä¸åˆ·æ–°â€ï¼Œå…ˆç¡®è®¤ `lbGuid` æ˜¯å¦èµ‹å€¼ã€`toolBarMenu1.currentAction` æ˜¯å¦è¢«é‡ç½®ã€‚
## æ–°å¢ž/编辑/保存
- å…¥å£ç»Ÿä¸€ç»‘定在窗体构造函数中:
  - `btnAddClick`:`UtilityHelper.CleanValueByControl(layoutMx1.Controls, true)` æ¸…空控件,`JumpTab(xtraTabControl1, 4)` åˆ‡åˆ°ç¼–辑页。
  - `btnEdtClick`:`UtilityHelper.GetCurrentRow(...)` è¯»å–当前行,`ChangeEnableByControl(..., true)` å¼€å¯ç¼–辑。
  - `btnSaveClick`:组装匿名对象(通常含 `Guid = UtilityHelper.ToGuid(lbGuid.Text)`),然后 `UtilityHelper.HttpPost("", _webServiceName + "EditModel", json)`。成功后清除 `currentAction`、`ChangeEnableByControl(..., false)` å¹¶æç¤ºã€‚
- å¸¸è§æ ¡éªŒä¸ŽæŒ‰é’®çŠ¶æ€å‡å†™åœ¨ `ToolBarMenu1_btnSaveClick` å†…,直接在对应窗体里调整。
## åˆ é™¤ä¸Žåˆ·æ–°
- åˆ é™¤å›ºå®šåœ¨ `toolBarMenu1.btnDelClick`(如 `DevFrm\BasicData\Frm_MesWorkshopLine.cs:200`):
  - é€šè¿‡ `UtilityHelper.GetCurrentRow` æ‹¿ Guid â†’ `MsgHelper.AskQuestion` äºŒæ¬¡ç¡®è®¤ â†’ è°ƒç”¨ `_webServiceName + "DeleteModel"`。
  - æˆåŠŸåŽé€šå¸¸ `getPageList(pageBar1.CurrentPage)` é‡æ–°æ‹‰å–列表。
- åˆ·æ–°æŒ‰é’® `btnLoadClick` é»˜è®¤åˆ¤æ–­å½“前页签:在明细页执行 `getModel(lbGuid.Text)`,否则回到 `getPageList`。
## å¸¸ç”¨å·¥å…·æ–¹æ³•速查
- `UtilityHelper.HttpPost`:统一的接口请求,自动取 `App.config` ä¸­çš„ `WebApiUrl`,调试时可先打印 `_webServiceName` ç¡®è®¤ URL。
- `UtilityHelper.ReturnToTablePage` / `ReturnToDynamic`:把接口 JSON è½¬ä¸º `ReturnModel<T>`;当列表渲染异常时首选检查 `rtnCode` ä¸Ž `rtnMsg`。
- `UtilityHelper.GetSearchWhere`:把 `FilterEntity` æ‹¼æˆ SQL ç‰‡æ®µï¼Œä½äºŽ `ToolBox/UtilityHelper.cs` 1679 è¡Œé™„近。
- `UtilityHelper.JumpTab` / `SetGridViewParameter` / `SetTabParameter`:负责列表与明细页的联动;若翻页或双击行为失效,先看这些设置是否被调用。
- `UtilityHelper.ChangeEnableByControl`、`SetValueByObj`、`CleanValueByControl`:表单控件批量赋值/禁用的首选 API。
- `ToolBox.MsgHelper`:挟带统一样式的提示窗,避免直接使用 `MessageBox.Show`。
## è°ƒè¯•小贴士
- ä¸çŸ¥é“某功能在哪个窗体?使用 `rg "MesXxxManager"` æˆ– `rg "btnSaveClick"` å¿«é€Ÿå®šä½ã€‚
- æ‰€æœ‰æŸ¥è¯¢éƒ½å‘½åä¸º `getPageList`(小写 g),所以 `rg "getPageList"` èƒ½ä¸€æ¬¡çœ‹æ¸…所有窗体的分页实现。
- `_webServiceName` å­—段指向后端控制器前缀(如 `"MesWorkshopLineManager/"`),定位接口时只需组合 `GetListPage`、`GetModel`、`EditModel`、`DeleteModel`。
- å·¥å…·æ¡æ‰€æœ‰æŒ‰é’®äº‹ä»¶çš„原始定义在 `UserControl/UcToolBarMenu.cs`;如果需要新增按钮或排查禁用逻辑,可以从这里下手。