此系統為V3.0,全新的設計,代碼非常簡潔,維護非常簡單,擴展性能非常好。
在此基礎上開發了一個crm系統,展示地址為http://temp.qingdie.net
一、系統特點
系統擁有10套皮膚,和7套菜單表現方式。
系統具有9大特點:
1、框架獨立化;2、模塊插件化;
3、數據請求異步化;4、權限分配可視化;
5、數據庫配置,安裝,備份自動化;6、設計分層化;
7、系統錯誤日志化;8、皮膚個性化;
9、體驗人性化。
數據存儲:Mssql、Oracle、Sqlite、Access自主切換。
前端框架:jQuery、easyui、knockout、alertify、ueditor
系統框架:系統使用單獨設計開發的后台管理系統,其經過測試具有很多優秀性能。
UI設計:系統UI使用了動態菜單布局功能和主題css切換。
性能優化:使用了css、js壓縮緩存技術,Httphandlers攔截優化技術。
二、系統截圖
用戶管理
菜單維護
產品評價添加
授權可視化
數據庫配置。
三、系統設計
解決方案結構,這是crm系統,
么有一個aspx頁面,
下面貼上部分代碼:
$(function () { autoResize({ dataGrid: '#datagrid', gridType: 'treegrid', callback: mygrid.databind, height: 5 }); simpleSearch(); $('#a_add').click(mygrid.add); $('#a_edit').click(mygrid.edit); $('#a_delete').click(mygrid.del); }); var mygrid = { actionUrl: '/crm/CategoryAction', formUrl: '/crm/html/Category.html', databind: function (size) { $('#datagrid').treegrid({ toolbar: '#toolbar', url: mygrid.actionUrl, width: size.width, height: size.height, idField: 'CategoryId', treeField: 'Name', iconCls: 'icon-nav', nowrap: false, rownumbers: true, animate: true, collapsible: false, columns: [[ { title: '名稱', field: 'Name', width: 200, sortable: true }, { title: '排序', field: 'SortNum', width: 80, sortable: true } ]], pagination: true, pageSize: PAGESIZE, pageList: [20, 40, 50] }); }, reload: function () { $('#datagrid').treegrid('reload'); }, selectRow: function () { return $('#datagrid').treegrid('getSelected'); }, Init: function (categoryId) { var treeData = $('#datagrid').treegrid('getData'); treeData = $.toJSON(treeData).replace(/CategoryId/g, 'id').replace(/Name/g, 'text'); treeData = '[{"id":0,"selected":true,"text":"請選擇父級菜單"},' + treeData.substr(1, treeData.length - 1); top.$('#txt_ParentId').combotree({ data: $.evalJSON(treeData), panelWidth: '180', editable: false, lines: true, onSelect: function (item) { var nodeId = top.$('#txt_ParentId').combotree('getValue'); if (item.id == categoryId) { top.$('#txt_ParentId').combotree('setValue', nodeId); top.$.messager.alert('系統提示', '上級菜單不能與當前菜單相同', 'warning'); } } }).combotree('setValue', 0); }, add: function () { var addDialog = top.$.hDialog({ title: '添加類別', width: 350, height: 200, href: mygrid.formUrl, ICONCLS: 'icon-add', onLoad: function () { mygrid.Init(); var row = mygrid.selectRow(); if (row) { top.$('#txt_ParentId').combotree('setValue', row.CategoryId); } }, submit: function () { if (top.$('#qingdieform').form('validate')) { $.ajaxjson(mygrid.actionUrl, createParam('add', 0), function (d) { if (d.Success) { msg.ok(d.Message); addDialog.dialog('close'); mygrid.reload(); } else { MessageOrRedirect(d); } }); } } }); }, edit: function () { var row = mygrid.selectRow(); if (row) { var addDialog = top.$.hDialog({ title: '編輯類別', width:350, height: 200, href: mygrid.formUrl, ICONCLS: 'icon-add', onLoad: function () { var m = top.ko.mapping.fromJS(row); top.ko.applyBindings(m); mygrid.Init(row.CategoryId); top.$('#txt_ParentId').combotree('setValue', row.ParentId); }, submit: function () { if (top.$('#qingdieform').form('validate')) { $.ajaxjson(mygrid.actionUrl, createParam('edit', row.CategoryId), function (d) { if (d.Success) { msg.ok(d.Message); addDialog.dialog('close'); mygrid.reload(); } else { MessageOrRedirect(d); } }); } } }); } else { msg.warning("請選擇要編輯的客戶"); } }, del: function () { var row = mygrid.selectRow(); if (row) { msg.confirm('您確認要刪除此類別嗎?', function (r) { if (r) { $.ajaxjson(mygrid.actionUrl, createParamNoEntity('del', row.CategoryId), function (d) { if (d.Success) { msg.ok(d.Message); mygrid.reload(); } else { MessageOrRedirect(d); } }); } }); return false; } else { msg.warning("請選擇要刪除的類別!"); } return false; } };
using System.Web; using Qingdie.HTWeb.BLL.Ui; using Qingdie.HTWeb.CRM.BLL; using Qingdie.HTWeb.CRM.Model; using Qingdie.HTWeb.Help; namespace Qingdie.HTWeb.CRM.Action { public class CategoryAction:IAction { public void Action(HttpContext context) { var json = HttpContext.Current.Request["json"]; var rpm = new RequestParamModel<Category>(context) { CurrentContext = context }; if (!string.IsNullOrEmpty(json)) { rpm = JsonHelper.ConvertToObject<RequestParamModel<Category>>(json); rpm.CurrentContext = context; } var bllCategory = new BllCategory(); switch (rpm.Action) { case "add": context.Response.Write(bllCategory.Add(rpm.Entity)); break; case "edit": var customer = rpm.Entity; customer.CategoryId = rpm.KeyId; context.Response.Write(bllCategory.Edit(customer)); break; case "del": context.Response.Write(bllCategory.Delete(rpm.KeyId)); break; case "catetree": context.Response.Write(bllCategory.GetCategoryTreeJson()); break; default: context.Response.Write(bllCategory.CategoryListJson(rpm.Pageindex, rpm.Pagesize, rpm.Filter, rpm.Sort, rpm.Order)); break; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Qingdie.help; using Qingdie.HTWeb.BLL; using Qingdie.HTWeb.CRM.Model; using Qingdie.HTWeb.Help; using Qingdie.Log; using QingdieDb; namespace Qingdie.HTWeb.CRM.BLL { public class BllCategory { private const string Module = "類別管理"; public string Add(Category category) { var msg = new JsonMessage { Message = "添加成功" }; try { using (var db = new DbContext()) { if (db.Any<Category>(d => d.Name == category.Name)) { msg.Message = "該類別名稱已經存在"; } else { db.Add(category); msg.Success = true; } } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "類別添加", category); } return msg.ToString(); } public string Edit(Category category) { var msg = new JsonMessage { Message = "編輯成功" }; try { using (var db = new DbContext()) { if (db.Any<Category>(d => d.Name == category.Name && d.CategoryId != category.CategoryId)) { msg.Message = "該類別名稱已經存在"; } else { db.Update(category, d => d.CategoryId == category.CategoryId); msg.Success = true; } } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "類別編輯", category); } return msg.ToString(); } public string Delete(int categoryId) { var msg = new JsonMessage { Message = "刪除成功" }; try { using (var db = new DbContext()) { db.Delete<Category>(d => d.CategoryId == categoryId); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "類別刪除", categoryId); } return msg.ToString(); } public string CategoryListJson(int pageindex, int pagesize, string filterJson, string sort, string order) { try { var orderType = OrderType.Asc; if (!string.IsNullOrEmpty(order)) { if (order == "desc") orderType = OrderType.Desc; } OrderSort<Category> sorts; switch (sort) { case "Name": sorts = new OrderSort<Category>(d => d.Name, orderType); break; default: sorts = new OrderSort<Category>(d => d.SortNum, orderType); break; } using (var db = new DbContext()) { int pagecount; int datacount; var button = db.SelectPageObject(d => d.ParentId == 0, pageindex, pagesize, out pagecount, out datacount, sorts); return JsonHelper.ToJson(datacount, button); } } catch (Exception err) { BllErrLog.ErrLog(err, Module, "類別類別獲取"); } return "[]"; } public string GetCategoryTreeJson() { using (var db = new DbContext()) { var json = JsonHelper.ToJson(db.Select<Category>(d => d.ParentId == 0)); return json.Replace("\"CategoryId\"", "\"id\"").Replace("\"Name\"", "\"text\""); } } } }
using System.Collections.Generic; using QingdieDb; namespace Qingdie.HTWeb.CRM.Model { [Entity("CategoryId")] public class Category { [Property(Identity = true)] public int? CategoryId { get; set; } public string Name { get; set; } public int? ParentId { get; set; } public int? SortNum { get; set; } [Relationship(RelationKey = "ParentId")] public List<Category> children { get; set; } } }
一個功能僅僅需要這些,即可完美實現
下面提供crm系統的全部源碼,只限於非商業使用,
如果需要本后台系統框架,請來聯系購買!
下載地址:
http://blog.qingdie.net/html/20140712232453958.html
