2baf29b3ae
Deliver encrypted health zone, observation API, baseline maturity pipeline, page-data bindings, and H5/WeChat channel integration for health P0. Co-authored-by: Cursor <cursoragent@cursor.com>
70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
import {
|
|
HEALTH_CATEGORY_CODE,
|
|
HEALTH_PUBLISH_POLICY,
|
|
} from './health-feature.mjs';
|
|
import {
|
|
assertHealthShareDatasetPolicy,
|
|
HEALTH_ALLOWED_ACCESS_MODES,
|
|
HEALTH_SHARE_FORBIDDEN_DATASETS,
|
|
} from './health-publish-guard.mjs';
|
|
|
|
export const HEALTH_MINDSPACE_DESCRIPTION =
|
|
'加密健康档案:报告原图、Timeline 摘要页。禁止完全公开,分享须口令或登录。';
|
|
|
|
export const HEALTH_PUBLISH_ACCESS_MODES = Object.freeze([...HEALTH_ALLOWED_ACCESS_MODES]);
|
|
|
|
export function isHealthCategoryCode(categoryCode) {
|
|
return String(categoryCode ?? '') === HEALTH_CATEGORY_CODE;
|
|
}
|
|
|
|
export function isHealthPublishPolicyCategory(category) {
|
|
if (!category) return false;
|
|
return (
|
|
isHealthCategoryCode(category.category_code ?? category.categoryCode)
|
|
|| String(category.publish_policy ?? category.publishPolicy ?? '') === HEALTH_PUBLISH_POLICY
|
|
);
|
|
}
|
|
|
|
export function filterAccessModesForCategory(categoryCode, accessModeLabels) {
|
|
if (!isHealthCategoryCode(categoryCode)) {
|
|
return accessModeLabels;
|
|
}
|
|
return Object.fromEntries(
|
|
Object.entries(accessModeLabels).filter(([mode]) =>
|
|
HEALTH_PUBLISH_ACCESS_MODES.includes(mode),
|
|
),
|
|
);
|
|
}
|
|
|
|
export function defaultAccessModeForCategory(categoryCode, current = 'public') {
|
|
if (!isHealthCategoryCode(categoryCode)) return current;
|
|
if (HEALTH_PUBLISH_ACCESS_MODES.includes(current)) return current;
|
|
return 'password';
|
|
}
|
|
|
|
export function filterPageDataDatasetsForCategory(categoryCode, datasets = []) {
|
|
if (!isHealthCategoryCode(categoryCode)) return datasets;
|
|
return datasets.filter((dataset) => !HEALTH_SHARE_FORBIDDEN_DATASETS.includes(dataset.name));
|
|
}
|
|
|
|
export function assertHealthCategoryPageDataBind({
|
|
categoryCode = null,
|
|
publishPolicy = null,
|
|
datasetName,
|
|
columns = {},
|
|
} = {}) {
|
|
if (!isHealthPublishPolicyCategory({ category_code: categoryCode, publish_policy: publishPolicy })) {
|
|
return { ok: true, skipped: true };
|
|
}
|
|
return assertHealthShareDatasetPolicy({ datasetName, columns });
|
|
}
|
|
|
|
export function healthCategoryPageDataDefaults() {
|
|
return {
|
|
read: true,
|
|
insert: false,
|
|
update: false,
|
|
softDelete: false,
|
|
};
|
|
}
|