vue项目使用el-table实现无限滚动

爱被打了一巴掌 2022-11-27 03:26 500阅读 0赞

vue项目使用el-table实现无限滚动
案例如图所示,该案例是一个弹框内容
在这里插入图片描述

注意:属性可参考ElementUi中的InfiniteScroll 无限滚动,当数据不再继续请求接口时可用“infinite-scroll-disabled”属性判断是否继续加载
在这里插入图片描述

git地址如下:

https://github.com/ElemeFE/vue-infinite-scroll

git上网页截图
在这里插入图片描述
在这里插入图片描述

步骤如下:
1,前端安装“save el-table-infinite-scrol”

cnpm install —save el-table-infinite-scroll

2,全局引用,在main.js中引用(vue3项目)

  1. import Vue from 'vue';
  2. import elTableInfiniteScroll from 'el-table-infinite-scroll';
  3. Vue.use(elTableInfiniteScroll);

3,局部引用

  1. <script>
  2. import elTableInfiniteScroll from 'el-table-infinite-scroll';
  3. export default {
  4. directives: {
  5. 'el-table-infinite-scroll': elTableInfiniteScroll
  6. }
  7. }
  8. </script>

4,案例如下:结果如上图所示:

  1. <template>
  2. <div class="job-content">
  3. <div class="top-block">
  4. <el-input
  5. class="top-in"
  6. placeholder="请输入内容"
  7. size="small"
  8. v-model="searchWord">
  9. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  10. </el-input>
  11. </div>
  12. <div class="tab-block">
  13. <el-table
  14. v-loading="loading"
  15. :data="tabDtatList"
  16. style="width: 100%"
  17. height="300"
  18. @selection-change="handleSelectionChange"
  19. cell-class-name="my-cell"
  20. v-el-table-infinite-scroll="load"
  21. infinite-scroll-disabled="disabled"
  22. >
  23. <el-table-column
  24. header-align="left"
  25. class-name="myCul"
  26. type="selection"
  27. width="55">
  28. </el-table-column>
  29. <el-table-column
  30. class-name="myCul"
  31. prop="workName"
  32. label="职位名称"
  33. width="150">
  34. </el-table-column>
  35. <el-table-column
  36. prop="personCount"
  37. label="招聘人数"
  38. width="80">
  39. </el-table-column>
  40. <el-table-column
  41. prop="salaryMin"
  42. label="薪水/元">
  43. <template slot-scope="scope">
  44. <!--<el-button @click="handleEdit(scope.$index, scope.row)">Edit</el-button>
  45. <el-button @click="handleDelete(scope.$index, scope.row)">Delete</el-button>
  46. -->
  47. <span v-if="scope.row.salaryMin==0 && scope.row.salaryMax==0" >面议</span>
  48. <span v-else>{
  49. {scope.row.salaryMin}}-{
  50. {scope.row.salaryMax}}</span>
  51. </template>
  52. </el-table-column>
  53. </el-table>
  54. </div>
  55. <div class="btn-block">
  56. <span class="btns btn-cancel" @click="clickJobCancel">取消</span>
  57. <span class="btns btn-sure" @click="cliceJobSure">确定</span>
  58. </div>
  59. </div>
  60. </template>
  61. <script>
  62. import {GetSpeechJobList} from '@/network/request'
  63. import {mapGetters} from "vuex";
  64. export default {
  65. name: "JobDataPage",
  66. data() {
  67. return {
  68. tabDtatList:[],
  69. loading: true,
  70. pageObj:{
  71. nowPage:0,//当前页数
  72. pageSize:10,//每页数量
  73. },
  74. disabled:false,
  75. searchWord:'',
  76. selectArr:[],
  77. }
  78. },
  79. computed:{
  80. ... mapGetters(['companyInfo']),
  81. },
  82. created() {
  83. // this.getSpeechJobList();
  84. },
  85. mounted() {
  86. console.log("----",this.companyInfo.compId)
  87. },
  88. methods: {
  89. handleSelectionChange(val) {
  90. this.selectArr = val;//勾选放在multipleSelection数组中
  91. console.log("val-==",val)
  92. },
  93. cliceJobSure(){
  94. this.$emit('btnJobSure',this.selectArr)
  95. },
  96. clickJobCancel(){
  97. this.$emit('btnJobCancel')
  98. },
  99. getSpeechJobList(){
  100. this.disabled = true
  101. this.pageObj.nowPage ++;
  102. let cnt = (this.pageObj.nowPage-1) * this.pageObj.pageSize;
  103. let param = {companyId:this.companyInfo.compId,offset:cnt}
  104. GetSpeechJobList(param).then(res =>{
  105. this.disabled = false
  106. //console.log("res==123=",res)
  107. this.loading = false
  108. if(res && res.code === 0 ){
  109. if(!res.data || res.data.length < this.pageObj.pageSize) {
  110. this.disabled = true
  111. }
  112. if(this.pageObj.nowPage==1){
  113. this.tabDtatList = res.data
  114. }else {
  115. this.tabDtatList = this.tabDtatList.concat(res.data)
  116. }
  117. }
  118. })
  119. },
  120. load() {
  121. this.getSpeechJobList();
  122. // console.log("加载下一页-=",this.pageObj.nowPage)
  123. // console.log("加载下一页-=",this.disabled )
  124. },
  125. },
  126. }
  127. </script>
  128. <style scoped lang="less">
  129. .job-content{
  130. padding: 24px 0 24px 24px;
  131. .btn-block{
  132. margin-top: 20px;
  133. text-align: center;
  134. .btns{
  135. width:65px;
  136. height:32px;
  137. line-height: 32px;
  138. text-align: center;
  139. display: inline-block;
  140. border-radius:2px;
  141. font-size: 14px;
  142. &:hover{
  143. cursor: pointer;
  144. }
  145. }
  146. .btn-cancel{
  147. background:rgba(255,255,255,1);
  148. border:1px solid rgba(0,0,0,0.15);
  149. color: #000000;
  150. }
  151. .btn-sure{
  152. margin-left: 8px;
  153. background:rgba(67,127,255,1);
  154. color: #FFFFFF;
  155. }
  156. }
  157. .top-block{
  158. .top-in{
  159. width: 296px;
  160. margin-bottom: 15px;
  161. margin-left: 10px;
  162. }
  163. .top-release{
  164. color: #437FFF;
  165. height:22px;
  166. line-height:22px;
  167. font-size:14px;
  168. padding-left: 12px;
  169. text-decoration: underline;
  170. &:hover{
  171. cursor: pointer;
  172. }
  173. }
  174. }
  175. }
  176. </style>

发表评论

表情:
评论列表 (有 0 条评论,500人围观)

还没有评论,来说两句吧...

相关阅读