2023-12-11 22:41:03 +08:00
|
|
|
<template>
|
2023-12-12 19:17:38 +08:00
|
|
|
<div class="p-4 rounded sn-shadow-flyout flex flex-col"
|
|
|
|
:class="{'bg-sn-light-grey': dtComponent.currentViewMode === 'archived'}">
|
2023-12-11 22:41:03 +08:00
|
|
|
<div class="flex items-center gap-2 mb-2">
|
|
|
|
<div class="sci-checkbox-container">
|
|
|
|
<input
|
|
|
|
type="checkbox"
|
|
|
|
class="sci-checkbox"
|
|
|
|
@change="itemSelected"
|
|
|
|
/>
|
|
|
|
<label :for="params.id" class="sci-checkbox-label"></label>
|
|
|
|
</div>
|
|
|
|
<div>{{ params.code }}</div>
|
|
|
|
<RowMenuRenderer :params="{data: params, dtComponent: dtComponent}" class="ml-auto"/>
|
|
|
|
</div>
|
|
|
|
<a :href="params.urls.show"
|
|
|
|
:class="{'pointer-events-none text-sn-grey': !params.urls.show}"
|
|
|
|
class="font-bold mb-4 text-sn-black hover:no-underline hover:text-sn-black">
|
|
|
|
{{ params.name }}
|
|
|
|
</a>
|
|
|
|
<div class="flex">
|
|
|
|
<div class="grid gap-2 grid-cols-[100px_auto] mt-auto">
|
|
|
|
<span class="text-sn-grey">{{ i18n.t('experiments.card.start_date') }}</span>
|
|
|
|
<span class="font-bold">{{ params.created_at }}</span>
|
|
|
|
|
|
|
|
<span class="text-sn-grey">{{ i18n.t('experiments.card.modified_date') }}</span>
|
|
|
|
<span class="font-bold">{{ params.updated_at }}</span>
|
|
|
|
|
2023-12-12 19:17:38 +08:00
|
|
|
<template v-if="dtComponent.viewMode == 'archived'">
|
2023-12-11 22:41:03 +08:00
|
|
|
<span class="text-sn-grey">{{ i18n.t('experiments.card.archived_date') }}</span>
|
|
|
|
<span class="font-bold">{{ params.archived_on }}</span>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<span class="text-sn-grey">{{ i18n.t('experiments.card.completed_task') }}</span>
|
|
|
|
<span class="font-bold">{{ i18n.t(
|
|
|
|
'experiments.card.completed_value', {
|
|
|
|
completed: params.completed_tasks,
|
|
|
|
all: params.total_tasks
|
|
|
|
}
|
|
|
|
) }}</span>
|
|
|
|
</div>
|
|
|
|
<div class="h-20 w-20 p-0.5 bg-sn-light-grey rounded-sm shrink-0 ml-auto">
|
|
|
|
<img :src="params.workflow_img" class="max-h-18 max-w-[72px]">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="py-2">
|
|
|
|
<div class="w-full h-1 bg-sn-light-grey">
|
|
|
|
<div class="h-full bg-sn-blue" :style="{
|
|
|
|
width: params.completed_tasks / params.total_tasks * 100 + '%'
|
|
|
|
}"></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<Description :params="{data: params, value: params.description, dtComponent: dtComponent}" />
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
import RowMenuRenderer from '../shared/datatable/row_menu_renderer.vue';
|
|
|
|
import CardSelectorMixin from '../shared/datatable/mixins/card_selector.js';
|
|
|
|
import Description from './renderers/description.vue';
|
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'ProjectCard',
|
|
|
|
props: {
|
|
|
|
params: Object,
|
|
|
|
dtComponent: Object,
|
|
|
|
},
|
|
|
|
components: {
|
|
|
|
RowMenuRenderer,
|
|
|
|
Description,
|
|
|
|
},
|
|
|
|
mixins: [CardSelectorMixin],
|
|
|
|
};
|
|
|
|
</script>
|