Merge branch 'main' of http://192.168.65.198:3000/Front_Team/SPDM
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { post } from '@/api/request';
|
||||
import { post, upload } from '@/api/request';
|
||||
|
||||
const env = import.meta.env;
|
||||
const PREFIX = env.VITE_API_PREFIX_PROJECT;
|
||||
@@ -28,3 +28,76 @@ export const editTaskApi = (params: any) => {
|
||||
export const getTaskCountApi = (params: any) => {
|
||||
return post(`${PREFIX}task/count`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取项目任务下的算例信息
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export const getTaskRunTreeApi = (params: any) => {
|
||||
return post(`${PREFIX}run/getTaskRunTree`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取用户工作负载信息
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export const getListUserWorkloadsApi = (params: any) => {
|
||||
return post(`${PREFIX}task/listUserWorkloads`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 新建算例
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export const addTaskRunApi = (params: any) => {
|
||||
return post(`${PREFIX}run/addTaskRun`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询算例信息
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export const queryTaskRunApi = (params: any) => {
|
||||
return post(`${PREFIX}run/queryTaskRun`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 创建算例下的结果文件夹
|
||||
* @param params dirName文件夹名称 dirType文件夹类型默认2 uuId算例的uuid
|
||||
* @returns
|
||||
*/
|
||||
export const createRunDirApi = (params: any) => {
|
||||
return post(`${PREFIX}run/createRunDir`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询算例结果文件夹及文件
|
||||
* @param params uuId算例的uuid size 10 current 1
|
||||
* @returns
|
||||
*/
|
||||
export const queryRunDirApi = (params: any) => {
|
||||
return post(`${PREFIX}run/queryRunDir`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 上传算例结果文件
|
||||
* @param params file文件 dirId文件夹id fileName文件名称
|
||||
* @returns
|
||||
*/
|
||||
export const uploadRunFilesApi = (params: any) => {
|
||||
return upload(`${PREFIX}run/uploadRunFiles`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除算例
|
||||
* @param params runId 算例的id
|
||||
* @returns
|
||||
*/
|
||||
export const deleteTaskRunApi = (params: any) => {
|
||||
return post(`${PREFIX}run/deleteTaskRun`, params);
|
||||
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
import { get, post } from '@/api/request';
|
||||
import { get, post, download } from '@/api/request';
|
||||
|
||||
const env = import.meta.env;
|
||||
const PREFIX = env.VITE_API_PREFIX_SYSTEM;
|
||||
@@ -27,3 +27,8 @@ export const tenantGetTenantDetailByIdApi = (params: any) => {
|
||||
export const tenantDeleteApi = (params: any) => {
|
||||
return get(`${PREFIX}tenant/delete`, params);
|
||||
};
|
||||
|
||||
// 租户列表导出
|
||||
export const tenantExportApi = (params: any, filename: string) => {
|
||||
return download(`${PREFIX}/tenant/export`, params, filename);
|
||||
};
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
<div class="item">
|
||||
<div class="btns">
|
||||
<slot name="leftOptions" />
|
||||
<el-button v-if="exportApi" :icon="Download" @click="exportFun">{{ $t('表格.导出') }}</el-button>
|
||||
<el-button v-if="showImport" :icon="Upload">{{ $t('表格.导入') }}</el-button>
|
||||
<el-tooltip :content="$t('表格.列表字段设置')" placement="top" >
|
||||
<div class="icon-btn" @click="formDiaVisible = true">
|
||||
<el-icon :size="18">
|
||||
@@ -45,8 +47,6 @@
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-button v-if="showExport" type="success" :icon="Upload">{{ $t('表格.导出') }}</el-button>
|
||||
<el-button v-if="showImport" type="success" :icon="Download">{{ $t('表格.导入') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -67,14 +67,14 @@
|
||||
}"
|
||||
>
|
||||
<vxe-column v-if="showCheckbox" type="checkbox" width="60" align="center" header-align="center"></vxe-column>
|
||||
<vxe-column v-if="showIndex" type="seq" width="80" align="center" header-align="left" />
|
||||
<vxe-column v-if="showIndex" type="seq" width="80" align="left" header-align="left" />
|
||||
<vxe-column
|
||||
v-for="(item) in tableHeadVisible"
|
||||
:key="item.key"
|
||||
:field="item.key"
|
||||
:title="item.title"
|
||||
:min-width="item.width"
|
||||
align="center"
|
||||
align="left"
|
||||
header-align="left"
|
||||
:tree-node="item.treeNode"
|
||||
sortable
|
||||
@@ -90,7 +90,7 @@
|
||||
v-if="$slots.tableActions || actionList.length > 0"
|
||||
title="操作"
|
||||
:width="$slots.tableActions ? actionsWidth : actionAutoWidth"
|
||||
align="center"
|
||||
align="left"
|
||||
header-align="left"
|
||||
fixed="right"
|
||||
>
|
||||
@@ -149,12 +149,16 @@ import TableSearch from './tableSearch.vue';
|
||||
import TableFormDia from './tableFormDia.vue';
|
||||
import { getFormConfigureApi } from '@/api/system/systemData';
|
||||
import { formOptionsFormat } from './lib';
|
||||
import { exportFile } from '@/utils/file';
|
||||
|
||||
const emit = defineEmits(['searchChange', 'load', 'update:viewType']);
|
||||
|
||||
interface Props {
|
||||
tableName?: string;
|
||||
api?: (params: ApiParams) => Promise<any> | undefined;
|
||||
exportApi?: any;
|
||||
exportFileName?: string;
|
||||
exportDict?: any;
|
||||
render?: (data: any, cb: (cbData: any) => void) => void | undefined;
|
||||
params?: any;
|
||||
head?: any;
|
||||
@@ -175,6 +179,9 @@ interface Props {
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
tableName: '',
|
||||
api: undefined,
|
||||
exportApi: undefined,
|
||||
exportFileName: '',
|
||||
exportDict: {},
|
||||
render: undefined,
|
||||
params: () => {},
|
||||
head: null,
|
||||
@@ -400,6 +407,10 @@ const actionClickFun = (row: any, action: any) => {
|
||||
}
|
||||
};
|
||||
|
||||
const exportFun = () => {
|
||||
exportFile(props.exportApi, props.tableName, props.exportFileName, {}, props.exportDict);
|
||||
};
|
||||
|
||||
watch(() => props.tableName, () => {
|
||||
initFun();
|
||||
});
|
||||
|
||||
@@ -33,7 +33,7 @@ withDefaults(defineProps<Props>(), {
|
||||
.tip {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
justify-content: flex-start;
|
||||
font-size: 12px;
|
||||
color: var(--el-text-color-secondary);
|
||||
.text {
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
<div class="item">
|
||||
<div class="btns">
|
||||
<slot name="leftOptions" />
|
||||
<el-button v-if="exportApi" :icon="Download" @click="exportFun">{{ $t('表格.导出') }}</el-button>
|
||||
<el-button v-if="showImport" :icon="Upload">{{ $t('表格.导入') }}</el-button>
|
||||
<el-tooltip :content="$t('表格.列表字段设置')" placement="top" >
|
||||
<div class="icon-btn" @click="formDiaVisible = true">
|
||||
<el-icon :size="18">
|
||||
@@ -29,8 +31,6 @@
|
||||
</el-icon>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-button v-if="showExport" type="success" :icon="Upload">{{ $t('表格.导出') }}</el-button>
|
||||
<el-button v-if="showImport" type="success" :icon="Download">{{ $t('表格.导入') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -65,14 +65,14 @@
|
||||
}"
|
||||
>
|
||||
<vxe-column v-if="showCheckbox" type="checkbox" width="60" align="center" header-align="center" fixed="left"></vxe-column>
|
||||
<vxe-column v-if="showIndex" type="seq" width="80" align="center" header-align="left" fixed="left" />
|
||||
<vxe-column v-if="showIndex" type="seq" width="80" align="left" header-align="left" fixed="left" />
|
||||
<vxe-column
|
||||
v-for="(item) in tableHeadVisible"
|
||||
:key="item.key"
|
||||
:field="item.key"
|
||||
:title="item.title"
|
||||
:min-width="item.width"
|
||||
:align="item.key === 'nodeName' ? 'left' : 'center'"
|
||||
align="left"
|
||||
header-align="left"
|
||||
:tree-node="item.key === 'nodeName'"
|
||||
:fixed="item.key === 'nodeName' ? 'left' : ''"
|
||||
@@ -127,7 +127,7 @@
|
||||
v-if="$slots.tableActions || actionList.length > 0"
|
||||
title="操作"
|
||||
:width="$slots.tableActions ? actionsWidth : actionAutoWidth"
|
||||
align="center"
|
||||
align="left"
|
||||
header-align="left"
|
||||
fixed="right"
|
||||
>
|
||||
@@ -172,11 +172,15 @@ import TableFormDia from './tableFormDia.vue';
|
||||
import { getFormConfigureApi } from '@/api/system/systemData';
|
||||
import { formOptionsFormat } from './lib';
|
||||
import { uniqBy, cloneDeep } from 'lodash-es';
|
||||
import { exportFile } from '@/utils/file';
|
||||
|
||||
const emit = defineEmits(['searchChange', 'load']);
|
||||
|
||||
interface Props {
|
||||
tableName: string;
|
||||
exportApi?: any;
|
||||
exportFileName?: string;
|
||||
exportDict?: any;
|
||||
params?: any;
|
||||
head?: any;
|
||||
searchItems?: any[];
|
||||
@@ -195,6 +199,9 @@ interface Props {
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
tableName: '',
|
||||
exportApi: undefined,
|
||||
exportFileName: '',
|
||||
exportDict: {},
|
||||
params: () => {},
|
||||
head: null,
|
||||
searchItems: () => [] as any[],
|
||||
@@ -470,6 +477,10 @@ const actionClickFun = (row: any, action: any) => {
|
||||
}
|
||||
};
|
||||
|
||||
const exportFun = () => {
|
||||
exportFile(props.exportApi, props.tableName, props.exportFileName, {}, props.exportDict);
|
||||
};
|
||||
|
||||
watch(() => props.tableName, () => {
|
||||
initFun();
|
||||
});
|
||||
|
||||
@@ -40,7 +40,12 @@ export const CommonStore = defineStore('common', {
|
||||
},
|
||||
getDictData(key: string) {
|
||||
if (this.dictData[key]) {
|
||||
return this.dictData[key] ;
|
||||
return this.dictData[key];
|
||||
} else {
|
||||
return {
|
||||
A: [],
|
||||
O: {},
|
||||
};
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import { getKKFileViewURLFromMinioApi } from '@/api/data/data';
|
||||
import { getFormConfigureApi } from '@/api/system/systemData';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import * as XLSX from 'xlsx';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
import { CommonStore } from '@/stores/common';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const env = import.meta.env;
|
||||
|
||||
@@ -173,3 +176,23 @@ export class FileUtil {
|
||||
}
|
||||
}
|
||||
|
||||
// 导出文件
|
||||
export const exportFile = (api: any, tableName: string, fileName: string, params: any, dict: any) => {
|
||||
getFormConfigureApi({ formName: tableName }).then((res: any) => {
|
||||
if (res.code === 200) {
|
||||
const formConfig = JSON.parse(res.data.formConfig);
|
||||
const listData = formConfig.filter((item: any) => item.isShow).map((item: any) => {
|
||||
const val: any = {
|
||||
key: item.key,
|
||||
title: item.title,
|
||||
};
|
||||
if (dict[item.key] && CommonStore().getDictData(dict[item.key])) {
|
||||
val.dictCode = dict[item.key];
|
||||
val.dictData = CommonStore().getDictData(dict[item.key]).O;
|
||||
}
|
||||
return val;
|
||||
});
|
||||
api(listData, `${dayjs().format('YYYYMMDDHHmmss')}_${fileName || tableName}.xlsx`);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
ref="baseTableRef"
|
||||
tableName="SYSTEM_TENANT"
|
||||
:api="tenantListApi"
|
||||
:exportApi="tenantExportApi"
|
||||
exportFileName="租户列表"
|
||||
:exportDict="{
|
||||
status: 'TENANT_STATUS'
|
||||
}"
|
||||
>
|
||||
<template #leftOptions>
|
||||
<el-button type="primary" :icon="Plus" @click="openDetailFun('')">新增租户</el-button>
|
||||
@@ -34,7 +39,7 @@ import { Plus } from '@element-plus/icons-vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import BaseTable from '@/components/common/table/baseTable.vue';
|
||||
import Detail from './components/detail.vue';
|
||||
import { tenantListApi, tenantDeleteApi } from '@/api/system/tenant';
|
||||
import { tenantListApi, tenantDeleteApi, tenantExportApi } from '@/api/system/tenant';
|
||||
import { useDict } from '@/utils/useDict';
|
||||
|
||||
const { TENANT_STATUS } = useDict('TENANT_STATUS');
|
||||
|
||||
Reference in New Issue
Block a user