本系列文章目錄:
1、業務系統設計之一:系統菜單設計
2、業務系統設計之二:系統主要設計(上)
系統主要簡單的了解就是一個系統的操作控制或者也可以叫住系統操作平台。一個良好的系統主要可以讓系統更加靈活操作、應用。至于技術上的實作我們可以有很多中選擇,是以這裡不談論什麼技術好等話題。本文将接着上一篇《業務系統設計之一:系統菜單設計 》介紹業務系統裡的主要設計方法,以及怎麼将系統的各部分(系統菜單、系統主要、業務操作等等)銜接在一起。 或許我這樣說還是以很多朋友不能了解什麼是系統主要,那好就請你仔細看看下圖:
上圖是我在126郵箱中的截圖,它的這種主要方式我個人感覺就是很爽的一種方式。收件箱、百寶箱、寫信等操作都以一個新的操作界面打開,然後将其挂在主要的菜單工具攔上,多任務之間可以互相切換操作,實作了多任務可以并行處理,每項功能操作都有自己的狀态(比如寫信送出了不會影響其他的界面),至于其他好處吧我這裡就不多廢話。
通過上面的分析與了解,下面我們就來看看像這樣的系統主要是怎麼實作的。以上一篇文章《業務系統設計之系統菜單設計》為基礎,通過點選菜單項目則打開菜單項對應的頁面,菜單運作效果如下: 系統主要的開發其實和其他功能一樣簡單,隻要弄清楚了功能需求就OK。
功能需求大緻如下:
1、系統入口點(這肯定就是系統菜單--下拉菜單、樹型菜單等)
2、全局顯示容器(既顯示内嵌頁面的容器)
3、點選菜單項可以在容器上建立頁簽選項,如果目前菜單項所對應的頁面已經打開則選中該項。
4、在容器中選擇頁簽項,被選擇項突出顯示。
5、每一個頁簽下對應一個頁面,可互相獨立操作互不影響其他頁簽項。
5、每一個頁簽帶有關閉功能,點選指定關閉區域或圖示既可實作關閉目前頁簽。
6、輕按兩下可實作關閉頁簽。
7、其他界面效果控制等。
本文中的資料庫結構借鑒于市場上主流ERP系統的菜單表結構,程式運作效果同上圖一樣,對菜單表有不清楚的朋友可留言提問,這裡我不做詳細解釋。SQL代碼如下: SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Menu]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Menu](
[AutoID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_Menu_AutoID] DEFAULT (newid()),
[Code] [varchar](50) NULL,
[Name] [varchar](50) NULL,
[Grade] [int] NULL,
[HasSub] [bit] NULL,
[SupMenuCode] [varchar](50) NULL,
[EndGrade] [bit] NULL,
[Order] [int] NULL,
[ReqeustUrl] [varchar](100) NULL,
[IsItemGroup] [bit] NULL,
[IsControl] [bit] NULL,
CONSTRAINT [PK_Menu] PRIMARY KEY CLUSTERED
(
[AutoID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
建立好ASP.NET WEB應用程式,并将相關的資源(本文裡的資源包括圖檔、樣式、第三方控件等)整理好。資料操作使用Linq To Sql完成,整理好的解決方案如下圖示:
本文中系統主要的核心在于RadContrls控件RadMenu和RadTabstrip的組合,導航由RedMenu完成,主要端主要由RadTabstrip完成。要實作一個完美的系統主要,頁面的控制和布局都很重要,這裡我采用母版頁技術将公共的部分放在母版頁,通過該母版頁建立的内容頁來作為系統的主要頁面。母版頁完整html編碼
系統主要母版
a,body,div,input,li,p,span,td { font-size:12px;}
#headDIV {height:60px;width:100%;text-align:center;}
#contentCenter {width:100%;height:400px;}
#stateDIV {width:100%;height:20px;background-image:url('Images/stateBg.gif');bottom:0px;}
window.onload = function()
{
if (window.screen)
{
var aw = screen.width;
var ah = screen.height;
window.moveTo(0, 0);
window.resizeTo(aw, ah);
}
}
目前操作員:admin