From c64ed917ba92f5e0c6c91e1fe7cf469ae6aa023b Mon Sep 17 00:00:00 2001 From: Ryan <425547052@qq.com> Date: Tue, 12 Sep 2023 15:26:35 +0800 Subject: [PATCH] feat: add tabs bar to CrudTable --- .history/mock/api/post_20230912152251.js | 138 +++++++++ .history/mock/api/post_20230912152547.js | 144 +++++++++ .../table/CrudTable_20230912152251.vue | 149 +++++++++ .../table/CrudTable_20230912152508.vue | 190 ++++++++++++ .../views/demo/table/index_20230912152251.vue | 233 ++++++++++++++ .../views/demo/table/index_20230912152520.vue | 287 ++++++++++++++++++ .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 7 + .vs/slnx.sqlite | Bin 0 -> 98304 bytes .vs/vue-naive-admin/v16/.suo | Bin 0 -> 14848 bytes mock/api/post.js | 6 + src/components/table/CrudTable.vue | 45 ++- src/views/demo/table/index.vue | 56 +++- 13 files changed, 1255 insertions(+), 3 deletions(-) create mode 100644 .history/mock/api/post_20230912152251.js create mode 100644 .history/mock/api/post_20230912152547.js create mode 100644 .history/src/components/table/CrudTable_20230912152251.vue create mode 100644 .history/src/components/table/CrudTable_20230912152508.vue create mode 100644 .history/src/views/demo/table/index_20230912152251.vue create mode 100644 .history/src/views/demo/table/index_20230912152520.vue create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 .vs/vue-naive-admin/v16/.suo diff --git a/.history/mock/api/post_20230912152251.js b/.history/mock/api/post_20230912152251.js new file mode 100644 index 0000000..b6c3e54 --- /dev/null +++ b/.history/mock/api/post_20230912152251.js @@ -0,0 +1,138 @@ +const posts = [ + { + title: '使用纯css优雅配置移动端rem布局', + author: '大脸怪', + category: 'Css', + description: '通常配置rem布局会使用js进行处理,比如750的设计稿会这样...', + content: '通常配置rem布局会使用js进行处理,比如750的设计稿会这样', + isRecommend: true, + isPublish: true, + createDate: '2021-11-04T04:03:36.000Z', + updateDate: '2021-11-04T04:03:36.000Z', + }, + { + title: 'Vue2&Vue3项目风格指南', + author: 'Ronnie', + category: 'Vue', + description: '总结的Vue2和Vue3的项目风格', + content: '### 1. 命名风格\n\n> 文件夹如果是由多个单词组成,应该始终是横线连接 ', + isRecommend: true, + isPublish: true, + createDate: '2021-10-25T08:57:47.000Z', + updateDate: '2022-02-28T04:02:39.000Z', + }, + { + title: '如何优雅的给图片添加水印', + author: '大脸怪', + category: 'JavaScript', + description: '优雅的给图片添加水印', + content: '我之前写过一篇文章记录了一次上传图片的优化史', + isRecommend: true, + isPublish: true, + createDate: '2021-06-24T18:46:19.000Z', + updateDate: '2021-09-23T07:51:22.000Z', + }, + + { + title: '前端缓存的理解', + author: '大脸怪', + category: 'Http', + description: '谈谈前端缓存的理解', + content: + '> 背景\n\n公司有个vue-cli3移动端web项目发版更新后发现部分用户手机在钉钉内置浏览器打开出现了缓存', + isRecommend: true, + isPublish: true, + createDate: '2021-06-10T18:51:19.000Z', + updateDate: '2021-09-17T09:33:24.000Z', + }, + { + title: 'Promise的五个静态方法', + author: '大脸怪', + category: 'JavaScript', + description: '简单介绍下在 Promise 类中,有5 种静态方法及它们的使用场景', + content: + '## 1. Promise.all\n\n并行执行多个 promise,并等待所有 promise 都准备就绪。再对它们进行处理。', + isRecommend: true, + isPublish: true, + createDate: '2021-02-22T22:37:06.000Z', + updateDate: '2021-09-17T09:33:24.000Z', + }, +] + +export default [ + { + url: '/api/posts', + method: 'get', + response: (data = {}) => { + const { title, pageNo, pageSize } = data.query + let pageData = [] + let total = 60 + const filterData = posts.filter( + (item) => item.title.includes(title) || (!title && title !== 0) + ) + if (filterData.length) { + if (pageSize) { + while (pageData.length < pageSize) { + pageData.push(filterData[Math.round(Math.random() * (filterData.length - 1))]) + } + } else { + pageData = filterData + } + pageData = pageData.map((item, index) => ({ + id: pageSize * (pageNo - 1) + index + 1, + ...item, + })) + } else { + total = 0 + } + return { + code: 0, + message: 'ok', + data: { + pageData, + total, + pageNo, + pageSize, + }, + } + }, + }, + { + url: '/api/post', + method: 'post', + response: ({ body }) => { + return { + code: 0, + message: 'ok', + data: body, + } + }, + }, + { + url: '/api/post/:id', + method: 'put', + response: ({ query, body }) => { + return { + code: 0, + message: 'ok', + data: { + id: query.id, + body, + }, + } + }, + }, + { + url: '/api/post/:id', + method: 'delete', + response: ({ query }) => { + return { + code: 0, + message: 'ok', + data: { + id: query.id, + }, + } + }, + }, +] diff --git a/.history/mock/api/post_20230912152547.js b/.history/mock/api/post_20230912152547.js new file mode 100644 index 0000000..80ffa1a --- /dev/null +++ b/.history/mock/api/post_20230912152547.js @@ -0,0 +1,144 @@ +const posts = [ + { + title: '使用纯css优雅配置移动端rem布局', + author: '大脸怪', + category: 'Css', + description: '通常配置rem布局会使用js进行处理,比如750的设计稿会这样...', + content: '通常配置rem布局会使用js进行处理,比如750的设计稿会这样', + isRecommend: true, + isPublish: true, + total_expanse: 100, + state: 'approve', + createDate: '2021-11-04T04:03:36.000Z', + updateDate: '2021-11-04T04:03:36.000Z', + }, + { + title: 'Vue2&Vue3项目风格指南', + author: 'Ronnie', + category: 'Vue', + description: '总结的Vue2和Vue3的项目风格', + content: '### 1. 命名风格\n\n> 文件夹如果是由多个单词组成,应该始终是横线连接 ', + isRecommend: true, + total_expanse: 100, + isPublish: true, + createDate: '2021-10-25T08:57:47.000Z', + updateDate: '2022-02-28T04:02:39.000Z', + }, + { + title: '如何优雅的给图片添加水印', + author: '大脸怪', + category: 'JavaScript', + description: '优雅的给图片添加水印', + content: '我之前写过一篇文章记录了一次上传图片的优化史', + isRecommend: true, + total_expanse: 100, + isPublish: true, + createDate: '2021-06-24T18:46:19.000Z', + updateDate: '2021-09-23T07:51:22.000Z', + }, + + { + title: '前端缓存的理解', + author: '大脸怪', + category: 'Http', + description: '谈谈前端缓存的理解', + content: + '> 背景\n\n公司有个vue-cli3移动端web项目发版更新后发现部分用户手机在钉钉内置浏览器打开出现了缓存', + isRecommend: true, + isPublish: true, + total_expanse: 100, + createDate: '2021-06-10T18:51:19.000Z', + updateDate: '2021-09-17T09:33:24.000Z', + }, + { + title: 'Promise的五个静态方法', + author: '大脸怪', + category: 'JavaScript', + description: '简单介绍下在 Promise 类中,有5 种静态方法及它们的使用场景', + content: + '## 1. Promise.all\n\n并行执行多个 promise,并等待所有 promise 都准备就绪。再对它们进行处理。', + isRecommend: true, + isPublish: true, + total_expanse: 100, + createDate: '2021-02-22T22:37:06.000Z', + updateDate: '2021-09-17T09:33:24.000Z', + }, +] + +export default [ + { + url: '/api/posts', + method: 'get', + response: (data = {}) => { + const { title, pageNo, pageSize } = data.query + let pageData = [] + let total = 60 + const filterData = posts.filter( + (item) => item.title.includes(title) || (!title && title !== 0) + ) + if (filterData.length) { + if (pageSize) { + while (pageData.length < pageSize) { + pageData.push(filterData[Math.round(Math.random() * (filterData.length - 1))]) + } + } else { + pageData = filterData + } + pageData = pageData.map((item, index) => ({ + id: pageSize * (pageNo - 1) + index + 1, + ...item, + })) + } else { + total = 0 + } + return { + code: 0, + message: 'ok', + data: { + pageData, + total, + pageNo, + pageSize, + }, + } + }, + }, + { + url: '/api/post', + method: 'post', + response: ({ body }) => { + return { + code: 0, + message: 'ok', + data: body, + } + }, + }, + { + url: '/api/post/:id', + method: 'put', + response: ({ query, body }) => { + return { + code: 0, + message: 'ok', + data: { + id: query.id, + body, + }, + } + }, + }, + { + url: '/api/post/:id', + method: 'delete', + response: ({ query }) => { + return { + code: 0, + message: 'ok', + data: { + id: query.id, + }, + } + }, + }, +] diff --git a/.history/src/components/table/CrudTable_20230912152251.vue b/.history/src/components/table/CrudTable_20230912152251.vue new file mode 100644 index 0000000..f2a36c0 --- /dev/null +++ b/.history/src/components/table/CrudTable_20230912152251.vue @@ -0,0 +1,149 @@ + + + diff --git a/.history/src/components/table/CrudTable_20230912152508.vue b/.history/src/components/table/CrudTable_20230912152508.vue new file mode 100644 index 0000000..4d2a39d --- /dev/null +++ b/.history/src/components/table/CrudTable_20230912152508.vue @@ -0,0 +1,190 @@ + + + diff --git a/.history/src/views/demo/table/index_20230912152251.vue b/.history/src/views/demo/table/index_20230912152251.vue new file mode 100644 index 0000000..897a821 --- /dev/null +++ b/.history/src/views/demo/table/index_20230912152251.vue @@ -0,0 +1,233 @@ + + + diff --git a/.history/src/views/demo/table/index_20230912152520.vue b/.history/src/views/demo/table/index_20230912152520.vue new file mode 100644 index 0000000..31404f5 --- /dev/null +++ b/.history/src/views/demo/table/index_20230912152520.vue @@ -0,0 +1,287 @@ + + + diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..866f1e1 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..b9b9a4a --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\C:\\Users\\P17 Gen1\\Source\\Repos\\vue-naive-admin", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..5aaa25e3cb3bba7781fdfb99c35237ab4db22264 GIT binary patch literal 98304 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

c!NyMq{9)NTGA)yol4KZeMC+SciH0ga$;!A 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 literal 0 HcmV?d00001 diff --git a/.vs/vue-naive-admin/v16/.suo b/.vs/vue-naive-admin/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..03f5896c6d5d7862486729bc15d39e316a91264e GIT binary patch literal 14848 zcmeI3-EtH~6vsOtDEI{`sE8UdA}WdbG9f4!NcfZxWFcr(F5K)Uu&|q?c9Q@P;9FQ_ z=^OY47FBv-S;B>7l~rEgg|A>~SrUK$nd$88?9S}$E@F1wlR7&+Jw0>!bf3@e&Yj!a z?|$*su3t?64x5eU-s%>!*;n7;E1PY`?BHH?_f}U|^+;ukZD^tqIBypCTQZ&In3?CA zH#aqvv0^UEJG!0 zGVm|F?4vwRP2T@vg|g^BMEwRZF8?3U*6Q_6%76PApuEfbmcRO0>K+3h2cH0+1T}`+ z!Kc8d!52WiBYPlOcn(x~E7#|}vYxkL{fxka)c?C@iu(Vx1O~AB_aOEEEOguY?+pK% z?RRR9tqqZ3*7tL2FvSnMr-R;f`}*U#2^_;^JdKX zog?zNOl{tYf!rqyOa<6a{2~8usa9xGR&|0J&7EM<%nZ4nWiC0f zUz+lDJmLbq$uI)$xEIWM`jw+r5$O#5owYA>Jpg^hVzSwB>5tJ?dLkI-YctIBW&RZR zUUFtUWv*~naGON_cGkiFQNHMf|7G-#(uZ04aE)ku!5I}vLOASW{^iSMtK#xMO4}?b z2=cEyAVm)redF)8to*yT4*uWgQ|hmv5`9+#()1$j*Y8G?U>QX0>={2!)m82#g( zB+4#G|3y0r;J-upfbxL2^c5HEQ6d2Z`7hGHiOkQ?3p-P8``~Xq<6o+OrSd-kztT13 z!G5g_lR@mC!?$=B1p8O%Ua{2$??I6N%JT2;N$D2{8Grd%mwG(MS==wMvLBcK`$gA&rrh@* z3w_y38-J-EvfuSWqwmWOH9}u}=>6h17Du^_4UP6cHldJ)#eRo0h*52G8GqA8>ipk{ zTh=_@0>{XGP_cc>Wt?Ekk7X(`bAKP1g=U0h~jsJDohNfY!?!cRKON zGV-omXqrsFmyCaelJe9Xf6Ja-x=Gy>wbN*eBAP5;)b|r!Z6B)xJ-k1{?*L!v<#(7C z((n|mMPrtGW4>zvE>dQNu@pByv;a3b=2CN%Z<+ZikX=YVn^R|`v68L=*HqKaNsx;h z*rdUh;YKl4&f(@x6Iy`a+@!GRveT~I8S{M$@RY#=$q&j3{MZ8gxO>>wm?^EDxz?>2 zeW{f)Yu%KQWLsvIR?s48Qy!i&WEGOWpISir#8=*l2DNUkJWZT6qwUkFlPny}!BNr2 z+WS`G$>p>)=BYf7K>T7rhc9!D(Y&mQT}LT<5VJ!0=O>_>w_U_;Yqdqz`y83pFd5hh zYUU|VJ8Ob=Phi?vrO_UZ+OD8^v+T`k4K>4^%1JV+oReQ^hQmPg8v*TO{l$VtSO0MT zTsl3F>>lYG8t5Jz92o3AkW8h!dxr-42ZmE~sdV3rvrJG*QTf02&jkLpfQ#I#QA z{=e?EyXcbt9hLtj(7wwAqo2iUWSneSk>3(Ei(VFfl@^CM&8bx%?Shwr@^zV(OPI2YL7(EG{f!lAC7{};9YaEUzz`Tj|KiLTlQ2||Az`yX1HmfsOX(I3N$xjRugq7bbT%d4G5K8yP> zhoP_YWjb#r9n?3gfqaI1y&x`qyQ(ZNyGXArX#ZDq?b&BrU+rq?*Rub*;KWo~`PQoU zl0!oLi@t?wboKlUX!pNsq5p5}|4tA`Uc}=E_nZBD22niKbN)l;f9?23eLLrf&i@4YZ=e6G`TSqa i=MUD?`M-Al=UU==^S4IxKlvf8Kge^`lYcgvKmG%QgQG_P literal 0 HcmV?d00001 diff --git a/mock/api/post.js b/mock/api/post.js index b6c3e54..80ffa1a 100644 --- a/mock/api/post.js +++ b/mock/api/post.js @@ -7,6 +7,8 @@ const posts = [ content: '通常配置rem布局会使用js进行处理,比如750的设计稿会这样', isRecommend: true, isPublish: true, + total_expanse: 100, + state: 'approve', createDate: '2021-11-04T04:03:36.000Z', updateDate: '2021-11-04T04:03:36.000Z', }, @@ -17,6 +19,7 @@ const posts = [ description: '总结的Vue2和Vue3的项目风格', content: '### 1. 命名风格\n\n> 文件夹如果是由多个单词组成,应该始终是横线连接 ', isRecommend: true, + total_expanse: 100, isPublish: true, createDate: '2021-10-25T08:57:47.000Z', updateDate: '2022-02-28T04:02:39.000Z', @@ -28,6 +31,7 @@ const posts = [ description: '优雅的给图片添加水印', content: '我之前写过一篇文章记录了一次上传图片的优化史', isRecommend: true, + total_expanse: 100, isPublish: true, createDate: '2021-06-24T18:46:19.000Z', updateDate: '2021-09-23T07:51:22.000Z', @@ -42,6 +46,7 @@ const posts = [ '> 背景\n\n公司有个vue-cli3移动端web项目发版更新后发现部分用户手机在钉钉内置浏览器打开出现了缓存', isRecommend: true, isPublish: true, + total_expanse: 100, createDate: '2021-06-10T18:51:19.000Z', updateDate: '2021-09-17T09:33:24.000Z', }, @@ -54,6 +59,7 @@ const posts = [ '## 1. Promise.all\n\n并行执行多个 promise,并等待所有 promise 都准备就绪。再对它们进行处理。', isRecommend: true, isPublish: true, + total_expanse: 100, createDate: '2021-02-22T22:37:06.000Z', updateDate: '2021-09-17T09:33:24.000Z', }, diff --git a/src/components/table/CrudTable.vue b/src/components/table/CrudTable.vue index f2a36c0..4d2a39d 100644 --- a/src/components/table/CrudTable.vue +++ b/src/components/table/CrudTable.vue @@ -9,6 +9,7 @@ :scroll-x="scrollX" :columns="columns" :data="tableData" + :summary="getSummary" :row-key="(row) => row[rowKey]" :pagination="isPagination ? pagination : false" @update:checked-row-keys="onChecked" @@ -46,6 +47,21 @@ const props = defineProps({ type: Array, required: true, }, + //获取总结数据 + getSummary: { + type: Function, + required: false, + }, + //总结栏所需列名 + sumaryCol: { + type: String, + default: 'total_expanse', + }, + //总结数据 + summaryRef: { + type: Object, + default: null, + }, /** queryBar中的参数 */ queryItems: { type: Object, @@ -53,6 +69,7 @@ const props = defineProps({ return {} }, }, + /** 补充参数(可选) */ extraParams: { type: Object, @@ -75,11 +92,35 @@ const props = defineProps({ }, }) -const emit = defineEmits(['update:queryItems', 'onChecked', 'onDataChange']) +const emit = defineEmits(['update:queryItems', 'onChecked', 'onDataChange', 'setSum']) const loading = ref(false) const initQuery = { ...props.queryItems } const tableData = ref([]) -const pagination = reactive({ page: 1, pageSize: 10 }) +const pagination = reactive({ page: 1, pageSize: 1 }) + +const getSummary = (pageData) => { + // console.log(props.summaryRef) + // // eslint-disable-next-line vue/no-mutating-props + const sum = pageData.reduce( + (prevValue, row) => Number(prevValue) + Number(row[props.sumaryCol]), + 0 + ) + emit('setSum', sum) + console.log(props.sumaryCol) + return { + title: { + value: h( + 'div', + { style: 'top:10%' }, + 'Total: ' + Number(sum).toFixed(2) + // eslint-disable-next-line vue/no-mutating-props + // props.summaryRef.value = num + // return num + ), + colSpan: 10, + }, + } +} async function handleQuery() { try { diff --git a/src/views/demo/table/index.vue b/src/views/demo/table/index.vue index 897a821..31404f5 100644 --- a/src/views/demo/table/index.vue +++ b/src/views/demo/table/index.vue @@ -12,7 +12,19 @@ - + + + + + @@ -104,6 +119,10 @@ const queryItems = ref({}) /** 补充参数(可选) */ const extraParams = ref({}) +//总结数 +const sumRef = ref(0) +const current_ms = ref('total_expanse') + onActivated(() => { $table.value?.handleSearch() }) @@ -193,6 +212,41 @@ const columns = [ }, ] +//tabs栏 +const tabsOptions = ref([ + { + name: 'tab1', + value: 'tab1', + text: 'tab1', + }, + { + name: 'tab2', + value: 'tab2', + text: 'tab2', + }, + { + name: 'tab3', + value: 'tab3', + text: 'tab3', + }, + { + name: 'tab4', + value: 'tab4', + text: 'tab4', + }, +]) +//设置总结需要传的函数 +function setSum(val) { + sumRef.value = val + console.log(sumRef.value) +} + +//根据tabs选择状态搜索 +function selecetChap(val) { + queryItems.value.state = val + $table.value?.handleSearch() +} + // 选中事件 function onChecked(rowKeys) { if (rowKeys.length) $message.info(`选中${rowKeys.join(' ')}`)