Files
meguri/static/resource-inventory.html
T
ab a47c4a0398
Checks / test (push) Failing after 12m20s
Init
2026-09-24 14:35:05 +03:00

44 lines
7.5 KiB
HTML

<section id="schedules" class="setup-section resource-inventory" x-show="view==='configuration'">
<div class="section-line"><h2><span x-text="t('setup_resources')"></span><span class="section-count" x-text="doc.schedules.length+doc.escalations.length+doc.routes.length"></span></h2>
<div class="actions resource-create" x-show="can('edit_schedules')">
<details class="schedule-create"><summary role="button" x-text="t('create_schedule')"></summary><div class="schedule-create-options"><button @click="open('rotation');$el.closest('details').open=false" x-text="t('rotation_b83874')"></button><button @click="open('priority');$el.closest('details').open=false" x-text="t('project_coverage_6d54f7')"></button></div></details>
<button @click="open('policy')" x-text="t('create_escalation')"></button><button @click="open('route')" x-text="t('create_routing')"></button>
</div></div>
<div class="resource-table" x-ref="routingList"><template x-for="isGenerated in [false,true]"><div class="resource-group" :class="{'generated-group':isGenerated}" x-show="[...doc.schedules,...doc.escalations,...doc.routes].some(r=>generated(r.id)===isGenerated)">
<h3 class="resource-group-label" x-text="isGenerated?t('generated_resources'):t('manual_resources')"></h3>
<template x-for="s in doc.schedules.filter(r=>generated(r.id)===isGenerated)" :key="s.id"><details class="resource-disclosure resource-row " :class="isGenerated?'generated-resource':'manual-resource'" data-resource-kind="schedules" >
<summary class="resource-summary"><span class="resource-kind"><svg class="resource-icon" viewBox="0 0 24 24" aria-hidden="true"><path :d="resourceIcon('schedule')"></path></svg><span x-text="t('resource_schedule')"></span></span><div class="resource-title"><strong class="resource-name" x-text="s.name"></strong><small class="resource-brief" x-text="resourceBrief(s,'schedule')" :title="resourceBrief(s,'schedule')"></small></div><span class="generated-mark" x-show="isGenerated" :title="t('generated_resource')" :aria-label="t('generated_resource')" x-text="t('generated_symbol')"></span></summary>
<div class="resource-body"><div class="resource-source" x-show="isGenerated"><button class="source-rule-link" :disabled="!can('edit_schedules')" @click="editGenerated(s.id)" x-text="t('generated_by_rule',{name:sourceRuleName(s.id)})"></button></div><div x-data="{resource:s,resourceKind:'schedule'}" x-effect="resource=s"><!-- RESOURCE_DETAILS --></div>
<div class="actions resource-actions" x-show="can('edit_schedules') && !isGenerated">
<button x-show="!generated(s.id)" @click="open(s.type,s)"><span x-text="t('edit_530164')"></span></button>
<button class="text danger" x-show="!generated(s.id)" @click="removeItem('schedules',s.id)"><span x-text="t('remove_e96390')"></span></button>
</div>
</div></details></template>
<template x-for="p in doc.escalations.filter(r=>generated(r.id)===isGenerated)" :key="p.id"><details class="resource-disclosure resource-row " :class="isGenerated?'generated-resource':'manual-resource'" data-resource-kind="escalations" >
<summary class="resource-summary"><span class="resource-kind"><svg class="resource-icon" viewBox="0 0 24 24" aria-hidden="true"><path :d="resourceIcon('escalation')"></path></svg><span x-text="t('resource_escalation')"></span></span><div class="resource-title"><strong class="resource-name" x-text="p.name"></strong><small class="resource-brief" x-text="resourceBrief(p,'escalation')" :title="resourceBrief(p,'escalation')"></small></div><span class="generated-mark" x-show="isGenerated" :title="t('generated_resource')" :aria-label="t('generated_resource')" x-text="t('generated_symbol')"></span></summary>
<div class="resource-body"><div class="resource-source" x-show="isGenerated"><button class="source-rule-link" :disabled="!can('edit_schedules')" @click="editGenerated(p.id)" x-text="t('generated_by_rule',{name:sourceRuleName(p.id)})"></button></div><div x-data="{resource:p,resourceKind:'escalation'}" x-effect="resource=p"><!-- RESOURCE_DETAILS --></div>
<div class="actions resource-actions" x-show="can('edit_schedules') && !isGenerated">
<button x-show="!generated(p.id)" @click="open('policy',p)"><span x-text="t('edit_530164')"></span></button>
<button class="text danger" x-show="!generated(p.id)" @click="removeItem('escalations',p.id)"><span x-text="t('remove_e96390')"></span></button>
</div>
</div></details></template>
<div class="routing-list" :aria-label="t('routing_rules_in_evaluation_order_582c46')"><template x-for="r in orderedRoutes.filter(r=>generated(r.id)===isGenerated)" :key="r.id"><details class="resource-disclosure resource-row routing-card" :class="{'generated-resource':isGenerated,'manual-resource':!isGenerated,'route-dragging':draggedRoute===r.id,'drop-before':routeDropTarget===r.id && routeDropSide==='before','drop-after':routeDropTarget===r.id && routeDropSide==='after'}" data-resource-kind="routes" :data-route-id="r.id" @dragover.prevent="overRoute($event,r.id)" @drop.prevent.stop="dropRoute($event,r.id)">
<summary class="resource-summary"><span class="resource-kind"><svg class="resource-icon" viewBox="0 0 24 24" aria-hidden="true"><path :d="resourceIcon('route')"></path></svg><span x-text="t('resource_routing')"></span></span><div class="resource-title"><strong class="resource-name"><span class="route-position" x-text="orderedRoutes.findIndex(item=>item.id===r.id)+1"></span><span x-text="r.name"></span></strong><small class="resource-brief" x-text="resourceBrief(r,'route')" :title="resourceBrief(r,'route')"></small></div><span class="generated-mark" x-show="isGenerated" :title="t('generated_resource')" :aria-label="t('generated_resource')" x-text="t('generated_symbol')"></span></summary>
<div class="resource-body"><div class="resource-source" x-show="isGenerated"><button class="source-rule-link" :disabled="!can('edit_schedules')" @click="editGenerated(r.id)" x-text="t('generated_by_rule',{name:sourceRuleName(r.id)})"></button></div><div x-data="{resource:r,resourceKind:'route'}" x-effect="resource=r"><!-- RESOURCE_DETAILS --></div>
<div class="route-heading" x-show="can('edit_schedules') && !generated(r.id)">
<button type="button" class="drag-handle" x-show="can('edit_schedules') && !generated(r.id)" :draggable="!busy" :disabled="busy" @dragstart="startRouteDrag($event,r.id)" @dragend="clearRouteDrag()" :aria-label="t('drag_72143a')+r.name+t('to_reorder_64a607')" :title="t('drag_to_reorder_e7541f')"><span x-text="t('symbol_40b24b')"></span></button>
<span class="minute route-position" x-text="orderedRoutes.findIndex(item=>item.id===r.id)+1" :aria-label="t('position_713830')+(orderedRoutes.findIndex(item=>item.id===r.id)+1)">
</span>
<div class="route-moves" x-show="can('edit_schedules') && !generated(r.id)">
<button type="button" class="move-route" @click="moveRoute(r.id,-1)" :disabled="busy || orderedRoutes.findIndex(item=>item.id===r.id)===0" :aria-label="t('move_e402ac')+r.name+t('up_459409')" :title="t('move_up_b4f57c')"><span x-text="t('symbol_9555ff')"></span></button>
<button type="button" class="move-route" @click="moveRoute(r.id,1)" :disabled="busy || orderedRoutes.findIndex(item=>item.id===r.id)===orderedRoutes.length-1" :aria-label="t('move_e402ac')+r.name+t('down_edbf4b')" :title="t('move_down_260ff8')"><span x-text="t('symbol_fc4866')"></span></button>
</div>
<button x-show="can('edit_schedules') && !generated(r.id)" @click="open('route',r)"><span x-text="t('edit_530164')"></span></button>
<button class="text danger" x-show="can('edit_schedules') && !generated(r.id)" @click="removeItem('routes',r.id)"><span x-text="t('remove_e96390')"></span></button>
</div>
</div></details></template></div>
</div></template></div>
</section>