Files
qiji/frontend/src/views/BindWecom.vue
T
v6ole a1886074dd 企迹(qiji) 政企周报管理系统 — v0.1
后端: FastAPI + SQLAlchemy 2.0 (async) + Alembic + MinIO + Casdoor + 企微
前端: Vue 3 + Vite + TypeScript + Element Plus + Pinia

功能清单:
- 8 张数据表自动建表 / Casdoor OIDC 登录 / 企微静默登录
- 双布局: 移动端(填报) + PC端(汇总管理)
- 拜访记录 CRUD + MinIO 照片直传 + 缩略图预览 + 同访人草稿
- 今日纪要 (6 分类) / 工作计划 / 小微商机 / 要客拜访 CRUD
- 客户档案: 备注/收支费用/联系人/归属分配/批量转移
- 客户导入导出 + 模板下载 + 搜索/分页/筛选
- 仪表盘: 四卡统计 + 填报进度 (拜访+纪要双维度)
- 周报详情: 五 Tab + 按人/客户筛选 + 时间轴
- 用户管理 / 客户经理 PC 端工作台
- 企微: 催办/公告/定时提醒 / 时区修正
- Docker 部署配置

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-24 08:30:12 +08:00

53 lines
1.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import { onMounted, ref } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
import { ElMessage } from 'element-plus'
const router = useRouter()
const route = useRoute()
const auth = useAuthStore()
const loading = ref(true)
onMounted(async () => {
const code = route.query.code as string
const state = route.query.state as string // This is wecom_userid
if (!code) {
ElMessage.error('缺少授权参数')
router.push('/login')
return
}
try {
await auth.bindWecom(code, state || '')
ElMessage.success('企微绑定成功')
router.push(auth.isManager ? '/m' : '/')
} catch (e: any) {
ElMessage.error('绑定失败: ' + (e.response?.data?.detail || e.message))
router.push('/login')
} finally {
loading.value = false
}
})
</script>
<template>
<div class="bind-page">
<el-card v-loading="loading">
<template #header>正在完成企微账号绑定...</template>
<p v-if="loading">请稍候正在验证您的身份</p>
</el-card>
</div>
</template>
<style scoped>
.bind-page {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background: #f5f7fa;
}
</style>