Commit 19d8e01e11644c66222f137abd05940cbdec0bb6
1 parent
50f94bfe
feat(table-img): support simple show mode and more props
改进TableImg组件,支持简单显示模式以及更多可配置的属性。
Showing
2 changed files
with
82 additions
and
18 deletions
src/components/Table/src/components/TableImg.vue
1 | 1 | <template> |
2 | 2 | <div |
3 | 3 | :class="prefixCls" |
4 | - class="flex mx-auto items-center" | |
4 | + class="flex items-center mx-auto" | |
5 | 5 | v-if="imgList && imgList.length" |
6 | 6 | :style="getWrapStyle" |
7 | 7 | > |
8 | - <PreviewGroup> | |
9 | - <template v-for="img in imgList" :key="img"> | |
10 | - <Image :width="size" :src="img" /> | |
8 | + <Badge :count="!showBadge || imgList.length == 1 ? 0 : imgList.length" v-if="simpleShow"> | |
9 | + <div class="img-div"> | |
10 | + <PreviewGroup> | |
11 | + <template v-for="(img, index) in imgList" :key="img"> | |
12 | + <Image | |
13 | + :width="size" | |
14 | + :style="{ | |
15 | + display: index === 0 ? '' : 'none !important', | |
16 | + }" | |
17 | + :src="srcPrefix + img" | |
18 | + /> | |
19 | + </template> | |
20 | + </PreviewGroup> | |
21 | + </div> | |
22 | + </Badge> | |
23 | + <PreviewGroup v-else> | |
24 | + <template v-for="(img, index) in imgList" :key="img"> | |
25 | + <Image | |
26 | + :width="size" | |
27 | + :style="{ 'margin-left': index === 0 ? 0 : margin }" | |
28 | + :src="srcPrefix + img" | |
29 | + /> | |
11 | 30 | </template> |
12 | 31 | </PreviewGroup> |
13 | 32 | </div> |
... | ... | @@ -17,24 +36,30 @@ |
17 | 36 | import { defineComponent, computed } from 'vue'; |
18 | 37 | import { useDesign } from '/@/hooks/web/useDesign'; |
19 | 38 | |
20 | - import { Image } from 'ant-design-vue'; | |
39 | + import { Image, Badge } from 'ant-design-vue'; | |
21 | 40 | import { propTypes } from '/@/utils/propTypes'; |
22 | 41 | |
23 | 42 | export default defineComponent({ |
24 | 43 | name: 'TableImage', |
25 | - components: { Image, PreviewGroup: Image.PreviewGroup }, | |
44 | + components: { Image, PreviewGroup: Image.PreviewGroup, Badge }, | |
26 | 45 | props: { |
27 | 46 | imgList: propTypes.arrayOf(propTypes.string), |
28 | 47 | size: propTypes.number.def(40), |
48 | + // 是否简单显示(只显示第一张图片) | |
49 | + simpleShow: propTypes.bool, | |
50 | + // 简单模式下是否显示图片数量的badge | |
51 | + showBadge: propTypes.bool.def(true), | |
52 | + // 图片间距 | |
53 | + margin: propTypes.number.def(4), | |
54 | + // src前缀,将会附加在imgList中每一项之前 | |
55 | + srcPrefix: propTypes.string.def(''), | |
29 | 56 | }, |
30 | 57 | setup(props) { |
31 | - const getWrapStyle = computed( | |
32 | - (): CSSProperties => { | |
33 | - const { size } = props; | |
34 | - const s = `${size}px`; | |
35 | - return { height: s, width: s }; | |
36 | - } | |
37 | - ); | |
58 | + const getWrapStyle = computed((): CSSProperties => { | |
59 | + const { size } = props; | |
60 | + const s = `${size}px`; | |
61 | + return { height: s, width: s }; | |
62 | + }); | |
38 | 63 | |
39 | 64 | const { prefixCls } = useDesign('basic-table-img'); |
40 | 65 | return { prefixCls, getWrapStyle }; |
... | ... | @@ -53,5 +78,9 @@ |
53 | 78 | border-radius: 2px; |
54 | 79 | } |
55 | 80 | } |
81 | + | |
82 | + .img-div { | |
83 | + display: inline-grid; | |
84 | + } | |
56 | 85 | } |
57 | 86 | </style> | ... | ... |
src/views/demo/table/CustomerCell.vue
... | ... | @@ -7,9 +7,31 @@ |
7 | 7 | {{ record.no }} |
8 | 8 | </Tag> |
9 | 9 | </template> |
10 | + <template #avatar="{ record }"> | |
11 | + <Avatar | |
12 | + :size="60" | |
13 | + :src="'http://api.btstu.cn/sjtx/api.php?lx=c1&format=images&id=' + record.id" | |
14 | + /> | |
15 | + </template> | |
10 | 16 | <template #img> |
11 | 17 | <TableImg |
12 | - :imgList="['https://picsum.photos/id/66/346/216', 'https://picsum.photos/id/67/346/216']" | |
18 | + :size="60" | |
19 | + :simpleShow="true" | |
20 | + :imgList="[ | |
21 | + 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png?1622962250222', | |
22 | + 'https://picsum.photos/id/66/346/216', | |
23 | + 'https://picsum.photos/id/67/346/216', | |
24 | + ]" | |
25 | + /> | |
26 | + </template> | |
27 | + <template #imgs> | |
28 | + <TableImg | |
29 | + :size="60" | |
30 | + :imgList="[ | |
31 | + 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png?1622962250222', | |
32 | + 'https://picsum.photos/id/66/346/216', | |
33 | + 'https://picsum.photos/id/67/346/216', | |
34 | + ]" | |
13 | 35 | /> |
14 | 36 | </template> |
15 | 37 | |
... | ... | @@ -24,7 +46,7 @@ |
24 | 46 | <script lang="ts"> |
25 | 47 | import { defineComponent } from 'vue'; |
26 | 48 | import { BasicTable, useTable, BasicColumn, TableImg } from '/@/components/Table'; |
27 | - import { Tag } from 'ant-design-vue'; | |
49 | + import { Tag, Avatar } from 'ant-design-vue'; | |
28 | 50 | import { demoListApi } from '/@/api/demo/table'; |
29 | 51 | const columns: BasicColumn[] = [ |
30 | 52 | { |
... | ... | @@ -33,6 +55,12 @@ |
33 | 55 | slots: { customRender: 'id' }, |
34 | 56 | }, |
35 | 57 | { |
58 | + title: '头像', | |
59 | + dataIndex: 'avatar', | |
60 | + width: 100, | |
61 | + slots: { customRender: 'avatar' }, | |
62 | + }, | |
63 | + { | |
36 | 64 | title: '分类', |
37 | 65 | dataIndex: 'category', |
38 | 66 | width: 80, |
... | ... | @@ -46,12 +74,19 @@ |
46 | 74 | width: 120, |
47 | 75 | }, |
48 | 76 | { |
49 | - title: '头像', | |
77 | + title: '图片列表1', | |
50 | 78 | dataIndex: 'img', |
51 | - width: 120, | |
79 | + helpMessage: ['这是简单模式的图片列表', '只会显示一张在表格中', '但点击可预览多张图片'], | |
80 | + width: 140, | |
52 | 81 | slots: { customRender: 'img' }, |
53 | 82 | }, |
54 | 83 | { |
84 | + title: '照片列表2', | |
85 | + dataIndex: 'imgs', | |
86 | + width: 160, | |
87 | + slots: { customRender: 'imgs' }, | |
88 | + }, | |
89 | + { | |
55 | 90 | title: '地址', |
56 | 91 | dataIndex: 'address', |
57 | 92 | }, |
... | ... | @@ -70,7 +105,7 @@ |
70 | 105 | }, |
71 | 106 | ]; |
72 | 107 | export default defineComponent({ |
73 | - components: { BasicTable, TableImg, Tag }, | |
108 | + components: { BasicTable, TableImg, Tag, Avatar }, | |
74 | 109 | setup() { |
75 | 110 | const [registerTable] = useTable({ |
76 | 111 | title: '自定义列内容', | ... | ... |