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.

257 lines
8.5 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 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-if="scope.row.clubType == '9'">财富的游戏</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. import { useTokenStore } from '../stores/token';
  92. import { useUserStore } from '../stores/user';
  93. const router = useRouter();
  94. const assignments = ref([]);
  95. // 初始化页码,这里假设初始页码为1,你可以根据实际需求修改
  96. const PageNo = ref(1);
  97. // 初始化页面大小,这里假设初始页面大小为10,同样可按需修改
  98. const PageSize = ref(20);
  99. const size = ref('default');
  100. const disabled = ref(false);
  101. const background = ref(true);
  102. const total = ref(0);
  103. // 处理页面大小改变的事件函数,将新的页面大小赋值给PageSize变量
  104. const handleSizeChange = (newPageSize) => {
  105. PageSize.value = newPageSize;
  106. getAssignments(PageNo.value, PageSize.value);
  107. };
  108. // 处理当前页码改变的事件函数,将新的页码赋值给PageNo变量
  109. const handleCurrentChange = (newPageNo) => {
  110. PageNo.value = newPageNo;
  111. getAssignments(PageNo.value, PageSize.value);
  112. };
  113. const getAssignments = (PageNo, PageSize) => {
  114. ClassListApi.getClassList(PageNo, PageSize)
  115. .then((response) => {
  116. assignments.value = response.data.list;
  117. total.value = response.data.total;
  118. console.log(assignments.value);
  119. })
  120. .catch((error) => {
  121. console.error('获取作业列表失败', error);
  122. });
  123. };
  124. //在组件初始化时(类似mounted生命周期的效果)获取一次初始数据
  125. onMounted(() => {
  126. getAssignments(PageNo.value, PageSize.value);
  127. const token = useTokenStore();
  128. console.log(token);
  129. console.log(token.value);
  130. console.log(token.token)
  131. console.log("=============");
  132. });
  133. const newAssignment = () => {
  134. router.push('/addwork')
  135. }
  136. // 查看明细按钮的点击事件处理函数
  137. const viewDetails = async(row) => {
  138. try {
  139. router.push({
  140. name: 'workdetail',
  141. params: { id: row.id },
  142. });
  143. console.log(row.id)
  144. } catch (error) {
  145. console.log('获取数据出错:', error)
  146. }
  147. };
  148. // 编辑按钮的点击事件处理函数
  149. const editAssignment = async (row) => {
  150. try {
  151. router.push({
  152. name: 'updatework',
  153. params: { id: row.id },
  154. });
  155. console.log(row.id)
  156. } catch (error) {
  157. console.log('获取数据出错:', error)
  158. }
  159. };
  160. // // 退出登录
  161. // const logout = () => {
  162. // LoginApi.logout().then(res => {
  163. // console.log(res);
  164. // // 移除axios请求拦截器中设置token的逻辑,恢复到初始状态
  165. // // axios.interceptors.request.eject(axios.interceptors.request.handlers.find(
  166. // // handler => handler.fulfilled && handler.fulfilled.toString().includes('token')
  167. // // ));
  168. // config.headers['token'] = ` `;
  169. // }).catch(err => {
  170. // // 处理退出登录接口调用失败的情况,比如提示错误信息等
  171. // ElMessage.error('退出登录失败,请稍后重试');
  172. // }).finally(() => {
  173. // // 无论接口调用成功与否,都进行页面跳转
  174. // router.push('/');
  175. // });
  176. // }
  177. // //退出登录
  178. // const logout = () => {
  179. // LoginApi.logout().then(res => {
  180. // console.log(res)
  181. // })
  182. // router.push('/')
  183. // }
  184. //退出
  185. const logout=async()=>{
  186. try {
  187. await LoginApi.logout()
  188. } catch (error) {
  189. console.log(error)
  190. }
  191. //清除登录信息
  192. const tokenStore = useTokenStore();
  193. const userStore = useUserStore();
  194. tokenStore.clear();
  195. userStore.clear();
  196. router.push('/')
  197. }
  198. </script>
  199. <style scoped>
  200. .page {
  201. margin-left: 70%;
  202. }
  203. .header {
  204. height: 100px;
  205. line-height: 100px;
  206. padding: 0 80px;
  207. }
  208. .header-text {
  209. font-size: 22px;
  210. font-weight: 500;
  211. color: black;
  212. float: left;
  213. }
  214. .header-button {
  215. margin-top: 30px;
  216. }
  217. .main {
  218. padding: 20px 203px;
  219. background-color: #F8F8F8;
  220. }
  221. .list {
  222. padding: 0 60px;
  223. background-color: white;
  224. }
  225. .main-title {
  226. font-size: 16px;
  227. background-color: white;
  228. font-weight: bold;
  229. height: 52px;
  230. border-bottom: 2px solid #ececec;
  231. padding: 0 60px;
  232. line-height: 52px;
  233. }
  234. .main-button {
  235. margin: 15px 0;
  236. padding: 12px 20px;
  237. height: 40px;
  238. }
  239. </style>