From 78e2641ff81d172115279915d74f4271ea49a35e Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期四, 29 八月 2024 15:40:44 +0800 Subject: [PATCH] feat: 新增数据列表 --- src/api/login/UserMenuData.ts | 2 src/views/types/catalog/index.ts | 21 + src/views/project/yw/knowledge/Graph.vue | 624 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 643 insertions(+), 4 deletions(-) diff --git a/src/api/login/UserMenuData.ts b/src/api/login/UserMenuData.ts index 08bf401..aea0155 100644 --- a/src/api/login/UserMenuData.ts +++ b/src/api/login/UserMenuData.ts @@ -72,7 +72,7 @@ Path: '/knowledge/graph', Permission: '', Icon: 'ywifont ywicon-a-appround15', - IsIframe: true, + IsIframe: false, IsHide: false, Weight: 0, SortCode: 2, diff --git a/src/views/project/yw/knowledge/Graph.vue b/src/views/project/yw/knowledge/Graph.vue index 3c10d20..9f88f3a 100644 --- a/src/views/project/yw/knowledge/Graph.vue +++ b/src/views/project/yw/knowledge/Graph.vue @@ -1,4 +1,622 @@ -<template><div>123</div></template> +<template> + <AHMContainer type="card"> + <template #aside> + <!-- 鐩綍鏍� --> + <LeftTreeByMgr + v-loading="treeLoading" + ref="leftTreeRef" + :treedata="listTreeData" + title-name="绫荤洰绠$悊" + :show-more-operate="true" + :show-add="true" + :folderIcon="() => false" + :current-node-key="currentListID" + :expand-on-click-node="false" + :default-expand-all="true" + :tooltip="(_, data) => data.Code" + @click="handleClickNode" + :customDropdown="true" + @tree-add="openOperateFormulaGroupDialog" + > + <template #customDropdown="{ data, node }"> + <el-dropdown-menu> + <el-dropdown-item> + <el-button + @click.stop="() => openOperateFormulaGroupDialog(data)" + link + type="primary" + icon="ele-Edit" + style="cursor: pointer" + > + 缂栬緫 + </el-button> + </el-dropdown-item> + <el-dropdown-item> + <el-button + link + type="danger" + @click.stop="() => deleteCurrentFormulaGroup(data)" + icon="ele-Delete" + style="cursor: pointer" + > + 鍒犻櫎 + </el-button> + </el-dropdown-item> + <el-dropdown-item> + <el-button @click.stop="() => openParentDlg(data)" link type="primary" icon="ele-Menu" style="cursor: pointer"> + 鐖剁骇 + </el-button> + </el-dropdown-item> + </el-dropdown-menu> + </template> + </LeftTreeByMgr> + </template> + <template #header> + <!-- 鏌ヨ銆侀噸缃�佹帓搴忋�佸鍔犺〃鍗� --> + <el-form :inline="true" :model="formulaQueryParams"> + <el-form-item label="鍚嶇О" prop="Name"> + <el-input v-model="formulaQueryParams.Name" style="width: 226.4px" placeholder="鏂囦欢鍚嶇О" clearable></el-input> + </el-form-item> + <el-form-item prop="Code"> + <el-select v-model="formulaQueryParams.Code" autocomplete="off" style="width: 226.4px" clearable> + <el-option v-for="item in Object.keys(analyzeMap)" :key="item" :value="parseInt(item)" :label="analyzeMap[item]"> + </el-option> + </el-select> + </el-form-item> -<script setup lang="ts"></script> -<style scoped lang="scss"></style> + <el-form-item> + <el-button type="primary" icon="ele-Search"> 鏌ヨ </el-button> + <el-button icon="ele-Refresh">閲嶇疆 </el-button> + <el-button icon="ele-Plus" @click="openOperateFormulaDialog()"> 瀵煎叆鏁版嵁 </el-button> + </el-form-item> + </el-form></template + > + <template #main + ><!-- 鏁版嵁灞曠ず琛ㄦ牸 --> + <div class="flex-auto flex-column h-full"> + <el-table + v-loading="formulaTableLoading" + ref="draggableFormulaTableRef" + border + row-key="ID" + class="flex-auto" + :row-class-name="isFormulaTableDrag ? 'cursor-move' : 'cursor-pointer'" + :cell-style="{ textAlign: 'center' }" + :header-cell-style="{ textAlign: 'center' }" + :data="categoryTableData" + highlight-current-row + > + <el-table-column prop="Name" width="220" label="鏂囦欢鍚嶇О" fixed="left" show-overflow-tooltip /> + <el-table-column prop="Code" width="300" label="鏂囦欢鏍煎紡" show-overflow-tooltip /> + <el-table-column prop="FormatType" label="鏂囦欢澶у皬" width="120" show-overflow-tooltip> </el-table-column> + <el-table-column prop="MeasureTypes" width="120" label="鐘舵��" show-overflow-tooltip> </el-table-column> + <el-table-column prop="CronTypes" label="涓婁紶鏃堕棿" show-overflow-tooltip> </el-table-column> + <el-table-column label="鎿嶄綔" width="220" fixed="right" show-overflow-tooltip> + <template #default="scope"> + <el-button icon="ele-Edit" size="small" text type="primary" @click="openOperateFormulaDialog(scope.row)"> + 璇︽儏</el-button + > + <el-button icon="ele-Delete" size="small" text type="danger" @click="deleteCurrentFormulaRow(scope.row)"> + 鍒犻櫎 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="flex-0"> + <el-pagination + v-model:currentPage="state.tableParams.PageIndex" + v-model:page-size="state.tableParams.PageSize" + :total="state.tableTotal" + :page-sizes="[10, 20, 50, 100]" + background + @size-change="handleSizeChange" + style="margin-bottom: 20px" + @current-change="handleCurrentChange" + layout="total, sizes, prev, pager, next, jumper" + /> + </div> + </div> + </template> + <!-- 澧炲姞銆佷慨鏀规暟鎹璇濇 --> + <el-dialog + :destroy-on-close="true" + v-model="formulaGroupDialogIsShow" + width="400" + :close-on-click-modal="false" + @closed="closeFormulaGroupDialog" + > + <template #header> + <div style="color: #fff"> + <SvgIcon + :name="formulaGroupDialogHeaderIcon" + :size="16" + style="margin-right: 3px; display: inline; vertical-align: middle" + /> + <span> {{ formulaGroupDialogTitle }} </span> + </div> + </template> + + <el-form + :model="formulaGroupDialogFormValue" + ref="formulaGroupDialogFormRef" + :rules="formulaGroupDialogFormRules" + label-width="55" + > + <el-form-item label="鐖剁骇" v-if="!isEditFormulaGroupDialog" prop="ParentID"> + <el-tree-select + default-expand-all + filterable + style="width: 100%" + v-model="formulaGroupDialogFormValue.ParentID" + :props="{ + id: 'ID', + label: 'Name', + children: 'Children', + }" + :data="listTreeData" + node-key="ID" + :clearable="true" + :accordion="true" + :expandNode="false" + :check-strictly="true" + placeholder="璇烽�夋嫨鐖剁骇" + > + </el-tree-select> + </el-form-item> + <el-form-item label="鍚嶇О" prop="Name"> + <el-input placeholder="璇疯緭鍏ュ悕绉�" v-model="formulaGroupDialogFormValue.Name"></el-input> + </el-form-item> + <el-form-item label="缂栫爜" prop="Code"> + <el-input placeholder="璇疯緭鍏ョ紪鐮�" v-model="formulaGroupDialogFormValue.Code"></el-input> + </el-form-item> + + <el-form-item label="璇存槑" prop="Description"> + <el-input placeholder="璇疯緭鍏ヨ鏄�" v-model="formulaGroupDialogFormValue.Description" type="textarea" :rows="3" /> + </el-form-item> + </el-form> + <template #footer> + <div> + <el-button @click="closeFormulaGroupDialog">鍙� 娑�</el-button> + <el-button type="primary" @click="submitFormulaGroupFormValue">纭� 瀹�</el-button> + </div> + </template> + </el-dialog> + + <!-- 澧炲姞銆佷慨鏀规暟鎹璇濇 --> + <el-dialog + :destroy-on-close="true" + v-model="formulaDialogIsShow" + width="530" + :close-on-click-modal="false" + @closed="closeFormulaDialog" + > + <template #header> + <div style="color: #fff"> + <SvgIcon :name="formulaDialogHeaderIcon" :size="16" style="margin-right: 3px; display: inline; vertical-align: middle" /> + <span> {{ formulaDialogTitle }} </span> + </div> + </template> + + <el-form :model="formulaDialogFormValue" ref="formulaDialogFormRef" :rules="formulaDialogFormRules" label-width="78"> + <el-form-item label="鍚嶇О" prop="Name"> + <el-input placeholder="璇疯緭鍏ュ悕绉�" v-model="formulaDialogFormValue.Name"></el-input> + </el-form-item> + <el-form-item label="缂栫爜" prop="Code"> + <el-input placeholder="璇疯緭鍏ュ敮涓�缂栫爜" v-model="formulaDialogFormValue.Code"></el-input> + </el-form-item> + <el-form-item label="璇存槑" prop="Description"> + <el-input placeholder="璇疯緭鍏ヨ鏄�" v-model="formulaDialogFormValue.Description" type="textarea" :rows="3" /> + </el-form-item> + </el-form> + <template #footer> + <div> + <el-button @click="closeFormulaDialog">鍙� 娑�</el-button> + <el-button type="primary" @click="submitFormulaFormValue">纭� 瀹�</el-button> + </div> + </template> + </el-dialog> + <el-dialog + :destroy-on-close="true" + v-model="updateModuleDlgIsShow" + width="400" + :close-on-click-modal="false" + @closed="closeUpdateModuleDlg" + > + <template #header> + <div style="color: #fff"> + <span> {{ updateModuleTitle }} </span> + </div> + </template> + + <el-form :model="updateModuleFormValue" ref="updateModuleFormRef" :rules="updateModuleFormRules" label-width="60"> + <el-form-item label="鍒嗙粍" prop="GroupID"> + <el-tree-select + filterable + class="w100" + v-model="updateModuleFormValue.GroupID" + :props="{ + id: 'ID', + label: 'Name', + children: 'Children', + }" + :data="updateModuleOptions" + node-key="ID" + :clearable="true" + :accordion="false" + :expandNode="false" + :check-strictly="true" + > + </el-tree-select> + </el-form-item> + </el-form> + <template #footer> + <div> + <el-button @click="closeUpdateModuleDlg">鍙� 娑�</el-button> + <el-button type="primary" @click="submitUpdateModule">纭� 瀹�</el-button> + </div> + </template> + </el-dialog> + </AHMContainer> +</template> + +<script setup lang="ts"> +import type { AxiosRequestConfig, AxiosResponse } from 'axios'; +import type { FormInstance, FormRules } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; +import type { PropType } from 'vue'; +import { computed, nextTick, onMounted, reactive, ref } from 'vue'; +import AHMContainer from '/@/components/layout/AHMContainer.vue'; +import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue'; +import { deepClone } from '/@/utils/other'; +import { convertListToTree } from '/@/utils/util'; +import { analyzeMap } from '/@/views/types/catalog/index'; +const props = defineProps({ + request: { + type: Function as PropType<(config: AxiosRequestConfig<any>) => Promise<AxiosResponse<any, any>>>, + }, +}); +const state = reactive({ + tableParams: { + PageIndex: 1, + PageSize: 10, + }, + tableTotal: 0, +}); +//#region ====================== 宸︿晶鏍戞暟鎹紝tree init ====================== +const leftTreeRef = ref(null); +const treeLoading = ref(false); +const listTreeData = ref([]); +const currentTreeNode = ref(null); +const currentListID = computed(() => currentTreeNode.value?.ID); +const handleClickNode = (data) => { + nextTick(() => { + leftTreeRef.value?.treeRef.setCurrentKey(data.ID); + }); + currentTreeNode.value = data; + getCategoryTableData(); +}; +const getListTreeData = async (selectFirst = false) => { + return; + treeLoading.value = true; + const res = await GetAll(props.request).finally(() => { + treeLoading.value = false; + }); + if (res?.Code === 0) { + const resData = (res.Data || []) as []; + listTreeData.value = convertListToTree(resData); + if (selectFirst) { + const firstListTreeNode = listTreeData.value[0]; + if (firstListTreeNode) { + handleClickNode(firstListTreeNode); + } else { + categoryTableData.value = []; + } + } else { + currentTreeNode.value && handleClickNode(currentTreeNode.value); + } + } else { + ElMessage.error('鑾峰彇鍏紡缁勫け璐�' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } +}; +//#endregion +//#region ====================== 鑾峰彇銆佸垹闄よ〃鏍兼暟鎹� ====================== +const formulaTableLoading = ref(false); +const categoryTableData = ref([]); +const isFormulaTableDrag = ref(false); +const getCategoryTableData = async () => { + formulaTableLoading.value = true; + const res = await GetByGroupID({ GroupID: currentListID.value }, props.request).finally(() => { + formulaTableLoading.value = false; + }); + if (res?.Code === 0) { + const resData = (res.Data || []) as []; + categoryTableData.value = resData; + } else { + ElMessage.error('鑾峰彇鍏紡澶辫触' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } +}; +const deleteCurrentFormulaRow = (row: any) => { + ElMessageBox.confirm(`纭畾鍒犻櫎鍏紡锛氥��${row.Name}銆�?`, '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning', + }).then(async () => { + const res = await TableDelete( + { + ID: row.ID, + }, + props.request + ); + if (res?.Code === 0) { + if (res.Data) { + ElMessage.success('鍒犻櫎鍏紡鎴愬姛'); + getCategoryTableData(); + } else { + ElMessage.error('鍒犻櫎鍏紡澶辫触'); + } + } else { + ElMessage.error('鍒犻櫎鍏紡澶辫触' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } + }); +}; +//鏁版嵁鍒楄〃椤甸潰鍒嗛〉 + +const handleSizeChange = (val) => { + state.tableParams.PageSize = val; + getCategoryTableData(); +}; +const handleCurrentChange = (val) => { + state.tableParams.PageIndex = val; + getCategoryTableData(); +}; +//#endregion + +//#endregion + +//#region ====================== 鎼滅储琛ㄦ牸锛屽琛ㄦ牸鎺掑簭 ====================== +const formulaQueryParams = ref({ + Name: '', + Code: '', +}); +//#endregion + +//#region ====================== 澧炲姞銆佷慨鏀硅〃鏍艰褰曟搷浣�, dialog init====================== +const isEditFormulaDialog = ref(false); +const formulaDialogTitle = computed(() => { + return isEditFormulaDialog.value ? '淇敼鍏紡' : '娣诲姞鍏紡'; +}); +const formulaDialogHeaderIcon = computed(() => { + return isEditFormulaDialog.value ? 'ele-Edit' : 'ele-Plus'; +}); +const formulaDialogFormValue = ref(null); +const formulaDialogIsShow = ref(false); +const formulaDialogFormRef = ref<FormInstance>(null); +const formulaInitialCode = ref(''); + +const formulaDialogFormRules = ref<FormRules>({ + Name: [{ required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' }], + FormatType: [{ required: true, message: '璇烽�夋嫨杩斿洖绫诲瀷', trigger: 'change' }], +}); +const openOperateFormulaDialog = (row?) => { + if (row) { + isEditFormulaDialog.value = true; + const { ID, Name, FormatType, MeasureTypes, CronTypes, SourceTypes, Code, Description } = row; + formulaInitialCode.value = Code; + formulaDialogFormValue.value = deepClone({ ID, Name, FormatType, MeasureTypes, CronTypes, SourceTypes, Code, Description }); + } else { + isEditFormulaDialog.value = false; + formulaInitialCode.value = ''; + + formulaDialogFormValue.value = { + GroupID: currentListID.value, + FormatType: null, + MeasureTypes: [], + CronTypes: [], + SourceTypes: [], + Name: '', + Code: '', + Description: '', + }; + } + formulaDialogIsShow.value = true; +}; + +const closeFormulaDialog = () => { + formulaDialogIsShow.value = false; + formulaDialogFormRef.value.clearValidate(); +}; + +const submitFormulaFormValue = async () => { + const valid = await formulaDialogFormRef.value.validate().catch(() => {}); + if (!valid) return; + + if (isEditFormulaDialog.value) { + const res = await TableUpdate(formulaDialogFormValue.value, props.request); + if (res?.Code === 0) { + if (res.Data) { + getCategoryTableData(); + closeFormulaDialog(); + ElMessage.success('淇敼鍏紡鎴愬姛'); + } else { + ElMessage.error('淇敼鍏紡澶辫触'); + } + } else { + ElMessage.error('淇敼鍏紡澶辫触' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } + } else { + const res = await TableInsert(formulaDialogFormValue.value, props.request); + if (res?.Code === 0) { + if (res.Data) { + getCategoryTableData(); + closeFormulaDialog(); + ElMessage.success('娣诲姞鍏紡鎴愬姛'); + } else { + ElMessage.error('娣诲姞鍏紡澶辫触'); + } + } else { + ElMessage.error('娣诲姞鍏紡澶辫触' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } + } +}; +//#endregion + +//#region ====================== 鍒犻櫎宸︿晶鏍戝叕寮忕粍鏁版嵁 ====================== + +const deleteCurrentFormulaGroup = (row: any) => { + ElMessageBox.confirm(`纭畾鍒犻櫎鍏紡缁勶細銆�${row.Name}銆�?`, '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning', + }).then(async () => { + const res = await DeleteGroupGetByID( + { + ID: row.ID, + }, + props.request + ); + if (res?.Code === 0) { + if (res.Data) { + ElMessage.success('鍒犻櫎鍏紡缁勬垚鍔�'); + getListTreeData(true); + } else { + ElMessage.error('鍒犻櫎鍏紡缁勫け璐�'); + } + } else { + ElMessage.error('鍒犻櫎鍏紡缁勫け璐�' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } + }); +}; +//#endregion + +//#region ====================== 澧炲姞銆佸垹闄ゅ叕寮忕粍鎿嶄綔, dialog init====================== +const isEditFormulaGroupDialog = ref(false); +const formulaGroupDialogTitle = computed(() => { + return isEditFormulaGroupDialog.value ? '淇敼鍏紡缁�' : '娣诲姞鍏紡缁�'; +}); +const formulaGroupDialogHeaderIcon = computed(() => { + return isEditFormulaGroupDialog.value ? 'ele-Edit' : 'ele-Plus'; +}); +const formulaGroupDialogFormValue = ref(null); +const formulaGroupDialogIsShow = ref(false); + +const formulaGroupDialogFormRef = ref<FormInstance>(null); + +const formulaGroupDialogFormRules = ref<FormRules>({ + Name: [{ required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' }], +}); +const openOperateFormulaGroupDialog = (data?) => { + if (data) { + isEditFormulaGroupDialog.value = true; + const { ID, Name, Code, Description } = data; + formulaGroupDialogFormValue.value = deepClone({ ID, Name, Code, Description }); + } else { + isEditFormulaGroupDialog.value = false; + formulaGroupDialogFormValue.value = { Name: '', ParentID: '', Code: '', Description: '' }; + } + formulaGroupDialogIsShow.value = true; +}; + +const closeFormulaGroupDialog = () => { + formulaGroupDialogIsShow.value = false; + formulaGroupDialogFormRef.value.clearValidate(); +}; + +const submitFormulaGroupFormValue = async () => { + const valid = await formulaGroupDialogFormRef.value.validate().catch(() => {}); + if (!valid) return; + + if (isEditFormulaGroupDialog.value) { + const res = await UpdateGroupGetByID(formulaGroupDialogFormValue.value, props.request); + if (res?.Code === 0) { + if (res.Data) { + getListTreeData(); + closeFormulaGroupDialog(); + ElMessage.success('淇敼鍏紡缁勬垚鍔�'); + } else { + ElMessage.error('淇敼鍏紡缁勫け璐�'); + } + } else { + ElMessage.error('淇敼鍏紡缁勫け璐�' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } + } else { + const res = await InsertGroup( + { ...formulaGroupDialogFormValue.value, ParentID: formulaGroupDialogFormValue.value.ParentID || '0' }, + props.request + ); + if (res?.Code === 0) { + if (res.Data) { + getListTreeData(); + closeFormulaGroupDialog(); + ElMessage.success('娣诲姞鍏紡缁勬垚鍔�'); + } else { + ElMessage.error('娣诲姞鍏紡缁勫け璐�'); + } + } else { + ElMessage.error('娣诲姞鍏紡缁勫け璐�' + (res?.Message ? `锛�${JSON.stringify(res.Message)}` : '')); + } + } +}; +//#endregion + +//#region ====================== 淇敼鐖剁骇 ====================== +const parentDlgIsShow = ref(false); +const parentDlgMapRow = ref(null); +const openParentDlg = (row?) => { + parentDlgMapRow.value = row; + parentDlgIsShow.value = true; +}; +const submitParentForm = (res) => { + getListTreeData(); +}; +//#endregion + +//#region ====================== updateModuleDlg ====================== +const updateModuleDlgIsShow = ref(false); +const updateModuleMapRow = ref(null); +const updateModuleFormRef = ref(null); +const updateModuleTitle = computed(() => `銆�${updateModuleMapRow.value?.Name}銆戔�斺�� 淇敼鎵�灞炲垎缁刞); +const updateModuleFormRules = ref<FormRules>({ + GroupID: [{ required: true, message: '璇烽�夋嫨鍒嗙粍', trigger: 'change' }], +}); + +const updateModuleOptions = computed(() => { + return listTreeData.value; +}); +const updateModuleFormValue = ref(null); + +const closeUpdateModuleDlg = () => { + updateModuleDlgIsShow.value = false; + updateModuleFormRef.value.clearValidate(); +}; + +const submitUpdateModule = async () => { + const valid = await updateModuleFormRef.value.validate().catch(() => {}); + if (!valid) return; + if (updateModuleFormValue.value.GroupID === currentListID.value) { + ElMessage.info('鏈慨鏀�'); + return; + } + const res = await UpdateFormulaGroupID(updateModuleFormValue.value); + + if (res?.Data) { + ElMessage.success('淇敼鎴愬姛锛�'); + getCategoryTableData(); + closeUpdateModuleDlg(); + } else { + ElMessage.error('淇敼澶辫触'); + } +}; + +//#endregion + +//#region ====================== 鎸傝浇鏃惰幏鍙栧垵濮嬫暟鎹� ====================== +onMounted(() => { + getListTreeData(true); +}); +//#endregion +</script> +<style scoped lang="scss"> +:deep(.el-card__body) { + padding-bottom: unset; +} +</style> diff --git a/src/views/types/catalog/index.ts b/src/views/types/catalog/index.ts new file mode 100644 index 0000000..7f3e631 --- /dev/null +++ b/src/views/types/catalog/index.ts @@ -0,0 +1,21 @@ +export enum AnalyzeWay { + All = 0, + PendingAnalysis = 1, + AnalyzingInProgress = 2, + ImportCompleted = 3, + AnalysisFailed = 4, + Deleting = 5, + ImportingInProgress = 6, + ImportFailed = 7, +} + +export const analyzeMap = { + [AnalyzeWay.All]: '鍏ㄩ儴', + [AnalyzeWay.PendingAnalysis]: '寰呰В鏋�', + [AnalyzeWay.AnalyzingInProgress]: '瑙f瀽涓�', + [AnalyzeWay.ImportCompleted]: '瀵煎叆瀹屾垚', + [AnalyzeWay.AnalysisFailed]: '瑙f瀽澶辫触', + [AnalyzeWay.Deleting]: '鍒犻櫎涓�', + [AnalyzeWay.ImportingInProgress]: '瀵煎叆涓�', + [AnalyzeWay.ImportFailed]: '瀵煎叆澶辫触', +} as const; -- Gitblit v1.9.3