ctfx.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <script setup lang='ts'>
  2. import { Search } from '@element-plus/icons-vue'
  3. import { RouteLocationRaw, useRouter } from 'vue-router'
  4. import { Grade, Status, Subject } from '~/store/info'
  5. import user from '~/store/user'
  6. const router = useRouter()
  7. function routerPush(_route: RouteLocationRaw) {
  8. router.push(_route)
  9. }
  10. const tableData = ref([])
  11. const total = ref(0)
  12. const multipleSelection = ref([])
  13. const handleSelectionChange = (val) => {
  14. multipleSelection.value = val
  15. }
  16. const queryForm = reactive({
  17. dc_grade_id: undefined,
  18. dc_subject_id: undefined,
  19. dc_check: undefined,
  20. dc_keyword: undefined,
  21. page: 1
  22. })
  23. watch(queryForm, () => {
  24. doQuery()
  25. }, { deep: true, immediate: true })
  26. function doQuery() {
  27. request({
  28. url: '/dyaw/ctfx/index',
  29. data: {
  30. ...queryForm,
  31. // 管理员不需要传递sm_id
  32. // sm_id: user.sm_info.sm_id,
  33. // create_user_id: user.user_id
  34. }
  35. }).then(res => {
  36. if (res.code === "1") {
  37. tableData.value = res.data.page_data
  38. total.value = parseInt(res.data.total_rows)
  39. }
  40. })
  41. }
  42. function doDelete() {
  43. request({
  44. url: '/dyaw/ctfx/delete',
  45. data: {
  46. dc_id: multipleSelection.value.map(item => item.dc_id)
  47. }
  48. }).then(
  49. res => {
  50. if (res.code === "1") {
  51. ElMessage.success('删除成功')
  52. doQuery()
  53. }
  54. }
  55. )
  56. }
  57. function formatTime(s: string) {
  58. return (new Date(s * 1000)).toLocaleString()
  59. }
  60. const dialogFormVisible = ref(false)
  61. const dialogForm = reactive({
  62. dc_id: undefined,
  63. dc_check: '1',
  64. dc_check_desc: ''
  65. })
  66. function doJudge(id) {
  67. // init doJudge
  68. dialogForm.dc_id = id
  69. dialogForm.dc_check = '1'
  70. dialogForm.dc_check_desc = ''
  71. dialogFormVisible.value = true
  72. }
  73. function doSubmit() {
  74. request({
  75. url: '/dyaw/ctfx/edit',
  76. data: {
  77. dc_id: dialogForm.dc_id,
  78. dyaw_ctfx: {
  79. dc_check: dialogForm.dc_check,
  80. dc_check_desc: dialogForm.dc_check_desc,
  81. dc_check_user_id: user.user_id
  82. }
  83. }
  84. }).then(
  85. res => {
  86. if (res.code === "1") {
  87. ElMessage.success('审核成功')
  88. dialogFormVisible.value = false
  89. doQuery()
  90. }
  91. }
  92. )
  93. }
  94. </script>
  95. <template>
  96. <div class="w-full h-640px flex flex-col">
  97. <div class="flex justify-end items-center">
  98. <div class="flex space-x-2">
  99. <el-select clearable size="large" placeholder="年级" v-model="queryForm.dc_grade_id">
  100. <el-option v-for="({ grade_id, grade_name }) in Grade" :key="grade_id" :label="grade_name" :value="grade_id" />
  101. </el-select>
  102. <el-select clearable size="large" placeholder="科目" v-model="queryForm.dc_subject_id">
  103. <el-option v-for="({ subject_id, subject_name }) in Subject" :key="subject_id" :label="subject_name"
  104. :value="subject_id" />
  105. </el-select>
  106. <el-select clearable size="large" placeholder="状态" v-model="queryForm.dc_check">
  107. <el-option v-for="(k) in Object.keys(Status)" :key="k" :label="Status[k]" :value="k" />
  108. </el-select>
  109. <el-input clearable size="large" placeholder="关键字搜索" class="max-w-240px" :suffix-icon="Search"
  110. v-model="queryForm.dc_keyword"></el-input>
  111. <el-button size="large" type="danger" @click="doDelete">删除</el-button>
  112. </div>
  113. </div>
  114. <div class="flex-auto flex-col flex mt-4 justify-between">
  115. <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange">
  116. <el-table-column type="selection" width="55" />
  117. <el-table-column property="dc_title" label="标题" width="auto" show-overflow-tooltip />
  118. <el-table-column property="dc_grade_name" label="年级" width="120" />
  119. <el-table-column property="dc_subject_name" label="科目" width="120" />
  120. <el-table-column property="dc_keyword" label="关键词" width="160" />
  121. <el-table-column property="create_user_realname" label="上传教师" width="120" />
  122. <el-table-column property="create_dateline" label="上传时间" width="180">
  123. <template #default="{ row }">
  124. <span>{{ formatTime(row.create_dateline) }}</span>
  125. </template>
  126. </el-table-column>
  127. <el-table-column property="name" label="状态" width="120">
  128. <template #default="{ row }">
  129. <span
  130. :class="row.dc_check === '1' ? 'text-green-500' : row.dc_check === '2' ? 'text-red-500' : 'text-blue-500'">{{
  131. Status[row.dc_check] }}</span>
  132. </template>
  133. </el-table-column>
  134. <el-table-column fixed="right" label="操作" width="120">
  135. <template #default="{ row }">
  136. <el-button link type="primary" size="small" :disabled="row.dc_check !== '0'"
  137. @click="doJudge(row.dc_id)">审核</el-button>
  138. <el-button link type="primary" size="small"
  139. @click="routerPush({ name: 'admin_back_ctfx_detail', params: { id: row.dc_id } })">查看</el-button>
  140. </template>
  141. </el-table-column>
  142. </el-table>
  143. <div class="flex justify-end mt-6">
  144. <el-pagination v-model:current-page="queryForm.page" background layout="prev, pager, next"
  145. :total="total"></el-pagination>
  146. </div>
  147. </div>
  148. <el-dialog v-model="dialogFormVisible" title="审核">
  149. <el-form :model="dialogForm">
  150. <el-form-item label="审核结果">
  151. <el-radio-group v-model="dialogForm.dc_check">
  152. <el-radio label="1">通过</el-radio>
  153. <el-radio label="2">不通过</el-radio>
  154. </el-radio-group>
  155. </el-form-item>
  156. <el-form-item label="处理意见" v-show="dialogForm.dc_check === '2'">
  157. <el-input v-model="dialogForm.dc_check_desc" type="textarea" :rows="5" />
  158. </el-form-item>
  159. </el-form>
  160. <template #footer>
  161. <div class="w-full justify-end space-x-4">
  162. <el-button @click="dialogFormVisible = false">取消</el-button>
  163. <el-button type="primary" @click="doSubmit">
  164. 提交
  165. </el-button>
  166. </div>
  167. </template>
  168. </el-dialog>
  169. </div>
  170. </template>
  171. <style scoped lang="scss">
  172. .tab_selected {
  173. color: #007DFF;
  174. &::after {
  175. content: '-';
  176. color: transparent;
  177. position: absolute;
  178. left: -5px;
  179. right: -5px;
  180. bottom: -4px;
  181. height: 15px;
  182. background: rgba(0, 125, 255, 0.30);
  183. border-radius: 8px;
  184. }
  185. }
  186. </style>