瀏覽代碼

学校列表

Xiao_123 2 月之前
父節點
當前提交
994820fa8e

+ 24 - 0
src/api/menduner/schoolRegisterExamine/index.ts

@@ -0,0 +1,24 @@
+import request from '@/config/axios'
+
+export const FlameSchoolApi = {
+	// 学校列表
+	flameSchoolPage: async (data: any) => {
+		return await request.post({ url: '/flames/school/list', data })
+	},
+
+	// 学校详情
+	flameSchoolDetail: async (data: any) => {
+		return await request.post({ url: '/flames/school/detail', data })
+	},
+
+
+	// 账号申请通过、拒绝
+	flameSchoolExamine: async (data: any) => {
+		return await request.post({ url: `/flames/user/auth/record/save`, data })
+	},
+
+	// 根据学校id获取账号注册被拒绝的原因
+	flameSchoolExamineReasonById: async (data: any) => {
+		return await request.post({ url: `/flames/user/auth/record/get`, data })
+	}
+}

+ 129 - 0
src/views/menduner/schoolRegisterExamine/RefuseForm.vue

@@ -0,0 +1,129 @@
+<template>
+  <Dialog :title="formType === 'details' ? '详情' : t('common.audit')" v-model="dialogVisible">
+		<el-descriptions title="" border :column="1">
+      <el-descriptions-item label="学校名称">{{ formatName(info?.school?.schoolName) }}</el-descriptions-item>
+      <el-descriptions-item label="老师昵称">{{ info?.school?.teacherNickname || '-' }}</el-descriptions-item>
+      <el-descriptions-item label="联系电话">{{ info?.school?.phone || '-' }}</el-descriptions-item>
+      <el-descriptions-item label="学校地址">{{ info?.school?.schoolAdderss || '-' }}</el-descriptions-item>
+      <el-descriptions-item label="创建时间">{{ info?.school?.createDate ? formatDate(info?.school?.createDate) : '-' }}</el-descriptions-item>
+			<el-descriptions-item label="在岗证明图片">
+        <el-image class="!w-80px h-80px" :src="info?.schoolQualificaions?.jobImg || ''" hide-on-click-modal :preview-src-list="[info?.schoolQualificaions?.jobImg]"/>
+      </el-descriptions-item>
+			<el-descriptions-item label="身份证正面图片">
+        <el-image class="!w-80px h-80px" :src="info?.schoolQualificaions?.schoolLegalPersonIdCardImg1 || ''" hide-on-click-modal :preview-src-list="[info?.schoolQualificaions?.schoolLegalPersonIdCardImg1]"/>
+      </el-descriptions-item>
+			<el-descriptions-item label="身份证背面图片">
+        <el-image class="!w-80px h-80px" :src="info?.schoolQualificaions?.schoolLegalPersonIdCardImg2 || ''" hide-on-click-modal :preview-src-list="[info?.schoolQualificaions?.schoolLegalPersonIdCardImg2]"/>
+      </el-descriptions-item>
+      <el-descriptions-item v-if="refuseMessage && info?.school?.authStatus === '2'" label="审核拒绝原因">{{ refuseMessage || '-' }}</el-descriptions-item>
+    </el-descriptions>
+
+    <el-form
+			v-if="formType === 'refuse'"
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="80px"
+			class="mt-50px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="拒绝原因" prop="message">
+        <el-input v-model="formData.message" type="textarea" placeholder="请输入拒绝原因" />
+      </el-form-item>
+    </el-form>
+
+    <template #footer>
+      <el-button v-if="formType === 'agree'" @click="handleAgree" type="primary" :disabled="formLoading">通 过</el-button>
+      <el-button v-if="formType === 'refuse'" @click="handleRefuse" type="danger" :disabled="formLoading">拒绝</el-button>
+      <el-button @click="dialogVisible = false">取 消</el-button>
+    </template>
+  </Dialog>
+</template>
+
+<script setup lang="ts">
+/** 门墩儿-学校注册申请拒绝 表单 */
+defineOptions({ name: 'SchoolRegisterRejectForm' })
+import { formatName } from '@/utils'
+import { FlameSchoolApi } from '@/api/menduner/schoolRegisterExamine'
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+const dialogVisible = ref(false) // 弹窗的是否展示
+const formRef = ref() // 表单 Ref
+const formType = ref('')
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formRules = reactive({
+  message: [{ required: true, message: '拒绝原因不能为空', trigger: 'blur' }]
+})
+const formData = ref({
+	message: ''
+})
+const query = ref({})
+
+const handleAgree = async () => {
+	try {
+		await message.confirm('确定要通过该学校注册申请吗?')
+
+		await FlameSchoolApi.flameSchoolExamine({ ...query.value, status: 1, message: '' })
+		dialogVisible.value = false
+		message.success('操作成功')
+    // 发送操作成功的事件
+    emit('success')
+	} catch {}
+}
+
+const handleRefuse = async () => {
+	// 校验表单
+  await formRef.value.validate()
+
+  formLoading.value = true
+  try {
+   	await FlameSchoolApi.flameSchoolExamine({ ...query.value, status: 0, message: formData.value.message })
+    formLoading.value = false
+		dialogVisible.value = false
+		message.success('操作成功')
+    // 发送操作成功的事件
+    emit('success')
+  } catch (err) {
+    message.error('拒绝失败')
+  } finally {
+    formLoading.value = false
+		dialogVisible.value = false
+  }
+}
+
+/** 打开弹窗 */
+const info = ref({})
+const refuseMessage = ref('')
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const open = async (id: Number, type: string) => {
+	formType.value = type
+  dialogVisible.value = true
+  if (type === 'refuse') resetForm()
+
+	if (id) {
+		const data = await FlameSchoolApi.flameSchoolDetail({ schoolId: id })
+		info.value = data || {}
+		query.value = {
+			title: '门墩儿管理员',
+			userType: 1,
+			entityId: data.school.schoolId
+		}
+
+    // 如果审核状态为拒绝,则获取拒绝理由
+    if (data?.school?.authStatus === '2') {
+      const result = await FlameSchoolApi.flameSchoolExamineReasonById({ schoolId: id })
+      refuseMessage.value = result?.message
+    }
+	}
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    message: ''
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 177 - 0
src/views/menduner/schoolRegisterExamine/index.vue

@@ -0,0 +1,177 @@
+<template>
+  <!-- 搜索工作栏 -->
+  <ContentWrap>
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="学校名称" prop="schoolName">
+        <el-input
+          v-model="queryParams.schoolName"
+          placeholder="请输入学校名称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="账号昵称" prop="teacherNickname">
+        <el-input
+          v-model="queryParams.teacherNickname"
+          placeholder="请输入账号昵称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入联系电话"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="帐号状态" prop="authStatus">
+        <el-select
+          v-model="queryParams.authStatus"
+          placeholder="请选择帐号状态"
+          clearable
+          class="!w-240px"
+        >
+          <el-option
+            v-for="dict in statusList"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true">
+      <el-table-column label="学校名称" align="center" prop="schoolName" fixed="left">
+        <template #default="scope">{{ formatName(scope.row.schoolName) }}</template>
+      </el-table-column>
+      <el-table-column label="账号昵称" align="center" prop="teacherNickname" />
+      <el-table-column label="联系电话" align="center" prop="phone" />
+      <el-table-column label="学校地址" align="center" prop="schoolAdderss" />
+      <el-table-column label="账号状态" align="center" prop="school.authStatus">
+        <template #default="scope">
+          <el-tag :type="statusList.find(e => e.value === scope.row.authStatus)?.color">
+            {{ statusList.find(e => e.value === scope.row.authStatus)?.label }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createDate"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+      <el-table-column label="操作">
+        <template #default="scope">
+          <el-button link type="primary" @click="handleAction(scope.row.schoolId, 'details')">详情</el-button>
+          <template v-if="scope.row.authStatus === '0'">
+            <el-button link type="danger" @click="handleAction(scope.row.schoolId, 'refuse')">拒绝</el-button>
+            <el-button link type="success" @click="handleAction(scope.row.schoolId, 'agree')">通过</el-button>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.current"
+      v-model:limit="queryParams.size"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 拒绝-原因 -->
+  <RefuseForm ref="refuseRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+/** 门墩儿-学校注册申请 列表 */
+defineOptions({ name: 'SchoolAccountRegisterExamine' })
+
+import { dateFormatter } from '@/utils/formatTime'
+import { FlameSchoolApi } from '@/api/menduner/schoolRegisterExamine'
+import { formatName } from '@/utils'
+import RefuseForm from './RefuseForm.vue'
+
+const loading = ref(true) // 列表的加载中
+const list = ref([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  current: 1,
+  size: 8,
+  schoolName: undefined,
+  phone: undefined,
+  authStatus: undefined,
+  teacherNickname: undefined
+})
+const queryFormRef = ref() // 搜索的表单
+
+const statusList = [
+  { value: '0', label: '待审核', color: 'warning' },
+  { value: '1', label: '审核通过', color: 'success' },
+  { value: '2', label: '审核不通过', color: 'danger' }
+]
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+
+  for (let i in queryParams) {
+    if (queryParams[i] === '') {
+      queryParams[i] = undefined
+    }
+  }
+
+  try {
+    const data = await FlameSchoolApi.flameSchoolPage(queryParams)
+    list.value = data.records
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.current = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  handleQuery()
+}
+
+/* 拒绝 */
+const refuseRef = ref()
+const handleAction = (id: number, type: string) => {
+  refuseRef.value.open(id, type)
+}
+
+/** 初始化 **/
+onMounted(() => {
+  queryParams.current = 1
+  getList()
+})
+
+</script>