|
|
@@ -1,169 +1,143 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
|
|
|
- <el-form-item label="租户名称" prop="companyName">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.companyName"
|
|
|
- placeholder="请输入租户名称"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="租户状态" prop="status">
|
|
|
- <el-select v-model="queryParams.status" placeholder="请选择租户状态" clearable size="small">
|
|
|
- <el-option
|
|
|
- v-for="item in statusOptions"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
+ <!-- ===== 搜索栏 ===== -->
|
|
|
+ <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>
|
|
|
+ <el-form-item label="状态" prop="status">
|
|
|
+ <el-select v-model="queryParams.status" placeholder="全部" clearable style="width:120px">
|
|
|
+ <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">查询</el-button>
|
|
|
+ <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-card>
|
|
|
|
|
|
+ <!-- ===== 操作栏 ===== -->
|
|
|
<el-row :gutter="10" class="mb8">
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button
|
|
|
- type="warning"
|
|
|
- plain
|
|
|
- icon="el-icon-download"
|
|
|
- size="mini"
|
|
|
- :loading="exportLoading"
|
|
|
- @click="handleExport"
|
|
|
- v-hasPermi="['admin:platform:edit']"
|
|
|
- >导出</el-button>
|
|
|
+ <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['admin:platform:edit']">新增租户</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button type="warning" plain icon="el-icon-download" size="mini" :loading="exportLoading" @click="handleExport">导出</el-button>
|
|
|
</el-col>
|
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
</el-row>
|
|
|
|
|
|
- <el-table border v-loading="loading" :data="companyList">
|
|
|
- <el-table-column type="selection" width="55" align="center" />
|
|
|
- <el-table-column label="租户ID" align="center" prop="companyId" />
|
|
|
- <el-table-column label="租户名称" align="center" prop="companyName" />
|
|
|
- <el-table-column label="租户简称" align="center" prop="companyShortName" />
|
|
|
- <el-table-column label="联系人" align="center" prop="contactName" />
|
|
|
- <el-table-column label="联系电话" align="center" prop="contactPhone" />
|
|
|
- <el-table-column label="邮箱" align="center" prop="email" />
|
|
|
- <el-table-column label="地址" align="center" prop="address" />
|
|
|
- <el-table-column label="创建时间" align="center" prop="createTime" />
|
|
|
- <el-table-column label="租户余额" align="center" prop="balance">
|
|
|
- <template slot-scope="scope">¥{{ scope.row.balance || '0.00' }}</template>
|
|
|
+ <!-- ===== 租户列表 ===== -->
|
|
|
+ <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="contactName" width="90" align="center" />
|
|
|
+ <el-table-column label="联系电话" prop="contactPhone" width="120" align="center" />
|
|
|
+ <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>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="已消费总额" align="center" prop="totalCost">
|
|
|
- <template slot-scope="scope">¥{{ scope.row.totalCost || '0.00' }}</template>
|
|
|
+ <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>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="开通账户数" align="center" prop="accountCount" />
|
|
|
- <el-table-column label="绑定企微账号数" align="center" prop="qwAccountCount" />
|
|
|
- <el-table-column label="绑定个微账号数" align="center" prop="wxAccountCount" />
|
|
|
- <el-table-column label="客户数" align="center" prop="customerCount" />
|
|
|
- <el-table-column label="企微用户数" align="center" prop="qwUserCount" />
|
|
|
- <el-table-column label="归属代理" align="center" prop="proxyName" />
|
|
|
- <el-table-column label="租户状态" align="center" prop="status">
|
|
|
+ <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 />
|
|
|
+ <el-table-column label="状态" align="center" width="80">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-tag v-if="scope.row.status == 0" type="success">正常</el-tag>
|
|
|
- <el-tag v-else type="error">禁用</el-tag>
|
|
|
+ <el-tag v-if="scope.row.status == 0" 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" class-name="small-padding fixed-width">
|
|
|
+ <el-table-column label="操作" align="center" width="200" 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"
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
+ size="mini" type="text" style="color:#fa8c16"
|
|
|
icon="el-icon-lock"
|
|
|
- plain
|
|
|
@click="handleDisable(scope.row)"
|
|
|
v-hasPermi="['admin:platform:edit']"
|
|
|
>禁用</el-button>
|
|
|
<el-button
|
|
|
v-else
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
+ size="mini" type="text" style="color:#52c41a"
|
|
|
icon="el-icon-unlock"
|
|
|
- plain
|
|
|
@click="handleEnable(scope.row)"
|
|
|
v-hasPermi="['admin:platform:edit']"
|
|
|
>启用</el-button>
|
|
|
- <el-button
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
- icon="el-icon-search"
|
|
|
- plain
|
|
|
- @click="handleView(scope.row)"
|
|
|
- >详情</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
|
|
|
- <pagination
|
|
|
- v-show="total>0"
|
|
|
- :total="total"
|
|
|
- :page.sync="queryParams.pageNum"
|
|
|
- :limit.sync="queryParams.pageSize"
|
|
|
- @pagination="getList"
|
|
|
- />
|
|
|
+ <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
|
|
|
|
|
- <!-- 详情弹窗 -->
|
|
|
- <el-dialog title="租户详情" :visible.sync="viewOpen" width="600px" append-to-body>
|
|
|
- <el-form :model="viewForm" label-width="100px">
|
|
|
- <el-form-item label="租户ID">
|
|
|
- <span>{{ viewForm.companyId }}</span>
|
|
|
- </el-form-item>
|
|
|
+ <!-- ===== 租户详情弹窗 ===== -->
|
|
|
+ <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="联系人">{{ 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-else type="danger" size="mini">禁用</el-tag>
|
|
|
+ </el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </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>{{ viewForm.companyName }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="租户简称">
|
|
|
- <span>{{ viewForm.companyShortName }}</span>
|
|
|
+ <span>{{ rechargeForm.companyName }}</span>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="联系人">
|
|
|
- <span>{{ viewForm.contactName }}</span>
|
|
|
+ <el-form-item label="当前余额">
|
|
|
+ <span style="color:#1890ff;font-weight:bold">¥{{ rechargeForm.currentBalance || '0.00' }}</span>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="联系电话">
|
|
|
- <span>{{ viewForm.contactPhone }}</span>
|
|
|
+ <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="邮箱">
|
|
|
- <span>{{ viewForm.email }}</span>
|
|
|
+ <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="地址">
|
|
|
- <span>{{ viewForm.address }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="创建时间">
|
|
|
- <span>{{ viewForm.createTime }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="租户余额">
|
|
|
- <span>¥{{ viewForm.balance || '0.00' }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="已消费总额">
|
|
|
- <span>¥{{ viewForm.totalCost || '0.00' }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="开通账户数">
|
|
|
- <span>{{ viewForm.accountCount || 0 }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="绑定企微账号数">
|
|
|
- <span>{{ viewForm.qwAccountCount || 0 }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="绑定个微账号数">
|
|
|
- <span>{{ viewForm.wxAccountCount || 0 }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="客户数">
|
|
|
- <span>{{ viewForm.customerCount || 0 }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="企微用户数">
|
|
|
- <span>{{ viewForm.qwUserCount || 0 }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="归属代理">
|
|
|
- <span>{{ viewForm.proxyName || '-' }}</span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="租户状态">
|
|
|
- <el-tag v-if="viewForm.status == 0" type="success">正常</el-tag>
|
|
|
- <el-tag v-else type="error">禁用</el-tag>
|
|
|
+ <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>
|
|
|
@@ -175,22 +149,15 @@ export default {
|
|
|
name: 'SysCompanyAdmin',
|
|
|
data() {
|
|
|
return {
|
|
|
- // 遮罩层
|
|
|
loading: true,
|
|
|
- // 导出遮罩层
|
|
|
exportLoading: false,
|
|
|
- // 显示搜索条件
|
|
|
showSearch: true,
|
|
|
- // 总条数
|
|
|
total: 0,
|
|
|
- // 租户列表
|
|
|
companyList: [],
|
|
|
- // 状态选项
|
|
|
statusOptions: [
|
|
|
{ value: 0, label: '正常' },
|
|
|
{ value: 1, label: '禁用' }
|
|
|
],
|
|
|
- // 查询参数
|
|
|
queryParams: {
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
@@ -199,14 +166,21 @@ export default {
|
|
|
},
|
|
|
// 详情弹窗
|
|
|
viewOpen: false,
|
|
|
- viewForm: {}
|
|
|
+ viewForm: {},
|
|
|
+ // 充值/扣款弹窗
|
|
|
+ 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' }]
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
this.getList()
|
|
|
},
|
|
|
methods: {
|
|
|
- /** 查询列表 */
|
|
|
getList() {
|
|
|
this.loading = true
|
|
|
listAllCompanies(this.queryParams).then(response => {
|
|
|
@@ -215,31 +189,51 @@ export default {
|
|
|
this.loading = false
|
|
|
})
|
|
|
},
|
|
|
- /** 搜索按钮操作 */
|
|
|
handleQuery() {
|
|
|
this.queryParams.pageNum = 1
|
|
|
this.getList()
|
|
|
},
|
|
|
- /** 重置按钮操作 */
|
|
|
resetQuery() {
|
|
|
this.resetForm('queryForm')
|
|
|
this.handleQuery()
|
|
|
},
|
|
|
- /** 查看详情 */
|
|
|
+ /** 新增租户 */
|
|
|
+ handleAdd() {
|
|
|
+ this.$message.info('新增租户功能开发中')
|
|
|
+ },
|
|
|
+ /** 查看详情/编辑 */
|
|
|
handleView(row) {
|
|
|
getCompanyInfo(row.companyId).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
|
|
|
+ this.$message.info('充值/扣款功能开发中,待后端API对接')
|
|
|
+ this.rechargeOpen = false
|
|
|
+ })
|
|
|
+ },
|
|
|
/** 禁用租户 */
|
|
|
handleDisable(row) {
|
|
|
this.$confirm('确定禁用租户 [' + row.companyName + '] 吗?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
+ confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning'
|
|
|
}).then(() => {
|
|
|
- disableCompany(row.companyId).then(response => {
|
|
|
+ disableCompany(row.companyId).then(() => {
|
|
|
this.$message.success('禁用成功')
|
|
|
this.getList()
|
|
|
})
|
|
|
@@ -248,22 +242,25 @@ export default {
|
|
|
/** 启用租户 */
|
|
|
handleEnable(row) {
|
|
|
this.$confirm('确定启用租户 [' + row.companyName + '] 吗?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'info'
|
|
|
+ confirmButtonText: '确定', cancelButtonText: '取消', type: 'info'
|
|
|
}).then(() => {
|
|
|
- enableCompany(row.companyId).then(response => {
|
|
|
+ enableCompany(row.companyId).then(() => {
|
|
|
this.$message.success('启用成功')
|
|
|
this.getList()
|
|
|
})
|
|
|
})
|
|
|
},
|
|
|
- /** 导出按钮操作 */
|
|
|
handleExport() {
|
|
|
this.exportLoading = true
|
|
|
- this.$message.success('导出功能开发中')
|
|
|
+ this.$message.info('导出功能开发中')
|
|
|
this.exportLoading = false
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-</script>
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.filter-card { padding-bottom: 0; }
|
|
|
+.mb16 { margin-bottom: 16px; }
|
|
|
+.mb8 { margin-bottom: 8px; }
|
|
|
+</style>
|