反饋已提交

網絡繁忙

JS實現填報自動生成序號並排序

1. 概述

1.1 問題描述

在填報錄入資料時,希望序號可以自動生成,且新增或刪除資料列時,序號不會斷開,效果如下圖所示:

1722493522407803.gif

1.2 實現思路

使用 seq() 函式進行排序。由於插入刪除列會觸發頁面的載入結束事件,所以可以在載入結束事件中,利用前端 JS API實現每次插入刪除列後重新計算序號的效果。

注:不支援行動端。

2. 範例一

2.1 設計報表

1)建立資料庫查詢資料集 ds1,SQL 語句為:SELECT * FROM Sales

2024-07-31_15-31-37.jpg

2)設計填報表格,將資料集欄位拖入對應儲存格,表格設計如下圖所示:

1722411310564313.jpg

3)A3 儲存格插入公式SEQ() ,左父格設定為 B3 ,如下圖所示:

注:一定要將 A3 儲存格左父格設定為 B3 ,因為只有這樣新增資料時,序號才會跟着擴展。

2024-07-31_15-36-16.jpg

4)G3 儲存格新增 「按鈕元件」,按鈕類型選擇「插入列」,指定儲存格為 B3,如下圖所示:

2024-07-31_15-37-40.jpg

5)H3 儲存格增加 「按鈕元件」,按鈕類型選擇「刪除列」,指定儲存格為 B3,如下圖所示:

2024-07-31_15-38-47.jpg

6) 選中 A3 儲存格,設定「儲存格屬性>其他>插入列策略」為「原值」,如下圖所示:

2024-07-31_16-10-27.jpg


2.2 設定載入結束事件

1)菜單欄點選「範本>範本Web屬性>填報頁面設定」,選擇「為該範本單獨設定」,新增「載入結束事件」,如下圖所示:

1722413637979388.jpg

JavaScript 程式碼如下:

var $tds = $('.x-table td[col=0][fm="SEQ()"]:visible'); 
//獲取第1欄中可見的序號儲存格(A欄)
var n = 0;
$tds.each(function(i, e) {
n = n + 1;
$(e).text(n);
//將當前編號重新設定
})

該 JS 中的核心語句為:$('.x-table td[col=0][fm="SEQ()"]:visible'),說明如下:

col=0:獲取第一欄(A欄)

fm="SEQ()":獲取寫了 SEQ() 公式的儲存格( JS 中 SEQ() 的大小寫需和範本中的公式保持一致

visible:獲取可見儲存格(排除掉隱藏列)

2.3 效果預覽

儲存報表,點選填報預覽,效果如下圖所示:

1722493560587235.gif

2.4 範本下載

點選下載範本:插入刪除列重新編號.cpt

2.5 注意事項

上述方案在插入刪除列後顯示的序號為顯示值,無法提交入庫,僅作為頁面展示效果。如果希望將序號同時提交入庫,需要給對應儲存格賦實際值才可以。具體方案為將載入結束事件中的JavaScript 程式碼更換成如下程式碼:

var $tds = $('.x-table td[col=0][idx=0]:visible:not([fmt="T"])');
//獲取第1欄中可見的序號儲存格(A欄) 
var n = 0;
$tds.each(function(i, e{
n = n + 1;
var row = $(e).attr("row");
//獲取列號
_g().setCellValue(00, row, n);
//將當前編號重新設定 
})

該JS中的核心語句為:$('.x-table td[col=0][idx=0]:visible:not([fmt="T"])'),說明如下:

col=0:獲取第一欄(A欄)

idx=0:排除掉序號儲存格下方的幹擾元素,固定寫法無需修改

not([fmt="T"]):排除掉序號儲存格上方的標題元素,固定寫法無需修改

visible:獲取可見儲存格(排除掉隱藏列)

注:採用此方案給序號儲存格賦實際值,在資料量較大的時候會造成頁面卡頓,需視實際情況考慮是否使用。

3. 範例拓展

3.1 當範本下面出現其他內容時,對其他內容不進行排序

3.1.1 問題描述

填報範本下方還有一些內容和其餘的無關,但是點選插入列,ID下面會多出一些欄位,而且是有規律的,是ID的序號被延伸下來

3.1.2 解決方案

1)透過觀察範本可以得知,我是多餘的這個欄位在範本中因為父格關係也會隨着變化

2024-07-31_16-23-41.jpg

2)因此修改載入結束後事件的 JavaScript 程式碼,JavaScript 程式碼如下:

注:如下程式碼僅對新增插入列生效,若需要實現刪除列後重新編號,請結合實際情況修改程式碼。

var $tds = $('.x-table td[col=0][fm="SEQ()"]:visible'); 
//獲取第1欄中可見的序號儲存格(A欄) 
var n = 0;
$tds.each(function(i, e{
if(4>i>=2){
n = n + 1;
$(e).text(n); //將當前編號重新設定 
}
})
window.deleteflag=0;
window.appendflag=0;

3)儲存後,填報預覽效果如下:

1722493706517682.gif


3.2 範本上下都有其餘的內容,對其餘內容不排序

3.2.1 問題描述

填報範本上方以及下方還有一些內容和其餘的無關,但是點選插入列,其餘的內容會根據編號進行變更

3.2.2 解決方案

1)修改載入結束後事件的 JavaScript 程式碼,JavaScript 程式碼如下:

注:如下程式碼僅對新增插入列生效,若需要實現刪除列後重新編號,請結合實際情況修改程式碼。

if(window.deleteflag==1||window.appendflag==1){//如果是新增標記的,重新編號 
    var $tds=$('.x-table td[col=1]:visible:not(:empty)');//判斷不為空
   var n=0
   $tds.each(function(i,e)
      if(i>=2){//範本中從哪一可見列開始編號的,列號是從0開始的,所以用列號-1,比如這個範本是從第3列開始的,就是2           
          n=n+1
          $(e).text(n);//將當前編號重新設定 
         } 
   }); 
   window.deleteflag=0;//清除刪除列標記
   window.appendflag=0;//清除新增列標記 
 }

2)儲存後,填報預覽效果如下:

1722415418123265.gif



附件列表


主題: 填報應用
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙