You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
7.8 KiB

7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
  1. <template>
  2. <div class="common-layout">
  3. <el-container>
  4. <el-header class="header">
  5. <el-text class="header-text">抢点班作业后台管理</el-text>
  6. <el-button class="header-button" type="primary" text style="float: right;" @click="logout">退出登录</el-button>
  7. </el-header>
  8. <el-main class="main">
  9. <div class="main-title">
  10. 抢点班作业列表
  11. </div>
  12. <div class="list">
  13. <el-button class="main-button" type="primary" style="float: left;" @click="newAssignment">新建作业</el-button>
  14. <el-table :data="assignments" style="width: 100%" :header-cell-style="{ 'text-align': 'center' }"
  15. :cell-style="{ 'text-align': 'center' }">
  16. <el-table-column label="序号">
  17. <template #default="scope">
  18. {{ scope.$index + (PageNo - 1) * PageSize + 1 }}
  19. </template>
  20. </el-table-column>
  21. <el-table-column prop="name" label="作业名称"></el-table-column>
  22. <el-table-column label="内容归属">
  23. <template v-slot="scope">
  24. <span v-if="scope.row.clubType === '1'">牧民俱乐部</span>
  25. <span v-else-if="scope.row.clubType === '2'">博古论坛</span>
  26. <span v-else-if="scope.row.clubType === '3'">神枪手俱乐部</span>
  27. <span v-else-if="scope.row.clubType === '4'">环球俱乐部</span>
  28. <span v-else-if="scope.row.clubType === '5'">价值投资</span>
  29. <span v-else-if="scope.row.clubType === '6'">波段行情</span>
  30. <span v-else-if="scope.row.clubType === '7'">抄底卖顶</span>
  31. <span v-else-if="scope.row.clubType === '8'">资金及仓位管理</span>
  32. <span v-else>财富的游戏</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column prop="article" label="关联文章">
  36. <template #default="{ row }">
  37. <el-tooltip class="tooltip" v-if="row.article" :content="row.article.title" placement="bottom"
  38. :disabled="row.article.title.length <= 10" effect="light">
  39. {{ row.article.title.slice(0, 10) || '—' }}
  40. </el-tooltip>
  41. <span v-else></span>
  42. </template>
  43. </el-table-column>
  44. <el-table-column prop="live" label="关联直播">
  45. <template #default="{ row }">
  46. <el-tooltip class="tooltip" v-if="row.live" :content="row.live.name" placement="bottom"
  47. :disabled="row.live.name.length <= 10" effect="light">
  48. {{ row.live.name.slice(0, 10) || '—' }}
  49. </el-tooltip>
  50. <span v-else></span>
  51. </template>
  52. </el-table-column>
  53. <el-table-column prop="count" label="填写份数"></el-table-column>
  54. <el-table-column label="提交时间">
  55. <template v-slot="scope">
  56. {{ scope.row.startDate.split(' ')[0] }} {{ scope.row.endDate.split(' ')[0] }}
  57. </template>
  58. </el-table-column>
  59. <el-table-column prop="status" label="状态">
  60. <template #default="{ row }">
  61. <span v-if="row.status === 0">未上架</span>
  62. <span v-else-if="row.status === 1">发布中</span>
  63. <span v-else-if="row.status === 2">已下架</span>
  64. </template>
  65. </el-table-column>
  66. <el-table-column prop="createdAt" label="发布时间"></el-table-column>
  67. <el-table-column label="操作">
  68. <template #default="scope">
  69. <el-button type="primary" link @click="viewDetails(scope.row)">查看明细</el-button>
  70. <el-button type="primary" link v-if="scope.row.status != '2'" @click="editAssignment(scope.row)">编辑</el-button>
  71. </template>
  72. </el-table-column>
  73. </el-table>
  74. </div>
  75. <div class="page">
  76. <el-pagination v-model:current-page="PageNo" v-model:page-size="PageSize" :page-sizes="[20, 50, 100, 200]"
  77. :size="size" :disabled="disabled" :background="background" layout="total,prev,next,sizes,jumper"
  78. :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
  79. </div>
  80. </el-main>
  81. </el-container>
  82. </div>
  83. </template>
  84. <script setup>
  85. import { ref, onMounted } from 'vue';
  86. import { ElMessage } from 'element-plus';
  87. import ClassListApi from '../api/ClassListApi';
  88. import axios from 'axios';
  89. import { useRouter } from 'vue-router';
  90. import LoginApi from '../api/LoginApi';
  91. const router = useRouter();
  92. const assignments = ref([]);
  93. // 初始化页码,这里假设初始页码为1,你可以根据实际需求修改
  94. const PageNo = ref(1);
  95. // 初始化页面大小,这里假设初始页面大小为10,同样可按需修改
  96. const PageSize = ref(20);
  97. const size = ref('default');
  98. const disabled = ref(false);
  99. const background = ref(true);
  100. const total = ref(0);
  101. // 处理页面大小改变的事件函数,将新的页面大小赋值给PageSize变量
  102. const handleSizeChange = (newPageSize) => {
  103. PageSize.value = newPageSize;
  104. getAssignments(PageNo.value, PageSize.value);
  105. };
  106. // 处理当前页码改变的事件函数,将新的页码赋值给PageNo变量
  107. const handleCurrentChange = (newPageNo) => {
  108. PageNo.value = newPageNo;
  109. getAssignments(PageNo.value, PageSize.value);
  110. };
  111. const getAssignments = (PageNo, PageSize) => {
  112. ClassListApi.getClassList(PageNo, PageSize)
  113. .then((response) => {
  114. assignments.value = response.data.list;
  115. total.value = response.data.total;
  116. console.log(assignments.value);
  117. })
  118. .catch((error) => {
  119. console.error('获取作业列表失败', error);
  120. });
  121. };
  122. //在组件初始化时(类似mounted生命周期的效果)获取一次初始数据
  123. onMounted(() => {
  124. getAssignments(PageNo.value, PageSize.value);
  125. });
  126. const newAssignment = () => {
  127. router.push('/addwork')
  128. }
  129. // 查看明细按钮的点击事件处理函数
  130. const viewDetails = async(row) => {
  131. try {
  132. router.push({
  133. name: 'workdetail',
  134. params: { id: row.id },
  135. });
  136. console.log(row.id)
  137. } catch (error) {
  138. console.log('获取数据出错:', error)
  139. }
  140. };
  141. // 编辑按钮的点击事件处理函数
  142. const editAssignment = async (row) => {
  143. try {
  144. router.push({
  145. name: 'updatework',
  146. params: { id: row.id },
  147. });
  148. console.log(row.id)
  149. } catch (error) {
  150. console.log('获取数据出错:', error)
  151. }
  152. };
  153. // 退出登录
  154. const logout = () => {
  155. LoginApi.logout().then(res => {
  156. console.log(res);
  157. // 移除axios请求拦截器中设置token的逻辑,恢复到初始状态
  158. // axios.interceptors.request.eject(axios.interceptors.request.handlers.find(
  159. // handler => handler.fulfilled && handler.fulfilled.toString().includes('token')
  160. // ));
  161. config.headers['token'] = ` `;
  162. }).catch(err => {
  163. // 处理退出登录接口调用失败的情况,比如提示错误信息等
  164. ElMessage.error('退出登录失败,请稍后重试');
  165. }).finally(() => {
  166. // 无论接口调用成功与否,都进行页面跳转
  167. router.push('/');
  168. });
  169. }
  170. </script>
  171. <style scoped>
  172. .page {
  173. margin-left: 70%;
  174. }
  175. .header {
  176. height: 100px;
  177. line-height: 100px;
  178. padding: 0 80px;
  179. }
  180. .header-text {
  181. font-size: 22px;
  182. font-weight: 500;
  183. color: black;
  184. float: left;
  185. }
  186. .header-button {
  187. margin-top: 30px;
  188. }
  189. .main {
  190. padding: 20px 203px;
  191. background-color: #F8F8F8;
  192. }
  193. .list {
  194. padding: 0 60px;
  195. background-color: white;
  196. }
  197. .main-title {
  198. font-size: 16px;
  199. background-color: white;
  200. font-weight: bold;
  201. height: 52px;
  202. border-bottom: 2px solid #ececec;
  203. padding: 0 60px;
  204. line-height: 52px;
  205. }
  206. .main-button {
  207. margin: 15px 0;
  208. padding: 12px 20px;
  209. height: 40px;
  210. }
  211. </style>