style:table组件完成
Showing
6 changed files
with
30 additions
and
86 deletions
... | @@ -4,12 +4,12 @@ | ... | @@ -4,12 +4,12 @@ |
4 | * @Author: sakuya | 4 | * @Author: sakuya |
5 | * @Date: 2021年6月10日10:04:07 | 5 | * @Date: 2021年6月10日10:04:07 |
6 | * @LastEditors: Please set LastEditors | 6 | * @LastEditors: Please set LastEditors |
7 | * @LastEditTime: 2023-06-29 11:14:11 | 7 | * @LastEditTime: 2023-07-05 10:39:17 |
8 | --> | 8 | --> |
9 | 9 | ||
10 | <template> | 10 | <template> |
11 | <el-select ref="select" v-model="defaultValue" :size="size" :clearable="clearable" :multiple="multiple" :collapse-tags="collapseTags" | 11 | <el-select ref="select" v-model="defaultValue" :size="size" :clearable="clearable" :multiple="multiple" :collapse-tags="collapseTags" |
12 | :collapse-tags-tooltip="collapseTagsTooltip" :filterable="filterable" :placeholder="placeholder" :disabled="disabled" :filter-method="filterMethod" | 12 | :collapse-tags-tooltip="collapseTagsTooltip" :filterable="filterable" :placeholder="placeholder" :disabled="disabled" |
13 | @remove-tag="removeTag" @visible-change="visibleChange" @clear="clear"> | 13 | @remove-tag="removeTag" @visible-change="visibleChange" @clear="clear"> |
14 | <template #empty> | 14 | <template #empty> |
15 | <div class="sc-table-select__table" :style="{width: tableWidth+'px'}" v-loading="loading"> | 15 | <div class="sc-table-select__table" :style="{width: tableWidth+'px'}" v-loading="loading"> |
... | @@ -19,14 +19,10 @@ | ... | @@ -19,14 +19,10 @@ |
19 | <el-table ref="table" :data="tableData" :height="245" :highlight-current-row="!multiple" @row-click="click" @select="select" @select-all="selectAll"> | 19 | <el-table ref="table" :data="tableData" :height="245" :highlight-current-row="!multiple" @row-click="click" @select="select" @select-all="selectAll"> |
20 | <el-table-column v-if="multiple" type="selection" width="45"></el-table-column> | 20 | <el-table-column v-if="multiple" type="selection" width="45"></el-table-column> |
21 | <el-table-column v-else type="index" width="45"> | 21 | <el-table-column v-else type="index" width="45"> |
22 | <template #default="scope"><span>{{scope.$index+(currentPage - 1) * pageSize + 1}}</span></template> | 22 | <template #default="scope"><span>{{scope.$index +1 }}</span></template> |
23 | </el-table-column> | 23 | </el-table-column> |
24 | <slot></slot> | 24 | <slot></slot> |
25 | </el-table> | 25 | </el-table> |
26 | <div class="sc-table-select__page"> | ||
27 | <el-pagination small background layout="prev, pager, next" :total="total" :page-size="pageSize" v-model:currentPage="currentPage" | ||
28 | @current-change="reload"></el-pagination> | ||
29 | </div> | ||
30 | </div> | 26 | </div> |
31 | </template> | 27 | </template> |
32 | </el-select> | 28 | </el-select> |
... | @@ -48,29 +44,23 @@ | ... | @@ -48,29 +44,23 @@ |
48 | disabled: { type: Boolean, default: false }, | 44 | disabled: { type: Boolean, default: false }, |
49 | tableWidth: { type: Number, default: 400 }, | 45 | tableWidth: { type: Number, default: 400 }, |
50 | mode: { type: String, default: "popover" }, | 46 | mode: { type: String, default: "popover" }, |
51 | props: { type: Object, default: () => { } } | 47 | props: { type: Object, default: () => { } }, |
48 | // 表格数据 | ||
49 | tableData: { type: Array, default: () => { [] } }, | ||
52 | }, | 50 | }, |
53 | data () { | 51 | data () { |
54 | return { | 52 | return { |
55 | loading: false, | 53 | loading: false, |
56 | keyword: null, | 54 | keyword: null, |
57 | defaultValue: [], | 55 | defaultValue: [], |
58 | tableData: [], | ||
59 | pageSize: config.pageSize, | ||
60 | total: 0, | ||
61 | currentPage: 1, | ||
62 | defaultProps: { | 56 | defaultProps: { |
63 | label: config.props.label, | 57 | label: config.props.label, |
64 | value: config.props.value, | 58 | value: config.props.value |
65 | page: config.request.page, | ||
66 | pageSize: config.request.pageSize, | ||
67 | keyword: config.request.keyword | ||
68 | }, | 59 | }, |
69 | formData: {} | 60 | formData: {} |
70 | } | 61 | } |
71 | }, | 62 | }, |
72 | computed: { | 63 | computed: { |
73 | |||
74 | }, | 64 | }, |
75 | watch: { | 65 | watch: { |
76 | modelValue: { | 66 | modelValue: { |
... | @@ -90,8 +80,6 @@ | ... | @@ -90,8 +80,6 @@ |
90 | //表格显示隐藏回调 | 80 | //表格显示隐藏回调 |
91 | visibleChange (visible) { | 81 | visibleChange (visible) { |
92 | if (visible) { | 82 | if (visible) { |
93 | this.currentPage = 1 | ||
94 | this.keyword = null | ||
95 | this.formData = {} | 83 | this.formData = {} |
96 | this.getData() | 84 | this.getData() |
97 | } else { | 85 | } else { |
... | @@ -100,58 +88,24 @@ | ... | @@ -100,58 +88,24 @@ |
100 | }, | 88 | }, |
101 | //获取表格数据 | 89 | //获取表格数据 |
102 | async getData () { | 90 | async getData () { |
103 | this.loading = true; | ||
104 | var reqData = { | ||
105 | [this.defaultProps.page]: this.currentPage, | ||
106 | [this.defaultProps.pageSize]: this.pageSize, | ||
107 | [this.defaultProps.keyword]: this.keyword | ||
108 | } | ||
109 | Object.assign(reqData, this.formData) | ||
110 | // var res = await this.apiObj.get(reqData); | ||
111 | let res = { | ||
112 | code: 200, | ||
113 | data: { | ||
114 | total: 2, rows: [ | ||
115 | { | ||
116 | user: 11111111111, | ||
117 | id: 111111111111 | ||
118 | }, | ||
119 | { | ||
120 | user: 2222222222222, | ||
121 | id: 22222222222 | ||
122 | } | ||
123 | ] | ||
124 | }, | ||
125 | message: "" | ||
126 | } | ||
127 | var parseData = config.parseData(res) | ||
128 | this.tableData = parseData.rows; | ||
129 | this.total = parseData.total; | ||
130 | this.loading = false; | ||
131 | //表格默认赋值 | 91 | //表格默认赋值 |
132 | this.$nextTick(() => { | 92 | if (this.multiple) { |
133 | if (this.multiple) { | 93 | this.defaultValue.forEach(row => { |
134 | this.defaultValue.forEach(row => { | 94 | var setrow = this.tableData.filter(item => item[this.defaultProps.value] === row[this.defaultProps.value]) |
135 | var setrow = this.tableData.filter(item => item[this.defaultProps.value] === row[this.defaultProps.value]) | 95 | if (setrow.length > 0) { |
136 | if (setrow.length > 0) { | 96 | this.$refs.table.toggleRowSelection(setrow[0], true); |
137 | this.$refs.table.toggleRowSelection(setrow[0], true); | 97 | } |
138 | } | 98 | }) |
139 | }) | 99 | } else { |
140 | } else { | 100 | if (this.defaultValue) { |
141 | var setrow = this.tableData.filter(item => item[this.defaultProps.value] === this.defaultValue[this.defaultProps.value]) | 101 | var setrow = this.tableData.filter(item => item[this.defaultProps.value] === this.defaultValue[this.defaultProps.value]) |
142 | this.$refs.table.setCurrentRow(setrow[0]); | 102 | // this.$refs.table.setCurrentRow(setrow[0]); |
143 | } | 103 | } |
144 | this.$refs.table.setScrollTop(0) | 104 | } |
145 | }) | 105 | // this.$refs.table.setScrollTop(0) |
146 | }, | 106 | }, |
147 | //插糟表单提交 | 107 | //插糟表单提交 |
148 | formSubmit () { | 108 | formSubmit () { |
149 | this.currentPage = 1 | ||
150 | this.keyword = null | ||
151 | this.getData() | ||
152 | }, | ||
153 | //分页刷新表格 | ||
154 | reload () { | ||
155 | this.getData() | 109 | this.getData() |
156 | }, | 110 | }, |
157 | //自动模拟options赋值 | 111 | //自动模拟options赋值 |
... | @@ -162,7 +116,9 @@ | ... | @@ -162,7 +116,9 @@ |
162 | item.currentLabel = item.value[this.defaultProps.label] | 116 | item.currentLabel = item.value[this.defaultProps.label] |
163 | }) | 117 | }) |
164 | } else { | 118 | } else { |
165 | this.$refs.select.selectedLabel = this.defaultValue[this.defaultProps.label] | 119 | if (this.defaultValue) { |
120 | this.$refs.select.selectedLabel = this.defaultValue[this.defaultProps.label] | ||
121 | } | ||
166 | } | 122 | } |
167 | }) | 123 | }) |
168 | }, | 124 | }, |
... | @@ -207,6 +163,7 @@ | ... | @@ -207,6 +163,7 @@ |
207 | this.defaultValue = row | 163 | this.defaultValue = row |
208 | this.$refs.select.blur() | 164 | this.$refs.select.blur() |
209 | this.autoCurrentLabel() | 165 | this.autoCurrentLabel() |
166 | this.$refs.table.setCurrentRow(row); | ||
210 | this.$emit('update:modelValue', this.defaultValue); | 167 | this.$emit('update:modelValue', this.defaultValue); |
211 | this.$emit('change', this.defaultValue); | 168 | this.$emit('change', this.defaultValue); |
212 | } | 169 | } |
... | @@ -225,14 +182,6 @@ | ... | @@ -225,14 +182,6 @@ |
225 | findRowByKey (value) { | 182 | findRowByKey (value) { |
226 | return this.tableData.find(item => item[this.defaultProps.value] === value) | 183 | return this.tableData.find(item => item[this.defaultProps.value] === value) |
227 | }, | 184 | }, |
228 | filterMethod (keyword) { | ||
229 | if (!keyword) { | ||
230 | this.keyword = null; | ||
231 | return false; | ||
232 | } | ||
233 | this.keyword = keyword; | ||
234 | this.getData() | ||
235 | }, | ||
236 | // 触发select隐藏 | 185 | // 触发select隐藏 |
237 | blur () { | 186 | blur () { |
238 | this.$refs.select.blur(); | 187 | this.$refs.select.blur(); |
... | @@ -244,7 +193,6 @@ | ... | @@ -244,7 +193,6 @@ |
244 | } | 193 | } |
245 | } | 194 | } |
246 | </script> | 195 | </script> |
247 | |||
248 | <style scoped> | 196 | <style scoped> |
249 | .sc-table-select__table { | 197 | .sc-table-select__table { |
250 | padding: 12px; | 198 | padding: 12px; | ... | ... |
1 | /* | 1 | /* |
2 | * @Description: | 2 | * @Description: |
3 | * @Autor: renchao | 3 | * @Autor: renchao |
4 | * @LastEditTime: 2023-06-29 11:05:49 | 4 | * @LastEditTime: 2023-07-05 09:48:23 |
5 | */ | 5 | */ |
6 | //表格选择器配置 | 6 | //表格选择器配置 |
7 | 7 | ||
... | @@ -9,17 +9,12 @@ export default { | ... | @@ -9,17 +9,12 @@ export default { |
9 | pageSize: 10, //表格每一页条数 | 9 | pageSize: 10, //表格每一页条数 |
10 | parseData: function (res) { | 10 | parseData: function (res) { |
11 | return { | 11 | return { |
12 | data: res.data, | 12 | data: res.data |
13 | rows: res.data.rows, //分析行数据字段结构 | ||
14 | total: res.data.total, //分析总数字段结构 | ||
15 | msg: res.message, //分析描述字段结构 | ||
16 | code: res.code //分析状态字段结构 | ||
17 | } | 13 | } |
18 | }, | 14 | }, |
19 | request: { | 15 | request: { |
20 | page: 'page', //规定当前分页字段 | 16 | page: 'page', //规定当前分页字段 |
21 | pageSize: 'pageSize', //规定一页条数字段 | 17 | pageSize: 'pageSize', //规定一页条数字段 |
22 | keyword: 'keyword' //规定搜索字段 | ||
23 | }, | 18 | }, |
24 | props: { | 19 | props: { |
25 | label: 'label', //映射label显示字段 | 20 | label: 'label', //映射label显示字段 | ... | ... |
This diff is collapsed.
Click to expand it.
1 | <!-- | 1 | <!-- |
2 | * @Description: | 2 | * @Description: |
3 | * @Autor: renchao | 3 | * @Autor: renchao |
4 | * @LastEditTime: 2023-07-04 16:08:03 | 4 | * @LastEditTime: 2023-07-05 09:55:42 |
5 | --> | 5 | --> |
6 | <template> | 6 | <template> |
7 | <div class="clxx"> | 7 | <div class="clxx"> |
... | @@ -67,7 +67,7 @@ | ... | @@ -67,7 +67,7 @@ |
67 | ...mapGetters(["dictData"]) | 67 | ...mapGetters(["dictData"]) |
68 | }, | 68 | }, |
69 | created () { | 69 | created () { |
70 | this.ableOperation = this.$parent.currentSelectTab.ableOperation | 70 | this.ableOperation = this.$parent?.currentSelectTab?.ableOperation || false |
71 | this.clmlInitList(1) | 71 | this.clmlInitList(1) |
72 | }, | 72 | }, |
73 | methods: { | 73 | methods: { | ... | ... |
1 | /* | 1 | /* |
2 | * @Description: | 2 | * @Description: |
3 | * @Autor: renchao | 3 | * @Autor: renchao |
4 | * @LastEditTime: 2023-05-24 14:42:24 | 4 | * @LastEditTime: 2023-07-05 09:58:31 |
5 | */ | 5 | */ |
6 | import { getForm } from "../flowform"; | 6 | import { getForm } from "../flowform"; |
7 | import { getHomeNoticeList } from "@/api/home.js" | 7 | import { getHomeNoticeList } from "@/api/home.js" |
... | @@ -38,6 +38,7 @@ export default { | ... | @@ -38,6 +38,7 @@ export default { |
38 | for (let item of this.tabList) { | 38 | for (let item of this.tabList) { |
39 | if (item.value === tabname) { | 39 | if (item.value === tabname) { |
40 | this.currentSelectTab = item | 40 | this.currentSelectTab = item |
41 | console.log(item, 'item11111111111'); | ||
41 | break; | 42 | break; |
42 | } | 43 | } |
43 | } | 44 | } | ... | ... |
-
Please register or sign in to post a comment