abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之五(四十一)

来源:https://www.cnblogs.com/chillsrc/archive/2020/03/25/12571198.html
-Advertisement-
Play Games

在上一篇abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之四(四十)文章中我們已經定義了應用的介面,併在應用層實現了這些介面。接下來我們要在展示層來實現入庫單的列表功能。 ...


abp(net core)+easyui+efcore實現倉儲管理系統目錄

abp(net core)+easyui+efcore實現倉儲管理系統——ABP總體介紹(一) abp(net core)+easyui+efcore實現倉儲管理系統——解決方案介紹(二) abp(net core)+easyui+efcore實現倉儲管理系統——領域層創建實體(三)  abp(net core)+easyui+efcore實現倉儲管理系統——定義倉儲並實現 (四) abp(net core)+easyui+efcore實現倉儲管理系統——創建應用服務(五) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之控制器(六) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之列表視圖(七) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之增刪改視圖(八) abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之菜單與測試(九) abp(net core)+easyui+efcore實現倉儲管理系統——多語言(十) abp(net core)+easyui+efcore實現倉儲管理系統——使用 WEBAPI實現CURD (十一) abp(net core)+easyui+efcore實現倉儲管理系統——菜單-上 (十六)

abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI前端頁面框架 (十八)

abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI之貨物管理一 (十九) abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之一(二十七) abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之三(二十九)

abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之八(三十四)

abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之十(三十六) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之一(三十七) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之二(三十八) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之三存儲過程(三十九) abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之四(四十)

 

 

   在上一篇abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之四(四十)文章中我們已經定義了應用的介面,併在應用層實現了這些介面。接下來我們要在展示層來實現前端功能。

 

 創建InStockController繼承自TPLMSControllerBase

    1. Visual Studio 2017的“解決方案資源管理器”中,右鍵單擊在領域層“ABP.TPLMS.Web.Mvc”項目中的Controller目錄。 選擇“添加” > “新建項…”。如下圖。

 

    2. 在彈出對話框“添加新項-ABP.TPLMS.Web.Mvc”中選擇“控制器類”,然後在名稱輸入框中輸入“InStockController”,然後點擊“添加”按鈕。

     3.在InStockController.cs文件中輸入如下代碼,通過構造函數註入對應用服務的依賴。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Abp.Runtime.Validation;
using Abp.Web.Models;
using ABP.TPLMS.Controllers;
using ABP.TPLMS.Entitys;
using ABP.TPLMS.Helpers;
using ABP.TPLMS.InStocks;
using ABP.TPLMS.InStocks.Dto;
using ABP.TPLMS.Models.InStock;
using Microsoft.AspNetCore.Mvc; 

namespace ABP.TPLMS.Web.Controllers
{

    public class InStockController : TPLMSControllerBase
    {

        private readonly IInStockOrderAppService _inSOAppService;
        private readonly IInStockOrderDetailAppService _inSODAppService;
        

        private const int MAX_COUNT = 1000;
        public InStockController(IInStockOrderAppService InSOAppService,IInStockOrderDetailAppService InSODAppService)
        {

            _inSOAppService = InSOAppService;
            _inSODAppService = InSODAppService;

        }

        public IActionResult Index()
        {

            return View();
        }

        [DontWrapResult]
        [HttpPost]
        public string List()
        {


            var page = Request.Form["page"].ToString();
            var size = Request.Form["rows"].ToString();
            int pageIndex = page == null ? 1 : int.Parse(page);
            int pageSize = size == null ? 20 : int.Parse(size);
            PagedInStockResultRequestDto paged = new PagedInStockResultRequestDto();

            paged.MaxResultCount = MAX_COUNT;
            paged.SkipCount = ((pageIndex - 1) < 0 ? 0 : pageIndex - 1) * pageSize;
            paged.BeginTime = DateTime.Now.AddMonths(-1);
            paged.EndTime = DateTime.Now.AddDays(1);
            var query = _inSOAppService.GetAll(paged).GetAwaiter().GetResult();
            var isoList = query.Items;

            int total = query.TotalCount;
            var json = JsonEasyUI(isoList, total);


            return json;
        }

        [DontWrapResult]
        public string GetDetail(string no)
        {

            PagedInStockDetailResultRequestDto paged = new PagedInStockDetailResultRequestDto();
            paged.MaxResultCount = MAX_COUNT;
            paged.InStockNo = no;            

            var podList = _inSODAppService.GetAll(paged).GetAwaiter().GetResult().Items; ;

            var json = JsonEasyUI(podList);
            return json;

        }

        [HttpPost]
        [DisableValidation]
        public ActionResult Add(InStockOrderDto iso)
        {

            string result = "NO";
            try
            {

                PagedInStockResultRequestDto condition = new PagedInStockResultRequestDto();
                condition.No = iso.No;
 

                var isoExists = _inSOAppService.GetAll(condition).GetAwaiter().GetResult();
                if (isoExists.TotalCount > 0)
                {
                    return Content(result);
                }
 

                CreateUpdateInStockOrderDto cuIso = ObjectMapper.Map<CreateUpdateInStockOrderDto>(iso);
                // TODO: Add logic here

              var obj=  _inSOAppService.Create(cuIso);
                result = "OK";

            }
            catch(Exception ex)
            {
                result = "NO";
            }
            return Content(result);
        }

        [HttpPost]
        [DisableValidation] 
        public string Update(InStockOrderDto iso)
        {

            string result = "NO";
            List<InStockOrderDetailDto> list = new List<InStockOrderDetailDto>();

            try

            {

                string deleted = Request.Form["deleted"];
                string inserted = Request.Form["inserted"];
                string updated = Request.Form["updated"];
                string head = Request.Form["postdata"];
                if (!string.IsNullOrEmpty(head))
                {

                    //把json字元串轉換成對象
                    iso = JsonHelper.Instance.Deserialize<InStockOrderDto>(head);

                }

             
                if (!string.IsNullOrEmpty(deleted))
                {

                    //把json字元串轉換成對象
                    List<InStockOrderDetailDto> listDeleted = JsonHelper.Instance.Deserialize<List<InStockOrderDetailDto>>(deleted);

                    //TODO 下麵就可以根據轉換後的對象進行相應的操作了

                    if (listDeleted != null && listDeleted.Count > 0)
                    {

                        list.AddRange(listDeleted.ToArray());
                    }
                }

                if (!string.IsNullOrEmpty(inserted))
                {
                    //把json字元串轉換成對象

                    List<InStockOrderDetailDto> listInserted = JsonHelper.Instance.Deserialize<List<InStockOrderDetailDto>>(inserted);

                    if (listInserted != null && listInserted.Count > 0)
                    {

                        list.AddRange(listInserted.ToArray());
                    }
                }
 

                if (!string.IsNullOrEmpty(updated))
                {
                    //把json字元串轉換成對象
                    List<InStockOrderDetailDto> listUpdated = JsonHelper.Instance.Deserialize<List<InStockOrderDetailDto>>(updated);

                    if (listUpdated != null && listUpdated.Count > 0)
                    {
                        list.AddRange(listUpdated.ToArray());

                    }
                }

                if (iso == null)
                {
                    return "沒有表頭!";
                }
   // TODO: Add update logic here
                iso.InStockOrderDetail = list;
                result = _inSOAppService.Save(iso); 

            }
            catch
            {
            }

            if (result == "OK")
            {
                return "更新成功!";
            }
            else
                return "更新失敗!";

        }

        [HttpPost]
        [DisableValidation]
        public ActionResult ImportCargo(CargoModel cargos)
        {
            string result = "NO";
            try
            {                

                // TODO: 導入貨物信息
                result = _inSOAppService.ImportCargo(cargos.Ids, cargos.No);

            }
            catch
            { 

            }
            return Content(result);
        }

        [HttpPost]
        [DontWrapResult]
        public ActionResult Delete(string ids)
        {

            string result = "NO";
            try
            {
                // TODO: Add Delete logic here
                bool flag = _inSOAppService.DeleteById(ids);
                if (flag)
                {
                    result = "OK";
                }
            }
            catch
            { 
            }
            return Content(result);

        }
    }
}

、使用EasyUI創建入庫單管理頁面

    1. 在Visual Studio 2017的“解決方案資源管理器”中,右鍵單擊在領域層“ABP.TPLMS.Web.Mvc”項目中的Views目錄。 選擇“添加” > “新建文件夾”。並重命名為“InStock”。

    2. 在Visual Studio 2017的“解決方案資源管理器”中,滑鼠右鍵單擊“InStock”文件夾,然後選擇“添加” > “新建項…”。 在“添加新項-ABP.TPLMS.Web.Mvc”對話框中,選擇“Razor視圖”,並將名稱命名為Index.cshmtl。如下圖。

 

3. 在我們剛纔創建的Index.cshmtl文件中,編寫如下代碼:

 

@using ABP.TPLMS.Web.Startup

@{

    ViewData["Title"] = PageNames.InStock;
}

@section scripts{
  <script src="~/view-resources/Views/InStock/Index.js" asp-append-version="true"></script>

    <script type="text/javascript">
          $(function () {

            initable();
             reloaded(); 

              $('#box').tabs({
                width: 780,      //選項卡容器寬度
                height: 465,      //選項卡容器高度
                onSelect: function (title, index) {
                    var rcv = $("#RcvUpdate").val();
                    if (title == "入庫單明細") {
                        $("#rcv").val(rcv);
                    }
                }
            });
        });

    </script>
}

    <div data-options="region:'center'" style="overflow: hidden;">
        <div id="containter" style="width: 1000px; height: auto; margin: 0px auto;">
            <!--toolbar-->

            <div style="margin-bottom:1px;font-weight:bold;">
                <a href="#" id="add" class="easyui-linkbutton" data-options="iconCls:'icon-add'" style="width:100px; height:30px; ">生成入庫單</a>
                <a href="#" id="del" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" style="width:100px; height:30px; ">刪除</a>
                <a href="#" id="edit" class="easyui-linkbutton" data-options="iconCls:'icon-edit'" style="width:100px; height:30px; ">修改</a>
                <a href="#" id="submits" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" style="width:100px; height:30px; ">提交</a>
                <a href="#" id="reload" class="easyui-linkbutton" data-options="iconCls:'icon-reload'" style="width:100px; height:30px; ">刷新</a>
            </div>

            <!--panel-->
            <div data-options="region:'center',split:false" style="height:500px;">

                <!--表格-->
                <table id="dgINSO"></table>
            </div>
        </div>
    </div>

 

     4. 在Visual Studio 2017的“解決方案資源管理器”中,找到領域層“ABP.TPLMS.Web.Mvc”項目中的wwwroot目錄下的view-resources目錄。使用滑鼠右鍵單擊此目錄,在彈出菜單中選擇“添加” > “新建文件夾”。並重命名為“InStock”。

     5. 在Visual Studio 2017的“解決方案資源管理器”中,滑鼠右鍵單擊“InStock”文件夾,然後選擇“添加” > “新建項…”。 在“添加新項-ABP.TPLMS.Web.Mvc”對話框中,選擇“javascript文件”,並將名稱命名為Index.js。如下圖

 

     6. 在Index.js文件中,我們寫入如下代碼。

//-----------------------系統管理-->入庫單管理-----------------------------------------//
//刷新數據

function initable() {
    $("#dgINSO").datagrid({
        url: "/InStock/List",
        //url:"api/services/app/instock/GetAllInStockOrders",
        title: "入庫單管理",
        pagination: true,
        pageSize: 10,
        pageList: [10, 20, 30],
        fit: true,
        fitColumns: false,
        loadMsg: "正在載入入庫單信息...",

        nowarp: false,
        border: false,

        idField: "Id",
        sortName: "Id",
        sortOrder: "asc",
        frozenColumns: [[//凍結列
            { field: "ck", checkbox: true, align: "left", width: 50 }          

        ]],

        columns: [[
            { title: "編號", field: "Id", width: 50, sortable: true },
            { title: "入庫單號", field: "No", width: 100, sortable: true },           

            {title: "狀態", field: "Status", width: 50            },
            { title: '到貨日期', field: 'ReceiveTime',  width: 100, align: 'center' },
            { title: "貨主", field: "OwnerCode", width: 150, sortable: true },
            { title: "預計到貨時間", field: "PreDeliveryTime", width: 150, sortable: false },

            { title: '客戶', field: 'CustomerName', width: 60, align: 'center' },

            { title: '收貨人',field: 'Oper', width: 100, align: 'center' },
            { title: '審核人',field: 'Checker', width: 120, align: 'center' },
            { title: '件數', field: 'PackageNum', width: 120, align: 'center' },
            { title: '創建時間', field: 'CreationTime', width: 100, align: 'center' }
        ]]
    }); 
} 

function reloaded() {   //reload
    $("#reload").click(function () {
        //
        $('#dgINSO').datagrid('reload'); 

    });}

       7. Visual Studio 2017中按F5運行應用程式。登錄之後,點擊“[入庫管理]”菜單,我們可以看到貨物管理列表頁面。如下圖。

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 多態(Polymorphism)按字面的意思就是“多種狀態”。在面向對象語言中,介面的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作 ...
  • string 字元串在所有的語言中都非常重要,c++也不例外,接下來我們將介紹string中的常用方法 1. size() 和 length() 函數 : 他們返回字元串的真實長度,且不會因為空格而截斷,這兩個方法完全等價,使用及輸出如下: #include<iostream> #include<s ...
  • | 好看請贊,養成習慣 你有一個思想,我有一個思想,我們交換後,一個人就有兩個思想 If you can NOT explain it simply, you do NOT understand it well enough 現陸續將Demo代碼和技術文章整理在一起 "Github實踐精選" ,方便 ...
  • 一、語法 作用:簡化函數代碼 格式:lambda 參數列表 :表達式 P.s: lambda表達式參數可有可無,參數寫法同函數 lambda函數能接收任何數量的參數但只能返回一個表達式的值 def func0(): return 100 func = lambda: 100 # lambda本質是一 ...
  • 從本文開始,將開始介紹關於 Spring 的一些常見知識點。關註我的公眾號「Java面典」,每天 10:24 和你一起瞭解更多 Java 相關知識點。 在如今的 Java Web 開發中,Spring 生態圈占據著巨大的市場份額。幾乎是每個互聯網公司都在用 Spring 生態圈的東西。所以掌握Spr ...
  • 引言:搭建微服務架構就像是買電腦,使用SpringCloud就是在買品牌機。 前言 昂,美好的天氣里,不想直接說技術,給小伙伴萌看看傍晚的天空吧。 —— 能找到天上的北極星嗎? 上一篇文章中,通過一個簡單的小故事,輕鬆愉快的講解了架構的演變,以及為啥會有微服務,什麼是微服務。不過在最後留下了一個小疑 ...
  • 原創聲明 本文作者:黃小斜 轉載請務必在文章開頭註明出處和作者。 本文思維導圖 什麼是Spring,為什麼你要學習spring? 你第一次接觸spring框架是在什麼時候?相信很多人和我一樣,第一次瞭解spring都不是做項目的時候用到,而是在網上看到或者是聽到過一個叫做spring的框架,這個框架 ...
  • 前言 虛繼承 是面向對象編程中的一種技術,是指一個指定的基類,在繼承體繫結構中,將其成員數據實例共用給也從這個基類型直接或間接派生的其它類。 虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。 虛擬繼承在一般的應用中很少用到,所以也往往被忽視,這也主要是因為在C++中,多重繼承是不推 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...