index.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <template>
  2. <basic-container>
  3. <!-- 搜索区域 -->
  4. <div class="search-container">
  5. <el-form :model="searchForm" ref="searchForm" :inline="true" class="search-form">
  6. <el-form-item label="问卷编码" prop="surveyCode">
  7. <el-input
  8. v-model="searchForm.surveyCode"
  9. placeholder="请输入问卷编码"
  10. clearable
  11. style="width: 200px"
  12. />
  13. </el-form-item>
  14. <el-form-item label="问卷标题" prop="title">
  15. <el-input
  16. v-model="searchForm.title"
  17. placeholder="请输入问卷标题"
  18. clearable
  19. style="width: 200px"
  20. />
  21. </el-form-item>
  22. <el-form-item label="状态" prop="status">
  23. <el-select
  24. v-model="searchForm.status"
  25. placeholder="请选择状态"
  26. clearable
  27. style="width: 150px"
  28. >
  29. <el-option
  30. v-for="item in statusOptions"
  31. :key="item.value"
  32. :label="item.label"
  33. :value="item.value"
  34. />
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item label="是否模板" prop="isTemplate">
  38. <el-select
  39. v-model="searchForm.isTemplate"
  40. placeholder="请选择是否模板"
  41. clearable
  42. style="width: 150px"
  43. >
  44. <el-option
  45. v-for="item in templateOptions"
  46. :key="item.value"
  47. :label="item.label"
  48. :value="item.value"
  49. />
  50. </el-select>
  51. </el-form-item>
  52. <el-form-item label="开始时间" prop="startTime">
  53. <el-date-picker
  54. v-model="searchForm.startTime"
  55. type="datetime"
  56. placeholder="选择开始时间"
  57. format="yyyy-MM-dd HH:mm:ss"
  58. value-format="yyyy-MM-dd HH:mm:ss"
  59. style="width: 200px"
  60. />
  61. </el-form-item>
  62. <el-form-item label="结束时间" prop="endTime">
  63. <el-date-picker
  64. v-model="searchForm.endTime"
  65. type="datetime"
  66. placeholder="选择结束时间"
  67. format="yyyy-MM-dd HH:mm:ss"
  68. value-format="yyyy-MM-dd HH:mm:ss"
  69. style="width: 200px"
  70. />
  71. </el-form-item>
  72. <el-form-item>
  73. <el-button type="primary" @click="handleSearch" :loading="loading">
  74. <i class="el-icon-search"></i> 搜索
  75. </el-button>
  76. <el-button @click="handleResetSearch">
  77. <i class="el-icon-refresh"></i> 重置
  78. </el-button>
  79. </el-form-item>
  80. </el-form>
  81. </div>
  82. <!-- 操作按钮区域 -->
  83. <div class="toolbar">
  84. <el-button
  85. type="primary"
  86. size="small"
  87. icon="el-icon-plus"
  88. @click="handleAdd"
  89. >
  90. 新增问卷
  91. </el-button>
  92. </div>
  93. <!-- 表格区域 -->
  94. <el-table
  95. :data="tableData"
  96. v-loading="loading"
  97. border
  98. stripe
  99. style="width: 100%"
  100. >
  101. <el-table-column type="index" label="序号" width="60" align="center" />
  102. <el-table-column prop="surveyCode" label="问卷编码" width="150" show-overflow-tooltip />
  103. <el-table-column prop="title" label="问卷标题" width="200" show-overflow-tooltip />
  104. <el-table-column prop="description" label="问卷描述" width="250" show-overflow-tooltip />
  105. <el-table-column prop="status" label="状态" width="100" align="center">
  106. <template slot-scope="{row}">
  107. <el-tag :type="getStatusType(row.status)">
  108. {{ getStatusLabel(row.status) }}
  109. </el-tag>
  110. </template>
  111. </el-table-column>
  112. <el-table-column prop="isTemplate" label="是否模板" width="100" align="center">
  113. <template slot-scope="{row}">
  114. <el-tag :type="getTemplateType(row.isTemplate)">
  115. {{ getTemplateLabel(row.isTemplate) }}
  116. </el-tag>
  117. </template>
  118. </el-table-column>
  119. <el-table-column prop="startTime" label="开始时间" width="160" show-overflow-tooltip />
  120. <el-table-column prop="endTime" label="结束时间" width="160" show-overflow-tooltip />
  121. <el-table-column prop="createTime" label="创建时间" width="160" show-overflow-tooltip />
  122. <el-table-column label="操作" align="center" fixed="right">
  123. <template slot-scope="{row}">
  124. <el-button
  125. type="text"
  126. size="small"
  127. icon="el-icon-view"
  128. @click="handleView(row)"
  129. >
  130. 查看
  131. </el-button>
  132. <el-button
  133. type="text"
  134. size="small"
  135. icon="el-icon-edit"
  136. @click="handleEdit(row)"
  137. >
  138. 编辑
  139. </el-button>
  140. </template>
  141. </el-table-column>
  142. </el-table>
  143. <!-- 分页组件 -->
  144. <div class="pagination-container">
  145. <el-pagination
  146. @size-change="handleSizeChange"
  147. @current-change="handleCurrentChange"
  148. :current-page="pagination.currentPage"
  149. :page-sizes="[10, 20, 50, 100]"
  150. :page-size="pagination.pageSize"
  151. layout="total, sizes, prev, pager, next, jumper"
  152. :total="pagination.total"
  153. />
  154. </div>
  155. <!-- 问卷表单弹窗 -->
  156. <el-dialog
  157. :title="dialogTitle"
  158. :visible.sync="dialogVisible"
  159. width="800px"
  160. :close-on-click-modal="false"
  161. :close-on-press-escape="false"
  162. :modal="true"
  163. :modal-append-to-body="true"
  164. :append-to-body="true"
  165. custom-class="survey-form-dialog"
  166. @close="handleDialogClose"
  167. >
  168. <el-form
  169. :model="surveyForm"
  170. :rules="formRules"
  171. ref="surveyForm"
  172. label-width="120px"
  173. class="survey-form"
  174. >
  175. <el-row :gutter="20">
  176. <el-col :span="12">
  177. <el-form-item label="问卷编码" prop="surveyCode">
  178. <el-input
  179. v-model="surveyForm.surveyCode"
  180. placeholder="请输入问卷编码"
  181. :disabled="isViewMode"
  182. />
  183. </el-form-item>
  184. </el-col>
  185. <el-col :span="12">
  186. <el-form-item label="状态" prop="status">
  187. <el-select
  188. v-model="surveyForm.status"
  189. placeholder="请选择状态"
  190. :disabled="isViewMode"
  191. style="width: 100%"
  192. >
  193. <el-option
  194. v-for="item in statusOptions"
  195. :key="item.value"
  196. :label="item.label"
  197. :value="item.value"
  198. />
  199. </el-select>
  200. </el-form-item>
  201. </el-col>
  202. <el-col :span="24">
  203. <el-form-item label="问卷标题" prop="title">
  204. <el-input
  205. v-model="surveyForm.title"
  206. placeholder="请输入问卷标题"
  207. :disabled="isViewMode"
  208. />
  209. </el-form-item>
  210. </el-col>
  211. <el-col :span="24">
  212. <el-form-item label="问卷描述" prop="description">
  213. <el-input
  214. v-model="surveyForm.description"
  215. type="textarea"
  216. :rows="4"
  217. placeholder="请输入问卷描述"
  218. :disabled="isViewMode"
  219. />
  220. </el-form-item>
  221. </el-col>
  222. <el-col :span="12">
  223. <el-form-item label="开始时间" prop="startTime">
  224. <el-date-picker
  225. v-model="surveyForm.startTime"
  226. type="datetime"
  227. placeholder="选择开始时间"
  228. format="yyyy-MM-dd HH:mm:ss"
  229. value-format="yyyy-MM-dd HH:mm:ss"
  230. :disabled="isViewMode"
  231. style="width: 100%"
  232. />
  233. </el-form-item>
  234. </el-col>
  235. <el-col :span="12">
  236. <el-form-item label="结束时间" prop="endTime">
  237. <el-date-picker
  238. v-model="surveyForm.endTime"
  239. type="datetime"
  240. placeholder="选择结束时间"
  241. format="yyyy-MM-dd HH:mm:ss"
  242. value-format="yyyy-MM-dd HH:mm:ss"
  243. :disabled="isViewMode"
  244. style="width: 100%"
  245. />
  246. </el-form-item>
  247. </el-col>
  248. <el-col :span="12">
  249. <el-form-item label="是否模板" prop="isTemplate">
  250. <el-select
  251. v-model="surveyForm.isTemplate"
  252. placeholder="请选择是否模板"
  253. :disabled="isViewMode"
  254. style="width: 100%"
  255. >
  256. <el-option
  257. v-for="item in templateOptions"
  258. :key="item.value"
  259. :label="item.label"
  260. :value="item.value"
  261. />
  262. </el-select>
  263. </el-form-item>
  264. </el-col>
  265. </el-row>
  266. </el-form>
  267. <div slot="footer" class="dialog-footer" v-if="!isViewMode">
  268. <el-button @click="dialogVisible = false">取消</el-button>
  269. <el-button
  270. type="primary"
  271. @click="handleSubmit"
  272. :loading="submitLoading"
  273. >
  274. 确定
  275. </el-button>
  276. </div>
  277. <div slot="footer" class="dialog-footer" v-else>
  278. <el-button @click="dialogVisible = false">关闭</el-button>
  279. </div>
  280. </el-dialog>
  281. </basic-container>
  282. </template>
  283. <script>
  284. import surveyIndexMixin from '@/mixins/survey/surveyIndex'
  285. export default {
  286. name: 'SurveyManagement',
  287. mixins: [surveyIndexMixin]
  288. }
  289. </script>
  290. <style lang="scss" scoped>
  291. @import './index.scss';
  292. </style>