Files
kate522 ef718042d2 feat(admin): 新增后台文章列表销售数据列与快捷编辑配置项
「所有文章」列表此前只有互动数据列,缺少销售数据表头;快捷/批量编辑
展开后也只有原生三项。本次对照参考主题补齐这两处,不含专题链路。

- 新增 PostListEnhance:统管 sale/stats 两列、付费类型筛选、
  orderby=sales_volume 排序,以及四组快捷编辑字段的渲染与保存
- 新增 PostListEditFields:单独承载字段定义,主类职责保持单一
- 新增 admin-post-list.js:按 pay_type/pay_modo 勾选切换字段显隐
- 从 inc/core-hooks.php 迁出原有列实现(删 74 行),不再保留旧闭包
- 清理 admin-main.css 中确认无引用的 .aksrt-tab-pane 与 .aksrt-modal* 死块
- 新增 post-list-quick-edit-contract 测试,更新 stats/icon-picker 契约

快捷编辑锚点列用互动数据列而非参考主题的专题分类法列(本项目无专题)。
真实销量改为页面级批量查询,避免逐行查库。金额运算统一走 Ledger 的
「分」单位,不用裸浮点。保存走 edit_post 钩子,一次覆盖快捷与批量两条路径。
2026-10-06 15:54:47 +08:00

73 lines
2.2 KiB
JavaScript

/**
* Post list quick-edit dependency toggling.
*
* The pay quick-edit box hides fields whose dependency rules no longer match
* the selected 付费模式 / 支付类型, mirroring the reference theme's field
* visibility. Runs on the WP inline-edit row when it is opened or changed.
*/
(function () {
'use strict';
function readControl(row, fieldId) {
var input = row.querySelector(
'[name="aksrt_bulk_edit[pay][' + fieldId + ']"],' +
' [name="aksrt_bulk_edit[pay][' + fieldId + '][operation]"]'
);
if (!input) return null;
if (input.tagName === 'SELECT') return input.value;
var checked = row.querySelector(
'[name="aksrt_bulk_edit[pay][' + fieldId + ']"]:checked'
);
if (input.type === 'radio' && checked) return checked.value;
return input.value;
}
function compare(actual, operator, expected) {
if (actual === null) return true;
if (operator === '==') return actual === expected;
if (operator === '!=') return actual !== expected;
return true;
}
function updateRow(row) {
var boxes = row.querySelectorAll('.aksrt-bulk-edit-box[data-dependency]');
Array.prototype.forEach.call(boxes, function (box) {
var rules;
try {
rules = JSON.parse(box.getAttribute('data-dependency'));
} catch (e) {
return;
}
if (!Array.isArray(rules)) return;
var visible = rules.every(function (rule) {
return compare(readControl(row, rule[0]), rule[1], String(rule[2]));
});
box.style.display = visible ? '' : 'none';
});
}
function syncRows() {
var rows = document.querySelectorAll('.inline-edit-row, #bulk-edit-row');
Array.prototype.forEach.call(rows, function (row) {
if (row.querySelector('[data-dependency]')) updateRow(row);
});
}
document.addEventListener('change', function (event) {
var target = event.target;
if (!target || !target.name || target.name.indexOf('aksrt_bulk_edit[pay]') !== 0) return;
var row = target.closest('.inline-edit-row, #bulk-edit-row');
if (row) updateRow(row);
});
// WP swaps the inline-edit row without a change event.
document.addEventListener('click', function (event) {
var target = event.target;
if (!target || !target.closest) return;
if (target.closest('.editinline, .bulk-action')) window.setTimeout(syncRows, 50);
});
syncRows();
})();