index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <div class="volume-container">
  3. <div class="body scroll-view">
  4. <div class="head">
  5. <div class="bg"></div>
  6. <div class="cont">
  7. <div class="logo">
  8. <img :src="ImgLogo" />
  9. </div>
  10. <h1 v-if="data.topic.is_name && data.topic.name">{{ data.topic.name }}</h1>
  11. <div class="des" v-if="data.topic.is_memo && data.topic.memo" v-html="data.topic.memo.replace(/\n/g, '<br />')"></div>
  12. </div>
  13. </div>
  14. <transition-group name="flip-list" class="volume-content" tag="ul">
  15. <li
  16. v-for="(item, index) in data.result"
  17. :key="index + 1"
  18. :class="{ cur: edataItem === item }"
  19. @click="$emit('selectItem', item)">
  20. <p>
  21. <i :class="{cur: !!item.val && !!item.val.length}" />
  22. <label v-if="item.required">*</label>
  23. <span>{{index + 1}}. </span>
  24. <span>{{ item.title }}</span>
  25. <span v-if="configType[item.type]">【{{ configType[item.type] }}】</span>
  26. </p>
  27. <div :class="{'align-right': (item.layout_align || data.topic.layout_align) === 'right'}">
  28. <div class="slider-layout" v-if="item.type === 'slider'">
  29. <div class="val" v-if="item.val">{{ item.val }}</div>
  30. <div class="warn" v-else>拨动滑块选择</div>
  31. <van-slider
  32. v-model="item.sliderVal"
  33. :min="-1"
  34. :max="item.content.length - 1"
  35. @input="item.val = (item.content[item.sliderVal] || {}).title || ''" />
  36. <div class="ruler-layout">
  37. <div class="ruler-item">
  38. <span></span>
  39. </div>
  40. <div class="ruler-item"
  41. v-for="(it, itIndex) in item.content"
  42. :key="itIndex">
  43. <span v-if="!it.sliderHide">
  44. {{ it.title }}
  45. <br v-if="it.memo" />
  46. {{ it.memo || '' }}
  47. </span>
  48. </div>
  49. </div>
  50. </div>
  51. <van-radio-group
  52. v-model="item.val"
  53. :direction="(item.layout_inline || data.topic.layout_inline) === 2 ? 'vertical' : 'horizontal'"
  54. v-if="item.type === 'radio'">
  55. <van-radio
  56. :class="(item.layout_inline || data.topic.layout_inline) === 2 ? 'vertical' : 'horizontal'"
  57. :name="it.title"
  58. v-for="(it, itIndex) in item.content"
  59. :key="itIndex">{{ it.title }}{{ it.memo && `(${it.memo})` }}</van-radio>
  60. </van-radio-group>
  61. <van-checkbox-group
  62. v-model="item.val"
  63. :direction="(item.layout_inline || data.topic.layout_inline) === 2 ? 'vertical' : 'horizontal'"
  64. :max="item.max"
  65. v-if="item.type === 'checkbox'">
  66. <van-checkbox
  67. :class="(item.layout_inline || data.topic.layout_inline) === 2 ? 'vertical' : 'horizontal'"
  68. :name="it.title"
  69. v-for="(it, itIndex) in item.content"
  70. :key="itIndex"
  71. shape="square">{{ it.title }}{{ it.memo && `(${it.memo})` }}</van-checkbox>
  72. </van-checkbox-group>
  73. <textarea
  74. v-model="item.val"
  75. :maxlength="item.max || 200" placeholder="请填写"
  76. v-if="item.type === 'textarea'" />
  77. <input v-model="item.val"
  78. :maxlength="item.max || 200"
  79. placeholder="请填写"
  80. v-if="item.type === 'input'" />
  81. </div>
  82. </li>
  83. </transition-group>
  84. <slot name="tel" />
  85. </div>
  86. <div class="footer" v-if="isSubmit && !!data.result.length">
  87. <button class="btn primary"
  88. :disabled="loading.submit || !data.result.length"
  89. @click="$emit('submit')">提交</button>
  90. </div>
  91. <slot />
  92. </div>
  93. </template>
  94. <script>
  95. import mixinLayout from '../mixins/layout'
  96. export default {
  97. mixins: [mixinLayout]
  98. }
  99. </script>
  100. <style lang="scss" scoped>
  101. @import './style.scss';
  102. </style>