傾蝶后台系統


此系統為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;
    }
};
類別管理js
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;
            }
        }
    }
}
類別管理Action
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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM