研究好一陣子的flutter,頁面陸續完成中!!
---------------------------------
---------------------------------
---------------------------------
---------------------------------
研究好一陣子的flutter,頁面陸續完成中!!
---------------------------------
---------------------------------
---------------------------------
---------------------------------
呼叫範例 HtmlTableToJson("targetTable")
回傳結果範例
[{"LABEL2":"C4","LABEL3":"T1","PARAMETER_TYPE":"1"
,"VALUE1":"1000.00","SUBTOTAL":"","REMARK":"OK","ATTACHMENT":""},
{"LABEL2":"C4","LABEL3":"T1","PARAMETER_TYPE":"1"
,"VALUE1":"2000.00","SUBTOTAL":"","REMARK":"OK","ATTACHMENT":""}]
Javascript Function 實作如下(考量table有merge cell的議題的寫法),
=====================================================================
function HtmlTableToJson(tableid){
var jsondata = [];
var heads = [];
$("#"+tableid+' thead th').each(function(index,item){
heads.push($(item).attr("name"));
});
var tmpRowdata = {}; //考量table有merge cell的議題的寫法,所以需要這個變數
$("#"+tableid+' tbody tr').each(function(index, item){
var rowdata = {};
$(item).find('td').each(function(index,item2){
for (let i = 0; i < heads.length; i++) {
if (item2.innerHTML.indexOf(heads[i]) >= 0) {
if ($(item2).find('[jsonval]').length > 0) {
tmpVALUE1 = $(item2).find('[jsonval]').val(); //input欄位的取值方式
} else {
tmpVALUE1 = item2.innerText; //其餘欄位取值方式
}
if ($(item2).find('[number]').length > 0) {
tmpVALUE1 = tmpVALUE1.replace(/,/g, ""); //遇到數值欄位自動將千分號去掉,例如1,000 -> 1000
}
tmpRowdata[heads[i]] = tmpVALUE1; //將資料塞入object(若遇到merge cell,會自動取得同群組的merge cell值)
rowdata = JSON.parse(JSON.stringify(tmpRowdata)); //以deep copy的方式取得資料
}
}
});
if (Object.keys(rowdata).length > 0) {
jsondata.push(rowdata); //將資料集合至同一個array
}
});
return jsondata;
};
-------------------------------------------------------------------------------------------------------------------------
Table格式如下
=====================================================================
<table width="100%" id="targetTable" style="border-collapse: separate;">
<thead>
<tr style="background-color:white;top:150px;position:sticky;border-bottom: 1px solid;">
<th name="LABEL2" style="text-align: center;border: 1px solid">Stage</th>
<th name="LABEL3" style="text-align: center;border: 1px solid">子項</th>
<th name="PARAMETER_TYPE" style="text-align: center;border: 1px solid">參數類別</th>
<th name="VALUE1" style="text-align: center;border: 1px solid">單價</th>
<th name="SUBTOTAL" style="text-align: center;border: 1px solid">Sub-Total</th>
<th name="REMARK" style="text-align: center;border: 1px solid">Remark</th>
<th name="ATTACHMENT" style="text-align: center;border: 1px solid">附件</th>
</tr>
</thead>
<tbody>
<tr>
</tr>
</tbody>
</table>
-------------------------------------------------------------------------------------------------------------------------
Table的部分列資料由以下生成
=====================================================================
function drawTable(jsonObj) {
var table = document.getElementById("targetTable");
for (var i = 0; i < jsonObj.length; i++) {
var tmpObj = jsonObj[i];
var row = table.insertRow(-1);
var cell = row.insertCell();
tmpStr = (tmpObj.LABEL2 == null ? '' : tmpObj.LABEL2);
cell.style.borderBottom = "1px solid";
tmpStr = '<div name="LABEL2">' + tmpStr + '</div>';
cell.innerHTML = tmpStr;
cell = row.insertCell();
cell.style.borderBottom = "1px solid";
tmpStr = (tmpObj.LABEL3 == null ? '' : tmpObj.LABEL3);
cell.innerHTML = '<div style="text-align:center;" name="LABEL3">' + tmpStr + '</div>';
cell = row.insertCell();
cell.style.borderBottom = "1px solid";
cell.innerHTML = '<div style="text-align:center;" name="PARAMETER_TYPE">' + (tmpObj.PARAMETER_TYPE == null ? '' : tmpObj.PARAMETER_TYPE) + '</div>';
cell = row.insertCell();
cell.style.borderBottom = "1px solid";
cell.innerHTML = '<input name="VALUE1" number="" jsonval="" type="text" style="text-align:right;width:100%;" value="' + toFormatNum(tmpObj.VALUE1 == null ? '' : tmpObj.VALUE1) + '">';
cell = row.insertCell(); //Sub - Total
cell.style.borderBottom = "1px solid";
cell.innerHTML = '<div name="SUBTOTAL" style="text-align:right;">' + toFormatNum(tmpObj.SUBTOTAL == null ? '' : tmpObj.VALUE1) + '</div>';
cell = row.insertCell(); //Remark
cell.style.borderBottom = "1px solid";
cell.innerHTML = '<input name="REMARK" jsonval="" type="text" style="text-align:right;width:100%" value="' + (tmpObj.REMARK == null ? '' : tmpObj.REMARK) + '">';
cell = row.insertCell(); //附件
cell.style.borderBottom = "1px solid";
cell.innerHTML = '<input name="ATTACHMENT" type="button" value="上傳附件">';
}
}
重新閱讀ASP.Net MVC相關資訊後,溫故知新~
參考影片來源:https://www.bilibili.com/video/BV1ri4y1c7em/?p=17&spm_id_from=pageDriver
Linux下安裝軟件:
補充縮寫全名:
LAMP: Linux + Apache + MySQL + PHP
LNMP: Linux + Ngine + MySQL + php-fpm
LNMPA: Linux + Nginx + MySQL + PHP + Apache
Linux網路基礎:
網路相關命令:
shell基礎: Linux默認的shell是/bin/bash
rpm管理: 類似於Windows上的電腦管家中的軟件管理,主要是對Linux服務器上的軟件包進行管理操作,包含查詢/卸載/安裝。
cron/crontab計畫任務:
Linux權限管理: 分為3種身份owner/group/others及3種權限read/write/execute
屬主(所屬的用戶)與屬組(所屬的用戶組)設置:
延伸議題:
設置主機名(hostname或hostname -f)
chkconfig服務配置: 類似Windows下的電腦管家之類的安全輔助工具,提供開機啟動項的一個管理服務
若非開機就啟動的服務,需要透過此去添加或者透過此刪除開機啟動項的項目
ntp服務: 用於對電腦的時間同步管理操作
防火牆服務(軟體防火牆):
網路設置: 網卡配置文件位置 /etc/sysconfig/network-scripts/ 下有(ifcfg-網卡名稱)ifcfg-ens33 & ifcfg-lo
ssh服務(secure shell協議):有兩個常用的作用,一是遠程連接協議,二是遠程文件傳輸協議。