index.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
  4. <el-form-item label="学生id" prop="studentId">
  5. <el-input v-model="queryParams.studentId" placeholder="请输入学生id" clearable @keyup.enter="handleQuery" />
  6. </el-form-item>
  7. <el-form-item label="视频课时间" prop="videoTime">
  8. <el-input v-model="queryParams.videoTime" placeholder="请输入视频课时间" clearable @keyup.enter="handleQuery" />
  9. </el-form-item>
  10. <el-form-item label="练题数" prop="questionCnt">
  11. <el-input v-model="queryParams.questionCnt" placeholder="请输入练题数" clearable @keyup.enter="handleQuery" />
  12. </el-form-item>
  13. <el-form-item label="开始时间" prop="beginTime">
  14. <el-date-picker clearable v-model="queryParams.beginTime" type="date" value-format="YYYY-MM-DD"
  15. class="w-[170px]!" placeholder="请选择开始时间">
  16. </el-date-picker>
  17. </el-form-item>
  18. <el-form-item>
  19. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  20. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  21. </el-form-item>
  22. </el-form>
  23. <el-row :gutter="10" class="mb8">
  24. <el-col :span="1.5">
  25. <el-button type="primary" plain icon="Plus" @click="handleAdd"
  26. v-hasPermi="['learn:learnPlan:add']">新增</el-button>
  27. </el-col>
  28. <el-col :span="1.5">
  29. <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
  30. v-hasPermi="['learn:learnPlan:edit']">修改</el-button>
  31. </el-col>
  32. <el-col :span="1.5">
  33. <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
  34. v-hasPermi="['learn:learnPlan:remove']">删除</el-button>
  35. </el-col>
  36. <el-col :span="1.5">
  37. <el-button type="warning" plain icon="Download" @click="handleExport"
  38. v-hasPermi="['learn:learnPlan:export']">导出</el-button>
  39. </el-col>
  40. <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
  41. </el-row>
  42. <el-table v-loading="loading" :data="learnPlanList" @selection-change="handleSelectionChange">
  43. <el-table-column type="selection" width="55" align="center" fixed="left" />
  44. <!-- <el-table-column label="计划id" align="center" prop="id" /> -->
  45. <el-table-column label="学生id" align="center" prop="studentId" fixed="left" />
  46. <el-table-column label="视频课时间" align="center" prop="videoTime" />
  47. <el-table-column label="练题数" align="center" prop="questionCnt" />
  48. <el-table-column label="是否有效" align="center" prop="status" />
  49. <el-table-column label="开始时间" align="center" prop="beginTime" width="180">
  50. <template #default="scope">
  51. <span>{{ parseTime(scope.row.beginTime, '{y}-{m}-{d}') }}</span>
  52. </template>
  53. </el-table-column>
  54. <el-table-column label="统计情况" align="center" prop="stats" />
  55. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
  56. <template #default="scope">
  57. <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
  58. v-hasPermi="['learn:learnPlan:edit']">修改</el-button>
  59. <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
  60. v-hasPermi="['learn:learnPlan:remove']">删除</el-button>
  61. </template>
  62. </el-table-column>
  63. </el-table>
  64. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
  65. v-model:limit="queryParams.pageSize" @pagination="getList" />
  66. <!-- 添加或修改学习计划对话框 -->
  67. <el-dialog :title="title" v-model="open" width="500px" append-to-body>
  68. <el-form ref="learnPlanRef" :model="form" :rules="rules" label-width="80px">
  69. <el-form-item label="学生id" prop="studentId">
  70. <el-input v-model="form.studentId" placeholder="请输入学生id" />
  71. </el-form-item>
  72. <el-form-item label="视频课时间" prop="videoTime">
  73. <el-input v-model="form.videoTime" placeholder="请输入视频课时间" />
  74. </el-form-item>
  75. <el-form-item label="练题数" prop="questionCnt">
  76. <el-input v-model="form.questionCnt" placeholder="请输入练题数" />
  77. </el-form-item>
  78. <el-form-item label="开始时间" prop="beginTime">
  79. <el-date-picker clearable v-model="form.beginTime" type="date" value-format="YYYY-MM-DD"
  80. placeholder="请选择开始时间">
  81. </el-date-picker>
  82. </el-form-item>
  83. </el-form>
  84. <template #footer>
  85. <div class="dialog-footer">
  86. <el-button type="primary" @click="submitForm">确 定</el-button>
  87. <el-button @click="cancel">取 消</el-button>
  88. </div>
  89. </template>
  90. </el-dialog>
  91. </div>
  92. </template>
  93. <script setup name="LearnPlan">
  94. import { listLearnPlan, getLearnPlan, delLearnPlan, addLearnPlan, updateLearnPlan } from "@/api/learn/learnPlan"
  95. const { proxy } = getCurrentInstance()
  96. const learnPlanList = ref([])
  97. const open = ref(false)
  98. const loading = ref(true)
  99. const showSearch = ref(true)
  100. const ids = ref([])
  101. const single = ref(true)
  102. const multiple = ref(true)
  103. const total = ref(0)
  104. const title = ref("")
  105. const data = reactive({
  106. form: {},
  107. queryParams: {
  108. pageNum: 1,
  109. pageSize: 10,
  110. studentId: null,
  111. videoTime: null,
  112. questionCnt: null,
  113. status: null,
  114. beginTime: null,
  115. stats: null
  116. },
  117. rules: {
  118. studentId: [
  119. { required: true, message: "学生id不能为空", trigger: "blur" }
  120. ],
  121. videoTime: [
  122. { required: true, message: "视频课时间不能为空", trigger: "blur" }
  123. ],
  124. questionCnt: [
  125. { required: true, message: "练题数不能为空", trigger: "blur" }
  126. ],
  127. status: [
  128. { required: true, message: "是否有效不能为空", trigger: "change" }
  129. ],
  130. }
  131. })
  132. const { queryParams, form, rules } = toRefs(data)
  133. /** 查询学习计划列表 */
  134. function getList() {
  135. loading.value = true
  136. listLearnPlan(queryParams.value).then(response => {
  137. learnPlanList.value = response.rows
  138. total.value = response.total
  139. loading.value = false
  140. })
  141. }
  142. // 取消按钮
  143. function cancel() {
  144. open.value = false
  145. reset()
  146. }
  147. // 表单重置
  148. function reset() {
  149. form.value = {
  150. id: null,
  151. studentId: null,
  152. videoTime: null,
  153. questionCnt: null,
  154. status: null,
  155. beginTime: null,
  156. createTime: null,
  157. stats: null
  158. }
  159. proxy.resetForm("learnPlanRef")
  160. }
  161. /** 搜索按钮操作 */
  162. function handleQuery() {
  163. queryParams.value.pageNum = 1
  164. getList()
  165. }
  166. /** 重置按钮操作 */
  167. function resetQuery() {
  168. proxy.resetForm("queryRef")
  169. handleQuery()
  170. }
  171. // 多选框选中数据
  172. function handleSelectionChange(selection) {
  173. ids.value = selection.map(item => item.id)
  174. single.value = selection.length != 1
  175. multiple.value = !selection.length
  176. }
  177. /** 新增按钮操作 */
  178. function handleAdd() {
  179. reset()
  180. open.value = true
  181. title.value = "添加学习计划"
  182. }
  183. /** 修改按钮操作 */
  184. function handleUpdate(row) {
  185. reset()
  186. const _id = row.id || ids.value
  187. getLearnPlan(_id).then(response => {
  188. form.value = response.data
  189. open.value = true
  190. title.value = "修改学习计划"
  191. })
  192. }
  193. /** 提交按钮 */
  194. function submitForm() {
  195. proxy.$refs["learnPlanRef"].validate(valid => {
  196. if (valid) {
  197. if (form.value.id != null) {
  198. updateLearnPlan(form.value).then(response => {
  199. proxy.$modal.msgSuccess("修改成功")
  200. open.value = false
  201. getList()
  202. })
  203. } else {
  204. addLearnPlan(form.value).then(response => {
  205. proxy.$modal.msgSuccess("新增成功")
  206. open.value = false
  207. getList()
  208. })
  209. }
  210. }
  211. })
  212. }
  213. /** 删除按钮操作 */
  214. function handleDelete(row) {
  215. const _ids = row.id || ids.value
  216. proxy.$modal.confirm('是否确认删除学习计划编号为"' + _ids + '"的数据项?').then(function () {
  217. return delLearnPlan(_ids)
  218. }).then(() => {
  219. getList()
  220. proxy.$modal.msgSuccess("删除成功")
  221. }).catch(() => { })
  222. }
  223. /** 导出按钮操作 */
  224. function handleExport() {
  225. proxy.download('learn/learnPlan/export', {
  226. ...queryParams.value
  227. }, `learnPlan_${new Date().getTime()}.xlsx`)
  228. }
  229. getList()
  230. </script>