chore: fix type:check error (#3139)
| | |
| | | /** |
| | | * @description: Request list interface parameters |
| | | */ |
| | | export type DemoParams = BasicPageParams; |
| | | export type DemoParams = Partial<BasicPageParams>; |
| | | |
| | | export interface DemoListItem { |
| | | id: string; |
| | |
| | | return form.submit(); |
| | | }, |
| | | |
| | | validate: async (nameList?: NamePath[] | false): Promise<Recordable> => { |
| | | validate: async <T = Recordable>(nameList?: NamePath[] | false): Promise<T> => { |
| | | const form = await getForm(); |
| | | return form.validate(nameList); |
| | | }, |
| | |
| | | first?: boolean | undefined, |
| | | ) => Promise<void>; |
| | | validateFields: (nameList?: NamePath[]) => Promise<any>; |
| | | validate: <T = any>(nameList?: NamePath[] | false) => Promise<T>; |
| | | validate: <T = Recordable>(nameList?: NamePath[] | false) => Promise<T>; |
| | | scrollToField: (name: NamePath, options?: ScrollOptions) => Promise<void>; |
| | | } |
| | | |
| | |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { defineProps, onBeforeUnmount, onDeactivated, Ref, ref, unref, watch } from 'vue'; |
| | | import { onBeforeUnmount, onDeactivated, Ref, ref, unref, watch } from 'vue'; |
| | | import VditorPreview from 'vditor/dist/method.min'; |
| | | import { onMountedOrActivated } from '@vben/hooks'; |
| | | import { useRootSetting } from '/@/hooks/setting/useRootSetting'; |
| | |
| | | <script lang="ts"> |
| | | import type { SizeType } from '../../types/table'; |
| | | import { defineComponent, ref } from 'vue'; |
| | | import { Tooltip, Dropdown, Menu } from 'ant-design-vue'; |
| | | import { Tooltip, Dropdown, Menu, type MenuProps } from 'ant-design-vue'; |
| | | import { ColumnHeightOutlined } from '@ant-design/icons-vue'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import { useTableContext } from '../../hooks/useTableContext'; |
| | |
| | | |
| | | const selectedKeysRef = ref<SizeType[]>([table.getSize()]); |
| | | |
| | | function handleTitleClick({ key }: { key: SizeType }) { |
| | | selectedKeysRef.value = [key]; |
| | | const handleTitleClick: MenuProps['onClick'] = ({ key }) => { |
| | | selectedKeysRef.value = [key as SizeType]; |
| | | table.setProps({ |
| | | size: key, |
| | | size: key as SizeType, |
| | | }); |
| | | } |
| | | }; |
| | | |
| | | return { |
| | | handleTitleClick, |
| | |
| | | } |
| | | |
| | | // Update node |
| | | function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) { |
| | | function updateNodeByKey(key: string, node: Omit<TreeDataItem, 'key'>, list?: TreeDataItem[]) { |
| | | if (!key) return; |
| | | const treeData = list || unref(treeDataRef); |
| | | const { key: keyField, children: childrenField } = unref(getFieldNames); |
| | |
| | | if (!key && key !== 0) return null; |
| | | const treeData = list || unref(treeDataRef); |
| | | const { key: keyField, children: childrenField } = unref(getFieldNames); |
| | | if (!keyField) return; |
| | | if (!keyField) return null; |
| | | treeData.forEach((item) => { |
| | | if (selectedNode?.key || selectedNode?.key === 0) return selectedNode; |
| | | if (item[keyField] === key) { |
| | |
| | | <BasicTable @register="registerTable" @edit-change="handleEditChange"> |
| | | <template #bodyCell="{ column, record }"> |
| | | <template v-if="column.key === 'action'"> |
| | | <TableAction :actions="createActions(record, column)" /> |
| | | <TableAction :actions="createActions(record)" /> |
| | | </template> |
| | | </template> |
| | | </BasicTable> |
| | |
| | | data.push(addRow); |
| | | } |
| | | |
| | | function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] { |
| | | function createActions(record: EditRecordRow): ActionItem[] { |
| | | if (!record.editable) { |
| | | return [ |
| | | { |
| | |
| | | return [ |
| | | { |
| | | label: '保存', |
| | | onClick: handleSave.bind(null, record, column), |
| | | onClick: handleSave.bind(null, record), |
| | | }, |
| | | { |
| | | label: '取消', |
| | | popConfirm: { |
| | | title: '是否取消编辑', |
| | | confirm: handleCancel.bind(null, record, column), |
| | | confirm: handleCancel.bind(null, record), |
| | | }, |
| | | }, |
| | | ]; |
| | |
| | | <BasicTable @register="registerTable" @edit-change="onEditChange"> |
| | | <template #bodyCell="{ column, record }"> |
| | | <template v-if="column.key === 'action'"> |
| | | <TableAction :actions="createActions(record, column)" /> |
| | | <TableAction :actions="createActions(record)" /> |
| | | </template> |
| | | </template> |
| | | </BasicTable> |
| | |
| | | } |
| | | } |
| | | |
| | | function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] { |
| | | function createActions(record: EditRecordRow): ActionItem[] { |
| | | if (!record.editable) { |
| | | return [ |
| | | { |
| | |
| | | return [ |
| | | { |
| | | label: '保存', |
| | | onClick: handleSave.bind(null, record, column), |
| | | onClick: handleSave.bind(null, record), |
| | | }, |
| | | { |
| | | label: '取消', |
| | | popConfirm: { |
| | | title: '是否取消编辑', |
| | | confirm: handleCancel.bind(null, record, column), |
| | | confirm: handleCancel.bind(null, record), |
| | | }, |
| | | }, |
| | | ]; |
| | |
| | | const fApi = useVModel(props, 'fApi', emit); |
| | | |
| | | const { submit, validate, clearValidate, resetFields, validateField } = |
| | | useFormInstanceMethods(props, formModelNew, context, eFormModel); |
| | | useFormInstanceMethods<['submit', 'change', 'update:fApi', 'update:formModel']>( |
| | | props, |
| | | formModelNew, |
| | | context, |
| | | eFormModel, |
| | | ); |
| | | |
| | | const { linkOn, ...methods } = useVFormMethods( |
| | | const { linkOn, ...methods } = useVFormMethods< |
| | | ['submit', 'change', 'update:fApi', 'update:formModel'] |
| | | >( |
| | | { formConfig: props.formConfig, formData: props.formModel } as unknown as IProps, |
| | | context, |
| | | eFormModel, |
| | |
| | | import { IAnyObject } from '../typings/base-type'; |
| | | import { Ref, SetupContext, getCurrentInstance, toRaw } from 'vue'; |
| | | import { Ref, SetupContext, getCurrentInstance, toRaw, type EmitsOptions } from 'vue'; |
| | | import { cloneDeep, forOwn, isFunction } from 'lodash-es'; |
| | | import { AForm, IVFormComponent } from '../typings/v-form-component'; |
| | | import { Form } from 'ant-design-vue'; |
| | | |
| | | export function useFormInstanceMethods( |
| | | export function useFormInstanceMethods<E extends EmitsOptions = EmitsOptions>( |
| | | props: IAnyObject, |
| | | formdata, |
| | | context: Partial<SetupContext>, |
| | | context: SetupContext<E>, |
| | | _formInstance: Ref<AForm | null>, |
| | | ) { |
| | | /** |
| | |
| | | import { Ref, SetupContext } from 'vue'; |
| | | import { Ref, SetupContext, type EmitsOptions } from 'vue'; |
| | | import { IVFormComponent, IFormConfig, AForm } from '../typings/v-form-component'; |
| | | import { findFormItem, formItemsForEach } from '../utils'; |
| | | import { cloneDeep, isFunction } from 'lodash-es'; |
| | |
| | | getData: IGetData; |
| | | disable: IDisable; |
| | | } |
| | | export function useVFormMethods( |
| | | export function useVFormMethods<E extends EmitsOptions = EmitsOptions>( |
| | | props: IProps, |
| | | _context: Partial<SetupContext>, |
| | | _context: SetupContext<E>, |
| | | formInstance: Ref<AForm | null>, |
| | | formInstanceMethods: Partial<IFormInstanceMethods>, |
| | | ): IVFormMethods { |
| | |
| | | // __APP__: App<Element>; |
| | | // } |
| | | |
| | | // fix FullScreen type error |
| | | interface Document { |
| | | mozFullScreenElement?: Element; |
| | | msFullscreenElement?: Element; |
| | | webkitFullscreenElement?: Element; |
| | | } |
| | | |
| | | // vue |
| | | declare type PropType<T> = VuePropType<T>; |
| | | declare type VueNode = VNodeChild | JSX.Element; |