diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c521a4c..81a28ca 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "reports-frontend", "version": "0.0.0", "dependencies": { + "chart.js": "^4.5.1", "vue": "^3.5.13" }, "devDependencies": { @@ -511,6 +512,12 @@ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.62.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.1.tgz", @@ -1110,6 +1117,18 @@ "balanced-match": "^1.0.0" } }, + "node_modules/chart.js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", + "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index f592b08..a6b6410 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,7 @@ "preview": "vite preview" }, "dependencies": { + "chart.js": "^4.5.1", "vue": "^3.5.13" }, "devDependencies": { diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 73c857e..635d0f7 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -54,7 +54,7 @@ const selectedTeam = computed(

{{ selectedTeam?.name ?? 'Сводка по спринтам' }}

-

Спринты отсортированы по дате начала

+

Сначала — самые последние спринты

diff --git a/frontend/src/components/SprintCompletionChart.vue b/frontend/src/components/SprintCompletionChart.vue new file mode 100644 index 0000000..58fdc06 --- /dev/null +++ b/frontend/src/components/SprintCompletionChart.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/frontend/src/components/SprintTable.vue b/frontend/src/components/SprintTable.vue index 54d9c0b..53dee65 100644 --- a/frontend/src/components/SprintTable.vue +++ b/frontend/src/components/SprintTable.vue @@ -2,6 +2,7 @@ import { computed, ref, watch } from 'vue' import { fetchTeamSprints } from '../api' import type { Sprint } from '../types' +import SprintCompletionChart from './SprintCompletionChart.vue' const props = defineProps<{ teamId: number @@ -60,8 +61,8 @@ function formatEfficiency(value: number | null): string { const sortedSprints = computed(() => [...sprints.value].sort( (left, right) => - new Date(left.sprint_activate_datetime).getTime() - - new Date(right.sprint_activate_datetime).getTime(), + new Date(right.sprint_activate_datetime).getTime() - + new Date(left.sprint_activate_datetime).getTime(), ), ) @@ -96,7 +97,10 @@ watch( Для этой команды пока нет данных по спринтам -
+
+ + +
@@ -169,6 +173,7 @@ watch(
+
diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo index e4b1ed1..c45d4f0 100644 --- a/frontend/tsconfig.tsbuildinfo +++ b/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/api.ts","./src/main.ts","./src/types.ts","./src/vite-env.d.ts","./src/app.vue","./src/components/sprinttable.vue","./src/components/teamsidebar.vue"],"version":"5.7.3"} \ No newline at end of file +{"root":["./src/api.ts","./src/main.ts","./src/types.ts","./src/vite-env.d.ts","./src/app.vue","./src/components/sprintcompletionchart.vue","./src/components/sprinttable.vue","./src/components/teamsidebar.vue"],"version":"5.7.3"} \ No newline at end of file