You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
234 lines
6.8 KiB
234 lines
6.8 KiB
<template>
|
|
<w-dialog ref="dialogRef" title="选取变量" width="80%" height="80%" :buttons="dialog.buttons">
|
|
<div class="h-full">
|
|
<div class="h-[300px]">
|
|
<w-grid
|
|
ref="templateParamsGridRef"
|
|
dense
|
|
sort-no
|
|
title="模板变量列表"
|
|
:auto-fetch-data="false"
|
|
:data-url="Environment.apiContextPath('api/excel/template/params')"
|
|
:columns="templateParamsGrid.columns"
|
|
:toolbar-actions="templateParamsGrid.toolbarActions"
|
|
:config-button="false"
|
|
:query-form-cols-num="3"
|
|
:query-form-fields="templateParamsGrid.queryFormFields"
|
|
:sort-by="['-lastModifyDate']"
|
|
@row-click="templateParamsGridClick"
|
|
></w-grid>
|
|
</div>
|
|
<div style="height: calc(100% - 300px)">
|
|
<w-grid
|
|
v-show="state.showListFieldGrid"
|
|
ref="templateParamsListFieldGridRef"
|
|
dense
|
|
sort-no
|
|
:config-button="false"
|
|
:hide-bottom="false"
|
|
:pageable="false"
|
|
title="字段列表"
|
|
:auto-fetch-data="false"
|
|
:fetch-data-url="Environment.apiContextPath('api/excel/template/params/list')"
|
|
:columns="templateParamsListFieldGrid.columns"
|
|
></w-grid>
|
|
</div>
|
|
</div>
|
|
</w-dialog>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { ref, reactive, nextTick } from 'vue';
|
|
import { useQuasar } from 'quasar';
|
|
import { axios, Environment, NotifyManager, OperatorTypeEnum } from 'platform-core';
|
|
|
|
const $q = useQuasar();
|
|
const emit = defineEmits<{
|
|
(
|
|
e: 'setParams', // 设置模板变量
|
|
paramsCode: string | Array<string>, // 变量编码(列表类型返回数组)
|
|
): void;
|
|
}>();
|
|
|
|
const dialogRef = ref();
|
|
const templateParamsGridRef = ref();
|
|
const templateParamsListFieldGridRef = ref();
|
|
|
|
const state = reactive({
|
|
templateArray: [],
|
|
tableSelectedTemplateId: null,
|
|
showListFieldGrid: false,
|
|
});
|
|
|
|
const dialog = {
|
|
buttons: [
|
|
{
|
|
icon: 'save',
|
|
label: '确定',
|
|
click: async () => {
|
|
const paramsSelected = templateParamsGridRef.value.getSelectedRows();
|
|
const listFieldSelected = templateParamsListFieldGridRef.value.getSelectedRows();
|
|
if (paramsSelected && paramsSelected.length > 0) {
|
|
if (paramsSelected[0].paramsType === 'LIST' && (!listFieldSelected || listFieldSelected.length === 0)) {
|
|
const listFieldRows = templateParamsListFieldGridRef.value.getRows();
|
|
const arr = <string[]>[];
|
|
listFieldRows.forEach((item) => {
|
|
arr.push('#{' + item.name + '}');
|
|
});
|
|
emit('setParams', arr);
|
|
hide();
|
|
return;
|
|
} else if (paramsSelected[0].paramsType === 'LIST' && listFieldSelected && listFieldSelected.length > 0) {
|
|
emit('setParams', '#{' + listFieldSelected[0].name + '}');
|
|
hide();
|
|
return;
|
|
}
|
|
} else {
|
|
NotifyManager.warn('请选择要插入的变量');
|
|
return;
|
|
}
|
|
},
|
|
},
|
|
],
|
|
};
|
|
|
|
const templateParamsGrid = reactive({
|
|
queryFormFields: [
|
|
{ label: '变量名称', name: 'paramsName', type: 'w-text' },
|
|
{
|
|
label: '变量类型',
|
|
name: 'paramsType',
|
|
type: 'w-select',
|
|
queryOperator: 'equals',
|
|
options: [
|
|
{ label: '单值', value: 'SING' },
|
|
{ label: '列表', value: 'LIST' },
|
|
],
|
|
},
|
|
{
|
|
label: '所属模板',
|
|
name: 'reportExcelTemplate',
|
|
type: 'w-select',
|
|
queryOperator: 'equals',
|
|
clearable: true,
|
|
colspan: 2,
|
|
options: [],
|
|
},
|
|
],
|
|
toolbarActions: ['query', 'reset'],
|
|
columns: [
|
|
{ name: 'paramsCode', label: '变量编码' },
|
|
{ name: 'paramsName', label: '变量名称' },
|
|
{
|
|
name: 'paramsType',
|
|
label: '变量类型',
|
|
format: (val) => {
|
|
if (val === 'SING') {
|
|
return '单值';
|
|
} else if (val === 'LIST') {
|
|
return '列表';
|
|
} else {
|
|
return val;
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: 'paramsIsCommon',
|
|
label: '变量是否通用',
|
|
format: (val) => {
|
|
if (val === true) {
|
|
return '所有模板均可使用';
|
|
} else if (val === false) {
|
|
return '指定模板可使用';
|
|
} else {
|
|
return val;
|
|
}
|
|
},
|
|
},
|
|
{ name: 'reportExcelTemplateName', label: '所属模板名称' },
|
|
{ name: 'lastModifier', label: '最后修改人' },
|
|
{ name: 'lastModifyDate', label: '最后修改时间' },
|
|
],
|
|
});
|
|
|
|
const templateParamsListFieldGrid = reactive({
|
|
columns: [
|
|
{ name: 'name', label: '字段名' },
|
|
{ name: 'desc', label: '字段描述' },
|
|
{
|
|
name: 'formatType',
|
|
label: '格式化类型',
|
|
format: (val) => {
|
|
if (val && OperatorTypeEnum[val]) {
|
|
return OperatorTypeEnum[val];
|
|
} else {
|
|
return val;
|
|
}
|
|
},
|
|
},
|
|
{ name: 'formatValue', label: '格式化值' },
|
|
],
|
|
});
|
|
|
|
const templateParamsGridClick = (args) => {
|
|
const { evt, row, index } = args;
|
|
if (row.paramsType === 'LIST') {
|
|
state.showListFieldGrid = true;
|
|
const urlSearchParams = new URLSearchParams();
|
|
urlSearchParams.append('criteria', JSON.stringify({ fieldName: 'reportExcelTemplateParams', operator: 'equals', value: row.id }));
|
|
axios
|
|
.get(Environment.apiContextPath('api/excel/template/params/list?pageable=false&sortBy=sortNo'), { params: urlSearchParams })
|
|
.then((resp) => {
|
|
if (resp.data.content) {
|
|
templateParamsListFieldGridRef.value.setLocalData(resp.data.content);
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.info('error====', error);
|
|
});
|
|
} else {
|
|
// 清空字段列表
|
|
templateParamsListFieldGridRef.value.setLocalData([]);
|
|
// 隐藏字段列表
|
|
state.showListFieldGrid = false;
|
|
}
|
|
};
|
|
const getTemplateListFun = async () => {
|
|
const resp = await axios.get(Environment.apiContextPath('api/excel/template?pageable=false'));
|
|
if (resp && resp.data?.content) {
|
|
const options = <any>[];
|
|
resp.data.content.forEach((item) => {
|
|
options.push({ label: item.templateName, value: item.id });
|
|
});
|
|
state.templateArray = options;
|
|
templateParamsGridRef.value.getQueryForm().getFields()['reportExcelTemplate'].options = options;
|
|
|
|
setTimeout(() => {
|
|
if (state.tableSelectedTemplateId) {
|
|
templateParamsGridRef.value.getQueryForm().setFieldValue('reportExcelTemplate', state.tableSelectedTemplateId);
|
|
}
|
|
// 设置完所属模板后加载变量列表的数据
|
|
templateParamsGridRef.value.refresh();
|
|
}, 100);
|
|
}
|
|
};
|
|
const show = (templateId) => {
|
|
dialogRef.value.show();
|
|
if (templateId) {
|
|
state.tableSelectedTemplateId = templateId;
|
|
} else {
|
|
state.tableSelectedTemplateId = null;
|
|
}
|
|
nextTick(() => {
|
|
getTemplateListFun();
|
|
});
|
|
};
|
|
const hide = () => {
|
|
dialogRef.value.hide();
|
|
};
|
|
|
|
defineExpose({
|
|
show,
|
|
hide,
|
|
});
|
|
</script>
|
|
|