研究好一陣子的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協議):有兩個常用的作用,一是遠程連接協議,二是遠程文件傳輸協議。
用戶管理:(管理員才有權限,用戶僅可以修改自己的密碼)
用戶組管理: /etc/group,文件結構為 "用戶組名:用戶組密碼:用戶組id:組內用戶名"
實用功能:
vim配置(重點)
其他
Linux自有服務: 用戶不需要獨立去安裝,系統安裝好後便有的服務
vim介紹
2. 高級指令
1. 進階指令
2. 高級指令
1. 常用的Linux目錄:
2. 常用指令:
學習新東西,先從安裝軟體開始!
1. 先安裝虛擬機VMware,並確認相關網路連線 (控制台\網路和網際網路\網路連線)
2. 透過VMware載入CentOS的ISO檔,以便安裝CentOS
3. 完成Clone及Snapshot備份操作
今日先更新至此。
先提供Vue於網路可載到的API document : https://vuejs.org/api/,
接下來是簡易範例:
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{message}}
</div>
<script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
message:'hello world!!'
}
});
</script>
</body>
</html>
效果如下!!
學習框架的好處就是,可以直接用別人已經寫好的套件,算是懶人的福音喔!
BPM學習,經過幾日的消化吸收,
的確,透過採購BPM系統,可以達到紙本作業快速自動化的效果(利用拖曳的方式,就可以輕鬆建立表單),但是,缺點是若有特殊的客製化需求,會被該系統原本的框架限制住。
而且市面上的產品琳瑯滿目,還是需要費心瞭解與篩選喔。
預祝新年快樂!!放長假前的最後一篇!!
先看看 "查股價" 的效果囉!
上圖顯示了個股的股價圖,但有些小細節還沒測試完成,以下是完成此任務的參考資訊:
https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0068.html
https://xiaoniuhululu.com/2021-10-20_python-github-api-upload-picture/
這個任務總算是用到較多的pandas來做資料的前置處理。
年後已完成的小細節:
股號與中文名稱的替換 -> 下載所有上市上櫃股號與名稱對照解決 ,
以及圖檔遇中文會顯示亂碼 -> 置入 simsun.ttc 解決 ,
剩下優化議題...繼續前進!!
比較需要資料分析與處理的議題:選股。(也是繼續慢慢前進囉!)
究竟何時可以把個個小功能,變成一個友善又美麗的使用者介面呢?
可能是放年假前的最後一篇文,這一次練習增加天氣預報資訊,還沒有弄成美美的版面,先提供簡易的文字訊息!
要完成這個項目,務必到中央氣象局 開放資料平台辦一個帳號喔!
辦完帳號,就可以利用API取得氣象資料囉!
我的參考範例來源https://ithelp.ithome.com.tw/articles/10244761