index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <template>
  2. <div class="manager-container">
  3. <div class="manager-components">
  4. <div class="card-attr">
  5. <div class="card-doc" style="flex: none;">
  6. <div class="card-header">
  7. <h3>操作面板</h3>
  8. </div>
  9. <transition name="collapse">
  10. <div class="card-body" v-if="attrShow.panel">
  11. <van-cell>
  12. <template #title>
  13. <div class="panel-btns">
  14. <van-button round plain type="primary" class="btn-item"
  15. @click="addAttrData()">新增问卷</van-button>
  16. <van-button round plain type="info" class="btn-item"
  17. :disabled="!data"
  18. @click="addItem()">新增题目</van-button>
  19. </div>
  20. </template>
  21. </van-cell>
  22. <van-cell>
  23. <template #title>
  24. <div class="panel-btns">
  25. <van-button round type="primary" class="btn-item"
  26. :disabled="!data"
  27. @click="btnSubmit()">保存问卷</van-button>
  28. </div>
  29. </template>
  30. </van-cell>
  31. </div>
  32. </transition>
  33. </div>
  34. <div class="card-doc">
  35. <div class="card-header" @click="attrShow.list = !attrShow.list">
  36. <h3>问卷列表</h3>
  37. <van-icon :name="attrShow.list ? 'arrow-up' : 'arrow-down'" class="icon" />
  38. </div>
  39. <transition name="collapse">
  40. <div class="card-body" v-if="attrShow.list">
  41. <div class="card-scroll">
  42. <van-loading v-if="loading.data" style="text-align: center; margin: 24px 0;">加载中...</van-loading>
  43. <van-list
  44. v-model="listState.loading"
  45. :finished="listState.finished"
  46. finished-text="没有更多了"
  47. @load="onLoadList"
  48. >
  49. <van-cell
  50. v-for="item in list"
  51. :key="item.id"
  52. :title="item.name"
  53. :label="`${item.id} | ${item.created} | ${item.modified}`"
  54. icon="label-o"
  55. :class="{
  56. 'manager-active': true,
  57. 'manager-active-cur': item.id === (data && data.topic.id)
  58. }"
  59. @click="inAttrData(item)" />
  60. </van-list>
  61. </div>
  62. </div>
  63. </transition>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="manager-template">
  68. <LayoutVolume :edata="data" :isEdit="true" :edataItem="dataItem" @selectItem="selectItem" />
  69. </div>
  70. <div class="manager-attribute">
  71. <div class="card-attr">
  72. <div class="card-doc" v-if="!!data">
  73. <div class="card-header" @click="attrShow.attr = !attrShow.attr">
  74. <h3>表单属性</h3>
  75. <van-icon :name="attrShow.attr ? 'arrow-up' : 'arrow-down'" class="icon" />
  76. </div>
  77. <transition name="collapse">
  78. <div class="card-body" v-if="attrShow.attr">
  79. <div class="card-scroll">
  80. <van-cell-group>
  81. <van-field name="radio" label="主题">
  82. <template #input>
  83. <van-radio-group v-model="data.topic.layout_type" direction="horizontal">
  84. <van-radio :name="1">主题1</van-radio>
  85. <van-radio :name="2">主题2</van-radio>
  86. </van-radio-group>
  87. </template>
  88. </van-field>
  89. <van-field name="radio" label="显示标题">
  90. <template #input>
  91. <van-radio-group v-model="data.topic.is_name" direction="horizontal">
  92. <van-radio :name="1">是</van-radio>
  93. <van-radio :name="0">否</van-radio>
  94. </van-radio-group>
  95. </template>
  96. </van-field>
  97. <van-field v-model="data.topic.name" label="表单标题" placeholder="请输入" />
  98. <van-field name="radio" label="显示描述">
  99. <template #input>
  100. <van-radio-group v-model="data.topic.is_memo" direction="horizontal">
  101. <van-radio :name="1">是</van-radio>
  102. <van-radio :name="0">否</van-radio>
  103. </van-radio-group>
  104. </template>
  105. </van-field>
  106. <van-field
  107. v-model="data.topic.memo"
  108. label="表单描述"
  109. placeholder="请输入"
  110. type="textarea"
  111. rows="1"
  112. autosize
  113. />
  114. <van-field
  115. v-model="data.topic.submessage"
  116. label="提交消息"
  117. placeholder="请输入"
  118. type="textarea"
  119. rows="1"
  120. autosize
  121. />
  122. <van-field name="radio" label="对齐方式">
  123. <template #input>
  124. <van-radio-group v-model="data.topic.layout_align" direction="horizontal">
  125. <van-radio name="left">左对齐</van-radio>
  126. <van-radio name="right">右对齐</van-radio>
  127. </van-radio-group>
  128. </template>
  129. </van-field>
  130. <van-field name="radio" label="排列方式">
  131. <template #input>
  132. <van-radio-group v-model="data.topic.layout_inline" direction="horizontal">
  133. <van-radio :name="1">水平</van-radio>
  134. <van-radio :name="2">垂直</van-radio>
  135. </van-radio-group>
  136. </template>
  137. </van-field>
  138. </van-cell-group>
  139. </div>
  140. </div>
  141. </transition>
  142. </div>
  143. <div class="card-doc" v-if="!!dataItem">
  144. <div class="card-header" @click="attrShow.compt = !attrShow.compt">
  145. <h3>组件属性</h3>
  146. <van-icon :name="attrShow.compt ? 'arrow-up' : 'arrow-down'" class="icon" />
  147. </div>
  148. <transition name="collapse">
  149. <div class="card-body" v-if="attrShow.compt">
  150. <div class="card-scroll">
  151. <van-cell-group>
  152. <van-field label="组件操作">
  153. <template #input>
  154. <van-button type="danger"
  155. :disabled="!dataItem"
  156. size="small"
  157. @click="removeItem()">删除题目</van-button>
  158. </template>
  159. </van-field>
  160. <van-field name="radio" label="组件类型">
  161. <template #input>
  162. <van-radio-group :value="dataItem.type" direction="horizontal">
  163. <van-radio name="radio" @click="onChangeCompType('radio')">radio</van-radio>
  164. <van-radio name="checkbox" @click="onChangeCompType('checkbox')">checkbox</van-radio>
  165. <van-radio name="input" @click="onChangeCompType('input')">input</van-radio>
  166. <van-radio name="textarea" @click="onChangeCompType('textarea')">textarea</van-radio>
  167. <van-radio name="slider" @click="onChangeCompType('slider')">slider</van-radio>
  168. </van-radio-group>
  169. </template>
  170. </van-field>
  171. <van-field
  172. v-model="dataItem.title"
  173. label="组件题目"
  174. placeholder="请输入"
  175. type="textarea"
  176. rows="1"
  177. autosize />
  178. <van-field name="radio" label="是否必填">
  179. <template #input>
  180. <van-radio-group v-model="dataItem.required" direction="horizontal">
  181. <van-radio :name="1">是</van-radio>
  182. <van-radio :name="0">否</van-radio>
  183. </van-radio-group>
  184. </template>
  185. </van-field>
  186. <van-field
  187. :value="dataItem.content.map(item => `${item.title}${item.memo ? ' | ' : ''}${item.memo||''}`).join('\n')"
  188. label="题目选项"
  189. placeholder="选项一 | 描述,Enter 编辑下个选项"
  190. type="textarea"
  191. rows="5"
  192. autosize
  193. @change="onChangeContent" />
  194. <van-field name="radio" label="对齐方式">
  195. <template #input>
  196. <van-radio-group v-model="dataItem.layout_align" direction="horizontal">
  197. <van-radio name="">继承</van-radio>
  198. <van-radio name="left">靠左</van-radio>
  199. <van-radio name="right">靠右</van-radio>
  200. </van-radio-group>
  201. </template>
  202. </van-field>
  203. <van-field name="radio" label="排列方式">
  204. <template #input>
  205. <van-radio-group v-model="dataItem.layout_inline" direction="horizontal">
  206. <van-radio name="">继承</van-radio>
  207. <van-radio :name="1">水平</van-radio>
  208. <van-radio :name="2">垂直</van-radio>
  209. </van-radio-group>
  210. </template>
  211. </van-field>
  212. </van-cell-group>
  213. </div>
  214. </div>
  215. </transition>
  216. </div>
  217. </div>
  218. </div>
  219. </div>
  220. </template>
  221. <script>
  222. import mixins from "./mixins";
  223. import attribute from "./mixins/attribute";
  224. export default {
  225. mixins: [mixins, attribute]
  226. };
  227. </script>
  228. <style lang="scss" scoped>
  229. @import "./common.scss";
  230. @import "./style.scss";
  231. </style>