Compare commits

...

12 Commits

Author SHA1 Message Date
D'Alia, Florinda
03dd5bd562 Merged PR 250: fix excel version
fix excel version
2026-01-22 13:56:11 +00:00
dalia.florinda
6a26794c86 fix excel version 2026-01-22 11:43:49 +01:00
c9d9863099 Merged PR 237: Remove duplicates
Remove duplicates
2026-01-20 08:45:25 +00:00
c1f3c4ccc0 Remove duplicates 2026-01-20 08:52:58 +01:00
366fba4568 Merged PR 236: Create video query for picklist 2026-01-19 16:49:43 +00:00
2b90d2f776 Update query video for picklist 2026-01-19 17:44:28 +01:00
e6624d37f0 Merge branch 'master' into develop 2026-01-19 17:43:48 +01:00
38dfcde152 Updated main.js 2026-01-19 12:42:58 +00:00
D'Alia, Florinda
a79a8e8ab8 Merged PR 234: beautify 2026-01-19 11:44:25 +00:00
dalia.florinda
c6e29d158a fix 2026-01-19 12:13:04 +01:00
dalia.florinda
d697385c22 fix picklist 2026-01-19 09:57:25 +01:00
c60d94a21c Update picklist for new folders 2026-01-15 12:23:22 +01:00
6 changed files with 77 additions and 10 deletions

View File

@@ -245,6 +245,7 @@ const safeOptions = computed(() => {
// Funzione per rimuovere una folder dalla selezione
const removeFolder = (folderToRemove) => {
if (props.disabled) return;
if (!selectedValue.value || !Array.isArray(selectedValue.value)) return;
const newValue = selectedValue.value.filter(folder => {
@@ -416,6 +417,30 @@ const onSelectionChange = (event) => {
background-color: #f8f9fa;
}
/* Stili specifici per ks-folders */
.ks-folders-panel .p-multiselect-item {
min-height: 60px;
}
.ks-folders-panel .pi-folder {
font-size: 1.3rem;
}
/* Stili per le chips delle folders */
.folder-chip {
background-color: #f3e8ff;
color: #7c3aed;
border: 1px solid #c4b5fd;
}
.folder-chip .pi-folder {
color: #7c3aed;
}
.folder-chip:hover {
background-color: #e9d5ff;
}
/* Stili per le icone dei file */
.ks-documents-panel .pi {
font-size: 1.2rem;

View File

@@ -647,13 +647,13 @@ export default {
const cells = row.querySelectorAll('th, td');
const rowData = Array.from(cells).map((cell) => {
let text = cell.textContent.trim();
// Escape quotes and wrap in quotes if contains comma
if (text.includes(',') || text.includes('"') || text.includes('\n')) {
// Escape quotes and wrap in quotes if contains semicolon, quotes or newlines
if (text.includes(';') || text.includes('"') || text.includes('\n')) {
text = '"' + text.replace(/"/g, '""') + '"';
}
return text;
});
csv += rowData.join(',') + '\n';
csv += rowData.join(';') + '\n';
});
// Add UTF-8 BOM for proper character encoding

View File

@@ -53,8 +53,8 @@ var auth = createAuth({
}
});
//axios.defaults.baseURL = import.meta.env.VITE_BACKEND_URL;
axios.defaults.baseURL = 'http://localhost:8081';
axios.defaults.baseURL = import.meta.env.VITE_BACKEND_URL;
//axios.defaults.baseURL = 'http://localhost:8081';
console.log(import.meta.env.VITE_BACKEND_URL);

View File

@@ -0,0 +1,28 @@
import axios from 'axios';
export const KSVideoService = {
/**
* Recupera tutti i KSVideo per il progetto selezionato dall'utente corrente
* @returns {Promise} Promise con la lista di KSVideo
*/
getKSVideos() {
return axios.get('/ksVideos');
},
/**
* Recupera tutti i KSVideo completati per il progetto selezionato dall'utente corrente
* @returns {Promise} Promise con la lista di KSVideo completati
*/
getCompletedKSVideos() {
return axios.get('/ksVideos/completed');
},
/**
* Recupera tutti i KSVideo per un progetto specifico
* @param {string} projectId - ID del progetto
* @returns {Promise} Promise con la lista di KSVideo
*/
getKSVideosByProject(projectId) {
return axios.post('/ksVideos/byProject', projectId);
}
};

View File

@@ -229,7 +229,12 @@ const filteredInputs = computed(() => {
const filtered = {};
for (const [key, value] of Object.entries(inputs.value)) {
// Escludi tutti i campi che contengono "input_multiselect" e finiscono con "_id"
if (!(key.includes('input_multiselect') && key.endsWith('_id'))) {
// Escludi anche i campi "SelectedFolders_Name" e "SelectedFolders_Id"
const shouldExclude = (key.includes('input_multiselect') && key.endsWith('_id')) ||
key === 'selectedFolders_id' ||
key === 'selectedFolders_name';
if (!shouldExclude) {
filtered[key] = value;
}
}

View File

@@ -6,6 +6,7 @@ import MarkdownViewer from '@/components/MarkdownViewer.vue';
import ScenarioFileUpload from '@/components/ScenarioFileUpload.vue';
import WorkflowResponsePanel from '@/components/WorkflowResponsePanel.vue';
import { KSDocumentService } from '@/service/KSDocumentService';
import { KSVideoService } from '@/service/KSVideoService';
import { FileUploadStore } from '@/stores/FileUploadStore';
import { KsVideoGroupStore } from '@/stores/KsVideoGroupStore';
import { LoadingStore } from '@/stores/LoadingStore';
@@ -215,10 +216,18 @@ const extractFoldersFromItems = (items) => {
const loadKsFolders = async () => {
try {
const docsResponse = await KSDocumentService.getKSDocuments();
const documents = docsResponse.data || [];
// Carica sia documenti che video con query separate
const [docsResponse, videosResponse] = await Promise.all([
KSDocumentService.getKSDocuments(),
KSVideoService.getKSVideos()
]);
const allItems = [...documents, ...videoGroups.value];
const documents = docsResponse.data || [];
const videos = videosResponse.data || [];
// Combina documenti e video per l'estrazione dei folder
// Facciamo distinct sui ksKnowledgePath
const allItems = [...documents, ...videos];
const { folders, folderMap } = extractFoldersFromItems(allItems);
// Calcola il numero di subfolder per ogni folder
@@ -239,7 +248,7 @@ const loadKsFolders = async () => {
ksFolders.value = folders.map((path) => ({
id: path,
name: path === '/' ? '/ (Root)' : path,
name: path === '/' ? '/ (Root) - ALL' : path,
path: path,
itemCount: folderMap[path]?.length || 0,
subfolderCount: subfolderCounts[path] || 0