|
|
@@ -3,8 +3,8 @@
|
|
|
<!-- ===== 搜索栏 ===== -->
|
|
|
<el-card shadow="never" class="mb16 filter-card">
|
|
|
<el-form :model="queryParams" ref="queryForm" :inline="true" size="small">
|
|
|
- <el-form-item label="租户名称" prop="companyName">
|
|
|
- <el-input v-model="queryParams.companyName" placeholder="租户编码/名称" clearable @keyup.enter.native="handleQuery" />
|
|
|
+ <el-form-item label="租户名称" prop="tenantName">
|
|
|
+ <el-input v-model="queryParams.tenantName" placeholder="租户编码/名称" clearable @keyup.enter.native="handleQuery" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="状态" prop="status">
|
|
|
<el-select v-model="queryParams.status" placeholder="全部" clearable style="width:120px">
|
|
|
@@ -31,40 +31,70 @@
|
|
|
|
|
|
<!-- ===== 租户列表 ===== -->
|
|
|
<el-table border v-loading="loading" :data="companyList" size="small" style="width:100%">
|
|
|
- <el-table-column label="租户编码" prop="companyId" width="100" align="center" />
|
|
|
- <el-table-column label="租户名称" prop="companyName" min-width="140" />
|
|
|
+ <el-table-column label="租户编码" prop="tenantCode" width="100" align="center" />
|
|
|
+ <el-table-column label="租户名称" prop="tenantName" min-width="140" />
|
|
|
<el-table-column label="联系人" prop="contactName" width="90" align="center" />
|
|
|
<el-table-column label="联系电话" prop="contactPhone" width="120" align="center" />
|
|
|
+ <!-- TODO 后续优化:余额需切到租户库查询 company 表 -->
|
|
|
<el-table-column label="余额" align="center" width="110">
|
|
|
<template slot-scope="scope">
|
|
|
- <span style="color:#1890ff;font-weight:bold">{{ scope.row.balance ? '¥' + Number(scope.row.balance).toFixed(2) : '¥0.00' }}</span>
|
|
|
+ <span style="color:#999">-</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
+ <!-- TODO 后续优化:已消费总额需切到租户库查询 company_money_logs 表 -->
|
|
|
<el-table-column label="已消费总额" align="center" width="120">
|
|
|
<template slot-scope="scope">
|
|
|
- <span>{{ scope.row.totalCost ? '¥' + Number(scope.row.totalCost).toFixed(2) : '¥0.00' }}</span>
|
|
|
+ <span style="color:#999">-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- TODO 后续优化:开通账户数需切到租户库查询 company_user 表 -->
|
|
|
+ <el-table-column label="开通账户数" align="center" width="110">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span style="color:#999">-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- TODO 后续优化:绑定企微账户数需切到租户库查询 company_user 表 -->
|
|
|
+ <el-table-column label="绑定企微账户数" align="center" width="130">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span style="color:#999">-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- TODO 后续优化:绑定个微账户数需切到租户库查询 company_wx_user 表 -->
|
|
|
+ <el-table-column label="绑定个微账户数" align="center" width="130">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span style="color:#999">-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- TODO 后续优化:客户数需切到租户库查询 qw_external_contact 表 -->
|
|
|
+ <el-table-column label="客户数" align="center" width="100">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span style="color:#999">-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- TODO 后续优化:企微用户数需切到租户库查询 qw_user 表 -->
|
|
|
+ <el-table-column label="企微用户数" align="center" width="110">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span style="color:#999">-</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="开通账户数" align="center" prop="accountCount" width="110" />
|
|
|
- <el-table-column label="绑定企微账户数" align="center" prop="qwAccountCount" width="130" />
|
|
|
- <el-table-column label="绑定个微账户数" align="center" prop="wxAccountCount" width="130" />
|
|
|
- <el-table-column label="客户数" align="center" prop="customerCount" width="100" />
|
|
|
- <el-table-column label="企微用户数" align="center" prop="qwUserCount" width="110" />
|
|
|
<el-table-column label="过期时间" align="center" prop="expireTime" width="110" />
|
|
|
- <el-table-column label="归属代理" align="center" prop="proxyName" width="110" />
|
|
|
- <el-table-column label="备注" prop="remark" min-width="120" show-overflow-tooltip />
|
|
|
+ <!-- TODO 后续优化:归属代理需查询 proxy_tenant_rel + proxy 表 -->
|
|
|
+ <el-table-column label="归属代理" align="center" width="110">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span style="color:#999">-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="状态" align="center" width="80">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-tag v-if="scope.row.status == 0" type="success" size="mini">正常</el-tag>
|
|
|
+ <el-tag v-if="scope.row.status == 1" type="success" size="mini">正常</el-tag>
|
|
|
<el-tag v-else type="danger" size="mini">禁用</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="操作" align="center" width="200" fixed="right" class-name="small-padding fixed-width">
|
|
|
+ <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
|
|
|
<template slot-scope="scope">
|
|
|
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleView(scope.row)">编辑</el-button>
|
|
|
- <el-button size="mini" type="text" style="color:#52c41a" icon="el-icon-coin" @click="handleRecharge(scope.row)">充值/扣款</el-button>
|
|
|
<el-button
|
|
|
- v-if="scope.row.status == 0"
|
|
|
+ v-if="scope.row.status == 1"
|
|
|
size="mini" type="text" style="color:#fa8c16"
|
|
|
icon="el-icon-lock"
|
|
|
@click="handleDisable(scope.row)"
|
|
|
@@ -86,27 +116,15 @@
|
|
|
<!-- ===== 租户详情弹窗 ===== -->
|
|
|
<el-dialog title="租户详情" :visible.sync="viewOpen" width="640px" append-to-body>
|
|
|
<el-descriptions :column="2" border size="small">
|
|
|
- <el-descriptions-item label="租户ID">{{ viewForm.companyId }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="租户名称">{{ viewForm.companyName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="租户简称">{{ viewForm.companyShortName || '-' }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="租户ID">{{ viewForm.id }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="租户编码">{{ viewForm.tenantCode }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="租户名称">{{ viewForm.tenantName }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="联系人">{{ viewForm.contactName || '-' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="联系电话">{{ viewForm.contactPhone || '-' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="邮箱">{{ viewForm.email || '-' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="地址" :span="2">{{ viewForm.address || '-' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="创建时间">{{ viewForm.createTime }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="过期时间">{{ viewForm.expireTime || '-' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="租户余额">
|
|
|
- <span style="color:#1890ff;font-weight:bold">¥{{ viewForm.balance || '0.00' }}</span>
|
|
|
- </el-descriptions-item>
|
|
|
- <el-descriptions-item label="已消费总额">¥{{ viewForm.totalCost || '0.00' }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="开通账户数">{{ viewForm.accountCount || 0 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="绑定企微账号数">{{ viewForm.qwAccountCount || 0 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="绑定个微账号数">{{ viewForm.wxAccountCount || 0 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="客户数">{{ viewForm.customerCount || 0 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="企微用户数">{{ viewForm.qwUserCount || 0 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="归属代理">{{ viewForm.proxyName || '-' }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="租户状态">
|
|
|
- <el-tag v-if="viewForm.status == 0" type="success" size="mini">正常</el-tag>
|
|
|
+ <el-tag v-if="viewForm.status == 1" type="success" size="mini">正常</el-tag>
|
|
|
<el-tag v-else type="danger" size="mini">禁用</el-tag>
|
|
|
</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
@@ -114,53 +132,39 @@
|
|
|
|
|
|
<!-- ===== 新增租户弹窗 ===== -->
|
|
|
<el-dialog title="新增租户" :visible.sync="addDialog.visible" width="680px" append-to-body destroy-on-close>
|
|
|
+ <el-alert title="数据库连接信息将自动从DB配置中分配,无需手动填写" type="info" :closable="false" show-icon style="margin-bottom:16px" />
|
|
|
<el-form ref="addForm" :model="addDialog.form" :rules="addDialog.rules" label-width="100px" size="small">
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="企业名称" prop="companyName">
|
|
|
- <el-input v-model="addDialog.form.companyName" placeholder="请输入企业名称" />
|
|
|
+ <el-form-item label="租户名称" prop="tenantName">
|
|
|
+ <el-input v-model="addDialog.form.tenantName" placeholder="请输入租户名称" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="联系电话" prop="companyMobile">
|
|
|
- <el-input v-model="addDialog.form.companyMobile" placeholder="请输入联系电话" />
|
|
|
+ <el-form-item label="租户编码" prop="tenantCode">
|
|
|
+ <el-input v-model="addDialog.form.tenantCode" placeholder="请输入租户编码" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="联系人" prop="linkName">
|
|
|
- <el-input v-model="addDialog.form.linkName" placeholder="请输入联系人" />
|
|
|
+ <el-form-item label="联系电话" prop="contactPhone">
|
|
|
+ <el-input v-model="addDialog.form.contactPhone" placeholder="请输入联系电话" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="商务负责人" prop="manager">
|
|
|
- <el-input v-model="addDialog.form.manager" placeholder="请输入商务负责人" />
|
|
|
+ <el-form-item label="联系人" prop="contactName">
|
|
|
+ <el-input v-model="addDialog.form.contactName" placeholder="请输入联系人" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="管理员账号" prop="userName">
|
|
|
- <el-input v-model="addDialog.form.userName" placeholder="请输入管理员账号" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="密码" prop="password">
|
|
|
- <el-input v-model="addDialog.form.password" type="password" show-password placeholder="请输入密码" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="开始时间" prop="startTime">
|
|
|
- <el-date-picker v-model="addDialog.form.startTime" type="date" value-format="yyyy-MM-dd" placeholder="选择开始时间" style="width:100%" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="到期时间" prop="limitTime">
|
|
|
- <el-date-picker v-model="addDialog.form.limitTime" type="date" value-format="yyyy-MM-dd" placeholder="选择到期时间" style="width:100%" />
|
|
|
+ <el-form-item label="到期时间" prop="expireTime">
|
|
|
+ <el-date-picker v-model="addDialog.form.expireTime" type="date" value-format="yyyy-MM-dd" placeholder="选择到期时间" style="width:100%" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="状态" prop="status">
|
|
|
<el-radio-group v-model="addDialog.form.status">
|
|
|
- <el-radio :label="0">启用</el-radio>
|
|
|
- <el-radio :label="1">禁用</el-radio>
|
|
|
+ <el-radio :label="1">启用</el-radio>
|
|
|
+ <el-radio :label="0">禁用</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -171,39 +175,11 @@
|
|
|
<el-button type="primary" :loading="addDialog.submitting" @click="submitAdd">确 定</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
-
|
|
|
- <!-- ===== 充值/扣款弹窗 ===== -->
|
|
|
- <el-dialog :title="rechargeTitle" :visible.sync="rechargeOpen" width="420px" append-to-body>
|
|
|
- <el-form ref="rechargeForm" :model="rechargeForm" :rules="rechargeRules" label-width="90px">
|
|
|
- <el-form-item label="租户名称">
|
|
|
- <span>{{ rechargeForm.companyName }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="当前余额">
|
|
|
- <span style="color:#1890ff;font-weight:bold">¥{{ rechargeForm.currentBalance || '0.00' }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="操作类型" prop="operateType">
|
|
|
- <el-radio-group v-model="rechargeForm.operateType">
|
|
|
- <el-radio label="recharge">充值</el-radio>
|
|
|
- <el-radio label="deduct">扣款</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="金额" prop="amount">
|
|
|
- <el-input-number v-model="rechargeForm.amount" :min="0.01" :precision="2" style="width:200px" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="备注" prop="remark">
|
|
|
- <el-input v-model="rechargeForm.remark" type="textarea" :rows="2" placeholder="请输入备注" />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <div slot="footer">
|
|
|
- <el-button @click="rechargeOpen = false">取 消</el-button>
|
|
|
- <el-button type="primary" @click="submitRecharge">确 定</el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { listAllCompanies, getCompanyInfo, addCompany, disableCompany, enableCompany, rechargeCompany, exportCompany } from '@/api/admin/sysCompany'
|
|
|
+import { listAllCompanies, getCompanyInfo, addCompany, disableCompany, enableCompany, exportCompany } from '@/api/admin/sysCompany'
|
|
|
|
|
|
export default {
|
|
|
name: 'SysCompanyAdmin',
|
|
|
@@ -215,47 +191,32 @@ export default {
|
|
|
total: 0,
|
|
|
companyList: [],
|
|
|
statusOptions: [
|
|
|
- { value: 0, label: '正常' },
|
|
|
- { value: 1, label: '禁用' }
|
|
|
+ { value: 1, label: '正常' },
|
|
|
+ { value: 0, label: '禁用' }
|
|
|
],
|
|
|
queryParams: {
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
- companyName: null,
|
|
|
+ tenantName: null,
|
|
|
status: null
|
|
|
},
|
|
|
- // 详情弹窗
|
|
|
viewOpen: false,
|
|
|
viewForm: {},
|
|
|
- // 新增租户弹窗
|
|
|
addDialog: {
|
|
|
visible: false,
|
|
|
submitting: false,
|
|
|
form: {
|
|
|
- companyName: '',
|
|
|
- companyMobile: '',
|
|
|
- linkName: '',
|
|
|
- userName: '',
|
|
|
- password: '',
|
|
|
- manager: '',
|
|
|
- startTime: null,
|
|
|
- limitTime: null,
|
|
|
- status: 0
|
|
|
+ tenantName: '',
|
|
|
+ tenantCode: '',
|
|
|
+ contactPhone: '',
|
|
|
+ contactName: '',
|
|
|
+ expireTime: null,
|
|
|
+ status: 1
|
|
|
},
|
|
|
rules: {
|
|
|
- companyName: [{ required: true, message: '请输入企业名称', trigger: 'blur' }],
|
|
|
- companyMobile: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
|
|
|
- userName: [{ required: true, message: '请输入管理员账号', trigger: 'blur' }],
|
|
|
- password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
|
|
|
+ tenantName: [{ required: true, message: '请输入租户名称', trigger: 'blur' }],
|
|
|
+ tenantCode: [{ required: true, message: '请输入租户编码', trigger: 'blur' }]
|
|
|
}
|
|
|
- },
|
|
|
- // 充值/扣款弹窗
|
|
|
- rechargeOpen: false,
|
|
|
- rechargeTitle: '',
|
|
|
- rechargeForm: { companyId: null, companyName: '', currentBalance: 0, operateType: 'recharge', amount: null, remark: '' },
|
|
|
- rechargeRules: {
|
|
|
- operateType: [{ required: true, message: '请选择操作类型', trigger: 'change' }],
|
|
|
- amount: [{ required: true, message: '请输入金额', trigger: 'blur' }]
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -279,31 +240,30 @@ export default {
|
|
|
this.resetForm('queryForm')
|
|
|
this.handleQuery()
|
|
|
},
|
|
|
- /** 新增租户 */
|
|
|
handleAdd() {
|
|
|
this.addDialog.form = {
|
|
|
- companyName: '',
|
|
|
- companyMobile: '',
|
|
|
- linkName: '',
|
|
|
- userName: '',
|
|
|
- password: '',
|
|
|
- manager: '',
|
|
|
- startTime: null,
|
|
|
- limitTime: null,
|
|
|
- status: 0
|
|
|
+ tenantName: '',
|
|
|
+ tenantCode: '',
|
|
|
+ contactPhone: '',
|
|
|
+ contactName: '',
|
|
|
+ expireTime: null,
|
|
|
+ status: 1
|
|
|
}
|
|
|
this.addDialog.visible = true
|
|
|
this.$nextTick(() => {
|
|
|
if (this.$refs.addForm) this.$refs.addForm.clearValidate()
|
|
|
})
|
|
|
},
|
|
|
- /** 提交新增租户 */
|
|
|
submitAdd() {
|
|
|
this.$refs['addForm'].validate(valid => {
|
|
|
if (!valid) return
|
|
|
this.addDialog.submitting = true
|
|
|
- addCompany(this.addDialog.form).then(() => {
|
|
|
- this.$message.success('新增成功')
|
|
|
+ addCompany(this.addDialog.form).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.$message.success(res.msg || '新增成功,数据库初始化中')
|
|
|
+ } else {
|
|
|
+ this.$message.success('新增成功')
|
|
|
+ }
|
|
|
this.addDialog.visible = false
|
|
|
this.getList()
|
|
|
}).catch(() => {
|
|
|
@@ -313,54 +273,27 @@ export default {
|
|
|
})
|
|
|
})
|
|
|
},
|
|
|
- /** 查看详情/编辑 */
|
|
|
handleView(row) {
|
|
|
- getCompanyInfo(row.companyId).then(response => {
|
|
|
+ getCompanyInfo(row.id).then(response => {
|
|
|
this.viewForm = response.data
|
|
|
this.viewOpen = true
|
|
|
})
|
|
|
},
|
|
|
- /** 充值/扣款 */
|
|
|
- handleRecharge(row) {
|
|
|
- this.rechargeForm = {
|
|
|
- companyId: row.companyId,
|
|
|
- companyName: row.companyName,
|
|
|
- currentBalance: row.balance || 0,
|
|
|
- operateType: 'recharge',
|
|
|
- amount: null,
|
|
|
- remark: ''
|
|
|
- }
|
|
|
- this.rechargeTitle = `充值/扣款 - ${row.companyName}`
|
|
|
- this.rechargeOpen = true
|
|
|
- },
|
|
|
- submitRecharge() {
|
|
|
- this.$refs['rechargeForm'].validate(valid => {
|
|
|
- if (!valid) return
|
|
|
- const { companyId, operateType, amount, remark } = this.rechargeForm
|
|
|
- rechargeCompany(companyId, { operateType, amount, remark }).then(() => {
|
|
|
- this.$message.success(operateType === 'recharge' ? '充值成功' : '扣款成功')
|
|
|
- this.rechargeOpen = false
|
|
|
- this.getList()
|
|
|
- })
|
|
|
- })
|
|
|
- },
|
|
|
- /** 禁用租户 */
|
|
|
handleDisable(row) {
|
|
|
- this.$confirm('确定禁用租户 [' + row.companyName + '] 吗?', '提示', {
|
|
|
+ this.$confirm('确定禁用租户 [' + row.tenantName + '] 吗?', '提示', {
|
|
|
confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning'
|
|
|
}).then(() => {
|
|
|
- disableCompany(row.companyId).then(() => {
|
|
|
+ disableCompany(row.id).then(() => {
|
|
|
this.$message.success('禁用成功')
|
|
|
this.getList()
|
|
|
})
|
|
|
})
|
|
|
},
|
|
|
- /** 启用租户 */
|
|
|
handleEnable(row) {
|
|
|
- this.$confirm('确定启用租户 [' + row.companyName + '] 吗?', '提示', {
|
|
|
+ this.$confirm('确定启用租户 [' + row.tenantName + '] 吗?', '提示', {
|
|
|
confirmButtonText: '确定', cancelButtonText: '取消', type: 'info'
|
|
|
}).then(() => {
|
|
|
- enableCompany(row.companyId).then(() => {
|
|
|
+ enableCompany(row.id).then(() => {
|
|
|
this.$message.success('启用成功')
|
|
|
this.getList()
|
|
|
})
|