Source: multiTableListForm.view.mixin-1.0.0.js

/***********************************************
 * Framework Name  :  Halu
 * (c) 2025 TILLS & Co.
 * --------------------------------------------
 * 一覧照会(親子テーブル)パターン
 * ビューミックスイン
***********************************************/

(function ($, $H) {
  // 名前空間を設定する
  let App = $H.Library;

  /**
   * 関数を追加する
   * @mixin MultiTableListFormViewMixin
   */
  App.MultiTableListFormViewMixin = {

    /**
     * テンプレートのロードおよび各ダイアログの初期処理を実行する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} dataset - データセット
     */
    initExecute: function (dataset) {
      $H.log("View initExecute : start");

      this.initテンプレートロード();
      this.initAlertDialog();        // 警告メッセージ用ダイアログ 初期処理
      this.initConfirmDialog(this);  // 確認メッセージ用ダイアログ 初期処理
      this.initExecuteDialog(this);  // 実行確認メッセージ用ダイアログ 初期処理
      this.initServerDialog(this);   // サーバ確認メッセージ用ダイアログ 初期処理

      $H.log("View initExecute : end");
    },

    /**
     * CSSファイルの追加処理を実行する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param - なし
     */
    initテンプレートロード: function () {
      $H.log("View initテンプレートロード : start");

      // CSSファイル名をセッションストレージから取得しロードする
      sessionStorage.setIdName(this.appspec.sysname + ".Login");
      let cssName = sessionStorage.loadItem("CSSファイル名");

      if (cssName) {
        let arg = { cssName: cssName };
        this.appendCSS(arg);
      }

      $('body').fadeIn("normal");

      $H.log("View initテンプレートロード : end");
    },

    /**
     * 引数からログイン情報を取得し、画面へ表示する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} arg  - ユーザ名称、ログイン時刻、ログイン和暦
     */
    setログイン情報: function (arg) {
      $H.log("View setログイン情報 : start");

      $("#ログイン和暦").html(arg["ログイン和暦"]);
      $("#ユーザ氏名").html(arg["ユーザ名称"]);

      if ($("#ログイン日時").length) {
        $("#ログイン日時").html(arg["ログイン時刻"]);
      }

      $H.log("View setログイン情報 : end");
    },

    /**
     * データセットの内容を画面へ表示する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} arg - 処理モード、前画面名、データセット
     */
    on初期処理: function (arg) {
      $H.log("View on初期処理 : start");

      let dataSet = arg["データセット"];

      // テーブルの空行を作成する
      let detailInfo = this.appspec.getJSONChunkByIdAtRecords(dataSet, "detail");
      if (detailInfo) {
        if (detailInfo["multiline"] == "yes") {
          this.resetJsonDataToTable("#mainTable", dataSet, "detail");
        }
      }

      $H.log("View on初期処理 : end");
    },

    /**
     * appspecに定義された画面ヘッダキーをもとに、<br>
     * データセットの内容をセッションストレージに保存する<br>
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} dataSet - データセット
     */
    on初期リロード前処理: function (dataSet) {
      $H.log("View on初期リロード前処理 : start");

      this.setFromDatasetToViewWithSessionStorageOfHeader(dataSet);

      $H.log("View on初期リロード前処理 : end");
    },

    /**
     * データセットからデータ件数およびページ情報を画面に表示する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} arg - ページ情報(ページライン数、カレントページ、最大ページ、トータル件数)
     */
    showページ情報: function (arg) {
      $H.log("View showページ情報 : start");

      let pageline = arg["ページライン数"];
      let curpage = arg["カレントページ"];
      let maxpage = arg["最大ページ"];
      let totalcount = arg["トータル件数"];
      let pagedata = curpage + "/" + maxpage + "ページ(" + totalcount + "件)";
      $("#mainForm input[name='ページ情報']").val(pagedata);
      $("#mainForm input[name='ページ情報']").attr("disabled", "disabled");

      $("#最初のページ").removeAttr("disabled");
      $("#前のページ").removeAttr("disabled");
      $("#次のページ").removeAttr("disabled");
      $("#最後のページ").removeAttr("disabled");
      if (curpage == 1) {
        $("#最初のページ").attr("disabled", "disabled");
        $("#前のページ").attr("disabled", "disabled");
      }
      if (curpage == maxpage) {
        $("#最後のページ").attr("disabled", "disabled");
        $("#次のページ").attr("disabled", "disabled");
      }

      $H.log("View showページ情報 : end");
    },

    /**
     * ヘッダの検索項目をクリアする
     * 
     * @memberof MultiTableListFormViewMixin
     * @param dataSet - データセット
     */
    onクリア: function (dataSet) {
      $H.log("View onクリア : start");

      // 検索項目をクリアする
      this.setFromDatasetToViewWithSessionStorageOfHeader(dataSet);

      $H.log("View onクリア : end");
    },

    /**
     * 選択行の背景色を変更する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} arg   - クリック行情報(datasetのindex、セレクタ名)
     */
    onテーブル行クリック: function (arg) {
      $H.log("View onテーブル行クリック : start");

      let clickRow = arg["クリック行"];

      // セッションストレージに識別名を保存する
      sessionStorage.setIdName(this.appspec.sysname + "." + this.appspec.name);

      // 選択行にCSSクラスを設定する
      let j, k;
      let beforeRow = sessionStorage.loadItem("クリック行");
      let rows = $("#mainTable")[0].rows;
      jQuery.each(rows, function (j) {
        k = j;
        let cells = rows[j].cells;
        jQuery.each(cells, function () {
          if (k == beforeRow) {
            $(this).removeClass("table-success");
          }
          if (k == clickRow) {
            $(this).addClass("table-success");
          }
        });
      });

      sessionStorage.saveItem("クリック行", clickRow);

      $H.log("View onテーブル行クリック : end");
    },

    /**
     * 照会処理のレスポンスデータの内容を画面へ表示する
     * 
     * @memberof MultiTableListFormViewMixin
     * @param {object} dataSet - データセット
     * @param {object} responseData - レスポンスデータ
     * @param {object} mode - 処理モード
     */
    on照会OfEditResponseData: function (dataSet, responseData, mode) {
      $H.log("View on照会OfEditResponseData : start");

      // テーブル以外の項目(ヘッダー・フッター)にデータを表示する
      this.fromJsonDataToView(dataSet);

      // テーブルにデータを表示する
      this.resetJsonDataToTable("#mainTable", dataSet, "detail");

      $H.log("View on照会OfEditResponseData : end");
    }

  };
}(jQuery, Halu));