Экспорт задач
По умолчанию в навигаторе задач доступен модуль экспорта в CSV. Вы можете добавлять свои модули, реализуя класс IssuesExportModule.
java
@Component
public class IssuesExportCSV implements IssuesExportModule {
private final I18nResolver i18n;
private final FieldManager fieldManager;
public IssuesExportCSV(I18nResolver i18n,
FieldManager fieldManager) {
this.i18n = i18n;
this.fieldManager = fieldManager;
}
@Override
public String getName() {
return i18n.getText("app.issue.export.csv.label");
}
@Override
public void doExport(SearchResult<Issue> result, final OutputStream stream, ExportParams exportParams) throws IOException {
String separator = exportParams.getExtraParams().get("separator");
Writer writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
...
writer.flush();
}
@Override
public ExportFileInfo getExportFileInfo(ExportParams exportParams) throws ValidateException {
// Проверяем параметры формы из веб-компонента, возвращаем имя файла и тип
if (exportParams.getExtraParams() == null || exportParams.getExtraParams().isEmpty()) {
throw new ValidateException("separator", i18n.getText("app.issue.export.svc.separator.required"));
}
if (exportParams.getExtraParams().get("separator").length() != 1) {
throw new ValidateException("separator", i18n.getText("app.issue.export.svc.separator.error"));
}
return new ExportFileInfo(Constants.DATE_TIME_FORMAT.format(LocalDateTime.now()) + ".csv", "text/plain");
}
}Фронтенд
vue
<script setup lang="ts">
import { onBeforeMount, PropType } from "vue";
import { Errors } from "luna";
interface ExtraParams {
includeFieldNames: string,
separator: string,
}
defineProps({
errors: Object as PropType<Errors>
});
const extraParams = defineModel<ExtraParams>();
onBeforeMount(() => {
if (!extraParams.value.separator) {
extraParams.value.separator = ";";
}
});
</script>
<template>
<div class="extra-params">
<div class="field-group">
<label for="csv-extra-params-separator">{{ $i18n.t("Separator") }}</label>
<input id="csv-extra-params-separator" type="text" class="input" v-model="extraParams.separator">
<div class="error" v-if="errors?.separator">{{ errors?.separator }}</div>
</div>
<div class="field-group">
<strong>{{ $i18n.t("Add header") }}</strong>
<fieldset class="checkbox-group">
<div class="checkbox-item">
<input id="yes" type="checkbox" value="true" v-model="extraParams.includeFieldNames">
<label for="yes">{{ $i18n.t("Yes") }}</label>
</div>
</fieldset>
</div>
</div>
</template>Дескриптор
yaml
issuesExportModules:
- key: IssuesExportCSV
name: Export issues to CVS
className: ru.slie.luna.issue.export.IssuesExportCSV
webComponent:
path: frontend/CVSExtraParams.js