• 超长表单分页校验,下一页和上一页功能


    父组件(最外层)

    1. <script>
    2. import PageOne from './pageOne';
    3. import PageTwo from './pageTwo';
    4. import PageThree from './pageThree';
    5. import PageFour from './pageFour';
    6. import PageFive from './pageFive';
    7. const compsInfo = {
    8. pageOne: {
    9. compId: 'pageOne', label: '第一页', status: 'process', index: 1,
    10. },
    11. pageTwo: {
    12. compId: 'pageTwo', label: '第二页', status: 'process', index: 2,
    13. },
    14. pageThree: {
    15. compId: 'pageThree', label: '第三页', status: 'process', index: 3,
    16. },
    17. pageFour: {
    18. compId: 'pageFour', label: '第四页', status: 'process', index: 4,
    19. },
    20. pageFive: {
    21. compId: 'pageFive', label: '第五页', status: 'process', index: 5,
    22. },
    23. };
    24. const steps = Object.values(compsInfo).sort((a, b) => a.index - b.index);
    25. export default {
    26. components: {
    27. PageOne,
    28. PageTwo,
    29. PageThree,
    30. PageFour,
    31. PageFive,
    32. },
    33. props: {},
    34. data() {
    35. return {
    36. currentComponentIndex: 0,
    37. entireData: {
    38. // 第一页数据
    39. pageOne: {
    40. name: '',
    41. region: '',
    42. delivery: false,
    43. type: [],
    44. resource: '',
    45. desc: '',
    46. },
    47. // 第二页数据
    48. pageTwo: {
    49. name: '',
    50. region: '',
    51. delivery: false,
    52. type: [],
    53. resource: '',
    54. desc: '',
    55. },
    56. // 第三页数据
    57. pageThree: {
    58. name: '',
    59. region: '',
    60. delivery: false,
    61. type: [],
    62. resource: '',
    63. desc: '',
    64. },
    65. // 第四页数据
    66. pageFour: {
    67. name: '',
    68. region: '',
    69. delivery: false,
    70. type: [],
    71. resource: '',
    72. desc: '',
    73. },
    74. // 第五页数据
    75. pageFive: {
    76. name: '',
    77. region: '',
    78. delivery: false,
    79. type: [],
    80. resource: '',
    81. desc: '',
    82. },
    83. },
    84. };
    85. },
    86. computed: {
    87. steps() {
    88. // 第一页
    89. if (this.currentComponentIndex === 0) {
    90. return steps;
    91. } else {
    92. // 如果存在内容信息页,则过滤掉steps中内容信息部分
    93. return steps;
    94. }
    95. },
    96. nextStepButtonName() {
    97. return '下一步';
    98. },
    99. // 下一个组件
    100. currentComponent() {
    101. return this.steps[this.currentComponentIndex] &&
    102. this.steps[this.currentComponentIndex].compId;
    103. },
    104. },
    105. methods: {
    106. // 上一步
    107. pre() {
    108. this.currentComponentIndex -= 1;
    109. this.steps[this.currentComponentIndex].status = 'process';
    110. },
    111. // 下一步
    112. async next() {
    113. // 第一页
    114. if (this.currentComponentIndex + 1 === 1) {
    115. await this.$refs.pageOne.pageOneSubmitForm();
    116. }
    117. // 第二页
    118. if (this.currentComponentIndex + 1 === 2) {
    119. await this.$refs.pageTwo.pageTwoSubmitForm();
    120. }
    121. // 第三页
    122. if (this.currentComponentIndex + 1 === 3) {
    123. await this.$refs.pageThree.pageThreeSubmitForm();
    124. }
    125. // 第四页
    126. if (this.currentComponentIndex + 1 === 4) {
    127. await this.$refs.pageFour.pageFourSubmitForm();
    128. }
    129. // 第五页
    130. if (this.currentComponentIndex + 1 === 5) {
    131. await this.$refs.pageFive.pageFiveSubmitForm();
    132. }
    133. // 下一步 要标记为完成
    134. this.steps[this.currentComponentIndex].status = 'success';
    135. this.currentComponentIndex += 1;
    136. },
    137. // 暂存 调接口把entireData传给接口即可
    138. save() {
    139. },
    140. // 提交 调接口把entireData传给接口即可
    141. onSubmit() {
    142. },
    143. },
    144. };
    145. script>
    146. <style lang="scss" scoped>
    147. .footer {
    148. width: 100%;
    149. height: 40px;
    150. line-height: 40px;
    151. padding: 10px 0;
    152. background-color: #eee;
    153. text-align: center;
    154. position: fixed;
    155. bottom: 0;
    156. left: 0;
    157. right: 0;
    158. z-index: 2;
    159. box-sizing: content-box;
    160. }
    161. style>

    第一页的子组件   

    1. <script>
    2. export default {
    3. props: {
    4. entireData: {
    5. type: Object,
    6. default: () => ({}),
    7. },
    8. },
    9. data() {
    10. return {
    11. ruleForm: this.entireData.pageOne,
    12. rules: {
    13. name: [
    14. { required: true, message: '请输入活动名称', trigger: 'blur' },
    15. {
    16. min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur',
    17. },
    18. ],
    19. region: [
    20. { required: true, message: '请选择活动区域', trigger: 'change' },
    21. ],
    22. type: [
    23. {
    24. type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change',
    25. },
    26. ],
    27. resource: [
    28. { required: true, message: '请选择活动资源', trigger: 'change' },
    29. ],
    30. desc: [
    31. { required: true, message: '请填写活动形式', trigger: 'blur' },
    32. ],
    33. },
    34. };
    35. },
    36. methods: {
    37. pageOneSubmitForm(formName = 'ruleForm') {
    38. return new Promise((resolve) => {
    39. this.$refs[formName].validate((valid) => {
    40. if (valid) {
    41. resolve(true);
    42. } else {
    43. return false;
    44. }
    45. });
    46. });
    47. },
    48. },
    49. };
    50. script>
    51. <style lang="scss" scoped>
    52. .footer {
    53. width: 100%;
    54. height: 40px;
    55. line-height: 40px;
    56. padding: 10px 0;
    57. background-color: #eee;
    58. text-align: center;
    59. position: fixed;
    60. bottom: 0;
    61. left: 0;
    62. right: 0;
    63. z-index: 2;
    64. box-sizing: content-box;
    65. }
    66. style>

    第二页-第五页和第一页结构一样. 只有(数据: ruleForm: this.entireData.pageOne)和(方法pageOneSubmitForm ) 这两个地方不一样, 稍微改一下就行.这里就不贴代码了. 

    其他的地方可以根据自己的需求改.

  • 相关阅读:
    零基础学Python:Numpy用法
    L2-021 点赞狂魔
    SpringBoot结合MyBatis实现多数据源配置
    隐藏idea中的文件
    防火墙命令补充和dmz_远程管理
    JDBC的基本使用(mysql与java)
    Ubuntu - 安装 、配置 Redis 远程连接和密码
    php健身房教练预约系统网站
    npm install node-sass 报错如何解决呢
    MySQL-笔记-07.试图及索引的应用
  • 原文地址:https://blog.csdn.net/weixin_49035434/article/details/133644729