xgb пре 3 дана
родитељ
комит
730da46f8a

+ 46 - 0
src/api/admin/dbConfig.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+export function listDbConfig(query) {
+  return request({
+    url: '/admin/dbConfig/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getDbConfig(id) {
+  return request({
+    url: '/admin/dbConfig/' + id,
+    method: 'get'
+  })
+}
+
+export function addDbConfig(data) {
+  return request({
+    url: '/admin/dbConfig',
+    method: 'post',
+    data: data
+  })
+}
+
+export function updateDbConfig(data) {
+  return request({
+    url: '/admin/dbConfig',
+    method: 'put',
+    data: data
+  })
+}
+
+export function delDbConfig(ids) {
+  return request({
+    url: '/admin/dbConfig/' + ids,
+    method: 'delete'
+  })
+}
+
+export function getAvailableDbConfig() {
+  return request({
+    url: '/admin/dbConfig/available',
+    method: 'get'
+  })
+}

+ 4 - 4
src/api/admin/sysCompany.js

@@ -17,21 +17,21 @@ export function getCompanyInfo(companyId) {
   })
 }
 
-// 禁用租户
+// 禁用租户(TenantInfo: status=0 禁用)
 export function disableCompany(companyId) {
   return request({
     url: '/admin/company/status/' + companyId,
     method: 'put',
-    params: { status: 1 }
+    params: { status: 0 }
   })
 }
 
-// 启用租户
+// 启用租户(TenantInfo: status=1 启用)
 export function enableCompany(companyId) {
   return request({
     url: '/admin/company/status/' + companyId,
     method: 'put',
-    params: { status: 0 }
+    params: { status: 1 }
   })
 }
 

+ 1 - 0
src/layout/AdminLayout.vue

@@ -135,6 +135,7 @@ export default {
           title: '系统配置',
           icon: 'el-icon-s-tools',
           children: [
+            { title: 'DB配置', path: '/admin/dbConfig' },
             { title: 'CID配置', path: '/admin/cidConfig' },
             { title: '个微配置', path: '/admin/wxConfig' },
             { title: 'OSS配置', path: '/admin/ossConfig' },

+ 230 - 0
src/views/admin/dbConfig/index.vue

@@ -0,0 +1,230 @@
+<template>
+  <div class="app-container">
+    <el-card shadow="never" class="mb16 filter-card">
+      <el-form :model="queryParams" ref="queryForm" :inline="true" size="small">
+        <el-form-item label="配置名称" prop="configName">
+          <el-input v-model="queryParams.configName" 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 label="启用" :value="1" />
+            <el-option label="禁用" :value="0" />
+          </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>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['admin:dbConfig:add']">新增配置</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="configList" size="small" style="width:100%">
+      <el-table-column label="ID" prop="id" width="60" align="center" />
+      <el-table-column label="配置名称" prop="configName" min-width="120" />
+      <el-table-column label="数据库IP" prop="dbIp" width="140" align="center" />
+      <el-table-column label="端口" prop="dbPort" width="80" align="center" />
+      <el-table-column label="账号" prop="dbAccount" width="120" align="center" />
+      <el-table-column label="密码" width="100" align="center">
+        <template slot-scope="scope">
+          <span>******</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="最大库数" prop="maxDbCount" width="90" align="center" />
+      <el-table-column label="已用库数" prop="currentDbCount" width="90" align="center">
+        <template slot-scope="scope">
+          <span :style="{color: scope.row.currentDbCount >= scope.row.maxDbCount ? '#f5222d' : '#52c41a'}">{{ scope.row.currentDbCount || 0 }} / {{ scope.row.maxDbCount }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" width="80">
+        <template slot-scope="scope">
+          <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="备注" prop="remark" min-width="120" show-overflow-tooltip />
+      <el-table-column label="操作" align="center" width="150" fixed="right">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button size="mini" type="text" style="color:#f5222d" icon="el-icon-delete" @click="handleDelete(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" />
+
+    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="560px" append-to-body destroy-on-close>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px" size="small">
+        <el-form-item label="配置名称" prop="configName">
+          <el-input v-model="form.configName" placeholder="如:主数据库服务器A" />
+        </el-form-item>
+        <el-form-item label="数据库IP" prop="dbIp">
+          <el-input v-model="form.dbIp" placeholder="如:192.168.1.100" />
+        </el-form-item>
+        <el-form-item label="数据库端口" prop="dbPort">
+          <el-input v-model="form.dbPort" placeholder="如:3306" />
+        </el-form-item>
+        <el-form-item label="数据库账号" prop="dbAccount">
+          <el-input v-model="form.dbAccount" placeholder="如:root" />
+        </el-form-item>
+        <el-form-item label="数据库密码" prop="dbPwd">
+          <el-input v-model="form.dbPwd" type="password" show-password placeholder="请输入数据库密码" />
+        </el-form-item>
+        <el-form-item label="最大库数" prop="maxDbCount">
+          <el-input-number v-model="form.maxDbCount" :min="1" :max="9999" style="width:100%" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio :label="1">启用</el-radio>
+            <el-radio :label="0">禁用</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="submitLoading" @click="submitForm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listDbConfig, getDbConfig, addDbConfig, updateDbConfig, delDbConfig } from '@/api/admin/dbConfig'
+
+export default {
+  name: 'AdminDbConfig',
+  data() {
+    return {
+      loading: true,
+      showSearch: true,
+      total: 0,
+      configList: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        configName: null,
+        status: null
+      },
+      dialogVisible: false,
+      dialogTitle: '',
+      submitLoading: false,
+      form: {},
+      rules: {
+        configName: [{ required: true, message: '请输入配置名称', trigger: 'blur' }],
+        dbIp: [{ required: true, message: '请输入数据库IP', trigger: 'blur' }],
+        dbPort: [{ required: true, message: '请输入数据库端口', trigger: 'blur' }],
+        dbAccount: [{ required: true, message: '请输入数据库账号', trigger: 'blur' }],
+        dbPwd: [{ required: true, message: '请输入数据库密码', trigger: 'blur' }],
+        maxDbCount: [{ required: true, message: '请输入最大库数', trigger: 'blur' }],
+        status: [{ required: true, message: '请选择状态', trigger: 'change' }]
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      this.loading = true
+      listDbConfig(this.queryParams).then(response => {
+        this.configList = response.rows
+        this.total = response.total
+        this.loading = false
+      })
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    resetQuery() {
+      this.resetForm('queryForm')
+      this.handleQuery()
+    },
+    resetFormFields() {
+      this.form = {
+        id: null,
+        configName: '',
+        dbIp: '',
+        dbPort: '3306',
+        dbAccount: '',
+        dbPwd: '',
+        maxDbCount: 50,
+        currentDbCount: 0,
+        status: 1,
+        remark: ''
+      }
+    },
+    handleAdd() {
+      this.resetFormFields()
+      this.dialogTitle = '新增DB配置'
+      this.dialogVisible = true
+      this.$nextTick(() => {
+        if (this.$refs.form) this.$refs.form.clearValidate()
+      })
+    },
+    handleEdit(row) {
+      getDbConfig(row.id).then(response => {
+        this.form = { ...response.data }
+        if (!this.form.dbPwd) {
+          this.form.dbPwd = ''
+        }
+        this.dialogTitle = '编辑DB配置'
+        this.dialogVisible = true
+        this.$nextTick(() => {
+          if (this.$refs.form) this.$refs.form.clearValidate()
+        })
+      })
+    },
+    submitForm() {
+      this.$refs['form'].validate(valid => {
+        if (!valid) return
+        this.submitLoading = true
+        if (this.form.id) {
+          updateDbConfig(this.form).then(() => {
+            this.$message.success('修改成功')
+            this.dialogVisible = false
+            this.getList()
+          }).finally(() => {
+            this.submitLoading = false
+          })
+        } else {
+          addDbConfig(this.form).then(() => {
+            this.$message.success('新增成功')
+            this.dialogVisible = false
+            this.getList()
+          }).finally(() => {
+            this.submitLoading = false
+          })
+        }
+      })
+    },
+    handleDelete(row) {
+      this.$confirm('确定删除配置 [' + row.configName + '] 吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        delDbConfig(row.id).then(() => {
+          this.$message.success('删除成功')
+          this.getList()
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.mb8 { margin-bottom: 8px; }
+.mb16 { margin-bottom: 16px; }
+.filter-card { padding-bottom: 0; }
+</style>

+ 1 - 0
src/views/admin/menu.js

@@ -37,6 +37,7 @@ const adminRoutes = {
     { path: 'wxConfig', component: () => import('@/views/admin/wxConfig/index'), name: 'AdminWxConfig', meta: { title: '个微配置' } },
     { path: 'ossConfig', component: () => import('@/views/admin/ossConfig/index'), name: 'AdminOssConfig', meta: { title: 'OSS配置' } },
     { path: 'frontConfig', component: () => import('@/views/admin/frontConfig/index'), name: 'AdminFrontConfig', meta: { title: '前端配置' } },
+    { path: 'dbConfig', component: () => import('@/views/admin/dbConfig/index'), name: 'AdminDbConfig', meta: { title: 'DB配置' } },
 
     // 7. 外呼管理
     { path: 'voice', component: () => import('@/views/admin/voice/index'), name: 'AdminVoice', meta: { title: '外呼管理' } },

+ 93 - 160
src/views/admin/sysCompany/index.vue

@@ -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()
         })