1. 程式人生 > >【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (13)客戶管理

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (13)客戶管理

索引

簡述

簡單的客戶管理

專案準備

我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5

希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。

專案開始

一、資料庫設計

表名:SYS_BUSSINESSCUSTOMER
序號 列名 資料型別 長度 小數位 標識 主鍵 外來鍵 允許空 預設值 說明
1 ID int 4 0
2 Fk_DepartId nvarchar 36 0
3 FK_RELATIONID nvarchar 72 0 公司介紹外來鍵
4 CompanyName nvarchar 50 0 公司名稱
5 CompanyProvince nvarchar 10 0 公司所在省份
6 CompanyCity nvarchar 10 0 公司所在城市
7 CompanyArea nvarchar 10 0 公司所在縣區
8 CompanyAddress nvarchar 500 0 公司通訊地址
9 CompanyTel nvarchar 50 0 公司辦公電話
10 CompanyWebSite nvarchar 100 0 公司網址
11 ChargePersionName nvarchar 50 0 負責人姓名
12 ChargePersionSex int 4 0 負責人性別
13 ChargePersionQQ nvarchar 20 0 負責人QQ
14 ChargePersionEmail nvarchar 50 0 負責人郵箱
15 ChargePersionPhone nvarchar 50 0 負責人電話
16 IsValidate bit 1 0 公司是否已驗證
17 CreateUser nvarchar 50 0 建立人
18 CreateDate datetime 8 3 建立時間
19 UpdateUser nvarchar 50 0 更新人
20 UpdateDate datetime 8 3 更新時間
21 CustomerStyle int 4 0 客戶型別

二、建立介面和實現類

1、我們在Service類庫下IService資料夾的SysManage資料夾下新建一個介面 IBussinessCustomerManage

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Service.IService
 8 {
 9     /// <summary>
10     /// 客戶管理介面
11     /// add yuangang by 2016-06-17
12     /// </summary>
13     public interface IBussinessCustomerManage:IRepository<Domain.SYS_BUSSINESSCUSTOMER>
14     {
15     }
16 }

2、我們在ServiceImp資料夾的SysManage資料夾下面新建一個實現類 BussinessCustomerManage

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Service.ServiceImp
 8 {
 9     public class BussinessCustomerManage:RepositoryBase<Domain.SYS_BUSSINESSCUSTOMER>,IService.IBussinessCustomerManage
10     {
11     }
12 }

3、然後呢?對了,千萬別忘記,我們在Service類庫下面的Service.xml配置一下

三、控制器和檢視

1、我們在/Areas/SysManage/Controllers 下新建一個控制器 BussinessCustomerController 繼承基礎控制器 BaseController

2、我們配置一下/Config/Controllers.xml 實現spring的注入

3、我們宣告一下這些容器

 1 #region 宣告容器
 2         /// <summary>
 3         /// 公司客戶管理
 4         /// </summary>
 5         IBussinessCustomerManage BussinessCustomerManage { get; set; }
 6         /// <summary>
 7         /// 省市區管理
 8         /// </summary>
 9         ICodeAreaManage CodeAreaManage { get; set; }
10         /// <summary>
11         /// 大資料欄位管理
12         /// </summary>
13         IContentManage ContentManage { get; set; }
14         /// <summary>
15         /// 編碼管理
16         /// </summary>
17         ICodeManage CodeManage { get; set; }
18         #endregion

4、我們為Index新增檢視,並且加入驗證模組 模組別名為 BussinessCustomer 操作驗證為 View

1 /// <summary>
2         /// 客戶管理載入主頁
3         /// </summary>
4         /// <returns></returns>
5         [UserAuthorizeAttribute(ModuleAlias = "BussinessCustomer", OperaAction = "View")]
6         public ActionResult Index()
7         {
8             
9         }

5、我們新增選單連線

5.1 我們開啟 系統管理中心 → 系統管理 → 模組管理  新增一個頂部分類  【客戶管理中心】

5.2 我們在【客戶管理中心】 下新建一個 右側頂級選單 【客戶管理】

5.3 我們在【客戶管理】選單下 新建一個選單 【客戶中心】 模組別名: BussinessCustomer  模組型別: 列表頁   模組路徑: /Sys/BussinessCustomer

5.4 這樣我們是否就有選單了呢?答案是否定的。因為我們為Index添加了許可權驗證 View 而我們這個模組還沒有許可權。所以我們要建立許可權

為了快速,我們可以直接選擇 【初始化許可權】 會自動為我們新增 基本的操作許可權 如果我們需要其它許可權 比如:稽核、釋出、下載、匯出等,我們可以通過【建立新許可權】 來新增自定義操作許可權

OK,現在可以開啟頁面了。

6、修改Index 輸出客戶列表

6.1 輸出省份列表和客戶型別列表

1 ViewData["ProvinceList"] = CodeAreaManage.LoadListAll(p => p.LEVELS == 1);
2 ViewBag.KHLX = this.CodeManage.LoadAll(p => p.CODETYPE == "LXRLX").OrderBy(p => p.SHOWORDER).ToList();

6.2  處理查詢引數 輸出客戶列表

 1 /// <summary>
 2         /// 客戶管理載入主頁
 3         /// </summary>
 4         /// <returns></returns>
 5         [UserAuthorizeAttribute(ModuleAlias = "BussinessCustomer", OperaAction = "View")]
 6         public ActionResult Index()
 7         {
 8             try
 9             {
10 
11                 #region 處理查詢引數
12                 //接收省份
13                 string Province = Request.QueryString["Province"];
14                 ViewData["Province"] = Province;
15                 //接收客戶型別
16                 string CustomerStyle = Request.QueryString["CustomerStyle"];
17                 ViewData["CustomerStyle"] = CustomerStyle;
18                 //文字框輸入查詢關鍵字
19                 ViewBag.Search = base.keywords;                
20                 #endregion
21 
22                 ViewData["ProvinceList"] = CodeAreaManage.LoadListAll(p => p.LEVELS == 1);
23                 ViewBag.KHLX = this.CodeManage.LoadAll(p => p.CODETYPE == "LXRLX").OrderBy(p => p.SHOWORDER).ToList();
24 
25                 //輸出客戶分頁列表
26                 return View(BindList(Province, CustomerStyle));
27             }
28             catch (Exception e)
29             {
30                 WriteLog(Common.Enums.enumOperator.Select, "客戶管理載入主頁:", e);
31                 throw e.InnerException;
32             }
33         }

6.3 分頁查詢客戶列表方法

 1  #region 幫助方法及其他控制器呼叫
 2         /// <summary>
 3         /// 分頁查詢公司客戶列表
 4         /// </summary>
 5         private Common.PageInfo BindList(string Province, string CustomerStyle)
 6         {
 7             //基礎資料(快取)
 8             var query = this.BussinessCustomerManage.LoadAll(null);
 9 
10             //非超級管理員只允許檢視使用者所在部門客戶
11             if(!CurrentUser.IsAdmin)
12             {
13                 query = query.Where(p => p.Fk_DepartId == CurrentUser.DptInfo.ID);
14             }
15 
16             //客戶所在省份
17             if (!string.IsNullOrEmpty(Province))
18             {               
19                 query = query.Where(p => p.CompanyProvince == Province);
20             }
21 
22             //客戶型別
23             if (!string.IsNullOrEmpty(CustomerStyle))
24             {
25                 int styleId = int.Parse(CustomerStyle);
26                 query = query.Where(p => p.CustomerStyle == styleId);
27             }
28 
29             //查詢關鍵字
30             if (!string.IsNullOrEmpty(keywords))
31             {
32                 keywords = keywords.ToLower();
33                 query = query.Where(p => p.CompanyName.Contains(keywords) || p.ChargePersionName.Contains(keywords));
34             }
35             //排序
36             query = query.OrderByDescending(p => p.UpdateDate).OrderByDescending(p => p.ID);
37             //分頁
38             var result = this.BussinessCustomerManage.Query(query, page, pagesize);
39 
40             var list = result.List.Select(p => new
41             {
42                 p.ID,
43                 p.CompanyName,
44                 p.IsValidate,
45                 CompanyProvince = this.CodeAreaManage.Get(m => m.ID == p.CompanyProvince).NAME,
46                 CompanyCity = this.CodeAreaManage.Get(m => m.ID == p.CompanyCity).NAME,
47                 CompanyArea = this.CodeAreaManage.Get(m => m.ID == p.CompanyArea).NAME,
48                 p.CompanyTel,
49                 p.ChargePersionName,
50                 p.CreateUser,
51                 CreateDate=p.CreateDate.ToString("yyyy-MM-dd"),
52                 p.CustomerStyle
53 
54 
55             }).ToList();
56 
57             return new Common.PageInfo(result.Index, result.PageSize, result.Count, Common.JsonConverter.JsonClass(list));
58         }59         #endregion

6.4 頁面輸出

7、新增、修改、刪除客戶

7.1  載入客戶詳情 生成表單

 1  /// <summary>
 2         /// 載入詳情
 3         /// </summary>
 4         /// <param name="id"></param>
 5         /// <returns></returns>
 6         [UserAuthorizeAttribute(ModuleAlias = "BussinessCustomer", OperaAction = "Detail")]
 7         public ActionResult Detail(int? id)
 8         {
 9             //初始化客戶
10             var entity = new Domain.SYS_BUSSINESSCUSTOMER() { ChargePersionSex = 1 };
11 
12             if(id!=null && id>0)
13             {
14                 //客戶實體
15                 entity = BussinessCustomerManage.Get(p => p.ID == id);
16                 //公司介紹
17                 ViewData["CompanyInstroduce"] = ContentManage.Get(p => p.FK_RELATIONID == entity.FK_RELATIONID && p.FK_TABLE == "SYS_BUSSINESSCUSTOMER") ?? new Domain.COM_CONTENT();
18             }
19 
20             //客戶型別
21             ViewBag.KHLX = this.CodeManage.LoadAll(p => p.CODETYPE == "LXRLX").OrderBy(p=>p.SHOWORDER).ToList();
22 
23             return View(entity);
24         }

7.2 Detail.cshtml

  1 @{
  2     ViewBag.Title = "Detail";
  3     Layout = "~/Views/Shared/_Layout.cshtml";
  4     var content = ViewData["CompanyInstroduce"] == null ? new Domain.COM_CONTENT() : ViewData["CompanyInstroduce"] as Domain.COM_CONTENT;
  5 }
  6 @model Domain.SYS_BUSSINESSCUSTOMER
  7 <style type="text/css">
  8     .gray-bg {
  9         background-color: white;
 10     }
 11 </style>
 12 @using (Ajax.BeginForm("Save", null, new AjaxOptions()
 13                            {
 14                                HttpMethod = "Post",
 15                                OnBegin = "SubAjax.Loading",
 16                                OnComplete = "SubAjax.Complate",
 17                                OnFailure = "SubAjax.Failure",
 18                                OnSuccess = "SubAjax.Success"
 19                            },
 20                                new { @class = "form-horizontal dig-from", @role = "form" }))
 21 {
 22     @Html.HiddenFor(p => p.ID)
 23     @Html.HiddenFor(p=>p.FK_RELATIONID)
 24     @Html.HiddenFor(p=>p.Fk_DepartId)
 25     @Html.HiddenFor(p => p.CreateUser)
 26     @Html.HiddenFor(p => p.CreateDate)
 27     @Html.Hidden("ContentId", content.ID)
 28     <div class="wrapper wrapper-content animated fadeInUp">
 29         <div class="row">
 30             <div class="ibox-detail-title">
 31                 <i class="fa fa-pencil-square-o"></i>新增/修改客戶
 32             </div>
 33             <div class="ibox-content">
 34                 <div class="row">
 35                     <div class="col-xs-6">
 36                         <div class="form-group">
 37                             <label class="col-xs-4 control-label">客戶名稱:</label>
 38                             <div class="col-xs-8">
 39                                 @Html.TextBoxFor(p => p.CompanyName, new { @class = "form-control", @placeholder = "請輸入客戶名稱", @datatype = "*", @nullmsg = "請輸入客戶名稱!", @errormsg = "請輸入客戶名稱!" })
 40                             </div>
 41                         </div>
 42                     </div>
 43                     <div class="col-xs-6">
 44                         <div class="form-group">
 45                             <label class="col-xs-4 control-label">客戶型別:</label>
 46                             <div class="col-xs-8">
 47                                 <select name="CustomerStyle" class="form-control input-sm  input-s-sm inline">
 48                                     @{
 49     foreach (var item in ViewBag.KHLX)
 50     {
 51                             <option value="@item.CODEVALUE" @(Model.CustomerStyle!=null&&Model.CustomerStyle.ToString() == @item.CODEVALUE ? "selected" : "")>@item.NAMETEXT</option>
 52     }
 53                                     }
 54                                 </select>
 55 
 56                             </div>
 57                         </div>
 58                     </div>
 59                 </div>
 60                 <div class="hr-line-dashed"></div>
 61                 <div class="row">
 62                     <div class="col-xs-6">
 63                         <div class="form-group">
 64                             <label class="col-xs-4 control-label">公司電話:</label>
 65                             <div class="col-xs-8">
 66                                 @Html.TextBoxFor(p => p.CompanyTel, new { @class = "form-control", @placeholder = "請輸入公司電話" })
 67                             </div>
 68                         </div>
 69                     </div>
 70                     <div class="col-xs-6">
 71                         <div class="form-group">
 72                             <label class="col-xs-4 control-label">公司網址:</label>
 73                             <div class="col-xs-8">
 74                                 @Html.TextBoxFor(p => p.CompanyWebSite, new { @class = "form-control", @placeholder = "請輸入公司網址" })
 75                             </div>
 76                         </div>
 77                     </div>
 78                 </div>
 79                 <div class="hr-line-dashed"></div>
 80                         <div class="form-group">
 81                             <label class="col-xs-2 control-label">所在地:</label>
 82                             <div class="col-xs-10">
 83                                 @Html.HiddenFor(p => p.CompanyProvince)
 84                                 @Html.HiddenFor(p => p.CompanyCity)
 85                                 @Html.HiddenFor(p => p.CompanyArea)
 86                                 <select name="Province" id="Province" onchange="SelectCity('Province', 'City')" class="form-control input-sm  input-s-sm inline">
 87                                     <option value="-1">--請選擇--</option>
 88                                 </select>
 89                                 <select name="City" id="City" onchange="SelectCountry('City', 'Area')" class="form-control input-sm  input-s-sm inline">
 90                                     <option value="-1">--請選擇--</option>
 91                                 </select>
 92                                 <select name="Area" id="Area" onchange="SelectAreas('Area')" class="form-control input-sm  input-s-sm inline">
 93                                     <option value="-1">--請選擇--</option>
 94                                 </select>
 95                             </div>
 96                         </div>
 97                 <div class="hr-line-dashed"></div>
 98                 <div class="form-group">
 99                     <label class="col-xs-2 control-label">通訊地址:</label>
100                     <div class="col-xs-10">
101                         @Html.TextBoxFor(p => p.CompanyAddress, new { @class = "form-control", @placeholder = "請輸入通訊地址" })
102                     </div>
103                 </div>
104                 <div class="hr-line-dashed"></div>
105                 <div class="row">
106                     <div class="col-xs-6">
107                         <div class="form-group">
108                             <label class="col-xs-4 control-label">負責人:</label>
109                             <div class="col-xs-8">
110                                 @Html.TextBoxFor(p => p.ChargePersionName, new { @class = "form-control", @placeholder = "請輸入負責人姓名", @datatype = "*", @nullmsg = "請輸入負責人姓名!", @errormsg = "請輸入負責人姓名!" })
111                             </div>
112                         </div>
113                     </div>
114                     <div class="col-xs-6">
115                         <div class="form-group">
116                             <label class="col-xs-4 control-label">性別:</label>
117                             <div class="col-xs-8">
118                                 <label class="icheck_line">
119                                     <input type="radio" name="ChargePersionSex" value="1" @(Model.ChargePersionSex != null && Model.ChargePersionSex == 1 ? "checked" : "") class="icheck_box">120                                 </label>
121                                 <label class="icheck_line">
122                                     <input type="radio" name="ChargePersionSex" value="2" @(Model.ChargePersionSex != null && Model.ChargePersionSex == 2 ? "checked" : "") class="icheck_box">123                                 </label>
124                             </div>
125                         </div>
126                     </div>
127                 </div>
128                 <div class="hr-line-dashed"></div>
129                 <div class<