GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.9 KiB
4.9 KiB
別記資料 スクリプト(Scripts)全文 (3/28)
// ...(前ファイルからの続き)
//スペースで結合して、施主名(カナ)を作成し、保管
let mergeName = str1 + ' ' + str2 + '(' + str3 + ' ' + str4 + ')';
$p.set($('#Results_Class015'), mergeName); //施主名マージ
}
//----------------------------------------------------------------------
//ボタン名称変更
$p.changeButtonName = function () {
//ボタンの特定(②問い合わせ内容管理への新規作成ボタン)
let siteId = $p.siteId();
let button = $('button[data-from-site-id="' + siteId + '"][data-to-site-id="335411"].confirm-unload');
button.each(function () {
//+アイコンのspanはそのまま残し、末尾のテキストノードだけ書き換える
let textNode = $(this).contents().filter(function () {
return this.nodeType === 3; //テキストノードのみ対象
}).last();
if (textNode.length) {
textNode[0].nodeValue = '新規見積依頼';
}
});
}
//----------------------------------------------------------------------
//登録完了(Status=200)以降、マスターシート(ClassY)が選択済みの場合のみ選択変更を不可にする
//未選択のままなら登録完了後も選択可能(Pleasanter標準のStatusControls ColumnHashは値の有無で
//条件分岐できないため、こちらでクライアント側から制御する)。
//フィールドコンテナ(Results_ClassYField)へ既存の読取り専用CSSクラス(code-readonly2)を
//付け外しする方式(335410の01.読み取り専用スタイルで定義済み、pointer-events:none等を適用)。
//tabindexの制御は$p.applyReadonlyTabindexに一本化(クラス付与後に呼ばれる想定)。
$p.toggleClassYLock = function () {
let status = $('#Results_Status').val();
let classYVal = $('#Results_ClassY').val();
let statusLocked = ['200', '900', '910', '920'].includes(status);
let $classYField = $('#Results_ClassYField');
if (statusLocked && classYVal) {
$classYField.addClass('code-readonly2');
} else {
$classYField.removeClass('code-readonly2');
}
}
//----------------------------------------------------------------------
//code-readonly2(読取り専用)が設定されている全フィールドをTab移動対象から除外する。
//pointer-events:noneはマウス操作のみ無効化し、Tabキーでのフォーカス移動・キーボード操作での
//選択変更は防げないため、tabindex="-1"を併用する。静的にExtendedFieldCss: "code-readonly2"が
//設定されている項目(Status/ClassA/ClassB/ClassZ等)と、ClassYのように動的にクラスが
//付け外しされる項目の両方を、都度まとめて処理する(対象外に戻った要素はtabindexも解除)。
$p.applyReadonlyTabindex = function () {
$('select, input, textarea').each(function () {
let $el = $(this);
if ($el.closest('.code-readonly2').length) {
$el.attr('tabindex', '-1');
} else if ($el.attr('tabindex') === '-1') {
$el.removeAttr('tabindex');
}
});
}
//----------------------------------------------------------------------
//登録状況(Status)が「登録完了(200)」のときだけ依頼発行ボタンを表示、それ以外は非表示にする
$p.toggleNewRequestButton = function () {
let siteId = $p.siteId();
let button = $('button[data-from-site-id="' + siteId + '"][data-to-site-id="335411"].confirm-unload');
let status = $('#Results_Status').val();
if (status == '200') {
button.show();
} else {
button.hide();
}
}
$p.mergeUserList = function () {
//担当者一覧のマージ対象項目(重複除去)
let users1 = [];
[
$('#Results_Class032').val(), //主担当営業
$('#Results_Class033').val(), //副担当営業
$('#Results_Class034').val(), //営業設計
$('#Results_Class035').val(), //管理設計
$('#Results_Class036').val(), //担当IC
$('#Results_Class037').val(), //担当監督
$('#Results_Class038').val(), //所属長
].forEach(function (v) {
if (v && !users1.includes(v)) users1.push(v);
});
let mergeValue = JSON.stringify(users1); //担当者一覧のマージ対象項目をJSON文字列化
let class151 = JSON.stringify($('#Results_Class151').val()); //担当者一覧
//前と内容が同じ場合は上書きしない
if (mergeValue !== class151) {
$p.set($('#Results_Class151'), mergeValue); //担当者一覧
}
//CC一覧のマージ対象項目(重複除去)
let usersCC = [];
[
$('#Results_Class061').val(), //CC1
$('#Results_Class062').val(), //CC2
// ...(次ファイルへ続く)