@alibarbar/components 1.0.0 → 1.0.1

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.
Files changed (50) hide show
  1. package/{dist/components → components}/FatTable/index.d.ts.map +1 -1
  2. package/package.json +19 -10
  3. package/dist/index.js.map +0 -1
  4. /package/{dist/components → components}/FatForm/FatForm.vue.d.ts +0 -0
  5. /package/{dist/components → components}/FatForm/FatForm.vue.d.ts.map +0 -0
  6. /package/{dist/components → components}/FatForm/FatFormItem.vue.d.ts +0 -0
  7. /package/{dist/components → components}/FatForm/FatFormItem.vue.d.ts.map +0 -0
  8. /package/{dist/components → components}/FatForm/index.d.ts +0 -0
  9. /package/{dist/components → components}/FatForm/index.d.ts.map +0 -0
  10. /package/{dist/components → components}/FatForm/types.d.ts +0 -0
  11. /package/{dist/components → components}/FatForm/types.d.ts.map +0 -0
  12. /package/{dist/components → components}/FatFormLayout/FatFormLayout.vue.d.ts +0 -0
  13. /package/{dist/components → components}/FatFormLayout/FatFormLayout.vue.d.ts.map +0 -0
  14. /package/{dist/components → components}/FatFormLayout/index.d.ts +0 -0
  15. /package/{dist/components → components}/FatFormLayout/index.d.ts.map +0 -0
  16. /package/{dist/components → components}/FatFormLayout/types.d.ts +0 -0
  17. /package/{dist/components → components}/FatFormLayout/types.d.ts.map +0 -0
  18. /package/{dist/components → components}/FatTable/FatTable.vue.d.ts +0 -0
  19. /package/{dist/components → components}/FatTable/FatTable.vue.d.ts.map +0 -0
  20. /package/{dist/components → components}/FatTable/index.d.ts +0 -0
  21. /package/{dist/components → components}/FatTable/types.d.ts +0 -0
  22. /package/{dist/components → components}/FatTable/types.d.ts.map +0 -0
  23. /package/{dist/components → components}/FatTableLayout/FatTableLayout.vue.d.ts +0 -0
  24. /package/{dist/components → components}/FatTableLayout/FatTableLayout.vue.d.ts.map +0 -0
  25. /package/{dist/components → components}/FatTableLayout/index.d.ts +0 -0
  26. /package/{dist/components → components}/FatTableLayout/index.d.ts.map +0 -0
  27. /package/{dist/components → components}/FatTableLayout/types.d.ts +0 -0
  28. /package/{dist/components → components}/FatTableLayout/types.d.ts.map +0 -0
  29. /package/{dist/hooks → hooks}/index.d.ts +0 -0
  30. /package/{dist/hooks → hooks}/index.d.ts.map +0 -0
  31. /package/{dist/i18n → i18n}/index.d.ts +0 -0
  32. /package/{dist/i18n → i18n}/index.d.ts.map +0 -0
  33. /package/{dist/i18n → i18n}/locales/en-US.d.ts +0 -0
  34. /package/{dist/i18n → i18n}/locales/en-US.d.ts.map +0 -0
  35. /package/{dist/i18n → i18n}/locales/zh-CN.d.ts +0 -0
  36. /package/{dist/i18n → i18n}/locales/zh-CN.d.ts.map +0 -0
  37. /package/{dist/index.d.ts → index.d.ts} +0 -0
  38. /package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
  39. /package/{dist/index.js → index.js} +0 -0
  40. /package/{src/style → style}/fat-form-layout.scss +0 -0
  41. /package/{src/style → style}/fat-form.scss +0 -0
  42. /package/{src/style → style}/fat-table-layout.scss +0 -0
  43. /package/{src/style → style}/fat-table.scss +0 -0
  44. /package/{src/style → style}/index.scss +0 -0
  45. /package/{src/style → style}/variables.scss +0 -0
  46. /package/{dist/style.css → style.css} +0 -0
  47. /package/{dist/utils → utils}/index.d.ts +0 -0
  48. /package/{dist/utils → utils}/index.d.ts.map +0 -0
  49. /package/{dist/utils → utils}/types.d.ts +0 -0
  50. /package/{dist/utils → utils}/types.d.ts.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FatTable/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAG9B,QAAA,MAAM,mBAAmB,EAAe,OAAO,QAAQ,GAAG;IACxD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC5B,CAAA;AAMD,eAAe,mBAAmB,CAAA;AAClC,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FatTable/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,QAAA,MAAM,mBAAmB,EAAe,OAAO,QAAQ,GAAG;IACxD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC5B,CAAA;AAMD,eAAe,mBAAmB,CAAA;AAClC,cAAc,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,24 +1,31 @@
1
1
  {
2
2
  "name": "@alibarbar/components",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "业务组件库 - FatTable、FatForm、FatTableLayout、FatFormLayout",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
6
+ "main": "./index.js",
7
+ "module": "./index.js",
8
+ "types": "./index.d.ts",
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
12
  "exports": {
13
13
  ".": {
14
- "import": "./dist/index.js",
15
- "types": "./dist/index.d.ts"
14
+ "import": "./index.js",
15
+ "types": "./index.d.ts"
16
16
  },
17
- "./style": "./dist/style.css"
17
+ "./style": "./style.css"
18
18
  },
19
19
  "files": [
20
- "dist",
21
- "src/style",
20
+ "index.js",
21
+ "index.d.ts",
22
+ "index.d.ts.map",
23
+ "style.css",
24
+ "components",
25
+ "hooks",
26
+ "i18n",
27
+ "utils",
28
+ "style",
22
29
  "README.md"
23
30
  ],
24
31
  "sideEffects": [
@@ -27,7 +34,8 @@
27
34
  ],
28
35
  "scripts": {
29
36
  "dev": "vite",
30
- "build": "vite build",
37
+ "build": "vite build && pnpm run build:flatten",
38
+ "build:flatten": "rm -f index.js index.d.ts index.d.ts.map style.css && cp -R dist/* .",
31
39
  "build:check": "vue-tsc --noEmit && vite build",
32
40
  "preview": "vite preview",
33
41
  "type-check": "vue-tsc --noEmit",
@@ -53,6 +61,7 @@
53
61
  "typescript": "^5.3.0",
54
62
  "vite": "^5.0.0",
55
63
  "vite-plugin-dts": "^3.6.0",
64
+ "vite-plugin-static-copy": "^3.1.4",
56
65
  "vue-tsc": "^1.8.27"
57
66
  },
58
67
  "peerDependencies": {
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
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 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 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 上一页\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 下一页\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 { ref, computed, reactive, watch, onMounted } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { FatTableColumn, SortOrder, FatTableProps, FatTableEmits, FatTableRequestParams, FatTableRequestResponse } from './types'\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\n<style scoped>\n.fat-table-wrapper {\n width: 100%;\n}\n\n.fat-table {\n width: 100%;\n overflow: auto;\n border: 1px solid #ebeef5;\n border-radius: 4px;\n}\n\n.fat-table__inner {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n\n.fat-table__header {\n background-color: #fafafa;\n}\n\n.fat-table__header th {\n padding: 12px 0;\n text-align: left;\n font-weight: 500;\n color: #606266;\n border-bottom: 1px solid #ebeef5;\n padding-left: 12px;\n padding-right: 12px;\n}\n\n.fat-table__body td {\n padding: 12px;\n border-bottom: 1px solid #ebeef5;\n color: #606266;\n}\n\n.fat-table__row {\n transition: background-color 0.25s;\n}\n\n.fat-table__row:hover {\n background-color: #f5f7fa;\n}\n\n.fat-table__row--stripe {\n background-color: #fafafa;\n}\n\n.fat-table__row--stripe:hover {\n background-color: #f5f7fa;\n}\n\n.fat-table__cell {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fat-table__sort {\n display: flex;\n flex-direction: column;\n cursor: pointer;\n margin-left: 4px;\n}\n\n.fat-table__sort-icon {\n font-size: 12px;\n color: #c0c4cc;\n line-height: 1;\n transition: color 0.25s;\n}\n\n.fat-table__sort-icon.active {\n color: #409eff;\n}\n\n.fat-table__loading-cell,\n.fat-table__empty-cell {\n text-align: center;\n padding: 40px 0;\n color: #909399;\n}\n\n.fat-table__pagination {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 16px;\n padding: 0 12px;\n}\n\n.fat-table__pagination-controls {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fat-table__page-size-select {\n padding: 4px 8px;\n border: 1px solid #dcdfe6;\n border-radius: 4px;\n outline: none;\n}\n\n.fat-table__pagination-btn {\n padding: 6px 12px;\n border: 1px solid #dcdfe6;\n border-radius: 4px;\n background: #fff;\n cursor: pointer;\n transition: all 0.25s;\n}\n\n.fat-table__pagination-btn:hover:not(:disabled) {\n color: #409eff;\n border-color: #409eff;\n}\n\n.fat-table__pagination-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.fat-table__pagination-text {\n color: #606266;\n font-size: 14px;\n}\n</style>\n","import FatTable from './FatTable.vue'\nimport type { App } from 'vue'\nimport type { ComponentPublicInstance } 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 { 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 || `${prop} 不能为空`\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 || '验证失败'\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 || `${p} 不能为空`\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 || '验证失败'\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\n<style scoped>\n.fat-form {\n width: 100%;\n}\n\n.fat-form--horizontal {\n /* 水平布局样式 */\n}\n\n.fat-form--vertical {\n /* 垂直布局样式 */\n}\n\n.fat-form--inline {\n /* 行内布局样式 */\n}\n\n.fat-form--disabled {\n opacity: 0.6;\n pointer-events: none;\n}\n\n.fat-form__submitter {\n display: flex;\n gap: 12px;\n margin-top: 24px;\n}\n\n.fat-form__submit-btn,\n.fat-form__reset-btn {\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.25s;\n font-size: 14px;\n}\n\n.fat-form__submit-btn {\n background-color: #409eff;\n color: #fff;\n border: 1px solid #409eff;\n}\n\n.fat-form__submit-btn:hover:not(:disabled) {\n background-color: #66b1ff;\n border-color: #66b1ff;\n}\n\n.fat-form__submit-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.fat-form__reset-btn {\n background-color: #fff;\n color: #606266;\n border: 1px solid #dcdfe6;\n}\n\n.fat-form__reset-btn:hover:not(:disabled) {\n color: #409eff;\n border-color: #409eff;\n}\n\n.fat-form__reset-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n</style>\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\n<style scoped>\n.fat-form-item {\n display: flex;\n margin-bottom: 18px;\n}\n\n.fat-form-item--horizontal {\n flex-direction: row;\n align-items: flex-start;\n}\n\n.fat-form-item--vertical {\n flex-direction: column;\n}\n\n.fat-form-item__label {\n padding-right: 12px;\n line-height: 32px;\n color: #606266;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.fat-form-item__required {\n color: #f56c6c;\n margin-right: 4px;\n}\n\n.fat-form-item__content {\n flex: 1;\n position: relative;\n}\n\n.fat-form-item__error {\n color: #f56c6c;\n font-size: 12px;\n line-height: 1;\n padding-top: 4px;\n}\n\n.fat-form-item--error .fat-form-item__content {\n /* 错误状态样式 */\n}\n\n.fat-form-item--disabled {\n opacity: 0.6;\n pointer-events: none;\n}\n</style>\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\">\nimport type { FatTableLayoutProps } from './types'\n\nwithDefaults(defineProps<FatTableLayoutProps>(), {\n showQuery: true,\n showToolbar: true,\n showPagination: true\n})\n</script>\n\n<style scoped>\n.fat-table-layout {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.fat-table-layout__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.fat-table-layout__title {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: #303133;\n}\n\n.fat-table-layout__query {\n padding: 16px;\n background-color: #fff;\n border-radius: 4px;\n border: 1px solid #ebeef5;\n}\n\n.fat-table-layout__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n}\n\n.fat-table-layout__table {\n flex: 1;\n}\n\n.fat-table-layout__pagination {\n display: flex;\n justify-content: flex-end;\n padding: 12px 0;\n}\n</style>\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 { 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\n<style scoped>\n.fat-form-layout {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.fat-form-layout__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 16px;\n border-bottom: 1px solid #ebeef5;\n}\n\n.fat-form-layout__header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.fat-form-layout__back-btn {\n padding: 4px 8px;\n background: transparent;\n border: none;\n cursor: pointer;\n color: #606266;\n font-size: 14px;\n transition: color 0.25s;\n}\n\n.fat-form-layout__back-btn:hover {\n color: #409eff;\n}\n\n.fat-form-layout__title {\n margin: 0;\n font-size: 20px;\n font-weight: 500;\n color: #303133;\n}\n\n.fat-form-layout__content {\n flex: 1;\n}\n\n.fat-form-layout__footer {\n padding-top: 16px;\n border-top: 1px solid #ebeef5;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n}\n</style>\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","$slots","_hoisted_7","FatTable"],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes