feat: org disable 整改 + biz_meeting 补字段 + 表格 0/1 显示标准化

1. backend: 禁用主账号 dual-write + 子账号登录校验主账号状态

   - BizOrgServiceImpl.toggleStatus: 同步 biz_org.status 与 sys_user.status

   - BizOrgController.toggleStatus: 严格校验 '0'/'1'

   - BizAuthController.smsLogin 4.5: 子账号校验主账号状态拦截

2. fix: BizMeeting 补 9 个字段 getters/setters

   - projectId / projectName / orgName / supervisionOpinion / supervisionBy

   - supervisionTime / invitationUrl / scheduleUrl / laborSigned

   - 解决 Meetings.vue 修改/复制 projectId 为空的 bug

3. frontend: 0/1 status 标准化显示

   - 10 个 Orgs/People 表格 el-tag 由 raw 0/1 改为 正常/禁用

   - 4 个 People 页面修复 row.status || '正常' 在 '0' 时不

     回退的 bug (字符串 '0' 是 truthy)

   - 筛选下拉 / 编辑表单 / onToggleStatus label 全部对齐 0/1 语义

   - DB 迁移: 10 行脏数据 (7 正常/合作中 → 0, 3 禁用 → 1)

   - 备份表 biz_org_backup_20260819

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
郭庆泰
2026-08-19 00:27:15 +08:00
co-authored by Claude
parent 9f132d4f86
commit ec4a8aa8f0
17 changed files with 616 additions and 97 deletions
+4
View File
@@ -91,6 +91,10 @@ export const bizGet = (entity, id) => request.get(`/business/${entity}/${id}`)
// opts 透传给 request (例如 { __silentError: true } 让拦截器不自动 toast, 由调用方控制)
export const bizAdd = (entity, data, opts) => request.post(`/business/${entity}`, data, opts)
export const bizUpdate = (entity, data, opts) => request.put(`/business/${entity}`, data, opts)
// org 启用/禁用: PUT /business/org/toggleStatus, 同步主账号 sys_user.status
// (bizUpdate('org', {orgId, status}) 只改 biz_org.status, 不联动主账号, 已被 toggleStatus 替代)
export const toggleOrgStatus = (orgId, status) => request.put('/business/org/toggleStatus', { orgId, status })
export const bizDelete = (entity, ids) => request.delete(`/business/${entity}/${ids}`)
// 人员批量导入 (unitType: 'sponsor' | 'executor')
+11 -16
View File
@@ -16,11 +16,8 @@
</el-form-item>
<el-form-item label="合作状态">
<el-select v-model="q.status" placeholder="请选择" clearable style="width:140px">
<el-option label="正常" value="正常" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-option label="0正常" value="0" />
<el-option label="1禁用" value="1" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
@@ -40,7 +37,7 @@
<el-table-column prop="taxNo" label="税号/统一社会信用代码" min-width="180" />
<el-table-column label="合作状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="120" align="center">
@@ -91,9 +88,8 @@
</el-form-item>
<el-form-item v-if="isEdit" label="状态">
<el-select v-model="form.status" style="width:160px">
<el-option label="0正常" value="0" />
<el-option label="合作中" value="合作中" />
<el-option label="1禁用" value="1" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
</el-form>
@@ -108,7 +104,7 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { bizList, bizAdd, bizUpdate } from '@/api/public'
import { bizList, bizAdd, bizUpdate, toggleOrgStatus } from '@/api/public'
import { ElMessage, ElMessageBox } from 'element-plus'
const router = useRouter()
@@ -119,12 +115,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '正常' || s === '0' || s === '合作中') return 'success'
if (s === '禁用' || s === '1') return 'danger'
return 'info'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
function formatDate(d) {
if (!d) return ''
@@ -162,7 +157,7 @@ async function onToggleStatus(row) {
} catch { return }
}
try {
await bizUpdate('org', { orgId: row.orgId, status: newStatus })
await toggleOrgStatus(row.orgId, newStatus)
ElMessage.success('已' + label)
load()
} catch (e) { ElMessage.error(e?.msg || '操作失败') }
@@ -203,7 +198,7 @@ function onView(row) {
`地址: ${row.address || '-'}\n` +
`税号: ${row.taxNo || '-'}\n` +
`联系人: ${row.contactName || '-'} (${row.contactPhone || '-'})\n` +
`状态: ${row.status}\n` +
`状态: ${row.status === '1' ? '禁用' : '正常'}\n` +
`创建日期: ${formatDate(row.createTime)}`,
'服务机构详情',
{ confirmButtonText: '关闭' }
+4 -4
View File
@@ -45,7 +45,7 @@
<el-table-column prop="position" label="职务" min-width="100" />
<el-table-column label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status || '正常' }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
@@ -106,11 +106,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '禁用' || s === '1') return 'danger'
return 'success'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
async function load() {
+11 -16
View File
@@ -26,11 +26,8 @@
</el-form-item>
<el-form-item label="合作状态">
<el-select v-model="q.status" placeholder="请选择" clearable style="width:140px">
<el-option label="正常" value="正常" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-option label="0正常" value="0" />
<el-option label="1禁用" value="1" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
@@ -59,7 +56,7 @@
<el-table-column prop="taxNo" label="税号/统一社会信用代码" min-width="180" />
<el-table-column label="合作状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="120" align="center">
@@ -116,9 +113,8 @@
</el-form-item>
<el-form-item v-if="isEdit" label="状态">
<el-select v-model="form.status" style="width:160px">
<el-option label="正常/合作中" value="0" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
</el-form>
@@ -141,12 +137,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '正常' || s === '0' || s === '合作中') return 'success'
if (s === '禁用' || s === '1') return 'danger'
return 'info'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
function formatDate(d) {
if (!d) return ''
@@ -171,7 +166,7 @@ function reset() {
async function onToggleStatus(row) {
const disabled = isDisabled(row)
const newStatus = disabled ? (row.orgType === 'sponsor' ? '正常' : '0') : '禁用'
const newStatus = disabled ? '0' : '1' // 0=正常, 1=禁用
const label = disabled ? '恢复' : '禁用'
if (!disabled) {
try {
@@ -183,7 +178,7 @@ async function onToggleStatus(row) {
} catch { return }
}
try {
await bizUpdate('org', { orgId: row.orgId, status: newStatus })
await toggleOrgStatus(row.orgId, newStatus)
ElMessage.success('已' + label)
load()
} catch (e) { ElMessage.error(e?.msg || '操作失败') }
@@ -224,7 +219,7 @@ function onView(row) {
`地址: ${row.address || '-'}\n` +
`税号: ${row.taxNo || '-'}\n` +
`联系人: ${row.contactName || '-'} (${row.contactPhone || '-'})\n` +
`状态: ${row.status}\n` +
`状态: ${row.status === '1' ? '禁用' : '正常'}\n` +
`创建日期: ${formatDate(row.createTime)}`,
'公司详情',
{ confirmButtonText: '关闭' }
+14 -19
View File
@@ -17,11 +17,8 @@
</el-form-item>
<el-form-item label="合作状态">
<el-select v-model="q.status" placeholder="请选择" clearable style="width:140px">
<el-option label="正常" value="正常" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-option label="0正常" value="0" />
<el-option label="1禁用" value="1" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
@@ -41,7 +38,7 @@
<el-table-column prop="taxNo" label="税号/统一社会信用代码" min-width="180" />
<el-table-column label="合作状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="120" align="center">
@@ -92,9 +89,8 @@
</el-form-item>
<el-form-item v-if="isEdit" label="状态">
<el-select v-model="form.status" style="width:160px">
<el-option label="正常" value="正常" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
</el-form>
@@ -109,7 +105,7 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { bizList, bizAdd, bizUpdate } from '@/api/public'
import { bizList, bizAdd, bizUpdate, toggleOrgStatus } from '@/api/public'
import { ElMessage, ElMessageBox } from 'element-plus'
const router = useRouter()
@@ -120,12 +116,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '正常' || s === '0' || s === '合作中') return 'success'
if (s === '禁用' || s === '1') return 'danger'
return 'info'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
function formatDate(d) {
if (!d) return ''
@@ -150,7 +145,7 @@ function reset() {
async function onToggleStatus(row) {
const disabled = isDisabled(row)
const newStatus = disabled ? '正常' : '禁用'
const newStatus = disabled ? '0' : '1' // 0=正常, 1=禁用
const label = disabled ? '恢复' : '禁用'
if (!disabled) {
try {
@@ -162,7 +157,7 @@ async function onToggleStatus(row) {
} catch { return }
}
try {
await bizUpdate('org', { orgId: row.orgId, status: newStatus })
await toggleOrgStatus(row.orgId, newStatus)
ElMessage.success('已' + label)
load()
} catch (e) { ElMessage.error(e?.msg || '操作失败') }
@@ -174,7 +169,7 @@ const saving = ref(false)
const formRef = ref(null)
const form = reactive({
orgId: null, orgType: 'sponsor', orgName: '', address: '', taxNo: '',
contactName: '', contactPhone: '', status: '正常'
contactName: '', contactPhone: '', status: '0'
})
const rules = {
orgName: [{ required: true, message: '请输入公司名称', trigger: 'blur' }]
@@ -184,7 +179,7 @@ function openAdd() {
isEdit.value = false
Object.assign(form, {
orgId: null, orgType: 'sponsor', orgName: '', address: '', taxNo: '',
contactName: '', contactPhone: '', status: '正常'
contactName: '', contactPhone: '', status: '0'
})
dialogVisible.value = true
}
@@ -203,7 +198,7 @@ function onView(row) {
`地址: ${row.address || '-'}\n` +
`税号: ${row.taxNo || '-'}\n` +
`联系人: ${row.contactName || '-'} (${row.contactPhone || '-'})\n` +
`状态: ${row.status}\n` +
`状态: ${row.status === '1' ? '禁用' : '正常'}\n` +
`创建日期: ${formatDate(row.createTime)}`,
'支持单位详情',
{ confirmButtonText: '关闭' }
+4 -4
View File
@@ -45,7 +45,7 @@
<el-table-column prop="position" label="职务" min-width="100" />
<el-table-column label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status || '正常' }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
@@ -107,11 +107,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '禁用' || s === '1') return 'danger'
return 'success'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
async function load() {
+38 -11
View File
@@ -15,10 +15,9 @@
<el-input v-model="q.taxNo" placeholder="输入税号" clearable />
</el-form-item>
<el-form-item label="合作状态">
<el-select v-model="q.status" placeholder="请选择" clearable>
<el-option label="0正常" value="0" />
<el-option label="合作中" value="合作中" />
<el-option label="1禁用" value="1" />
<el-select v-model="q.status" placeholder="请选择" clearable style="width:140px">
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
@@ -34,7 +33,7 @@
<el-table-column prop="taxNo" label="税号/统一社会信用代码" min-width="180" />
<el-table-column label="合作状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="120" align="center">
@@ -42,10 +41,13 @@
</el-table-column>
<el-table-column prop="contactName" label="联系人" width="100" align="center" />
<el-table-column prop="contactPhone" label="联系电话" width="130" align="center" />
<el-table-column label="操作" width="180" fixed="right">
<el-table-column label="操作" width="240" fixed="right">
<template #default="{ row }">
<el-button link type="primary" @click="view(row)">查看</el-button>
<el-button link type="primary" @click="goPeople(row)">人员管理</el-button>
<el-button link :type="isDisabled(row) ? 'success' : 'danger'" @click="onToggleStatus(row)">
{{ isDisabled(row) ? '恢复' : '禁用' }}
</el-button>
</template>
</el-table-column>
</el-table>
@@ -62,7 +64,7 @@
<el-descriptions-item label="公司地址">{{ currentRow.address }}</el-descriptions-item>
<el-descriptions-item label="税号/统一社会信用代码">{{ currentRow.taxNo }}</el-descriptions-item>
<el-descriptions-item label="合作状态">
<el-tag :type="statusTagType(currentRow.status)">{{ currentRow.status }}</el-tag>
<el-tag :type="statusTagType(currentRow.status)">{{ currentRow.status === '1' ? '禁用' : '正常' }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="创建日期">{{ currentRow.createTime ? String(currentRow.createTime).slice(0,10) : '' }}</el-descriptions-item>
<el-descriptions-item label="联系人">{{ currentRow.contactName || '-' }}</el-descriptions-item>
@@ -78,7 +80,8 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { bizList } from '@/api/public'
import { bizList, toggleOrgStatus } from '@/api/public'
import { ElMessage, ElMessageBox } from 'element-plus'
const router = useRouter()
@@ -90,9 +93,11 @@ const currentRow = ref(null)
const detailOpen = ref(false)
function statusTagType(s) {
if (s === '正常' || s === '0' || s === '合作中') return 'success'
if (s === '禁用' || s === '1') return 'danger'
return 'info'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '1'
}
async function load() {
@@ -109,6 +114,28 @@ function goPeople(row) {
router.push({ path: '/manager/executor-people', query: { orgId: row.orgId, orgName: row.orgName } })
}
// 仅禁用主账号 (走 BizOrgServiceImpl.toggleStatus: 同步 biz_org.status + sys_user.status)
// 子账号由 BizAuthController.smsLogin 4.5 节校验主账号状态拦截
async function onToggleStatus(row) {
const disabled = isDisabled(row)
const newStatus = disabled ? '0' : '1' // 0=正常, 1=禁用
const label = disabled ? '恢复' : '禁用'
if (!disabled) {
try {
await ElMessageBox.confirm(
`确定要${label}${row.orgName}」吗? ${label}后该企业主账号无法登录, 企业下子账号也将被拦截`,
'确认',
{ type: 'warning' }
)
} catch { return }
}
try {
await toggleOrgStatus(row.orgId, newStatus)
ElMessage.success('已' + label)
load()
} catch (e) { ElMessage.error(e?.msg || '操作失败') }
}
onMounted(load)
</script>
+4 -4
View File
@@ -45,7 +45,7 @@
<el-table-column prop="position" label="职务" min-width="100" />
<el-table-column label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status || '正常' }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
@@ -106,11 +106,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '禁用' || s === '1') return 'danger'
return 'success'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
async function load() {
+6 -8
View File
@@ -23,9 +23,8 @@
</el-form-item>
<el-form-item label="合作状态">
<el-select v-model="q.status" placeholder="请选择" clearable>
<el-option label="正常/合作中" value="0" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
@@ -49,7 +48,7 @@
<el-table-column prop="taxNo" label="税号/统一社会信用代码" min-width="180" />
<el-table-column label="合作状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="120" align="center">
@@ -78,7 +77,7 @@
<el-descriptions-item label="公司地址">{{ currentRow.address }}</el-descriptions-item>
<el-descriptions-item label="税号/统一社会信用代码">{{ currentRow.taxNo }}</el-descriptions-item>
<el-descriptions-item label="合作状态">
<el-tag :type="statusTagType(currentRow.status)">{{ currentRow.status }}</el-tag>
<el-tag :type="statusTagType(currentRow.status)">{{ currentRow.status === '1' ? '禁用' : '正常' }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="创建日期">{{ currentRow.createTime ? String(currentRow.createTime).slice(0,10) : '' }}</el-descriptions-item>
<el-descriptions-item label="联系人">{{ currentRow.contactName || '-' }}</el-descriptions-item>
@@ -105,9 +104,8 @@ const currentRow = ref(null)
const detailOpen = ref(false)
function statusTagType(s) {
if (s === '正常' || s === '0' || s === '合作中') return 'success'
if (s === '禁用' || s === '1') return 'danger'
return 'info'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
async function load() {
+38 -11
View File
@@ -15,10 +15,9 @@
<el-input v-model="q.taxNo" placeholder="输入税号" clearable />
</el-form-item>
<el-form-item label="合作状态">
<el-select v-model="q.status" placeholder="请选择" clearable>
<el-option label="正常/合作中" value="0" />
<el-option label="合作中" value="合作中" />
<el-option label="禁用" value="禁用" />
<el-select v-model="q.status" placeholder="请选择" clearable style="width:140px">
<el-option label="正常" value="0" />
<el-option label="禁用" value="1" />
</el-select>
</el-form-item>
<el-form-item>
@@ -34,7 +33,7 @@
<el-table-column prop="taxNo" label="税号/统一社会信用代码" min-width="180" />
<el-table-column label="合作状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="120" align="center">
@@ -42,10 +41,13 @@
</el-table-column>
<el-table-column prop="contactName" label="联系人" width="100" align="center" />
<el-table-column prop="contactPhone" label="联系电话" width="130" align="center" />
<el-table-column label="操作" width="180" fixed="right">
<el-table-column label="操作" width="240" fixed="right">
<template #default="{ row }">
<el-button link type="primary" @click="view(row)">查看</el-button>
<el-button link type="primary" @click="goPeople(row)">人员管理</el-button>
<el-button link :type="isDisabled(row) ? 'success' : 'danger'" @click="onToggleStatus(row)">
{{ isDisabled(row) ? '恢复' : '禁用' }}
</el-button>
</template>
</el-table-column>
</el-table>
@@ -62,7 +64,7 @@
<el-descriptions-item label="公司地址">{{ currentRow.address }}</el-descriptions-item>
<el-descriptions-item label="税号/统一社会信用代码">{{ currentRow.taxNo }}</el-descriptions-item>
<el-descriptions-item label="合作状态">
<el-tag :type="statusTagType(currentRow.status)">{{ currentRow.status }}</el-tag>
<el-tag :type="statusTagType(currentRow.status)">{{ currentRow.status === '1' ? '禁用' : '正常' }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="创建日期">{{ currentRow.createTime ? String(currentRow.createTime).slice(0,10) : '' }}</el-descriptions-item>
<el-descriptions-item label="联系人">{{ currentRow.contactName || '-' }}</el-descriptions-item>
@@ -78,7 +80,8 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { bizList } from '@/api/public'
import { bizList, toggleOrgStatus } from '@/api/public'
import { ElMessage, ElMessageBox } from 'element-plus'
const router = useRouter()
@@ -90,9 +93,11 @@ const currentRow = ref(null)
const detailOpen = ref(false)
function statusTagType(s) {
if (s === '正常' || s === '0' || s === '合作中') return 'success'
if (s === '禁用' || s === '1') return 'danger'
return 'info'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '1'
}
async function load() {
@@ -109,6 +114,28 @@ function goPeople(row) {
router.push({ path: '/manager/sponsor-people', query: { orgId: row.orgId, orgName: row.orgName } })
}
// 仅禁用主账号 (走 BizOrgServiceImpl.toggleStatus: 同步 biz_org.status + sys_user.status)
// 子账号由 BizAuthController.smsLogin 4.5 节校验主账号状态拦截
async function onToggleStatus(row) {
const disabled = isDisabled(row)
const newStatus = disabled ? '0' : '1' // 0=正常, 1=禁用
const label = disabled ? '恢复' : '禁用'
if (!disabled) {
try {
await ElMessageBox.confirm(
`确定要${label}${row.orgName}」吗? ${label}后该企业主账号无法登录, 企业下子账号也将被拦截`,
'确认',
{ type: 'warning' }
)
} catch { return }
}
try {
await toggleOrgStatus(row.orgId, newStatus)
ElMessage.success('已' + label)
load()
} catch (e) { ElMessage.error(e?.msg || '操作失败') }
}
onMounted(load)
</script>
+4 -4
View File
@@ -45,7 +45,7 @@
<el-table-column prop="position" label="职务" min-width="100" />
<el-table-column label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status || '正常' }}</el-tag>
<el-tag :type="statusTagType(row.status)" disable-transitions>{{ row.status === '1' ? '禁用' : '正常' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
@@ -106,11 +106,11 @@ const loading = ref(false)
const page = reactive({ pageNum: 1, pageSize: 10, total: 0 })
function statusTagType(s) {
if (s === '禁用' || s === '1') return 'danger'
return 'success'
// 统一: 0=正常(success), 1=禁用(danger)
return s === '1' ? 'danger' : 'success'
}
function isDisabled(row) {
return row.status === '禁用' || row.status === '1'
return row.status === '1'
}
async function load() {