@@ -46,7 +46,7 @@ import FieldsTree from './FieldsTree.vue'
4646import FieldsTreePreview from ' ./FieldsTreePreview.vue'
4747import MqlEditor from ' ./MqlEditor.vue'
4848
49- import { getTableOptions , useDrawer } from ' ./shared'
49+ import { getTableOptions , PARAM_NAME_PATTERN , useDrawer } from ' ./shared'
5050import type { InputInstance , SelectInstance , TableInstance } from ' element-plus'
5151
5252// Types
@@ -640,6 +640,45 @@ const tabChanged = (tab: string | number) => {
640640
641641const handleChangeApiType = () => {
642642 form .value .params = getDefaultParams (form .value .apiType )
643+ focusedParamNameIndex .value = null
644+ hoveredParamNameIndex .value = null
645+ }
646+
647+ const focusedParamNameIndex = ref <number | null >(null )
648+ const hoveredParamNameIndex = ref <number | null >(null )
649+
650+ const getParamNameError = (index : number ) => {
651+ const paramName = form .value .params ?.[index ]?.name || ' '
652+
653+ if (! paramName .trim ()) {
654+ return t (' packages_business_data_server_drawer_qingshurucanshu' )
655+ }
656+
657+ if (! PARAM_NAME_PATTERN .test (paramName )) {
658+ return t (' packages_business_data_server_drawer_geshicuowu' )
659+ }
660+
661+ return ' '
662+ }
663+
664+ const isParamNameTipVisible = (index : number ) => {
665+ return (
666+ !! getParamNameError (index ) &&
667+ (focusedParamNameIndex .value === index ||
668+ hoveredParamNameIndex .value === index )
669+ )
670+ }
671+
672+ const hideFocusedParamNameTip = (index : number ) => {
673+ if (focusedParamNameIndex .value === index ) {
674+ focusedParamNameIndex .value = null
675+ }
676+ }
677+
678+ const hideHoveredParamNameTip = (index : number ) => {
679+ if (hoveredParamNameIndex .value === index ) {
680+ hoveredParamNameIndex .value = null
681+ }
643682}
644683
645684const handleChangeTable = () => {
@@ -1747,16 +1786,33 @@ provide('form', form)
17471786 min-width="80"
17481787 >
17491788 <template #default =" { row , $index } " >
1750- <div v-if =" editable(row, form)" >
1751- <ElFormItem
1752- :prop =" ` params.${$index }.name ` "
1753- :error =" ! form .params [$index ].name ? ' true' : ' ' "
1754- :show-message =" false "
1755- :rules =" rules .param "
1756- class="mb-0"
1789+ <div
1790+ v-if =" editable(row, form)"
1791+ @mouseenter =" hoveredParamNameIndex = $index"
1792+ @mouseleave =" hideHoveredParamNameTip($index)"
1793+ >
1794+ <ElTooltip
1795+ :disabled =" ! getParamNameError ($index )"
1796+ :content =" getParamNameError ($index )"
1797+ :hide-after =" 0 "
1798+ transition="none"
1799+ :visible =" isParamNameTipVisible ($index )"
1800+ placement="top"
17571801 >
1758- <ElInput v-model =" form .params [$index ].name " />
1759- </ElFormItem >
1802+ <ElFormItem
1803+ :prop =" ` params.${$index }.name ` "
1804+ :error =" getParamNameError ($index )"
1805+ :show-message =" false "
1806+ :rules =" rules .param "
1807+ class="mb-0"
1808+ >
1809+ <ElInput
1810+ v-model =" form .params [$index ].name "
1811+ @focus =" focusedParamNameIndex = $index "
1812+ @blur =" hideFocusedParamNameTip ($index )"
1813+ />
1814+ </ElFormItem >
1815+ </ElTooltip >
17601816 </div >
17611817 <div v-else >{{ row.name }}</div >
17621818 </template >
@@ -1800,7 +1856,7 @@ provide('form', form)
18001856 <ElTableColumn
18011857 :label =" $t (' packages_business_data_server_drawer_required' )"
18021858 prop="required"
1803- min-width="60 "
1859+ min-width="80 "
18041860 align="center"
18051861 >
18061862 <template #default =" { row , $index } " >
0 commit comments