{% extends "base.html" %} {% from "_datetime_picker_field.html" import datetime_picker_field %} {% block content %} {% include "_mission_ops_tabs.html" %} {% set field_error_map = field_errors|default({}, true) %} {% macro render_end_at_field(end_at_value, has_error=False) %} {{ datetime_picker_field('End At', 'end_at', end_at_value, field_id='entry-end-at-input', wrapper_class='field-span-two mission-datetime-field', wrapper_id='entry-end-at-field', error=has_error) }} {% endmacro %} {% macro render_state_node_row(node, row_index, field_error_map) %} {% set title_error = field_error_map.get('state_node_title:' ~ row_index) %} {% set at_error = field_error_map.get('state_node_at:' ~ row_index) %}
{{ datetime_picker_field('Node At', 'state_node_at', node.at if node else '', field_id='state-node-at-' ~ row_index, wrapper_class='state-node-datetime', error=at_error) }}
{% endmacro %}

资产日志

{{ heading }}

{% set is_event_kind = form_values.entry_kind == 'event' %}
{{ datetime_picker_field('At' if is_event_kind else 'Start At', 'start_at', form_values.start_at, field_id='entry-start-at-input', required=True, wrapper_class='field-span-two mission-datetime-field', wrapper_id='entry-start-at-field', label_id='entry-start-at-label', error=field_error_map.get('start_at')) }} {% if not is_event_kind %} {{ render_end_at_field(form_values.end_at, field_error_map.get('end_at')) }} {% endif %}
State Nodes

每个 State Node 包含时间、标题和 Node Detail,并会在 Timeline 的 Event Point 泳道中显示。

State Node 时间必须落在当前 State Interval 的 Start At 和 End At 之间。

{% for node in form_values.state_nodes %} {{ render_state_node_row(node, loop.index0, field_error_map) }} {% endfor %}

当前没有 State Node,可按需添加。

返回
{% if delete_url %}

删除后不可恢复,请谨慎操作。

{% endif %} {% include "_validation_dialog.html" %} {% endblock %}