@alibarbar/components 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FatTable.vue.d.ts","sourceRoot":"","sources":["../../../src/components/FatTable/FatTable.vue"],"names":[],"mappings":"AAgJA;AAEA,OAAO,+BAA+B,CAAA;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAa,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAA2B,MAAM,SAAS,CAAA;yBAIrH,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzG,aAAa,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,OAAO,CAAC,EACjD,YAAY,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EACzF,eAAe,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EACjE;
|
|
1
|
+
{"version":3,"file":"FatTable.vue.d.ts","sourceRoot":"","sources":["../../../src/components/FatTable/FatTable.vue"],"names":[],"mappings":"AAgJA;AAEA,OAAO,+BAA+B,CAAA;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAa,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAA2B,MAAM,SAAS,CAAA;yBAIrH,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzG,aAAa,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,OAAO,CAAC,EACjD,YAAY,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EACzF,eAAe,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EACjE;WAu0BO,cAAc,CAAC,gCAAgC,CAAC;;;;;0IAAkE,6EAAkC,CAAC,6GAAwD;oBACpM,OAAO,KAAK,EAAE,gBAAgB;QAjjB5C;;WAEG;;QAMH;;WAEG;;QASH;;WAEG;gCAxJwB,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;MAorBY,GAAG,IAAI;WACpE,GAAG;WACH,UAAU;;;UA5CqE,GAAG;;;;;UAClB,GAAG,GA2ClC;;EAGpC,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,CAAA;CAAE;AAl1BzE,wBAk1B2E;AAQ3E,KAAK,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,oBAAoB,CAAA;AAG3B,OAAO,QAAQ,MAAM,uBAAuB,CAAA;AAC5C,OAAO,OAAO,MAAM,sBAAsB,CAAA;AAC1C,OAAO,cAAc,MAAM,6BAA6B,CAAA;AACxD,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAGtD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,kCAAkC,CAAA;AAGhD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AAGxC,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;;mBAWD,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,oBAAoB,CAAA;AAG3B,OAAO,QAAQ,MAAM,uBAAuB,CAAA;AAC5C,OAAO,OAAO,MAAM,sBAAsB,CAAA;AAC1C,OAAO,cAAc,MAAM,6BAA6B,CAAA;AACxD,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAGtD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,kCAAkC,CAAA;AAGhD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AAGxC,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;;mBAWD,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAsB2kqC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAPrmqC,wBAMC"}
|
package/dist/index.js
CHANGED
|
@@ -390,7 +390,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
390
390
|
var _a;
|
|
391
391
|
return (_a = column.renderHeader) == null ? void 0 : _a.call(column, column, index2);
|
|
392
392
|
})))
|
|
393
|
-
])) : (openBlock(), createElementBlock("span", _hoisted_6$2, toDisplayString(
|
|
393
|
+
])) : (openBlock(), createElementBlock("span", _hoisted_6$2, toDisplayString(column.label), 1)),
|
|
394
394
|
column.sortable ? (openBlock(), createElementBlock("span", {
|
|
395
395
|
key: 2,
|
|
396
396
|
class: "fat-table__sort",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/i18n/locales/zh-CN.ts","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/components/FatTable/FatTable.vue","../src/components/FatTable/index.ts","../src/components/FatForm/FatForm.vue","../src/components/FatForm/FatFormItem.vue","../src/components/FatForm/index.ts","../src/components/FatTableLayout/FatTableLayout.vue","../src/components/FatTableLayout/index.ts","../src/components/FatFormLayout/FatFormLayout.vue","../src/components/FatFormLayout/index.ts","../src/utils/index.ts","../src/hooks/index.ts","../src/index.ts"],"sourcesContent":["export default {\n common: {\n confirm: '确认',\n cancel: '取消',\n submit: '提交',\n reset: '重置',\n search: '搜索',\n add: '新增',\n edit: '编辑',\n delete: '删除',\n save: '保存',\n loading: '加载中...',\n noData: '暂无数据'\n },\n table: {\n total: '共 {total} 条',\n pageSize: '每页显示',\n page: '页',\n goto: '前往',\n prev: '上一页',\n next: '下一页',\n pageSizeOptions: ['10', '20', '50', '100']\n },\n form: {\n required: '此项为必填项',\n invalidFormat: '格式不正确',\n submitSuccess: '提交成功',\n submitFailed: '提交失败'\n }\n}\n","export default {\n common: {\n confirm: 'Confirm',\n cancel: 'Cancel',\n submit: 'Submit',\n reset: 'Reset',\n search: 'Search',\n add: 'Add',\n edit: 'Edit',\n delete: 'Delete',\n save: 'Save',\n loading: 'Loading...',\n noData: 'No Data'\n },\n table: {\n total: 'Total {total} items',\n pageSize: 'Items per page',\n page: 'Page',\n goto: 'Go to',\n prev: 'Previous',\n next: 'Next',\n pageSizeOptions: ['10', '20', '50', '100']\n },\n form: {\n required: 'This field is required',\n invalidFormat: 'Invalid format',\n submitSuccess: 'Submit successful',\n submitFailed: 'Submit failed'\n }\n}\n","import { createI18n } from 'vue-i18n'\nimport zhCN from './locales/zh-CN'\nimport enUS from './locales/en-US'\n\nexport type Locale = 'zh-CN' | 'en-US'\n\nconst messages = {\n 'zh-CN': zhCN,\n 'en-US': enUS\n}\n\nexport const i18n = createI18n({\n legacy: false,\n locale: 'zh-CN',\n fallbackLocale: 'en-US',\n messages\n})\n\nexport default i18n\n","<template>\n <div class=\"fat-table-wrapper\">\n <div class=\"fat-table\" :style=\"tableStyle\">\n <table class=\"fat-table__inner\">\n <thead class=\"fat-table__header\">\n <tr>\n <th\n v-for=\"(column, index) in columns\"\n :key=\"getColumnKey(column, index)\"\n :style=\"getColumnStyle(column)\"\n :class=\"getColumnClass(column)\"\n >\n <div class=\"fat-table__cell\">\n <slot\n :name=\"`header-${getColumnKey(column, index)}`\"\n :column=\"column\"\n :index=\"index\"\n >\n <span v-if=\"column.renderHeader\">\n <component\n :is=\"() => column.renderHeader?.(column, index)\"\n />\n </span>\n <span v-else>{{ t(column.label || '') || column.label }}</span>\n <span\n v-if=\"column.sortable\"\n class=\"fat-table__sort\"\n @click=\"handleSort(column)\"\n >\n <span\n class=\"fat-table__sort-icon\"\n :class=\"{ active: sortState.prop === column.prop && sortState.order === 'ascending' }\"\n >\n ↑\n </span>\n <span\n class=\"fat-table__sort-icon\"\n :class=\"{ active: sortState.prop === column.prop && sortState.order === 'descending' }\"\n >\n ↓\n </span>\n </span>\n </slot>\n </div>\n </th>\n </tr>\n </thead>\n <tbody class=\"fat-table__body\">\n <tr\n v-if=\"loading\"\n class=\"fat-table__loading-row\"\n >\n <td :colspan=\"columns.length\" class=\"fat-table__loading-cell\">\n {{ t('common.loading') }}\n </td>\n </tr>\n <tr\n v-else-if=\"!list || list.length === 0\"\n class=\"fat-table__empty-row\"\n >\n <td :colspan=\"columns.length\" class=\"fat-table__empty-cell\">\n {{ emptyText || t('common.noData') }}\n </td>\n </tr>\n <tr\n v-else\n v-for=\"(row, rowIndex) in list\"\n :key=\"getRowKey(row, rowIndex)\"\n :class=\"[\n 'fat-table__row',\n { 'fat-table__row--stripe': stripe && rowIndex % 2 === 1 }\n ]\"\n @click=\"handleRowClick(row, $event)\"\n >\n <td\n v-for=\"(column, colIndex) in columns\"\n :key=\"getColumnKey(column, colIndex)\"\n :class=\"getCellClass(column)\"\n :style=\"getColumnStyle(column)\"\n >\n <div class=\"fat-table__cell\">\n <slot\n :name=\"`cell-${getColumnKey(column, colIndex)}`\"\n :row=\"row\"\n :column=\"column\"\n :value=\"getCellValue(row, column)\"\n :index=\"rowIndex\"\n >\n <span v-if=\"column.render\">\n <component\n :is=\"() => column.render?.(getCellValue(row, column), row, rowIndex)\"\n />\n </span>\n <span v-else>{{ formatCellValue(row, column) }}</span>\n </slot>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div\n v-if=\"pagination\"\n class=\"fat-table__pagination\"\n >\n <div class=\"fat-table__pagination-info\">\n {{ t('table.total', { total: paginationData.total }) }}\n </div>\n <div class=\"fat-table__pagination-controls\">\n <select\n :value=\"paginationData.pageSize\"\n class=\"fat-table__page-size-select\"\n @change=\"handlePageSizeChange($event)\"\n >\n <option\n v-for=\"size in pageSizes\"\n :key=\"size\"\n :value=\"size\"\n >\n {{ size }}\n </option>\n </select>\n <span class=\"fat-table__pagination-text\">{{ t('table.pageSize') }}</span>\n <button\n class=\"fat-table__pagination-btn\"\n :disabled=\"paginationData.currentPage === 1\"\n @click=\"handlePageChange(paginationData.currentPage - 1)\"\n >\n {{ t('table.prev') }}\n </button>\n <span class=\"fat-table__pagination-text\">\n {{ t('table.page') }} {{ paginationData.currentPage }} / {{ totalPages }}\n </span>\n <button\n class=\"fat-table__pagination-btn\"\n :disabled=\"paginationData.currentPage >= totalPages\"\n @click=\"handlePageChange(paginationData.currentPage + 1)\"\n >\n {{ t('table.next') }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any, S extends Record<string, any> = Record<string, any>\">\nimport '../../../style/fat-table.scss'\nimport { ref, computed, reactive, watch, onMounted } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { FatTableColumn, SortOrder, FatTableProps, FatTableEmits, FatTableRequestParams, FatTableRequestResponse } from './types'\n\n\nconst props = withDefaults(defineProps<FatTableProps<T, S>>(), {\n data: () => [],\n loading: false,\n pagination: false,\n stripe: false,\n border: true,\n size: 'default',\n emptyText: '',\n requestOnMounted: true,\n requestOnQueryChange: true,\n requestOnSortChange: true\n})\n\nconst emit = defineEmits<FatTableEmits<T, S>>()\n\nconst { t } = useI18n()\n\n// 内部状态管理(当使用 fetchHandler 时)\nconst internalList = ref<T[]>([]) as { value: T[] }\nconst internalLoading = ref(false)\nconst internalPagination = reactive({\n currentPage: 1,\n pageSize: 10,\n total: 0\n})\n\n// 查询参数\nconst query = computed(() => props.query || ({} as S))\n\n// 排序状态\nconst sortState = reactive<{ prop: string; order: SortOrder }>({\n prop: '',\n order: null\n})\n\n// 判断是否使用 fetchHandler 模式\nconst useFetchHandler = computed(() => !!props.fetchHandler)\n\n// 数据列表:如果使用 fetchHandler,使用内部数据;否则使用外部 data\nconst list = computed(() => {\n if (useFetchHandler.value) {\n return internalList.value\n }\n return props.data || []\n})\n\n// 加载状态:如果使用 fetchHandler,使用内部 loading;否则使用外部 loading\nconst loading = computed(() => {\n if (useFetchHandler.value) {\n return internalLoading.value\n }\n return props.loading\n})\n\n// 分页数据\nconst paginationData = computed(() => {\n if (useFetchHandler.value) {\n return internalPagination\n }\n if (typeof props.pagination === 'boolean') {\n return {\n currentPage: 1,\n pageSize: 10,\n total: list.value.length\n }\n }\n return props.pagination\n})\n\nconst pageSizes = computed(() => {\n if (typeof props.pagination === 'object' && props.pagination.pageSizes) {\n return props.pagination.pageSizes\n }\n return [10, 20, 50, 100]\n})\n\nconst totalPages = computed(() => {\n const total = paginationData.value.total\n const pageSize = paginationData.value.pageSize\n return Math.ceil(total / pageSize)\n})\n\nconst tableStyle = computed(() => {\n const style: Record<string, string> = {}\n if (props.height) {\n style.height = typeof props.height === 'number' ? `${props.height}px` : props.height\n }\n if (props.maxHeight) {\n style.maxHeight = typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight\n }\n return style\n})\n\nconst getColumnKey = (column: FatTableColumn<T, S>, index: number) => {\n return column.key || column.prop || `column-${index}`\n}\n\nconst getRowKey = (row: T, index: number) => {\n if (typeof props.rowKey === 'function') {\n return props.rowKey(row)\n }\n if (typeof props.rowKey === 'string') {\n return (row as any)[props.rowKey]\n }\n return index\n}\n\nconst getColumnStyle = (column: FatTableColumn<T, S>) => {\n const style: Record<string, string> = {}\n if (column.width) {\n style.width = typeof column.width === 'number' ? `${column.width}px` : column.width\n }\n if (column.minWidth) {\n style.minWidth = typeof column.minWidth === 'number' ? `${column.minWidth}px` : column.minWidth\n }\n if (column.align) {\n style.textAlign = column.align\n }\n return style\n}\n\nconst getColumnClass = (column: FatTableColumn<T, S>) => {\n return {\n 'fat-table__header-cell--fixed-left': column.fixed === 'left' || (column.fixed === true),\n 'fat-table__header-cell--fixed-right': column.fixed === 'right'\n }\n}\n\nconst getCellClass = (column: FatTableColumn<T, S>) => {\n return {\n 'fat-table__cell--fixed-left': column.fixed === 'left' || (column.fixed === true),\n 'fat-table__cell--fixed-right': column.fixed === 'right'\n }\n}\n\nconst getCellValue = (row: T, column: FatTableColumn<T, S>) => {\n if (!column.prop) return undefined\n return (row as any)[column.prop]\n}\n\nconst formatCellValue = (row: T, column: FatTableColumn<T, S>) => {\n const value = getCellValue(row, column)\n return value ?? ''\n}\n\n// 获取请求参数\nconst getRequestParams = (): FatTableRequestParams<T, S> => {\n const page = paginationData.value.currentPage\n const pageSize = paginationData.value.pageSize\n \n return {\n pagination: {\n pageSize,\n page,\n offset: (page - 1) * pageSize\n },\n sort: sortState.prop && sortState.order ? {\n prop: sortState.prop,\n order: sortState.order\n } : undefined,\n query: query.value,\n list: internalList.value\n }\n}\n\n// 执行数据获取\nconst fetchData = async () => {\n if (!props.fetchHandler) return\n \n internalLoading.value = true\n try {\n const params = getRequestParams()\n const response: FatTableRequestResponse<T> = await props.fetchHandler(params)\n \n internalList.value = response.list as T[]\n internalPagination.total = response.total\n } catch (error) {\n console.error('FatTable fetchData error:', error)\n internalList.value = []\n internalPagination.total = 0\n } finally {\n internalLoading.value = false\n }\n}\n\nconst handleSort = (column: FatTableColumn<T, S>) => {\n if (!column.sortable || !column.prop) return\n\n if (sortState.prop === column.prop) {\n if (sortState.order === 'ascending') {\n sortState.order = 'descending'\n } else if (sortState.order === 'descending') {\n sortState.prop = ''\n sortState.order = null\n } else {\n sortState.order = 'ascending'\n }\n } else {\n sortState.prop = column.prop\n sortState.order = 'ascending'\n }\n\n if (sortState.prop && sortState.order && column.prop) {\n emit('sort-change', {\n column,\n prop: column.prop,\n order: sortState.order\n })\n \n // 如果使用 fetchHandler 且开启了自动请求,则触发数据获取\n if (useFetchHandler.value && props.requestOnSortChange) {\n internalPagination.currentPage = 1 // 排序时重置到第一页\n fetchData()\n }\n }\n}\n\nconst handlePageChange = (page: number) => {\n if (useFetchHandler.value) {\n internalPagination.currentPage = page\n fetchData()\n } else if (typeof props.pagination === 'object') {\n emit('page-change', page)\n }\n}\n\nconst handlePageSizeChange = (event: Event) => {\n const target = event.target as HTMLSelectElement\n const pageSize = Number(target.value)\n \n if (useFetchHandler.value) {\n internalPagination.pageSize = pageSize\n internalPagination.currentPage = 1 // 改变每页条数时重置到第一页\n fetchData()\n } else if (typeof props.pagination === 'object') {\n emit('page-size-change', pageSize)\n }\n}\n\nconst handleRowClick = (row: T, event: Event) => {\n emit('row-click', row, {} as FatTableColumn<T, S>, event)\n}\n\n// 监听查询参数变化\nwatch(\n () => props.query,\n () => {\n if (useFetchHandler.value && props.requestOnQueryChange) {\n internalPagination.currentPage = 1 // 查询时重置到第一页\n fetchData()\n }\n },\n { deep: true }\n)\n\n// 监听分页配置变化(外部传入的分页配置)\nwatch(\n () => props.pagination,\n (newPagination) => {\n if (useFetchHandler.value && typeof newPagination === 'object') {\n internalPagination.currentPage = newPagination.currentPage\n internalPagination.pageSize = newPagination.pageSize\n // total 由 fetchHandler 返回,不从这里更新\n }\n },\n { deep: true }\n)\n\n// 挂载时获取数据\nonMounted(() => {\n if (useFetchHandler.value && props.requestOnMounted) {\n fetchData()\n }\n})\n\n// 暴露方法供外部调用\ndefineExpose({\n /**\n * 刷新数据\n */\n refresh: () => {\n if (useFetchHandler.value) {\n fetchData()\n }\n },\n /**\n * 重置并重新获取数据\n */\n reset: () => {\n if (useFetchHandler.value) {\n internalPagination.currentPage = 1\n sortState.prop = ''\n sortState.order = null\n fetchData()\n }\n },\n /**\n * 获取请求参数\n */\n getRequestParams\n})\n</script>\n","import FatTable from './FatTable.vue'\nimport type { App } from 'vue'\n\nconst FatTableWithInstall = FatTable as typeof FatTable & {\n install: (app: App) => void\n}\n\nFatTableWithInstall.install = (app: App) => {\n app.component('FatTable', FatTable)\n}\n\nexport default FatTableWithInstall\nexport * from './types'\n","<template>\n <form class=\"fat-form\" :class=\"formClass\" @submit.prevent=\"handleSubmit\">\n <slot :form=\"formInstance\" />\n \n <div v-if=\"enableSubmitter\" class=\"fat-form__submitter\">\n <slot name=\"submitter\" :form=\"formInstance\">\n <button\n type=\"submit\"\n class=\"fat-form__submit-btn\"\n :disabled=\"submitting || disabled\"\n :loading=\"submitting\"\n >\n {{ submitText || t('common.submit') }}\n </button>\n <button\n v-if=\"enableReset\"\n type=\"button\"\n class=\"fat-form__reset-btn\"\n :disabled=\"submitting || disabled\"\n @click=\"handleReset\"\n >\n {{ resetText || t('common.reset') }}\n </button>\n </slot>\n </div>\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport '../../../style/fat-form.scss'\nimport { ref, computed, reactive, provide } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { FatFormMethods, FatFormMode, FatFormLayout } from './types'\n\ninterface Props {\n modelValue?: Record<string, any>\n mode?: FatFormMode\n layout?: FatFormLayout\n labelWidth?: string | number\n labelSuffix?: string\n size?: 'large' | 'default' | 'small'\n disabled?: boolean\n loading?: boolean\n initialValue?: Record<string, any>\n rules?: Record<string, any[]>\n enableSubmitter?: boolean\n enableReset?: boolean\n submitText?: string\n resetText?: string\n onSubmit?: (values: Record<string, any>) => Promise<void> | void\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: () => ({}),\n mode: 'editable',\n layout: 'horizontal',\n labelSuffix: ':',\n size: 'default',\n disabled: false,\n loading: false,\n initialValue: () => ({}),\n rules: () => ({}),\n enableSubmitter: true,\n enableReset: true\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: Record<string, any>]\n 'submit': [values: Record<string, any>]\n 'reset': [values: Record<string, any>]\n 'validate': [prop: string, isValid: boolean, message?: string]\n}>()\n\nconst { t } = useI18n()\n\nconst submitting = ref(false)\nconst formValues = reactive<Record<string, any>>({ ...props.initialValue, ...props.modelValue })\nconst errors = reactive<Record<string, string>>({})\n\nconst formClass = computed(() => {\n return [\n `fat-form--${props.layout}`,\n `fat-form--${props.size}`,\n {\n 'fat-form--disabled': props.disabled,\n 'fat-form--preview': props.mode === 'preview'\n }\n ]\n})\n\nconst formInstance: FatFormMethods = {\n get mode() {\n return props.mode\n },\n get layout() {\n return props.layout\n },\n get disabled() {\n return props.disabled\n },\n get loading() {\n return computed(() => props.loading || submitting.value)\n },\n get submitting() {\n return computed(() => submitting.value)\n },\n get values() {\n return computed(() => formValues)\n },\n async submit() {\n const isValid = await this.validate()\n if (!isValid) {\n return\n }\n \n submitting.value = true\n try {\n if (props.onSubmit) {\n await props.onSubmit({ ...formValues })\n }\n emit('submit', { ...formValues })\n } finally {\n submitting.value = false\n }\n },\n reset() {\n Object.keys(formValues).forEach(key => {\n delete formValues[key]\n })\n Object.assign(formValues, { ...props.initialValue })\n Object.keys(errors).forEach(key => {\n delete errors[key]\n })\n emit('update:modelValue', { ...formValues })\n emit('reset', { ...formValues })\n },\n async validate() {\n let isValid = true\n const rules = props.rules || {}\n \n for (const [prop, ruleList] of Object.entries(rules)) {\n const value = formValues[prop]\n for (const rule of ruleList) {\n if (rule.required && (value === undefined || value === null || value === '')) {\n errors[prop] = rule.message || t('form.required')\n emit('validate', prop, false, errors[prop])\n isValid = false\n break\n }\n if (rule.validator && typeof rule.validator === 'function') {\n try {\n await rule.validator(rule, value, formValues)\n } catch (error: any) {\n errors[prop] = error.message || t('form.invalidFormat')\n emit('validate', prop, false, errors[prop])\n isValid = false\n break\n }\n }\n }\n if (isValid && errors[prop]) {\n delete errors[prop]\n emit('validate', prop, true)\n }\n }\n \n return isValid\n },\n async validateField(prop: string | string[]) {\n const propsToValidate = Array.isArray(prop) ? prop : [prop]\n let isValid = true\n \n for (const p of propsToValidate) {\n const rules = props.rules?.[p] || []\n const value = formValues[p]\n \n for (const rule of rules) {\n if (rule.required && (value === undefined || value === null || value === '')) {\n errors[p] = rule.message || t('form.required')\n emit('validate', p, false, errors[p])\n isValid = false\n break\n }\n if (rule.validator && typeof rule.validator === 'function') {\n try {\n await rule.validator(rule, value, formValues)\n } catch (error: any) {\n errors[p] = error.message || t('form.invalidFormat')\n emit('validate', p, false, errors[p])\n isValid = false\n break\n }\n }\n }\n if (isValid && errors[p]) {\n delete errors[p]\n emit('validate', p, true)\n }\n }\n \n return isValid\n },\n clearValidate(prop?: string | string[]) {\n if (!prop) {\n Object.keys(errors).forEach(key => {\n delete errors[key]\n })\n } else {\n const propsToClear = Array.isArray(prop) ? prop : [prop]\n propsToClear.forEach(p => {\n delete errors[p]\n })\n }\n },\n getFieldValue(prop: string) {\n return formValues[prop]\n },\n setFieldValue(prop: string, value: any) {\n formValues[prop] = value\n emit('update:modelValue', { ...formValues })\n }\n}\n\nprovide('fatForm', formInstance)\nprovide('fatFormErrors', errors)\n\nconst handleSubmit = async () => {\n await formInstance.submit()\n}\n\nconst handleReset = () => {\n formInstance.reset()\n}\n</script>\n","<template>\n <div\n v-if=\"!hidden\"\n class=\"fat-form-item\"\n :class=\"formItemClass\"\n >\n <label\n v-if=\"label\"\n class=\"fat-form-item__label\"\n :style=\"labelStyle\"\n >\n <span v-if=\"required\" class=\"fat-form-item__required\">*</span>\n {{ label }}{{ labelSuffix }}\n </label>\n <div class=\"fat-form-item__content\" :style=\"contentStyle\">\n <slot :value=\"value\" :form=\"form\" />\n <div v-if=\"errorMessage\" class=\"fat-form-item__error\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, watch } from 'vue'\nimport type { FatFormMethods } from './types'\n\ninterface Props {\n prop: string\n label?: string\n required?: boolean\n hidden?: boolean\n disabled?: boolean\n labelWidth?: string | number\n width?: string | number\n}\n\nconst props = defineProps<Props>()\n\nconst form = inject<FatFormMethods>('fatForm')\nconst errors = inject<Record<string, string>>('fatFormErrors', {})\n\nconst labelSuffix = computed(() => {\n return form?.layout === 'horizontal' ? (form as any).labelSuffix || ':' : ''\n})\n\nconst value = computed(() => {\n return form?.getFieldValue(props.prop)\n})\n\nconst errorMessage = computed(() => {\n return errors[props.prop]\n})\n\nconst hidden = computed(() => {\n return props.hidden || form?.mode === 'preview'\n})\n\nconst formItemClass = computed(() => {\n return [\n `fat-form-item--${form?.layout || 'horizontal'}`,\n {\n 'fat-form-item--error': !!errorMessage.value,\n 'fat-form-item--required': props.required,\n 'fat-form-item--disabled': props.disabled || form?.disabled\n }\n ]\n})\n\nconst labelStyle = computed(() => {\n const style: Record<string, string> = {}\n if (form?.layout === 'horizontal' && (props.labelWidth || (form as any).labelWidth)) {\n const width = props.labelWidth || (form as any).labelWidth\n style.width = typeof width === 'number' ? `${width}px` : width\n }\n return style\n})\n\nconst contentStyle = computed(() => {\n const style: Record<string, string> = {}\n if (props.width) {\n style.width = typeof props.width === 'number' ? `${props.width}px` : props.width\n }\n return style\n})\n\nwatch(\n () => value.value,\n (newVal) => {\n if (form) {\n form.setFieldValue(props.prop, newVal)\n }\n },\n { deep: true }\n)\n</script>\n","import FatForm from './FatForm.vue'\nimport FatFormItem from './FatFormItem.vue'\nimport type { App } from 'vue'\n\nFatForm.install = (app: App) => {\n app.component('FatForm', FatForm)\n app.component('FatFormItem', FatFormItem)\n}\n\nexport default FatForm\nexport { FatFormItem }\nexport * from './types'\n","<template>\n <div class=\"fat-table-layout\">\n <div v-if=\"title || $slots.title\" class=\"fat-table-layout__header\">\n <slot name=\"title\">\n <h2 v-if=\"title\" class=\"fat-table-layout__title\">{{ title }}</h2>\n </slot>\n </div>\n \n <div v-if=\"showQuery && $slots.query\" class=\"fat-table-layout__query\">\n <slot name=\"query\" />\n </div>\n \n <div v-if=\"showToolbar && $slots.toolbar\" class=\"fat-table-layout__toolbar\">\n <slot name=\"toolbar\" />\n </div>\n \n <div class=\"fat-table-layout__table\">\n <slot name=\"default\" />\n </div>\n \n <div v-if=\"showPagination && $slots.pagination\" class=\"fat-table-layout__pagination\">\n <slot name=\"pagination\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import '../../../style/fat-table-layout.scss'\nimport type { FatTableLayoutProps } from './types'\n\nwithDefaults(defineProps<FatTableLayoutProps>(), {\n showQuery: true,\n showToolbar: true,\n showPagination: true\n})\n</script>\n","import FatTableLayout from './FatTableLayout.vue'\nimport type { App } from 'vue'\n\nFatTableLayout.install = (app: App) => {\n app.component('FatTableLayout', FatTableLayout)\n}\n\nexport default FatTableLayout\nexport * from './types'\n","<template>\n <div class=\"fat-form-layout\">\n <div v-if=\"title || $slots.title || showBack\" class=\"fat-form-layout__header\">\n <div class=\"fat-form-layout__header-left\">\n <button\n v-if=\"showBack\"\n class=\"fat-form-layout__back-btn\"\n @click=\"handleBack\"\n >\n ← {{ t('common.cancel') }}\n </button>\n <slot name=\"title\">\n <h2 v-if=\"title\" class=\"fat-form-layout__title\">{{ title }}</h2>\n </slot>\n </div>\n <div v-if=\"$slots.extra\" class=\"fat-form-layout__header-extra\">\n <slot name=\"extra\" />\n </div>\n </div>\n \n <div class=\"fat-form-layout__content\">\n <slot name=\"default\" />\n </div>\n \n <div v-if=\"showSubmitter && $slots.submitter\" class=\"fat-form-layout__footer\">\n <slot name=\"submitter\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport '../../../style/fat-form-layout.scss'\nimport { useI18n } from 'vue-i18n'\nimport type { FatFormLayoutProps } from './types'\n\nwithDefaults(defineProps<FatFormLayoutProps>(), {\n showSubmitter: true,\n showBack: false\n})\n\nconst emit = defineEmits<{\n back: []\n}>()\n\nconst { t } = useI18n()\n\nconst handleBack = () => {\n emit('back')\n}\n</script>\n","import FatFormLayout from './FatFormLayout.vue'\nimport type { App } from 'vue'\n\nFatFormLayout.install = (app: App) => {\n app.component('FatFormLayout', FatFormLayout)\n}\n\nexport default FatFormLayout\nexport * from './types'\n","import { useI18n } from 'vue-i18n'\nimport type { Composer } from 'vue-i18n'\n\nexport const useI18nT = (): Composer['t'] => {\n const { t } = useI18n()\n return t\n}\n\nexport * from './types'\n","import { useI18n } from 'vue-i18n'\nimport type { Composer } from 'vue-i18n'\n\nexport const useT = (): Composer['t'] => {\n const { t } = useI18n()\n return t\n}\n","import type { App } from 'vue'\nimport { i18n } from './i18n'\nimport './style/index.scss'\n\n// 组件\nimport FatTable from './components/FatTable'\nimport FatForm from './components/FatForm'\nimport FatTableLayout from './components/FatTableLayout'\nimport FatFormLayout from './components/FatFormLayout'\n\n// 导出类型\nexport * from './components/FatTable/types'\nexport * from './components/FatForm/types'\nexport * from './components/FatTableLayout/types'\nexport * from './components/FatFormLayout/types'\n\n// 导出组件\nexport { FatTable, FatForm, FatTableLayout, FatFormLayout }\nexport { default as i18n } from './i18n'\n\n// 导出工具函数\nexport * from './utils'\nexport * from './hooks'\n\n// 组件列表\nconst components = [\n FatTable,\n FatForm,\n FatTableLayout,\n FatFormLayout\n]\n\n// 安装函数\nconst install = (app: App) => {\n components.forEach(component => {\n const comp = component as any\n if (comp.install) {\n app.use(comp)\n } else if (comp.name) {\n app.component(comp.name, comp)\n }\n })\n \n // 安装 i18n\n app.use(i18n)\n}\n\n// 支持按需引入\nexport default {\n install,\n FatTable,\n FatForm,\n FatTableLayout,\n FatFormLayout\n}\n"],"names":["index","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_Fragment","_renderList","_normalizeStyle","_normalizeClass","_hoisted_4","_renderSlot","_hoisted_5","_createBlock","_resolveDynamicComponent","_hoisted_6","_toDisplayString","_unref","FatTable","FatForm","FatFormItem","$slots","_hoisted_7","FatTableLayout","FatFormLayout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/i18n/locales/zh-CN.ts","../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/components/FatTable/FatTable.vue","../src/components/FatTable/index.ts","../src/components/FatForm/FatForm.vue","../src/components/FatForm/FatFormItem.vue","../src/components/FatForm/index.ts","../src/components/FatTableLayout/FatTableLayout.vue","../src/components/FatTableLayout/index.ts","../src/components/FatFormLayout/FatFormLayout.vue","../src/components/FatFormLayout/index.ts","../src/utils/index.ts","../src/hooks/index.ts","../src/index.ts"],"sourcesContent":["export default {\n common: {\n confirm: '确认',\n cancel: '取消',\n submit: '提交',\n reset: '重置',\n search: '搜索',\n add: '新增',\n edit: '编辑',\n delete: '删除',\n save: '保存',\n loading: '加载中...',\n noData: '暂无数据'\n },\n table: {\n total: '共 {total} 条',\n pageSize: '每页显示',\n page: '页',\n goto: '前往',\n prev: '上一页',\n next: '下一页',\n pageSizeOptions: ['10', '20', '50', '100']\n },\n form: {\n required: '此项为必填项',\n invalidFormat: '格式不正确',\n submitSuccess: '提交成功',\n submitFailed: '提交失败'\n }\n}\n","export default {\n common: {\n confirm: 'Confirm',\n cancel: 'Cancel',\n submit: 'Submit',\n reset: 'Reset',\n search: 'Search',\n add: 'Add',\n edit: 'Edit',\n delete: 'Delete',\n save: 'Save',\n loading: 'Loading...',\n noData: 'No Data'\n },\n table: {\n total: 'Total {total} items',\n pageSize: 'Items per page',\n page: 'Page',\n goto: 'Go to',\n prev: 'Previous',\n next: 'Next',\n pageSizeOptions: ['10', '20', '50', '100']\n },\n form: {\n required: 'This field is required',\n invalidFormat: 'Invalid format',\n submitSuccess: 'Submit successful',\n submitFailed: 'Submit failed'\n }\n}\n","import { createI18n } from 'vue-i18n'\nimport zhCN from './locales/zh-CN'\nimport enUS from './locales/en-US'\n\nexport type Locale = 'zh-CN' | 'en-US'\n\nconst messages = {\n 'zh-CN': zhCN,\n 'en-US': enUS\n}\n\nexport const i18n = createI18n({\n legacy: false,\n locale: 'zh-CN',\n fallbackLocale: 'en-US',\n messages\n})\n\nexport default i18n\n","<template>\n <div class=\"fat-table-wrapper\">\n <div class=\"fat-table\" :style=\"tableStyle\">\n <table class=\"fat-table__inner\">\n <thead class=\"fat-table__header\">\n <tr>\n <th\n v-for=\"(column, index) in columns\"\n :key=\"getColumnKey(column, index)\"\n :style=\"getColumnStyle(column)\"\n :class=\"getColumnClass(column)\"\n >\n <div class=\"fat-table__cell\">\n <slot\n :name=\"`header-${getColumnKey(column, index)}`\"\n :column=\"column\"\n :index=\"index\"\n >\n <span v-if=\"column.renderHeader\">\n <component\n :is=\"() => column.renderHeader?.(column, index)\"\n />\n </span>\n <span v-else>{{ column.label }}</span>\n <span\n v-if=\"column.sortable\"\n class=\"fat-table__sort\"\n @click=\"handleSort(column)\"\n >\n <span\n class=\"fat-table__sort-icon\"\n :class=\"{ active: sortState.prop === column.prop && sortState.order === 'ascending' }\"\n >\n ↑\n </span>\n <span\n class=\"fat-table__sort-icon\"\n :class=\"{ active: sortState.prop === column.prop && sortState.order === 'descending' }\"\n >\n ↓\n </span>\n </span>\n </slot>\n </div>\n </th>\n </tr>\n </thead>\n <tbody class=\"fat-table__body\">\n <tr\n v-if=\"loading\"\n class=\"fat-table__loading-row\"\n >\n <td :colspan=\"columns.length\" class=\"fat-table__loading-cell\">\n {{ t('common.loading') }}\n </td>\n </tr>\n <tr\n v-else-if=\"!list || list.length === 0\"\n class=\"fat-table__empty-row\"\n >\n <td :colspan=\"columns.length\" class=\"fat-table__empty-cell\">\n {{ emptyText || t('common.noData') }}\n </td>\n </tr>\n <tr\n v-else\n v-for=\"(row, rowIndex) in list\"\n :key=\"getRowKey(row, rowIndex)\"\n :class=\"[\n 'fat-table__row',\n { 'fat-table__row--stripe': stripe && rowIndex % 2 === 1 }\n ]\"\n @click=\"handleRowClick(row, $event)\"\n >\n <td\n v-for=\"(column, colIndex) in columns\"\n :key=\"getColumnKey(column, colIndex)\"\n :class=\"getCellClass(column)\"\n :style=\"getColumnStyle(column)\"\n >\n <div class=\"fat-table__cell\">\n <slot\n :name=\"`cell-${getColumnKey(column, colIndex)}`\"\n :row=\"row\"\n :column=\"column\"\n :value=\"getCellValue(row, column)\"\n :index=\"rowIndex\"\n >\n <span v-if=\"column.render\">\n <component\n :is=\"() => column.render?.(getCellValue(row, column), row, rowIndex)\"\n />\n </span>\n <span v-else>{{ formatCellValue(row, column) }}</span>\n </slot>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div\n v-if=\"pagination\"\n class=\"fat-table__pagination\"\n >\n <div class=\"fat-table__pagination-info\">\n {{ t('table.total', { total: paginationData.total }) }}\n </div>\n <div class=\"fat-table__pagination-controls\">\n <select\n :value=\"paginationData.pageSize\"\n class=\"fat-table__page-size-select\"\n @change=\"handlePageSizeChange($event)\"\n >\n <option\n v-for=\"size in pageSizes\"\n :key=\"size\"\n :value=\"size\"\n >\n {{ size }}\n </option>\n </select>\n <span class=\"fat-table__pagination-text\">{{ t('table.pageSize') }}</span>\n <button\n class=\"fat-table__pagination-btn\"\n :disabled=\"paginationData.currentPage === 1\"\n @click=\"handlePageChange(paginationData.currentPage - 1)\"\n >\n {{ t('table.prev') }}\n </button>\n <span class=\"fat-table__pagination-text\">\n {{ t('table.page') }} {{ paginationData.currentPage }} / {{ totalPages }}\n </span>\n <button\n class=\"fat-table__pagination-btn\"\n :disabled=\"paginationData.currentPage >= totalPages\"\n @click=\"handlePageChange(paginationData.currentPage + 1)\"\n >\n {{ t('table.next') }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Record<string, any> = any, S extends Record<string, any> = Record<string, any>\">\nimport '../../../style/fat-table.scss'\nimport { ref, computed, reactive, watch, onMounted } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { FatTableColumn, SortOrder, FatTableProps, FatTableEmits, FatTableRequestParams, FatTableRequestResponse } from './types'\n\n\nconst props = withDefaults(defineProps<FatTableProps<T, S>>(), {\n data: () => [],\n loading: false,\n pagination: false,\n stripe: false,\n border: true,\n size: 'default',\n emptyText: '',\n requestOnMounted: true,\n requestOnQueryChange: true,\n requestOnSortChange: true\n})\n\nconst emit = defineEmits<FatTableEmits<T, S>>()\n\nconst { t } = useI18n()\n\n// 内部状态管理(当使用 fetchHandler 时)\nconst internalList = ref<T[]>([]) as { value: T[] }\nconst internalLoading = ref(false)\nconst internalPagination = reactive({\n currentPage: 1,\n pageSize: 10,\n total: 0\n})\n\n// 查询参数\nconst query = computed(() => props.query || ({} as S))\n\n// 排序状态\nconst sortState = reactive<{ prop: string; order: SortOrder }>({\n prop: '',\n order: null\n})\n\n// 判断是否使用 fetchHandler 模式\nconst useFetchHandler = computed(() => !!props.fetchHandler)\n\n// 数据列表:如果使用 fetchHandler,使用内部数据;否则使用外部 data\nconst list = computed(() => {\n if (useFetchHandler.value) {\n return internalList.value\n }\n return props.data || []\n})\n\n// 加载状态:如果使用 fetchHandler,使用内部 loading;否则使用外部 loading\nconst loading = computed(() => {\n if (useFetchHandler.value) {\n return internalLoading.value\n }\n return props.loading\n})\n\n// 分页数据\nconst paginationData = computed(() => {\n if (useFetchHandler.value) {\n return internalPagination\n }\n if (typeof props.pagination === 'boolean') {\n return {\n currentPage: 1,\n pageSize: 10,\n total: list.value.length\n }\n }\n return props.pagination\n})\n\nconst pageSizes = computed(() => {\n if (typeof props.pagination === 'object' && props.pagination.pageSizes) {\n return props.pagination.pageSizes\n }\n return [10, 20, 50, 100]\n})\n\nconst totalPages = computed(() => {\n const total = paginationData.value.total\n const pageSize = paginationData.value.pageSize\n return Math.ceil(total / pageSize)\n})\n\nconst tableStyle = computed(() => {\n const style: Record<string, string> = {}\n if (props.height) {\n style.height = typeof props.height === 'number' ? `${props.height}px` : props.height\n }\n if (props.maxHeight) {\n style.maxHeight = typeof props.maxHeight === 'number' ? `${props.maxHeight}px` : props.maxHeight\n }\n return style\n})\n\nconst getColumnKey = (column: FatTableColumn<T, S>, index: number) => {\n return column.key || column.prop || `column-${index}`\n}\n\nconst getRowKey = (row: T, index: number) => {\n if (typeof props.rowKey === 'function') {\n return props.rowKey(row)\n }\n if (typeof props.rowKey === 'string') {\n return (row as any)[props.rowKey]\n }\n return index\n}\n\nconst getColumnStyle = (column: FatTableColumn<T, S>) => {\n const style: Record<string, string> = {}\n if (column.width) {\n style.width = typeof column.width === 'number' ? `${column.width}px` : column.width\n }\n if (column.minWidth) {\n style.minWidth = typeof column.minWidth === 'number' ? `${column.minWidth}px` : column.minWidth\n }\n if (column.align) {\n style.textAlign = column.align\n }\n return style\n}\n\nconst getColumnClass = (column: FatTableColumn<T, S>) => {\n return {\n 'fat-table__header-cell--fixed-left': column.fixed === 'left' || (column.fixed === true),\n 'fat-table__header-cell--fixed-right': column.fixed === 'right'\n }\n}\n\nconst getCellClass = (column: FatTableColumn<T, S>) => {\n return {\n 'fat-table__cell--fixed-left': column.fixed === 'left' || (column.fixed === true),\n 'fat-table__cell--fixed-right': column.fixed === 'right'\n }\n}\n\nconst getCellValue = (row: T, column: FatTableColumn<T, S>) => {\n if (!column.prop) return undefined\n return (row as any)[column.prop]\n}\n\nconst formatCellValue = (row: T, column: FatTableColumn<T, S>) => {\n const value = getCellValue(row, column)\n return value ?? ''\n}\n\n// 获取请求参数\nconst getRequestParams = (): FatTableRequestParams<T, S> => {\n const page = paginationData.value.currentPage\n const pageSize = paginationData.value.pageSize\n \n return {\n pagination: {\n pageSize,\n page,\n offset: (page - 1) * pageSize\n },\n sort: sortState.prop && sortState.order ? {\n prop: sortState.prop,\n order: sortState.order\n } : undefined,\n query: query.value,\n list: internalList.value\n }\n}\n\n// 执行数据获取\nconst fetchData = async () => {\n if (!props.fetchHandler) return\n \n internalLoading.value = true\n try {\n const params = getRequestParams()\n const response: FatTableRequestResponse<T> = await props.fetchHandler(params)\n \n internalList.value = response.list as T[]\n internalPagination.total = response.total\n } catch (error) {\n console.error('FatTable fetchData error:', error)\n internalList.value = []\n internalPagination.total = 0\n } finally {\n internalLoading.value = false\n }\n}\n\nconst handleSort = (column: FatTableColumn<T, S>) => {\n if (!column.sortable || !column.prop) return\n\n if (sortState.prop === column.prop) {\n if (sortState.order === 'ascending') {\n sortState.order = 'descending'\n } else if (sortState.order === 'descending') {\n sortState.prop = ''\n sortState.order = null\n } else {\n sortState.order = 'ascending'\n }\n } else {\n sortState.prop = column.prop\n sortState.order = 'ascending'\n }\n\n if (sortState.prop && sortState.order && column.prop) {\n emit('sort-change', {\n column,\n prop: column.prop,\n order: sortState.order\n })\n \n // 如果使用 fetchHandler 且开启了自动请求,则触发数据获取\n if (useFetchHandler.value && props.requestOnSortChange) {\n internalPagination.currentPage = 1 // 排序时重置到第一页\n fetchData()\n }\n }\n}\n\nconst handlePageChange = (page: number) => {\n if (useFetchHandler.value) {\n internalPagination.currentPage = page\n fetchData()\n } else if (typeof props.pagination === 'object') {\n emit('page-change', page)\n }\n}\n\nconst handlePageSizeChange = (event: Event) => {\n const target = event.target as HTMLSelectElement\n const pageSize = Number(target.value)\n \n if (useFetchHandler.value) {\n internalPagination.pageSize = pageSize\n internalPagination.currentPage = 1 // 改变每页条数时重置到第一页\n fetchData()\n } else if (typeof props.pagination === 'object') {\n emit('page-size-change', pageSize)\n }\n}\n\nconst handleRowClick = (row: T, event: Event) => {\n emit('row-click', row, {} as FatTableColumn<T, S>, event)\n}\n\n// 监听查询参数变化\nwatch(\n () => props.query,\n () => {\n if (useFetchHandler.value && props.requestOnQueryChange) {\n internalPagination.currentPage = 1 // 查询时重置到第一页\n fetchData()\n }\n },\n { deep: true }\n)\n\n// 监听分页配置变化(外部传入的分页配置)\nwatch(\n () => props.pagination,\n (newPagination) => {\n if (useFetchHandler.value && typeof newPagination === 'object') {\n internalPagination.currentPage = newPagination.currentPage\n internalPagination.pageSize = newPagination.pageSize\n // total 由 fetchHandler 返回,不从这里更新\n }\n },\n { deep: true }\n)\n\n// 挂载时获取数据\nonMounted(() => {\n if (useFetchHandler.value && props.requestOnMounted) {\n fetchData()\n }\n})\n\n// 暴露方法供外部调用\ndefineExpose({\n /**\n * 刷新数据\n */\n refresh: () => {\n if (useFetchHandler.value) {\n fetchData()\n }\n },\n /**\n * 重置并重新获取数据\n */\n reset: () => {\n if (useFetchHandler.value) {\n internalPagination.currentPage = 1\n sortState.prop = ''\n sortState.order = null\n fetchData()\n }\n },\n /**\n * 获取请求参数\n */\n getRequestParams\n})\n</script>\n","import FatTable from './FatTable.vue'\nimport type { App } from 'vue'\n\nconst FatTableWithInstall = FatTable as typeof FatTable & {\n install: (app: App) => void\n}\n\nFatTableWithInstall.install = (app: App) => {\n app.component('FatTable', FatTable)\n}\n\nexport default FatTableWithInstall\nexport * from './types'\n","<template>\n <form class=\"fat-form\" :class=\"formClass\" @submit.prevent=\"handleSubmit\">\n <slot :form=\"formInstance\" />\n \n <div v-if=\"enableSubmitter\" class=\"fat-form__submitter\">\n <slot name=\"submitter\" :form=\"formInstance\">\n <button\n type=\"submit\"\n class=\"fat-form__submit-btn\"\n :disabled=\"submitting || disabled\"\n :loading=\"submitting\"\n >\n {{ submitText || t('common.submit') }}\n </button>\n <button\n v-if=\"enableReset\"\n type=\"button\"\n class=\"fat-form__reset-btn\"\n :disabled=\"submitting || disabled\"\n @click=\"handleReset\"\n >\n {{ resetText || t('common.reset') }}\n </button>\n </slot>\n </div>\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport '../../../style/fat-form.scss'\nimport { ref, computed, reactive, provide } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { FatFormMethods, FatFormMode, FatFormLayout } from './types'\n\ninterface Props {\n modelValue?: Record<string, any>\n mode?: FatFormMode\n layout?: FatFormLayout\n labelWidth?: string | number\n labelSuffix?: string\n size?: 'large' | 'default' | 'small'\n disabled?: boolean\n loading?: boolean\n initialValue?: Record<string, any>\n rules?: Record<string, any[]>\n enableSubmitter?: boolean\n enableReset?: boolean\n submitText?: string\n resetText?: string\n onSubmit?: (values: Record<string, any>) => Promise<void> | void\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: () => ({}),\n mode: 'editable',\n layout: 'horizontal',\n labelSuffix: ':',\n size: 'default',\n disabled: false,\n loading: false,\n initialValue: () => ({}),\n rules: () => ({}),\n enableSubmitter: true,\n enableReset: true\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: Record<string, any>]\n 'submit': [values: Record<string, any>]\n 'reset': [values: Record<string, any>]\n 'validate': [prop: string, isValid: boolean, message?: string]\n}>()\n\nconst { t } = useI18n()\n\nconst submitting = ref(false)\nconst formValues = reactive<Record<string, any>>({ ...props.initialValue, ...props.modelValue })\nconst errors = reactive<Record<string, string>>({})\n\nconst formClass = computed(() => {\n return [\n `fat-form--${props.layout}`,\n `fat-form--${props.size}`,\n {\n 'fat-form--disabled': props.disabled,\n 'fat-form--preview': props.mode === 'preview'\n }\n ]\n})\n\nconst formInstance: FatFormMethods = {\n get mode() {\n return props.mode\n },\n get layout() {\n return props.layout\n },\n get disabled() {\n return props.disabled\n },\n get loading() {\n return computed(() => props.loading || submitting.value)\n },\n get submitting() {\n return computed(() => submitting.value)\n },\n get values() {\n return computed(() => formValues)\n },\n async submit() {\n const isValid = await this.validate()\n if (!isValid) {\n return\n }\n \n submitting.value = true\n try {\n if (props.onSubmit) {\n await props.onSubmit({ ...formValues })\n }\n emit('submit', { ...formValues })\n } finally {\n submitting.value = false\n }\n },\n reset() {\n Object.keys(formValues).forEach(key => {\n delete formValues[key]\n })\n Object.assign(formValues, { ...props.initialValue })\n Object.keys(errors).forEach(key => {\n delete errors[key]\n })\n emit('update:modelValue', { ...formValues })\n emit('reset', { ...formValues })\n },\n async validate() {\n let isValid = true\n const rules = props.rules || {}\n \n for (const [prop, ruleList] of Object.entries(rules)) {\n const value = formValues[prop]\n for (const rule of ruleList) {\n if (rule.required && (value === undefined || value === null || value === '')) {\n errors[prop] = rule.message || t('form.required')\n emit('validate', prop, false, errors[prop])\n isValid = false\n break\n }\n if (rule.validator && typeof rule.validator === 'function') {\n try {\n await rule.validator(rule, value, formValues)\n } catch (error: any) {\n errors[prop] = error.message || t('form.invalidFormat')\n emit('validate', prop, false, errors[prop])\n isValid = false\n break\n }\n }\n }\n if (isValid && errors[prop]) {\n delete errors[prop]\n emit('validate', prop, true)\n }\n }\n \n return isValid\n },\n async validateField(prop: string | string[]) {\n const propsToValidate = Array.isArray(prop) ? prop : [prop]\n let isValid = true\n \n for (const p of propsToValidate) {\n const rules = props.rules?.[p] || []\n const value = formValues[p]\n \n for (const rule of rules) {\n if (rule.required && (value === undefined || value === null || value === '')) {\n errors[p] = rule.message || t('form.required')\n emit('validate', p, false, errors[p])\n isValid = false\n break\n }\n if (rule.validator && typeof rule.validator === 'function') {\n try {\n await rule.validator(rule, value, formValues)\n } catch (error: any) {\n errors[p] = error.message || t('form.invalidFormat')\n emit('validate', p, false, errors[p])\n isValid = false\n break\n }\n }\n }\n if (isValid && errors[p]) {\n delete errors[p]\n emit('validate', p, true)\n }\n }\n \n return isValid\n },\n clearValidate(prop?: string | string[]) {\n if (!prop) {\n Object.keys(errors).forEach(key => {\n delete errors[key]\n })\n } else {\n const propsToClear = Array.isArray(prop) ? prop : [prop]\n propsToClear.forEach(p => {\n delete errors[p]\n })\n }\n },\n getFieldValue(prop: string) {\n return formValues[prop]\n },\n setFieldValue(prop: string, value: any) {\n formValues[prop] = value\n emit('update:modelValue', { ...formValues })\n }\n}\n\nprovide('fatForm', formInstance)\nprovide('fatFormErrors', errors)\n\nconst handleSubmit = async () => {\n await formInstance.submit()\n}\n\nconst handleReset = () => {\n formInstance.reset()\n}\n</script>\n","<template>\n <div\n v-if=\"!hidden\"\n class=\"fat-form-item\"\n :class=\"formItemClass\"\n >\n <label\n v-if=\"label\"\n class=\"fat-form-item__label\"\n :style=\"labelStyle\"\n >\n <span v-if=\"required\" class=\"fat-form-item__required\">*</span>\n {{ label }}{{ labelSuffix }}\n </label>\n <div class=\"fat-form-item__content\" :style=\"contentStyle\">\n <slot :value=\"value\" :form=\"form\" />\n <div v-if=\"errorMessage\" class=\"fat-form-item__error\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, watch } from 'vue'\nimport type { FatFormMethods } from './types'\n\ninterface Props {\n prop: string\n label?: string\n required?: boolean\n hidden?: boolean\n disabled?: boolean\n labelWidth?: string | number\n width?: string | number\n}\n\nconst props = defineProps<Props>()\n\nconst form = inject<FatFormMethods>('fatForm')\nconst errors = inject<Record<string, string>>('fatFormErrors', {})\n\nconst labelSuffix = computed(() => {\n return form?.layout === 'horizontal' ? (form as any).labelSuffix || ':' : ''\n})\n\nconst value = computed(() => {\n return form?.getFieldValue(props.prop)\n})\n\nconst errorMessage = computed(() => {\n return errors[props.prop]\n})\n\nconst hidden = computed(() => {\n return props.hidden || form?.mode === 'preview'\n})\n\nconst formItemClass = computed(() => {\n return [\n `fat-form-item--${form?.layout || 'horizontal'}`,\n {\n 'fat-form-item--error': !!errorMessage.value,\n 'fat-form-item--required': props.required,\n 'fat-form-item--disabled': props.disabled || form?.disabled\n }\n ]\n})\n\nconst labelStyle = computed(() => {\n const style: Record<string, string> = {}\n if (form?.layout === 'horizontal' && (props.labelWidth || (form as any).labelWidth)) {\n const width = props.labelWidth || (form as any).labelWidth\n style.width = typeof width === 'number' ? `${width}px` : width\n }\n return style\n})\n\nconst contentStyle = computed(() => {\n const style: Record<string, string> = {}\n if (props.width) {\n style.width = typeof props.width === 'number' ? `${props.width}px` : props.width\n }\n return style\n})\n\nwatch(\n () => value.value,\n (newVal) => {\n if (form) {\n form.setFieldValue(props.prop, newVal)\n }\n },\n { deep: true }\n)\n</script>\n","import FatForm from './FatForm.vue'\nimport FatFormItem from './FatFormItem.vue'\nimport type { App } from 'vue'\n\nFatForm.install = (app: App) => {\n app.component('FatForm', FatForm)\n app.component('FatFormItem', FatFormItem)\n}\n\nexport default FatForm\nexport { FatFormItem }\nexport * from './types'\n","<template>\n <div class=\"fat-table-layout\">\n <div v-if=\"title || $slots.title\" class=\"fat-table-layout__header\">\n <slot name=\"title\">\n <h2 v-if=\"title\" class=\"fat-table-layout__title\">{{ title }}</h2>\n </slot>\n </div>\n \n <div v-if=\"showQuery && $slots.query\" class=\"fat-table-layout__query\">\n <slot name=\"query\" />\n </div>\n \n <div v-if=\"showToolbar && $slots.toolbar\" class=\"fat-table-layout__toolbar\">\n <slot name=\"toolbar\" />\n </div>\n \n <div class=\"fat-table-layout__table\">\n <slot name=\"default\" />\n </div>\n \n <div v-if=\"showPagination && $slots.pagination\" class=\"fat-table-layout__pagination\">\n <slot name=\"pagination\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import '../../../style/fat-table-layout.scss'\nimport type { FatTableLayoutProps } from './types'\n\nwithDefaults(defineProps<FatTableLayoutProps>(), {\n showQuery: true,\n showToolbar: true,\n showPagination: true\n})\n</script>\n","import FatTableLayout from './FatTableLayout.vue'\nimport type { App } from 'vue'\n\nFatTableLayout.install = (app: App) => {\n app.component('FatTableLayout', FatTableLayout)\n}\n\nexport default FatTableLayout\nexport * from './types'\n","<template>\n <div class=\"fat-form-layout\">\n <div v-if=\"title || $slots.title || showBack\" class=\"fat-form-layout__header\">\n <div class=\"fat-form-layout__header-left\">\n <button\n v-if=\"showBack\"\n class=\"fat-form-layout__back-btn\"\n @click=\"handleBack\"\n >\n ← {{ t('common.cancel') }}\n </button>\n <slot name=\"title\">\n <h2 v-if=\"title\" class=\"fat-form-layout__title\">{{ title }}</h2>\n </slot>\n </div>\n <div v-if=\"$slots.extra\" class=\"fat-form-layout__header-extra\">\n <slot name=\"extra\" />\n </div>\n </div>\n \n <div class=\"fat-form-layout__content\">\n <slot name=\"default\" />\n </div>\n \n <div v-if=\"showSubmitter && $slots.submitter\" class=\"fat-form-layout__footer\">\n <slot name=\"submitter\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport '../../../style/fat-form-layout.scss'\nimport { useI18n } from 'vue-i18n'\nimport type { FatFormLayoutProps } from './types'\n\nwithDefaults(defineProps<FatFormLayoutProps>(), {\n showSubmitter: true,\n showBack: false\n})\n\nconst emit = defineEmits<{\n back: []\n}>()\n\nconst { t } = useI18n()\n\nconst handleBack = () => {\n emit('back')\n}\n</script>\n","import FatFormLayout from './FatFormLayout.vue'\nimport type { App } from 'vue'\n\nFatFormLayout.install = (app: App) => {\n app.component('FatFormLayout', FatFormLayout)\n}\n\nexport default FatFormLayout\nexport * from './types'\n","import { useI18n } from 'vue-i18n'\nimport type { Composer } from 'vue-i18n'\n\nexport const useI18nT = (): Composer['t'] => {\n const { t } = useI18n()\n return t\n}\n\nexport * from './types'\n","import { useI18n } from 'vue-i18n'\nimport type { Composer } from 'vue-i18n'\n\nexport const useT = (): Composer['t'] => {\n const { t } = useI18n()\n return t\n}\n","import type { App } from 'vue'\nimport { i18n } from './i18n'\nimport './style/index.scss'\n\n// 组件\nimport FatTable from './components/FatTable'\nimport FatForm from './components/FatForm'\nimport FatTableLayout from './components/FatTableLayout'\nimport FatFormLayout from './components/FatFormLayout'\n\n// 导出类型\nexport * from './components/FatTable/types'\nexport * from './components/FatForm/types'\nexport * from './components/FatTableLayout/types'\nexport * from './components/FatFormLayout/types'\n\n// 导出组件\nexport { FatTable, FatForm, FatTableLayout, FatFormLayout }\nexport { default as i18n } from './i18n'\n\n// 导出工具函数\nexport * from './utils'\nexport * from './hooks'\n\n// 组件列表\nconst components = [\n FatTable,\n FatForm,\n FatTableLayout,\n FatFormLayout\n]\n\n// 安装函数\nconst install = (app: App) => {\n components.forEach(component => {\n const comp = component as any\n if (comp.install) {\n app.use(comp)\n } else if (comp.name) {\n app.component(comp.name, comp)\n }\n })\n \n // 安装 i18n\n app.use(i18n)\n}\n\n// 支持按需引入\nexport default {\n install,\n FatTable,\n FatForm,\n FatTableLayout,\n FatFormLayout\n}\n"],"names":["index","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_Fragment","_renderList","_normalizeStyle","_normalizeClass","_hoisted_4","_renderSlot","_hoisted_5","_createBlock","_resolveDynamicComponent","_hoisted_6","_toDisplayString","_unref","FatTable","FatForm","FatFormItem","$slots","_hoisted_7","FatTableLayout","FatFormLayout"],"mappings":"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"}
|