2023年7月17日 星期一

V120102 - 分頁勾選 - 保留分頁勾選的資料 - 雅嵐 -2 - each - forEach

 目的: V120102 - 分頁勾選  - 保留分頁勾選的資料 - 雅嵐_2

處理說明: 1> *_JSON.js , 定義 PK_LIST 儲存 PK
                        CHK_PK_OBJ.PKLIST     : 記錄目前勾選的 PK 字串
                  2>[全部選取] : 將資料的 PK 存入 CHK_PK_OBJ.PKLIST                      
                  3>[全部取消] : 將CHK_PK_OBJ.PKLIST清空
                  4>Column ["CHECK"] . renderer 時, 
                       1>>若目前資料為勾選(rec.get("CHECK")=true) :
                              若目前資料 PK 未存 在  CHK_PK_OBJ.PKLIST , 則加入本資料. PK
                       2>>若目前資料為未勾選(rec.get("CHECK")=false) :
                              將PK 從 CHK_PK_OBJ.PKLIST 移除
                            CHK_PK_OBJ.PK_LIST = jQuery.grep(CHK_PK_OBJ.PK_LIST, function (value) {
                                                       return value != item;
});
                 5> *.cs 若按[全部選取]鈕(par_paging==false),本頁已顯示計算欄位,
                      --> 不需計算欄位, 加快顯示速度
                       if (par_paging == false)
                         {  return ds;     }
 



   1>V120101_JSON.js

//2023/07/14 microed , 將 V120201 改成 雅嵐版本 - 分頁勾選
Ext.define('CHK_PK_OBJ', {  PK_LIST: [],            //儲存 PK_LIST  });
var CHK_PK_OBJ = Ext.create('CHK_PK_OBJ');

var J_columns = [
{ header: "", xtype: "rownumberer", width: 50, align: "center", sortable: false },
{
//2023/07/14 microed , 將 V120201 改成 雅嵐版本 - 分頁勾選
header: "勾選",
dataIndex: "CHECK", width: 40, xtype: 'checkcolumn', menuDisabled: true, sortable: false,
//rec : 目前資料欄位值
renderer: function (value, metadata, rec, rowIndex, colIndex, store) {
//var item = record.get('PROM_ID') + '&' + record.get('CR_NO') + '&' + record.get('ITEM_NO');
var item = rec.get('BITM');  //PK
var chkd = '';
if (rec.get('CHECK') === true) {
if (CHK_PK_OBJ.PK_LIST.indexOf(item) == -1) {
CHK_PK_OBJ.PK_LIST.push(item);
}
chkd = 'checked';
rec.set('CHECK', true);
}
else if (rec.get('CHECK') === false) {
rec.set('CHECK', false);
//將本item ,由 Array 中移除
CHK_PK_OBJ.PK_LIST = jQuery.grep(CHK_PK_OBJ.PK_LIST, function (value) {
return value != item;
});
}
else if (typeof rec.get('CHECK') === "undefined") { //往上或下一頁
if (CHK_PK_OBJ.PK_LIST.indexOf(item) > -1) {
chkd = 'checked';
if (CHK_PK_OBJ.PK_LIST.indexOf(item) == -1) {
CHK_PK_OBJ.PK_LIST.push(item);
}
rec.set('CHECK', true);
} else {
rec.set('CHECK', false);
}
}
var cbx = "<input  type='checkbox'  "
+ chkd + " > ";
return cbx;
},
},


2>V120102.js
//按鈕 : [批次新增][下載匯入格式]
    var BtnAry = [        
        { //2023/07/14 microed , 將 V120201 改成 雅嵐版本 - 分頁勾選
            xtype: 'button', text: '全部選取', id: 'SelAllBtn', iconCls: 'icon-check',
            listeners: {
                click: function () {
                    Ext.getCmp('grid_Single').store.each(function (rec) {
                        rec.set('CHECK', true);
                    }); 
//將 所有資料.PK 加入 CHK_PK_OBJ.PK_LIST
                    Ext.Ajax.request({
                        url: '../api/V120102API/getGridData_M?par_paging=false',
                        method: 'POST',
                        params: { all: 1 },
                        async: false, //將非同步功能關閉
                        failure: function (response, opts) {
                        },
                        success: function (response, opts) {
                            CHK_PK_OBJ.PK_LIST = [];
                            var obj = Ext.decode(response.responseText);
                            obj.T1.forEach(function (item, i) {
                                CHK_PK_OBJ.PK_LIST.push(item['BITM']);
                            });
                        }
                    });
                }
            }
        }, //end of 全部選取
 {
            xtype: 'button', text: '全部取消', id: 'unSelAllBtn', iconCls: 'icon-check',
            listeners: {
                click: function () {
                    //unSelAllBtn_click();                    
                    Ext.getCmp('grid_Single').store.each(function (rec) {
                        rec.set('CHECK', false);
                    });
                    CHK_PK_OBJ.PK_LIST = [];
                }
            }
        }, //end of 全部取消

目的: V120202E & V120202F 的子畫面 , Grid欄位彼此會互相覆蓋, 導致兩畫面 Grid 欄位均相同 - 重複

 目的: V120202E & V120202F 的子畫面 , Grid欄位彼此會互相覆蓋,導致兩畫面 Grid 欄位均相同

處理說明: 1>因V120202E & V120202F 的子畫面 , 
                       子畫面Grid欄位.model & column 名稱均叫 sub_model &sub_columns
                  2>載入 V120202 時, 會載入 V120202E & V120202F
                   --> 載入 V120202E時,又會載入 V120202E_JSON    --> 宣告 sub_model & sub_columns
                        載入 V120202F時,又會載入 V120202F_JSON    --> 宣告 sub_model & sub_columns
                  --> 所以 V120202E & V12020F 的子畫面 Grid欄位 會彼此互相覆蓋,
                        無法 正常顯示子畫面欄位
解決方法:  1>V120202x_JSON 宣告的變數,必需唯一, 不可相同






2023年7月12日 星期三

jQuery.map 及 jQuery.grep 的用法 - 取得object陣列的部份欄位陣列, 符合條件的 object

目的: 1> jQuery.map  : 產生一個新的陣列,但只包含原陣列的特定欄位

          2>jQuery.grep: 產生一個新的陣列,但只包含合乎條件的項目   

Ex: var people =[
{name: 'Apple' , sex: 'female'},
{name: 'Bob' , sex: 'male'},
{name: 'Jacky' , sex: 'male'},
{name: 'Oliver' , sex: 'male'},
{name: 'Helen' , sex: 'female'},
]


處理說明: 1>取得 people 的 name 陣列

    var nameList = $.map(people, function(item, index) { return item.name; });
     --> 結果: [ 'Apple', 'Bob', 'Helen', 'Jacky', 'Oliver']


                  2>取得people 中為女姓的 陣列
     var femaleList = $.grep(people, function(item, index) { return item.sex === 'female'; });
     --> 結果:  [{name: 'Apple' , sex: 'female'},
                        {name: 'Helen' , sex: 'female'},
                      ]

傳統寫法:

1>取得 people 的 name 陣列
      var nameList=[];
      $.each(people,function(index,item){
          nameList.push(people.name);
       }
   -->
      var nameList=$.map(people,function(item,index){ return item.name; });


2>取得 people 中為 femail 的人員陣列

      var femaleList=[];
      $.each(people,function(index,item){
          if (item.sex=='female)
              femaleList.push(item);
       }
   -->
      var femaleList=$.grep(people,function(item,index){ 
       if (item.sex=='female'){
           return item; }
});


將 Edge 設為預設瀏覽器 , 若IE 版本(IE ver11)太舊,則可能無法執行Web改版程式

 目的: Web改版 若IE 版本(IE ver11)太舊,則可能無法執行Web改版程式

           建議改為 Edge

處理步驟:  1>開啟 Edge

                   2>點右上角 [...] 設定鈕

                   3>選 [預設瀏覽器] 選項, 將目前 Edge 設為預設的瀏覽器






2023年7月5日 星期三

V120202B - JSBarcode - 一維條碼 - online測試 -font-size -pt

 目的: V120202B - JSBarcode - 一維條碼 -  online HTML測試

           font-size: 3pt;  --> 1inch=72pt , 1pt=1/72inch

處理說明:  1>利用 online HTML 編輯 ,網址如下:
                         https://www.tutorialspoint.com/online_html_editor.php
                   2>引用 barcode 的 js (JsBarcode.code39.min.js)
<script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/barcodes/JsBarcode.code39.min.js"></script>
                   3> 產生 barcode 
                        <div><svg  id='JSBarCode1'></svg></div> 
                      -->  JsBarcode("#JSBarCode_PN", "LAMAERO-73428-0001");
                  4>設定 barcode 的顯示範圍
                       var settings = {
                        width: 0.5,
                        height: 10,
                        displayValue: true,
                        fontSize: 8,
                            :
                    };
                      JsBarcode("#JSBarCode_PN", "LAMAERO-73428-0001",settings);



1>*.HTML
<!DOCTYPE html>
<html>
<title>Online HTML Editor</title>

<head>
    <script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/barcodes/JsBarcode.code39.min.js"></script>
    <script language="JavaScript">
        function greet() {
            alert("Hello!!");
        }
        var settings = {
                        width: 0.5,
                        height: 10,
                        displayValue: true,
                        fontSize: 8,
                        textAlign: 'left',
                        margin: 1,
                        marginLeft: 10,
                        //marginBottom: 5,
                        font: "新細明體",
                        //format: "CODE39",
                        //background: "#00FF00"
                    };
        function genbarcode() {
            console.log("genbarcode!!");
            JsBarcode("#JSBarCode1", "Q20170922001",settings);
        }
        function genbarcode_PN() {
            console.log("genbarcode_PN!!");
            JsBarcode("#JSBarCode_PN", "LAMAERO-73428-0001",settings);
        }
    </script>
</head>

<body>
    <form>
        <input type="button" value="Hello" onclick="genbarcode()">
        <input type="button" value="PN barcode" onclick="genbarcode_PN()">
    </form>
    <div><svg  id='JSBarCode1'></svg></div>
    <div id='print_area' style='width:10cm;height:4cm;border:5px solid green;'>
        <div id='my_div_1' style='width: 10cm; height: 4cm;border: 1px solid yellow;font-size:4pt;'>
            <table id='my_tbl1' style='width:100%;padding:0 0 0 0;' border=1px borderstyle='solid' bordercolor='blue' cellspacing=0>
                <tr>
                    <td width=35%>機號: A049 </td>
                    <td width=35% '>工號: 12345678</td>
<td width=35% '>工單件號: SROPN_1 </td>
                </tr>
            </table>
            <table id='my_tbl2' style='width:100%;' border=1px borderstyle='solid' bordercolor='red' cellspacing=0>
                <tr style='height: 0.5cm;'>
                    <td width=50%>申請件號:LAMAERO-73428-0001</td>
                    <td width=50%>申請件號:LAMAERO-73428-0001</td>
                </tr>
                <tr style='height:0.5cm;'>
                    <td width=50%><svg  id='JSBarCode_PN' width=50 height=15></svg></td>
                    <td width=50%><svg  id='JSBarCode_MATNR' width=50 height=15></svg></td>
                </tr>
                <tr>
                    <td width=50%>名稱:TFE DRY LUBE</td>
                    <td width=50%>儲位2:防C</td>
                </tr>
                <tr>
                    <td width=50%>儲位1:防B</td>
                    <td width=50%>庫房:23#</td>
                </tr>
                <tr>
                    <td width=50%>撥料數量:4</td>
                    <td width=50%></td>
                </tr>
            </table>
            <table id='my_tbl3' style='width: 100%;' border=1px cellspacing=0 bordercolor=blue>
                <tr>
                    <td width=50%><svg  id='JSBarCode_APNO' width=50 height=15></svg></td>
                    <td width=50%>需求者:612578 楊智為 856
                        <br>需求地點:A08</td>
                </tr>
            </table>
        </div>
        <div class='display' id='break_page1' style='break-after:page'></div>
        <svg id="barcode"></svg>
</body>
</html>

V120202B - 標籤列印 - HTML online 模擬標籤排版 -table

 目的: V120202B - 標籤列印 - HTML online 模擬標籤排版 - <table>

處理說明: 0>[列印範圍]先以框線標出
                  1>利用 HTML online模擬器, 模擬標簽文字內容
                       HTML online : https://www.tutorialspoint.com/online_html_editor.php
                       --> 直接修改即可看到 HTML排版結果,不需等 VS 執行後,才看到排版結果
                  2>以 <div><table> 的邊線畫出範圍
                  3>以  style 設定範圍/邊框/顏色, 
                       style='width: 10cm; height: 4cm;border: 5px solid green; '
                  4><table>邊框個別設定,邊際實線cellspacing=0 , border=2px , bordercolor='blue'
                  5>縮小元件size <tr style='transform: scale(0.9);' ></tr>



     


1>*.html
<!DOCTYPE html>
<html>
<title>Online HTML Editor</title>
<head>
</head>
<body>
<div id='print_area' style='width: 10cm; height: 4cm; border: 5px solid green;'>
<div id='my_div' style='width: 10cm; height: 4cm;border: 3px solid yellow; font-size: 4pt;'>
<table id='my_tbl1' style='width: 10cm;' border=2px cellspacing=0 borderstyle='solid' bordercolor='blue'>
<tr>
<td width=30%>機號: A049 </td>
<td width=35%>工號: 12345678 </td>
<td width=35%>工單件號: SROPN_1 </td>
</tr>
</table>
<table id='my_tbl2' style='width:10cm;' border=2px cellspacing=0 borderstyle='solid' bordercolor='red'>
<tr style='height: 0.3cm;'>
<td width=50%>申請件號:LAMAERO-73428-0001</td>
<td width=50%>申請件號:LAMAERO-73428-0001</td>
</tr>
<tr>
<td width=50% style='height:0.4cm'></td>
<td width=50%></td>
</tr>
<tr>
<td width=50%>名稱:TFE DRY LUBE</td>
<td width=50%>儲位2:防C</td>
</tr>
<tr>
<td width=50%>儲位1:防B</td>
<td width=50%>庫房:23#</td>
</tr>
<tr>
<td width=50%>撥料數量:4</td>
<td width=50%></td>
</tr>
</table>
<table id='my_tbl3' style='width:10cm' border=2px cellspacing=0 borderstyle='solid' bordercolor='blue'>
<tr>
<td width=50%></td>
<td width=50%>需求者:612578 楊智為 856
<br>需求地點:A08</td>
</tr>
</div>
</div>
</body>
</html>

2023年7月3日 星期一

V120202B - 了解畫面 DOM的結構 – sub_panel2 -append - $

 目的: V120202B了解畫面 DOM的結構 – sub_panel2

一.顯示[畫面元件]對應[DOM] -操作說明:
                    1>console.log("sub_panel2:", sub_panel2);
                    2>由[console]分頁 ,  展開 [sub_panel2] 欄位值, 點 div sub_panel2 , 跳至 [Elements]分頁
                    3>[Elements]分頁點選div[sub_panel2_header], 畫面顯示該 div
                    
二. $().append處理說明:  0> Ext 元件 panel , 實際上在 DOM 的結構分成 2 div(header, body)
                                          1>$("#sub_panel2").append("div  id=my_div_barcode  xxxx") , 
                                              會加在 body 下方看不到











1>*.js
 {
    xtype: 'button', text: '顯示  QrCode ', id: 'sub_QrCode_Btn',
    listeners: {
                click: function () {
                    //genQRcodeDiv("sub_panel2", "5325YET064602&test&123eee");                            
                    var Tmp_barcode_text = "5325YET064602&test&123eee";
                    var Tmp_QrcodeStr= "<div id='my_div_barcode'  style='width: 150px; height: 150px;margin-top: 5pt;margin-left: 30pt; font-size: 6pt;' >"
                        + genQRcodeStr(Tmp_barcode_text, 100, 100, true)
                        + "</div>"                    
                    //$("#print_area").remove();                    
                    //var Tmp_sub_panel2 = $("#sub_panel2");  --> 會看不到 條碼
                    var Tmp_sub_panel2 = $("#sub_panel2-innerCt"); //20230703
                    Tmp_sub_panel2.append(Tmp_QrcodeStr);
                    console.log("0 Tmp_sub_panel2:", Tmp_sub_panel2);
                    var pub_print_area_Str1 = "<div  id='print_area'   style='border: 5px solid green;'>";
                    Tmp_sub_panel2.append(pub_print_area_Str1);
                    console.log("1 Tmp_sub_panel2:", Tmp_sub_panel2);                    
                },
            }
        },