index.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <template>
  2. <div class="teacher-manager">
  3. <!--搜索-->
  4. <div class="teacher-manager-search">
  5. <el-row type="flex" justify="space-between" class="search-condition">
  6. <el-col :span="20">
  7. <span class="search-name">用户名</span>
  8. <el-input
  9. v-model="user_name"
  10. class="account-search"
  11. type="text"
  12. @keyup.enter.native="queryOrgTeacherUserList"
  13. />
  14. <span class="search-name">姓名</span>
  15. <el-input
  16. v-model="user_real_name"
  17. class="account-search"
  18. type="text"
  19. @keyup.enter.native="queryOrgTeacherUserList"
  20. />
  21. <span class="search-name">审核状态</span>
  22. <el-select v-model="is_audited" :style="{ 'margin-right': '12px' }">
  23. <el-option v-for="{ value, label } in auditedList" :key="value" :value="value" :label="label" />
  24. </el-select>
  25. <date-search ref="dateSearch" name="加入机构时间" />
  26. </el-col>
  27. <el-col :span="2">
  28. <el-button class="search-button" icon="el-icon-search" @click="queryOrgTeacherUserList" />
  29. </el-col>
  30. </el-row>
  31. </div>
  32. <!-- 表格 -->
  33. <CommonTable
  34. name="教师列表"
  35. :min-height="554"
  36. :page-size="page_capacity"
  37. :total="total_count"
  38. :current-page="cur_page"
  39. @prev-click="changePage"
  40. @next-click="changePage"
  41. @current-change="changePage"
  42. @size-change="changePageSize"
  43. >
  44. <el-table :data="org_teacher_user_list">
  45. <el-table-column prop="user_name" label="用户名" width="180" />
  46. <el-table-column prop="user_real_name" label="姓名" width="180" />
  47. <el-table-column prop="org_name" label="服务机构" width="180" />
  48. <el-table-column prop="user_email" label="邮箱" width="180" />
  49. <el-table-column prop="join_org_time" label="加入机构时间" width="180" />
  50. <el-table-column prop="is_audited" label="已审核">
  51. <template slot-scope="{ row }">
  52. <div :style="{ 'text-align': 'center', width: '40px' }">{{ row.is_audited === 'true' ? '√' : '' }}</div>
  53. </template>
  54. </el-table-column>
  55. <el-table-column fixed="right" width="180">
  56. <template slot-scope="{ row }">
  57. <el-row type="flex" justify="space-between">
  58. <el-col>
  59. <el-link
  60. :underline="false"
  61. :type="row.is_audited === 'true' ? 'danger' : 'success'"
  62. @click="auditOrgTeacher(row)"
  63. >
  64. 审核{{ row.is_audited === 'true' ? '拒绝' : '同意' }}
  65. </el-link>
  66. </el-col>
  67. <el-col>
  68. <el-popover trigger="click" width="200" @show="getPopedomList(row.id)">
  69. <div class="popedom">
  70. <span class="popedom-manager">权限管理</span>
  71. <div v-for="item in popedom_list" :key="item.popedom_code" class="popedom-list">
  72. <span>{{ item.popedom_name }}</span>
  73. <el-switch v-model="item.is_selected" active-color="#34CC83" inactive-color="#C4C4C4" />
  74. </div>
  75. <el-button type="primary" @click="setPopedom(row.id)">保存</el-button>
  76. </div>
  77. <el-link slot="reference" :underline="false">权限</el-link>
  78. </el-popover>
  79. </el-col>
  80. </el-row>
  81. </template>
  82. </el-table-column>
  83. </el-table>
  84. </CommonTable>
  85. </div>
  86. </template>
  87. <script>
  88. import { pageQueryOrgTeacherUserList } from '@/api/list';
  89. import { auditOrgTeacherUser, getPopedomList_OrgTeacherUse, setPopedom_OrgTeacherUser } from '@/api/teacher';
  90. import DateSearch from '@/components/common/DateSearch.vue';
  91. import CommonTable from '@/components/common/CommonTable.vue';
  92. export default {
  93. name: 'TeacherManager',
  94. components: {
  95. DateSearch,
  96. CommonTable
  97. },
  98. data() {
  99. return {
  100. user_name: '',
  101. user_real_name: '',
  102. org_teacher_user_list: [],
  103. page_capacity: 10,
  104. total_count: 0,
  105. cur_page: 1,
  106. popedom_list: [],
  107. auditedList: [
  108. {
  109. value: '',
  110. label: '所有'
  111. },
  112. {
  113. value: true,
  114. label: '已审核'
  115. },
  116. {
  117. value: false,
  118. label: '未审核'
  119. }
  120. ],
  121. is_audited: ''
  122. };
  123. },
  124. created() {
  125. this.queryOrgTeacherUserList();
  126. },
  127. methods: {
  128. changePage(newPage) {
  129. this.cur_page = newPage;
  130. this.queryOrgTeacherUserList();
  131. },
  132. changePageSize(pageSize) {
  133. this.page_capacity = pageSize;
  134. this.queryOrgTeacherUserList();
  135. },
  136. queryOrgTeacherUserList() {
  137. pageQueryOrgTeacherUserList({
  138. user_name: this.user_name,
  139. user_real_name: this.user_real_name,
  140. page_capacity: this.page_capacity,
  141. cur_page: this.cur_page,
  142. is_audited: this.is_audited,
  143. join_org_time_min: this.$refs?.dateSearch?.join_org_time_min ?? '',
  144. join_org_time_max: this.$refs?.dateSearch?.join_org_time_max ?? ''
  145. }).then(({ cur_page, org_teacher_user_list, total_count }) => {
  146. this.cur_page = cur_page;
  147. this.org_teacher_user_list = org_teacher_user_list;
  148. this.total_count = total_count;
  149. });
  150. },
  151. // 审核教师
  152. auditOrgTeacher(row) {
  153. auditOrgTeacherUser({
  154. id_list: [row.id],
  155. is_audited: row.is_audited !== 'true'
  156. }).then(() => {
  157. this.queryOrgTeacherUserList();
  158. });
  159. },
  160. // 得到权限列表
  161. getPopedomList(user_org_id) {
  162. getPopedomList_OrgTeacherUse({ user_org_id }).then(({ popedom_list }) => {
  163. popedom_list.forEach((el, i, arr) => {
  164. el.is_selected = el.is_selected === 'true';
  165. arr[i] = el;
  166. });
  167. this.popedom_list = popedom_list;
  168. });
  169. },
  170. // 设置教师权限
  171. setPopedom(user_org_id) {
  172. let popedom_code_list = this.popedom_list
  173. .map(({ popedom_code, is_selected }) => {
  174. if (is_selected) return popedom_code;
  175. })
  176. .filter(item => item !== undefined);
  177. setPopedom_OrgTeacherUser({
  178. user_org_id,
  179. popedom_code_list
  180. }).then(() => {
  181. this.$message.success('设置教师权限成功');
  182. });
  183. }
  184. }
  185. };
  186. </script>
  187. <style lang="scss">
  188. @import '~@/styles/mixin';
  189. .teacher-manager {
  190. @include container;
  191. @include pagination;
  192. padding: 24px 0 46px;
  193. &-search {
  194. span.search-name {
  195. margin-right: 14px;
  196. }
  197. .search-condition {
  198. align-items: center;
  199. }
  200. .account-search {
  201. width: 240px;
  202. margin-right: 48px;
  203. }
  204. .search-button {
  205. float: right;
  206. }
  207. }
  208. }
  209. // 权限管理
  210. .popedom {
  211. &-manager {
  212. display: flex;
  213. justify-content: space-between;
  214. padding-bottom: 8px;
  215. font-weight: 700;
  216. border-bottom: 1px solid #d9d9d9;
  217. }
  218. &-list {
  219. display: flex;
  220. justify-content: space-between;
  221. padding-top: 10px;
  222. }
  223. .el-button {
  224. width: 100%;
  225. padding: 6px 20px;
  226. margin-top: 16px;
  227. }
  228. }
  229. </style>