Add component to view resource line
This commit is contained in:
		| @@ -8,15 +8,16 @@ | |||||||
|           <th class="right">Глина</th> |           <th class="right">Глина</th> | ||||||
|           <th class="right">Железо</th> |           <th class="right">Железо</th> | ||||||
|           <th class="right">Зерно</th> |           <th class="right">Зерно</th> | ||||||
|           <th class="right">Время</th> |           <th class="right" title="Время до окончания добычи необходимых ресурсов">Рес.</th> | ||||||
|  |           <th class="right" title="Время до окончания выполнения текущей задачи">Очередь</th> | ||||||
|         </tr> |         </tr> | ||||||
|       </thead> |       </thead> | ||||||
|       <tbody> |       <tbody> | ||||||
|         <template v-for="villageState in shared.villageStates"> |         <template v-for="villageState in shared.villageStates"> | ||||||
|           <tr class="normal-line top-line"> |           <tr class="normal-line top-line"> | ||||||
|             <td :class="{ active: villageState.village.active }" :title="villageHint(villageState)"> |             <td class="right" :class="{ active: villageState.village.active }" :title="villageHint(villageState)"> | ||||||
|               {{ villageState.village.name }} |               {{ villageState.village.name }} | ||||||
|               (<a href="#" v-on:click.prevent="openEditor(villageState.id)">ред</a>) |               [<a href="#" v-on:click.prevent="openEditor(villageState.id)">ред</a>]: | ||||||
|             </td> |             </td> | ||||||
|             <td class="right"> |             <td class="right"> | ||||||
|               <filling |               <filling | ||||||
| @@ -47,6 +48,7 @@ | |||||||
|               ></filling> |               ></filling> | ||||||
|             </td> |             </td> | ||||||
|             <td class="right" v-text="storageTime(villageState)"></td> |             <td class="right" v-text="storageTime(villageState)"></td> | ||||||
|  |             <td></td> | ||||||
|           </tr> |           </tr> | ||||||
|  |  | ||||||
|           <tr class="performance-line"> |           <tr class="performance-line"> | ||||||
| @@ -64,6 +66,7 @@ | |||||||
|               <resource :value="villageState.performance.crop"></resource> |               <resource :value="villageState.performance.crop"></resource> | ||||||
|             </td> |             </td> | ||||||
|             <td></td> |             <td></td> | ||||||
|  |             <td></td> | ||||||
|           </tr> |           </tr> | ||||||
|  |  | ||||||
|           <tr class="required-line"> |           <tr class="required-line"> | ||||||
| @@ -100,112 +103,57 @@ | |||||||
|                 :sign="false" |                 :sign="false" | ||||||
|               ></resource> |               ></resource> | ||||||
|             </td> |             </td> | ||||||
|             <td class="right" v-text="renderTimeInSeconds(villageState.buildRemainingSeconds)"></td> |             <td></td> | ||||||
|           </tr> |  | ||||||
|  |  | ||||||
|           <tr class="required-line"> |  | ||||||
|             <td class="right">Баланс задачи:</td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.required.balance.lumber"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.required.balance.clay"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.required.balance.iron"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.required.balance.crop"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right" v-text="renderGatheringTime(villageState.required.time)"></td> |  | ||||||
|           </tr> |  | ||||||
|  |  | ||||||
|           <tr v-for="queueState of villageState.queues" v-if="queueState.active" class="required-line"> |  | ||||||
|             <td class="right">{{ queueTitle(queueState.queue) }}:</td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="queueState.firstTask.balance.lumber"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="queueState.firstTask.balance.clay"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="queueState.firstTask.balance.iron"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="queueState.firstTask.balance.crop"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right" v-text="renderGatheringTime(queueState.firstTask.time)"></td> |  | ||||||
|           </tr> |  | ||||||
|  |  | ||||||
|           <tr class="required-line"> |  | ||||||
|             <td class="right">Баланс фронтира:</td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.frontierRequired.balance.lumber"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.frontierRequired.balance.clay"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.frontierRequired.balance.iron"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.frontierRequired.balance.crop"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right" v-text="renderGatheringTime(villageState.frontierRequired.time)"></td> |  | ||||||
|           </tr> |  | ||||||
|  |  | ||||||
|           <tr class="required-line"> |  | ||||||
|             <td class="right">Баланс очереди:</td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.totalRequired.balance.lumber"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.totalRequired.balance.clay"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.totalRequired.balance.iron"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.totalRequired.balance.crop"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right" v-text="renderGatheringTime(villageState.totalRequired.time)"></td> |  | ||||||
|           </tr> |  | ||||||
|  |  | ||||||
|           <tr class="commitments-line" v-if="!villageState.commitments.empty()"> |  | ||||||
|             <td class="right">Обязательства:</td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.commitments.lumber" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.commitments.clay" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.commitments.iron" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.commitments.crop" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td></td> |  | ||||||
|           </tr> |  | ||||||
|           <tr class="incoming-line" v-if="!villageState.incomingResources.empty()"> |  | ||||||
|             <td class="right">Торговцы:</td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.incomingResources.lumber" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.incomingResources.clay" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.incomingResources.iron" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td class="right"> |  | ||||||
|               <resource :value="villageState.incomingResources.crop" :hide-zero="true"></resource> |  | ||||||
|             </td> |  | ||||||
|             <td></td> |             <td></td> | ||||||
|           </tr> |           </tr> | ||||||
|  |  | ||||||
|  |           <resource-line | ||||||
|  |             :title="'Баланс задачи:'" | ||||||
|  |             :resources="villageState.required.balance" | ||||||
|  |             :time1="renderGatheringTime(villageState.required.time)" | ||||||
|  |           /> | ||||||
|  |  | ||||||
|  |           <resource-line | ||||||
|  |             v-for="queueState of villageState.queues" | ||||||
|  |             v-bind:key="villageState.id + queueState.queue" | ||||||
|  |             v-if="queueState.isActive" | ||||||
|  |             :title="queueTitle(queueState.queue) + ' (' + queueState.taskCount + '):'" | ||||||
|  |             :hint="'Задач в очереди: ' + queueState.taskCount" | ||||||
|  |             :resources="queueState.firstTask.balance" | ||||||
|  |             :time1="renderGatheringTime(queueState.firstTask.time)" | ||||||
|  |             :time2="renderTimeInSeconds(queueState.currentTaskFinishSeconds)" | ||||||
|  |           /> | ||||||
|  |  | ||||||
|  |           <resource-line | ||||||
|  |             :title="'Баланс фронтира:'" | ||||||
|  |             :hint="'Баланс первых задач во всех производственных очередях'" | ||||||
|  |             :resources="villageState.frontierRequired.balance" | ||||||
|  |             :time1="renderGatheringTime(villageState.frontierRequired.time)" | ||||||
|  |           /> | ||||||
|  |  | ||||||
|  |           <resource-line | ||||||
|  |             :title="'Баланс очереди:'" | ||||||
|  |             :hint="'Баланс всех задач деревни в очереди'" | ||||||
|  |             :resources="villageState.totalRequired.balance" | ||||||
|  |             :time1="renderGatheringTime(villageState.totalRequired.time)" | ||||||
|  |           /> | ||||||
|  |  | ||||||
|  |           <resource-line | ||||||
|  |             :title="'Обязательства:'" | ||||||
|  |             :resources="villageState.commitments" | ||||||
|  |             :hide-zero="true" | ||||||
|  |             v-if="!villageState.commitments.empty()" | ||||||
|  |           /> | ||||||
|  |  | ||||||
|  |           <resource-line | ||||||
|  |             :title="'Торговцы:'" | ||||||
|  |             :resources="villageState.incomingResources" | ||||||
|  |             :hide-zero="true" | ||||||
|  |             v-if="!villageState.incomingResources.empty()" | ||||||
|  |           /> | ||||||
|  |  | ||||||
|           <tr class="normal-line"> |           <tr class="normal-line"> | ||||||
|             <td></td> |             <td class="right" colspan="7"> | ||||||
|             <td class="right" colspan="5"> |  | ||||||
|               <a |               <a | ||||||
|                 v-for="s in shared.villageStates" |                 v-for="s in shared.villageStates" | ||||||
|                 v-if="s.id !== villageState.id" |                 v-if="s.id !== villageState.id" | ||||||
| @@ -230,8 +178,7 @@ | |||||||
|           </tr> |           </tr> | ||||||
|  |  | ||||||
|           <tr class="normal-line"> |           <tr class="normal-line"> | ||||||
|             <td></td> |             <td class="right" colspan="7" v-text="villageStatus(villageState)"></td> | ||||||
|             <td class="right" colspan="5" v-text="villageStatus(villageState)"></td> |  | ||||||
|           </tr> |           </tr> | ||||||
|         </template> |         </template> | ||||||
|       </tbody> |       </tbody> | ||||||
| @@ -246,6 +193,7 @@ import { COLLECTION_POINT_ID, HORSE_STABLE_ID, MARKET_ID, QUARTERS_ID } from '.. | |||||||
| import { path } from '../Helpers/Path'; | import { path } from '../Helpers/Path'; | ||||||
| import { Actions } from './Store'; | import { Actions } from './Store'; | ||||||
| import { translateProductionQueue } from '../Core/ProductionQueue'; | import { translateProductionQueue } from '../Core/ProductionQueue'; | ||||||
|  | import VillageStateResourceLine from './VillageStateResourceLine'; | ||||||
|  |  | ||||||
| function secondsToTime(value) { | function secondsToTime(value) { | ||||||
|   if (value === 0) { |   if (value === 0) { | ||||||
| @@ -259,8 +207,9 @@ function secondsToTime(value) { | |||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   components: { |   components: { | ||||||
|     resource: ResourceBalance, |     'resource': ResourceBalance, | ||||||
|     filling: VillageResource, |     'filling': VillageResource, | ||||||
|  |     'resource-line': VillageStateResourceLine, | ||||||
|   }, |   }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|   | |||||||
							
								
								
									
										95
									
								
								src/DashboardView/VillageStateResourceLine.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/DashboardView/VillageStateResourceLine.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | |||||||
|  | <template> | ||||||
|  |   <tr class="resource-line"> | ||||||
|  |     <td class="title" v-text="title" :title="hint"></td> | ||||||
|  |     <td class="lumber"> | ||||||
|  |       <resource :value="resources.lumber" :hide-zero="hideZero" /> | ||||||
|  |     </td> | ||||||
|  |     <td class="clay"> | ||||||
|  |       <resource :value="resources.clay" :hide-zero="hideZero" /> | ||||||
|  |     </td> | ||||||
|  |     <td class="iron"> | ||||||
|  |       <resource :value="resources.iron" :hide-zero="hideZero" /> | ||||||
|  |     </td> | ||||||
|  |     <td class="crop"> | ||||||
|  |       <resource :value="resources.crop" :hide-zero="hideZero" /> | ||||||
|  |     </td> | ||||||
|  |     <td class="time1" v-text="time1"></td> | ||||||
|  |     <td class="time2" v-text="time2"></td> | ||||||
|  |   </tr> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import ResourceBalance from './ResourceBalance'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   components: { | ||||||
|  |     resource: ResourceBalance, | ||||||
|  |   }, | ||||||
|  |   props: { | ||||||
|  |     title: { | ||||||
|  |       type: String, | ||||||
|  |     }, | ||||||
|  |     hint: { | ||||||
|  |       type: String, | ||||||
|  |       default: '', | ||||||
|  |     }, | ||||||
|  |     resources: { | ||||||
|  |       type: Object, | ||||||
|  |     }, | ||||||
|  |     time1: { | ||||||
|  |       type: String, | ||||||
|  |       default: '', | ||||||
|  |     }, | ||||||
|  |     time2: { | ||||||
|  |       type: String, | ||||||
|  |       default: '', | ||||||
|  |     }, | ||||||
|  |     hideZero: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | %right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | %small-cell { | ||||||
|  |   padding: 0 4px 4px; | ||||||
|  |   font-size: 90%; | ||||||
|  | } | ||||||
|  | .resource-line:hover { | ||||||
|  |   background-color: #b0e787; | ||||||
|  | } | ||||||
|  | .title { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | .lumber { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  | } | ||||||
|  | .clay { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  | } | ||||||
|  | .iron { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  | } | ||||||
|  | .crop { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  | } | ||||||
|  | .time1 { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  | } | ||||||
|  | .time2 { | ||||||
|  |   @extend %right; | ||||||
|  |   @extend %small-cell; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -7,6 +7,7 @@ import { VillageRepositoryInterface } from './VillageRepository'; | |||||||
| import { VillageNotFound } from './Errors'; | import { VillageNotFound } from './Errors'; | ||||||
| import { ProductionQueue, ProductionQueueTypes } from './Core/ProductionQueue'; | import { ProductionQueue, ProductionQueueTypes } from './Core/ProductionQueue'; | ||||||
| import { Task } from './Queue/TaskProvider'; | import { Task } from './Queue/TaskProvider'; | ||||||
|  | import { timestamp } from './utils'; | ||||||
|  |  | ||||||
| interface VillageStorageState { | interface VillageStorageState { | ||||||
|     resources: Resources; |     resources: Resources; | ||||||
| @@ -37,10 +38,12 @@ interface ResourceLineState { | |||||||
|  |  | ||||||
| interface VillageProductionQueueState { | interface VillageProductionQueueState { | ||||||
|     queue: ProductionQueue; |     queue: ProductionQueue; | ||||||
|     active: boolean; |     isActive: boolean; | ||||||
|     ts: number; |     currentTaskFinishTimestamp: number; | ||||||
|  |     currentTaskFinishSeconds: number; | ||||||
|     firstTask: ResourceLineState; |     firstTask: ResourceLineState; | ||||||
|     allTasks: ResourceLineState; |     allTasks: ResourceLineState; | ||||||
|  |     taskCount: number; | ||||||
| } | } | ||||||
|  |  | ||||||
| interface VillageOwnState { | interface VillageOwnState { | ||||||
| @@ -140,13 +143,16 @@ function createProductionQueueState( | |||||||
|  |  | ||||||
|     const firstTaskResources = tasks.slice(0, 1).reduce(taskResourceReducer, Resources.zero()); |     const firstTaskResources = tasks.slice(0, 1).reduce(taskResourceReducer, Resources.zero()); | ||||||
|     const allTaskResources = tasks.reduce(taskResourceReducer, Resources.zero()); |     const allTaskResources = tasks.reduce(taskResourceReducer, Resources.zero()); | ||||||
|  |     const taskEndingTimestamp = storage.getQueueTaskEnding(queue); | ||||||
|  |  | ||||||
|     return { |     return { | ||||||
|         queue, |         queue, | ||||||
|         active: tasks.length !== 0, |         isActive: tasks.length !== 0 || taskEndingTimestamp !== 0, | ||||||
|         ts: storage.getQueueTaskEnding(queue), |         currentTaskFinishTimestamp: taskEndingTimestamp, | ||||||
|  |         currentTaskFinishSeconds: taskEndingTimestamp ? taskEndingTimestamp - timestamp() : 0, | ||||||
|         firstTask: calcResourceBalance(firstTaskResources, resources, performance), |         firstTask: calcResourceBalance(firstTaskResources, resources, performance), | ||||||
|         allTasks: calcResourceBalance(allTaskResources, resources, performance), |         allTasks: calcResourceBalance(allTaskResources, resources, performance), | ||||||
|  |         taskCount: tasks.length, | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user