11、ABPZero系列教程之拼多多賣家工具 拼團提醒功能頁面實現

来源:https://www.cnblogs.com/shensigzs/archive/2018/01/18/8306676.html
-Advertisement-
Play Games

上一篇講解了拼團提醒邏輯功能實現,現在繼續實現頁面功能。 Core項目 打開AbpZeroTemplate-zh-CN.xml語言文件,在末尾添加如下代碼: 文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyNa ...


  上一篇講解了拼團提醒邏輯功能實現,現在繼續實現頁面功能。

Core項目

 打開AbpZeroTemplate-zh-CN.xml語言文件,在末尾添加如下代碼:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Core\Localization\AbpZeroTemplate\AbpZeroTemplate-zh-CN.xml

 

<text name="Pdd" value="拼多多" />
<text name="Pdd.KaiTuan" value="開團提醒" />
<text name="Pdd.MallExist" value="店鋪已存在" />

 

 

 打開文件AppPermissions.cs,在末尾添加如下代碼:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppPermissions.cs

public const string Pages_Pdd = "Pages.Pdd";//許可權路徑
public const string Pages_Pdd_KaiTuan = "Pages.Pdd.KaiTuan";//許可權路徑

 

 

打開AppAuthorizationProvider.cs文件,在SetPermissions方法最後添加如下代碼:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppAuthorizationProvider.cs

var pdd = pages.CreateChildPermission(AppPermissions.Pages_Pdd, L("Pdd"));
            pdd.CreateChildPermission(AppPermissions.Pages_Pdd_KaiTuan, L("Pdd.KaiTuan"));

 

 

 Web項目

 打開文件PageNames.cs,

文件路徑 :D:\abpweb\PddSellerAssistant\PddSellerAssistant.Web\App_Start\Navigation\PageNames.cs

在Command下添加一個常量:

public const string Pdd = "Pdd";

 

 

在32行位置添加如下代碼:

/// <summary>
            ///拼多多
            /// </summary>
            public static class Pdd
            {
                public const string KaiTuan = "KaiTuan";    //開團提醒
            }

 

 

 打開MpaNavigationProvider.cs文件,在末尾添加菜單,代碼如下:

 文件路徑:D:\abpweb\PddSellerAssistant\PddSellerAssistant.Web\Areas\Mpa\Startup\MpaNavigationProvider.cs

 

.AddItem(new MenuItemDefinition(
                    PageNames.App.Common.Pdd,//一個常量,控制菜單是否被選中
                    L("Pdd"),//菜單顯示名稱,在語言文件中配置
                    url: "Mpa/Pdd",//菜單路徑
                    icon: "icon-social-dropbox"//菜單圖標
                    ).AddItem(new MenuItemDefinition(
                        PageNames.App.Pdd.KaiTuan,//一個常量,控制菜單是否被選中
                        L("Pdd.KaiTuan"),//菜單顯示名稱,在語言文件中配置
                        url: "Mpa/KaiTuan",//菜單路徑
                        icon: "icon-pie-chart",//菜單圖標
                        requiredPermissionName: AppPermissions.Pages_Pdd_KaiTuan//菜單許可權,登錄用戶所在角色有此許可權才會顯示出來
                        ))
                )

 

 

以上就把菜單添加好了,生成解決方案,瀏覽器打開網站後臺,以管理員身份登錄,但是並沒有發現剛剛添加的菜單,這是因為加了菜單加許可權的關係,接以下操作即可。

打開角色菜單,分別修改admin、user角色:

 

 

 切換到許可權選項卡,勾選我們需要顯示的菜單,如下:

 

 保存之後,再次登錄就可以顯示出來菜單了。以下是user角色的菜單:

 

 

 控制器

我先在Areas\Mpa\Controllers目錄下新建Pdd目錄,用於保存所有跟拼多多相關的控制器。

添加文件 KaiTuanController.cs 代碼如下:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Controllers\Pdd\KaiTuanController.cs 

/// <summary>
    /// 開團提醒
    /// </summary>
    public class KaiTuanController : AbpZeroTemplateControllerBase
    {
        private readonly IMallAppService _mallAppService;

        public KaiTuanController(IMallAppService mallAppService)
        {
            _mallAppService = mallAppService;
        }

        // GET: Mpa/KaiTuan
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult CreateModal()
        {
            return PartialView("_CreateModal");
        }

        public ActionResult SharpModal(string title, string link, string img, string timeOut)
        {
            ViewBag.title = title;
            ViewBag.link = link;
            ViewBag.img = img;
            ViewBag.timeOut = timeOut;
            return PartialView("_SharpModal");
        }
    }

 

 

視圖

接著再創建對應的視圖文件

添加文件Index.cshtml,代碼如下:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\Index.cshtml

@using Abp.Web.Mvc.Extensions
@using MyCompanyName.AbpZeroTemplate.Web.Navigation
@{
    ViewBag.CurrentPageName = PageNames.App.Pdd.KaiTuan;//作用就是選中菜單時會高亮
}
@section Styles{
    <style>
        .jtable-child-table-container {
            margin-left: 50px;
        }
    </style>
    <link href="~/metronic/assets/global/plugins/bootstrap-toastr/toastr.css" rel="stylesheet" />
}
@section Scripts
{
    @Html.IncludeScript("~/metronic/assets/global/plugins/fuelux/js/spinner.min.js")
    @Html.IncludeScript("~/metronic/assets/global/plugins/bootstrap-toastr/toastr.min.js")
    @Html.IncludeScript("~/Areas/Mpa/Views/KaiTuan/Index.js")
    @Html.IncludeScript("~/Areas/Mpa/Common/Scripts/GolbalHelper.js")
    @Html.IncludeScript("~/Areas/Mpa/Views/KaiTuan/ui-toastr.js")
    <!--分享功能代碼-->
    <script type="text/javascript" src="http://v1.jiathis.com/code/jia.js?uid=1575631" charset="utf-8"></script>
}
<div class="row margin-bottom-5">
    <div class="col-xs-6">
        <div class="page-head">
            <div class="page-title">
                <h1>
                    <span>@L("Pdd.KaiTuan")</span> <small></small>
                </h1>
            </div>
        </div>
    </div>
    @*這裡是添加的按鈕代碼*@
    <div class="col-xs-6 text-right">
        <button id="CreateNewMallButton" class="btn btn-primary blue"><i class="fa fa-plus"></i>添加店鋪</button>
    </div>
</div>
<div class="portlet light margin-bottom-0">
    <div class="portlet-title portlet-title-filter">
        <div class="inputs inputs-full-width">
            <div class="portlet-input">
                <div class="row">
                    <div class="col-xs-6">
                        <div class="form-group">
                            <label class="control-label">店鋪</label>
                            <select id="mallCombobox" class="form-control"></select>
                        </div>
                    </div>
                    <div class="col-xs-6">
                        <div class="form-group">
                            <label class="control-label">提醒間隔(分鐘)</label>
                            <div id="spinner3">
                                <div class="input-group" style="width: 150px;">
                                    <input type="text" id="interval" class="spinner-input form-control" maxlength="3" readonly>
                                    <div class="spinner-buttons input-group-btn">
                                        <button type="button" class="btn spinner-up default">
                                            <i class="fa fa-angle-up"></i>
                                        </button>
                                        <button type="button" class="btn spinner-down default">
                                            <i class="fa fa-angle-down"></i>
                                        </button>
                                    </div>
                                </div>
                            </div>


                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-sm-12  text-right">
                        <button id="LoginPddButton" class="btn red"><i class="fa fa-user"></i> 登錄拼多多</button>
                        <button id="StartButton" class="btn blue"><i class="fa fa-play"></i> 開始監控</button>
                        <button id="StopButton" class="btn purple"><i class="fa fa-stop"></i> 停止監控</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="portlet-body">
        <div>
            <div id="Table"></div>
        </div>
    </div>
</div>

<script id="tm" type="template">
    <button type="button" class="sharp btn red" data-link="{link}" data-title="{title}" data-img="{img}" data-timeOut="{timeOut}">分享到...</button>

</script>

 

 

添加對應的JS文件Index.js,代碼如下:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\Index.js

var _$kaituanTable = $('#Table');
var _mallService = abp.services.app.mall;
var _productService = abp.services.app.product;
var timer;//調用setInterval,返回的數字,用於停止時鐘
var mallId;//記錄店鋪id
(function () {
    $(function () {
        /**
         添加店鋪模態框
         */
        var _createModal = new app.ModalManager({
            viewUrl: abp.appPath + 'Mpa/KaiTuan/CreateModal',//載入視圖
            scriptUrl: abp.appPath + 'Areas/Mpa/Views/KaiTuan/_CreateModal.js',//載入對應js
            modalClass: 'CreateMallModal'
        });

        /**
         分享模態框
         */
        var _sharpModal = new app.ModalManager({
            viewUrl: abp.appPath + 'Mpa/KaiTuan/SharpModal',
            scriptUrl: abp.appPath + 'Areas/Mpa/Views/KaiTuan/_SharpModal.js',
            modalClass: 'SharpModal'
        });

        _$kaituanTable.jtable({
            title: app.localize('Pdd.KaiTuan'),
            paging: true, //啟用分頁
            sorting: true, //啟用排序
            pageSize: 500,
            multiSorting: true, //啟用多列排序
            defaultSorting: 'goodId ASC',
            recordsLoaded: function (e, data) {
                var count = data.serverResponse.TotalRecordCount;
                if (count > 0) {
                    SoundHelper.PlaySound();
                }

            },
            actions: {
                listAction: {
                    method: _productService.getKaiTuanProductsAsync,
                }
            },
            fields: {
                id: {
                    key: true,
                    list: false
                },
                kaituan: {
                    title: '操作',
                    width: '5%',
                    sorting: false,
                    edit: false,
                    create: false,
                    display: function (product) {
                        //創建一個將用於打開子表的圖像
                        var $img = $('<img src="/metronic/assets/admin/layout4/img/hor-menu-red-arrow.png" title="打開開團詳細列表" />');
                        //用戶單擊圖像時打開子表
                        $img.click(function () {
                            $('#Table').jtable('openChildTable',
                                    $img.closest('tr'),
                                    {
                                        title: '最新開團列表(最後更新時間為:' + DateHelper.CurentTime() + ")",
                                        paging: true, //啟用分頁
                                        sorting: true, //啟用排序
                                        recordsLoaded: function (e, data) {
                                            console.info(data);
                                            var count = data.serverResponse.TotalRecordCount;
                                            toastr["info"]("當前開團人數共有(" + count + ")人", "提示");
                                        },
                                        actions: {
                                            listAction: {
                                                method: _productService.getAllKaiTuansByGoodId
                                            }
                                        },
                                        fields: {
                                            action: {
                                                title: '',
                                                width: '15%',
                                                display: function (kaituan) {
                                                    //操作按鈕
                                                    var a = $("#tm").html();
                                                    a = a.replace(new RegExp(/(\{title\})/gm), product.record.name);
                                                    a = a.replace(new RegExp(/(\{link\})/gm), "http://mobile.yangkeduo.com/group500.html?group_order_id=" + kaituan.record.kaiTuanOrderNum + "&cid=nogroup_expire_mms_" + mallId);
                                                    a = a.replace(new RegExp(/(\{img\})/gm), product.record.img);
                                                    a = a.replace(new RegExp(/(\{timeOut\})/gm), kaituan.record.timeLeft);
                                                    return a;
                                                }
                                            },
                                            id: {
                                                title: '寶貝ID',
                                                //defaultValue: product.record.goodId,
                                                width: '10%',
                                                sorting: false
                                            },
                                            nickName: {
                                                title: '用戶昵稱',
                                                width: '20%',
                                                sorting: false
                                            },
                                            sku: {
                                                title: 'SKU',
                                                width: '20%',
                                                sorting: false
                                            },
                                            orderNum: {
                                                title: '訂單編號',
                                                width: '20%',
                                                sorting: false
                                            },
                                            timeLeft: {
                                                title: '剩餘時間',
                                                width: '20%',
                                            },
                                            kaiTuanOrderNum: {
                                                title: '開團單號',
                                                width: '20%',
                                                sorting: false
                                            }
                                        }
                                    }, function (data) { //載入子表數據
                                        data.childTable.jtable('load', {
                                            goodId: product.record.goodId,
                                            mallId: mallId,
                                            username: username
                                        });
                                    });
                        });
                        //返回圖像顯示在行上
                        return $img;
                    }
                },
                goodId: {
                    title: "寶貝ID",
                    width: '10%',
                    display: function (product) {
                        var img = "<img src='" + product.record.img + "' style='width: 64px; height: 64px;'/>";
                        var a = "<a href='http://mobile.yangkeduo.com/goods.html?goods_id=" + product.record.goodId + "' target='_blank'>" + product.record.goodId + "</a>";
                        return a + img;
                    }
                },
                name: {
                    title: "寶貝名稱",
                    width: '70%'
                },
                kaiTuanCount: {
                    title: "開團人數",
                    width: '20%'
                },
            }
        });

        //頁面載入完執行
        getMalls();
        $('#spinner3').spinner({ value: 60, min: 30, max: 1000 });
        UIToastr.init();



        //添加店鋪點擊事件
        $('#CreateNewMallButton').click(function () {
            _createModal.open();
        });
        //店鋪成功保存後事件註冊
        abp.event.on('app.createMallModalSaved', function () {
            //getCategories(true);
            getMalls();
        });


        $("#Table").delegate(".sharp", "click", function () {
            var t = $(this);
            _sharpModal.open({
                title: $(t).attr("data-title"),
                link: $(t).attr("data-link"),
                img: $(t).attr("data-img"),
                timeOut: $(t).attr("data-timeOut")
            });
        });

        //開始監控點擊事件
        $("#StartButton").click(function () {
            mallId = $('#mallCombobox').val();
            if (mallId == null) {
                abp.message.warn('請至少添加一個店鋪!', '警告');
                return;
            }
            $(this).attr("Disabled", "Disabled");
            $(this).text("正在監控中");

            getkaituans();
            timer = window.setInterval("getkaituans(false)", 1000 * 60 * $("#interval").val());
        });
        //停止監控點擊事件
        $("#StopButton").click(function () {
            window.clearInterval(timer);
            $("#StartButton").removeAttr("Disabled");
            $("#StartButton").html("<i class='fa fa-play'></i> 開始監控");
        });

    });
})();

//獲取列表
function getkaituans(reload) {
    if (reload) {
        _$kaituanTable.jtable('reload');
    } else {
        $(_$kaituanTable.find(".jtable-title-text")[0]).html(app.localize('Pdd.KaiTuan') + "(最後更新時間為:" + DateHelper.CurentTime() + ")");
        _$kaituanTable.jtable('load', {
            mallId: mallId,
            interval: $("#interval").val()
        });
    }
}
function getMalls() {
    _mallService.getMalls().done(function (result) {
        var malls = result.items;
        console.log(result);
        $("#mallCombobox").html("");
        for (var i = 0; i < malls.length; i++) {
            console.info(1);
            $("#mallCombobox").append("<option value='" + malls[i].mallId + "'>" + malls[i].mallId + "【" + malls[i].name + "】</option>");
        }

    });

}

 

 

添加_CreateModal.cshtml文件,代碼如下:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\_CreateModal.cshtml

@using MyCompanyName.AbpZeroTemplate.Web.Areas.Mpa.Models.Common.Modals

@Html.Partial("~/Areas/Mpa/Views/Common/Modals/_ModalHeader.cshtml", new ModalHeaderViewModel("添加店鋪"))
<div class="modal-body">
    <form name="MallForm">
        <div class="form-group form-md-line-input form-md-floating-label">
            <input class="form-control" type="text" name="mallId" required>
            <label>店鋪ID</label>
        </div>
    </form>
</div>
@Html.Partial("~/Areas/Mpa/Views/Common/Modals/_ModalFooterWithSaveAndCancel.cshtml")

 

添加_CreateModal.js文件,代碼如下:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\_CreateModal.js

(function ($) {

    app.modals.CreateMallModal = function () {
        var _mallService = abp.services.app.mall;
        var _$mallForm = null;

        var _modalManager;
        this.init = function (modalManager) {
            _modalManager = modalManager;
            //取出Form表單
            _$mallForm = _modalManager.getModal().find('form[name=MallForm]');
        };

        this.save = function () {
            //驗證不通過返回
            if (!_$mallForm.valid()) {
                return;
            }
            //序列化參數
            var mallid = _$mallForm.serializeFormToObject();
            _modalManager.setBusy(true);
            _mallService.createByMallId(
                mallid
            ).done(function () {
                abp.notify.info(app.localize('SavedSuccessfully'));
                _modalManager.close();
                abp.event.trigger('app.createMallModalSaved');
            }).always(function () {
                _modalManager.setBusy(false);
            });
        };
    };
})(jQuery);

 

 

 添加_SharpModal.cshtml文件,代碼如下:

文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\_SharpModal.cshtml

@using PddSellerAssistant.Web.Areas.Mpa.Models.Common.Modals

@Html.Partial("~/Areas/Mpa/Views/Common/Modals/_ModalHeader.cshtml", new ModalHeaderViewModel("分享拼團連接"))
<div class="modal-body">
    <ul class="media-list">
        <li class="media">
            <a class="pull-left" href="javascript:;">
                <img class="media-object" src="@ViewBag.img" alt="64x64"  style="width: 64px; height: 64px;">
            </a>
            <div class="media-body">
                <h4 class="media-heading">還有 @(ViewBag.timeOut) 小時後結束</h4>
                <p>
                    @ViewBag.title
                </p>


            </div>
        </li>
    </ul>
    <!-- JiaThis Button BEGIN -->
    <div class="jiathis_style_32x32">
        <a class="jiathis_button_qzone"></a>
        <a class="jiathis_button_tsina"></a>
        <a class="jiathis_button_tqq"></a>
        <a class="jiathis_button_weixin"></a>
        <a class="jiathis_button_renren"></a>
        <a href="http://www.jiathis.com/share?uid=1575631" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
    </div>
    <script type="text/javascript">
            var jiathis_config = {
                data_track_clickback: 'true',
                title:'@ViewBag.title',
                url:'@ViewBag.link'
            };
    </script>
    <script type="text/javascript" src	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 元組與列表類似,不同之處在於元組的元素不能修改。 元組使用小括弧,列表使用方括弧。 元組創建很簡單,只需要在括弧中添加元素,並使用逗號隔開即可: 也可以省略括弧: 創建空元組: 元組中只包含一個元素時,需要在元素後面添加逗號“,”來消除歧義,否則括弧會被當作運算符使用(思考,會當做什麼運算符來用): ...
  • 一個爬取網易國內今日熱點新聞的小腳本。 需要用到requests、BeautifulSoup、Pandas(用於處理數據和導出Excel) 網易國內新聞url:http://news.163.com/domestic/ get url獲得response,requests對象,BeautifulSo ...
  • 本篇文章更適合具有一定開發經驗,一定功底,且對底層代碼有所研究的朋友!!! 本篇文章主要採用理論和代碼實例相結合方式來論述委托和事件,涉及到一些邊界技術,如軟體架構的OCP原則(開-閉原則), 軟體架構解耦,設計模式(Sender-Order)和事件驅動模型,有一定難度和深度,不適合初級者。 第一部 ...
  • 這篇文章其實是老外寫的,我只是把它翻譯一下,因為我用asp.net做上傳,有一個60+M的文件一直上傳不了,查了好多資料都是說把Web.config里的system.web>>httpRuntime節點下的maxRequestLength屬性改大一點,預設是4096kb,但是我照著修改之後並沒有起作 ...
  • using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;u ...
  • 這是從上文的<<圖文並茂的生產者消費者應用實例demo>>整理總結出來的,具體就不說了,直接給出代碼,註釋我已經加了,原來的code請看<<.Net中的並行編程-7.基於BlockingCollection實現高性能非同步隊列>>,我改成適合我的版本了,直接給code: 調用code: 封裝的隊列: ...
  • 前幾步和網上其他教程一樣的。主要是把.net framework 打包進安裝程式里,如果選的是“從與我的應用程式相同的位置下載系統必備組件”,會提示 ERROR: 要在“系統必備”對話框中啟用“從與我的應用程式相同的位置下載系統必備組件”,必須將“Microsoft .NET Framework 4 ...
  • 首先本地得有網路 運行 "cmd"命令: 輸入"ipconfig": 拿到自己的IP地址 將要測試的項目在iis中配置好 index.aspx是首頁,也就是二維碼頁面 生成二維碼(index.aspx.cs頁面,基於QRCoder生成): 掃描生成的二維碼就自動跳到要測試的頁面了 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...