貨架工程項目之js dom實現項目工程進度圖

来源:http://www.cnblogs.com/guoke360/archive/2016/12/22/6211075.html
-Advertisement-
Play Games

筆者最近要負責有個項目工程網站的安裝進度過程,實現的效果要求大概如下圖所示 由於筆者沒有參與到資料庫的製作,得知他們這個項目設計工序的時候就一個開始日期的和完成日期,連整個項目的安裝結束時間都沒有簡直了。這裡公開一下我的資料庫 有點,總之就是說不出話的感覺。 之前筆者寫前臺table表綁定的時候一般 ...


筆者最近要負責有個項目工程網站的安裝進度過程,實現的效果要求大概如下圖所示

由於筆者沒有參與到資料庫的製作,得知他們這個項目設計工序的時候就一個開始日期的和完成日期,連整個項目的安裝結束時間都沒有簡直了。這裡公開一下我的資料庫

有點,總之就是說不出話的感覺。

之前筆者寫前臺table表綁定的時候一般都比較喜歡用tbale表綁個knockout js。這樣子比較簡單,第一行綁個資料庫欄位名字勇哥foreach迴圈輸出下,一下子就出來了。

但是這玩意後面的列表明顯是要自己在後臺弄個轉換器自己搞(sql欄位不是一天存個東西呢樣子迴圈一下子就讀來了,而是狗屎的把每個工序就存個開始日期和結束日期)。而令我最煩的就是連個項目開始日期都沒有,搞得我後臺還要讀兩次(論中途接手的煩惱)

但是煩歸煩,狗屎的項目還要做,不做就沒學分拿。後臺我估摸著有幾個東西比較重要:

1.整個項目的總天數(用於給第一排賦值而且後期加減還要用)
2.每個工序的開始日期(用於判斷什麼時候該顯示工程人數)

3.每個工序的結束日期(主要用於判斷什麼時候結束了停止顯示工程人數)

但是這整個玩意一點都不靠譜(資料庫都沒存儲,於是我只好自己慢慢的提取出來放到列表裡面去)

於是在控制器裡面我先插入一些代碼

首先定義一個全局變數回頭會用到

        public class aa
        {
            public static int bb=0;
            public static TimeSpan Start;
            public static TimeSpan end;
        }

然後我用頁面的控制器代碼調用資料庫介面後進行數據轉換,弄一個類出來

        public ActionResult Scheduledetial(String OfferID)
        {
            DataContent db = new DataContent();//回頭給安裝公司的詳細做搜索實例化類
            ScheduleDM Result = new ScheduleDM();//實例化一個ScheduleDM
            Result.list = JsonConvert.SerializeObject(ScheduleInfo(ISchedule.ScheduleDetial(OfferID)));//第一次進行篩選,並且選出最早的初始時間和最遲的結束時間(媽的連個開始日期,結束日期都沒有)
            var info = db.Offer.Where(x => x.OfferID.Equals(OfferID)).FirstOrDefault();//這兒通過offerid獲取投標表的用戶id
            var infos = db.UserInfo.Where(x => x.UserID.Equals(info.UserID)).FirstOrDefault();//這兒通過USerid到用戶表中去讀取安裝公司信息
            Result.CompanyName = infos.CompanyName;//獲取安裝公司信息並且賦值
            Result.UserRealName = infos.UserRealName;//獲取安裝公司聯繫人並且賦值
            Result.UserPhone = infos.UserPhone;//獲取安裝公司聯繫人電話並且賦值
            Result.OfferID = OfferID;//獲取offerID給前臺(評論需要用到)
            TimeSpan asd = aa.end-aa.Start;//這兒就可以獲取一共有多少天數了
            Result.NowPage = asd.Days;//這裡偷懶直接用Int類型的nowpage代替一共多少天數這個變數了     
            Result.list = JsonConvert.SerializeObject(ScheduleInfo(ISchedule.ScheduleDetial(OfferID)));//列表第二次迴圈(重要一定要執行,第一次執行的時候開始日期和結束日期不是最終形態的完全體,需要執行第二次才能正確的判斷處每一個工程的開始日期和完結日期)
            return View(Result);//返回前臺
        }

        public static IList<ScheduleDM> ScheduleInfo(IList<ScheduleDM> ScheduleDetials)
        {
            int a = 0;
            IList<ScheduleDM> item = new List<ScheduleDM>();//類似視圖轉換器,這兒就不多多講述了
            foreach (var aa in ScheduleDetials)
            {
                a++;
                item.Add(ScheduleInfos(aa,a));
            }
            return item;
        }



        public static ScheduleDM ScheduleInfos(ScheduleDM ScheduleDetials, int a)
        {
            ScheduleDM item = new ScheduleDM();
            item.idd = a.ToString();
            item.StepID = ScheduleDetials.StepID;
            item.OfferID = ScheduleDetials.OfferID;
            item.StepName = ScheduleDetials.StepName;
            item.StepStartTime = ScheduleDetials.StepStartTime;
            item.StepEndTime = ScheduleDetials.StepEndTime;
            item.Tool = ScheduleDetials.Tool;
            item.people = ScheduleDetials.people;
            item.StepLiable = ScheduleDetials.StepLiable;
            item.StepArtificial = ScheduleDetials.StepArtificial;
            //底下一大段皆為日期加減(註正確的每個工程的開始日期和結束日期必須要執行兩次)
            TimeSpan timeNow = new TimeSpan(DateTime.Now.Ticks);
            DateTime ddd = ScheduleDetials.StepStartTime.Value;
            DateTime sss = ScheduleDetials.StepEndTime.Value;
            TimeSpan ts = new TimeSpan(0);
            TimeSpan time = new TimeSpan(ddd.Ticks);
            TimeSpan times = new TimeSpan(sss.Ticks);
            TimeSpan time1 = timeNow - time;
            if (aa.Start == ts)
            {
                aa.Start = time;
            }
            else if (aa.Start > time)
            {
                aa.Start = time;
            }
            if (aa.end == ts)
            {
                aa.end = times;
            }
            else if (aa.end < times)
            {
                aa.end = times;
            }
            if (aa.bb < time1.Days)
            {
                aa.bb = time1.Days;
            }
            TimeSpan StratTime = time - aa.Start;
            TimeSpan Endtime = times - aa.Start;
            item.StratTime = StratTime.Days;
             item.EndTime =Endtime.Days;
            return item;
        }

這時候返回前臺的result已經具有我之前上述的三個關鍵的數據了,這時候我們就可以在前臺調用js doom了這裡說一下js dom是實現把插入表的一行來做的

   var aaaa = @Html.Raw(Model.NowPage);//總頁數
var a2=aaaa ; var a1=0; var list=@Html.Raw(Model.list); while(a1<aaaa)//給列表迴圈添加天數 { a1 = a1 + 1; var x = document.getElementById('tr2').insertCell(4) x.innerHTML = a2; a2=a2-1; } list.forEach(function(e){ //foreach迴圈讀取list的數據 var x=document.getElementById('myTable').insertRow() var z2=x.insertCell(0) var z1=x.insertCell(1) var y=x.insertCell(2) var z=x.insertCell(3) y.innerHTML=e.StepLiable z.innerHTML=e.Tool z1.innerHTML=e.StepName z2.innerHTML=e.idd var a3 = 0; var a4=aaaa ; var ass=e.StratTime; var asss=e.EndTime; ass=ass+1; while(a3<aaaa) { a3 = a3 + 1; a4=-1; var y1=x.insertCell() if(ass<=a3&&asss>=a3)//當前天數如何大於開始日期,並且小於結束日期則讀取每日日數賦值給他 y1.innerHTML = e.people; else y1.innerHTML = ""; }

 

最後在這裡原諒下筆者一直無釐頭的命名方式
以及,筆者的文章如果轉載請在評論區說明,並且標明出處,否則將追究責任哦。

 

 




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

-Advertisement-
Play Games
更多相關文章
  • 一、演示: 介面查看:http://apidoc.docode.top/ 介面後臺:http://apiadmin.docode.top/ 登錄:administrator,123456 二、使用到的技術: ①、AdminLite(基於Bootstrap的響應式UI模板) ②、ASP.NET MVC ...
  • 支持Oracle、MSSQL、MySQL、SQLite四種資料庫,支持事務,支持對象關係映射;已在多個項目中實際使用。 沒有語法糖,學習成本幾乎為0,拿來即用。 DBHelper類完整代碼: using System; using System.Collections.Generic; using ...
  • 效果圖 思路 拿到父級窗體的內容,放入一個容器里,再在容器里放入一個半透明層.將整個容器賦給父級窗體的內容. 關閉時反向操作. 代碼 消息窗彈出時 消息框關閉時 源碼下載:MessageBoxWithLayer.zip ...
  • 上一篇文章學習了IL的入門,接下來我們再通過兩個例子來瞭解下類的屬性、構造函數以及介面的使用 一、類的屬性、構造函數 1、先看下我們要構建的類的C#代碼,然後再進行IL的實現,示例代碼如下: [Serializable] public class Dynamic { public int _a = ...
  • 在上一篇多線程(線程同步1)中,我們主要學習了執行基本的原子操作、使用Mutex構造以及SemaphoreSlim構造,在這一篇中我們主要學習如何使用AutoResetEvent構造、ManualResetEventSlim構造和CountDownEvent構造。 四、使用AutoResetEven ...
  • 這篇分享一下 ASP.NET MVC許可權控制。也就是說某一用戶登錄之後,某一個用戶是否有許可權訪問Controller,Action(操作),視圖等想實現這些功能,需要在資料庫創建好幾個表:[User],[Module],[Form],[Action],[Role],[RoleModule],[Use ...
  • Asp.Net MVC FilterAttribute特性、讀取xml反序列化、NLog實戰系列文章 首先新建一個MVC project。 一、NLog的配置。 作者:Jarosław Kowalski <[email protected]> 翻譯:CrazyCoder 原文:http://www ...
  • 背景:博主本是一位Windows桌面應用程式開發工程師,對網路通信一知半解。一日老婆逛完某寶,問:“為什麼他們知道我的地址呢,他們是怎麼獲取我的地址的呢?” 順著這個問題我們的探秘開始: 第一步:簡單的服務搭建 思路,通過HttpListener在本地搭建一個簡易的伺服器,開發程式為控制台介面,核心 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...