lmx hai 4 días
pai
achega
3792712f0e

+ 8 - 0
src/api/company/companySmsTemp.js

@@ -58,4 +58,12 @@ export function audit(data) {
     method: 'post',
     data: data
   })
+}
+
+// 查询当前租户已绑定的短信接口(模板绑定下拉)
+export function listSmsApiOptions() {
+  return request({
+    url: '/company/companySmsTemp/smsApiOptions',
+    method: 'get'
+  })
 }

+ 38 - 2
src/views/company/companySmsTemp/index.vue

@@ -112,6 +112,22 @@
             <el-radio v-for="dict in typeOptions" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="短信接口" prop="smsApiIds">
+          <el-select
+            v-model="form.smsApiIds"
+            placeholder="请选择绑定的短信接口"
+            clearable
+            filterable
+            style="width:100%"
+          >
+            <el-option
+              v-for="item in smsApiOptions"
+              :key="item.apiId"
+              :label="formatSmsApiOption(item)"
+              :value="String(item.apiId)"
+            />
+          </el-select>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -122,7 +138,7 @@
 </template>
 
 <script>
-import { listCompanySmsTemp, getCompanySmsTemp, delCompanySmsTemp, addCompanySmsTemp, updateCompanySmsTemp, exportCompanySmsTemp } from "@/api/company/companySmsTemp";
+import { listCompanySmsTemp, getCompanySmsTemp, delCompanySmsTemp, addCompanySmsTemp, updateCompanySmsTemp, exportCompanySmsTemp, listSmsApiOptions } from "@/api/company/companySmsTemp";
 import Editor from '@/components/Editor';
 
 export default {
@@ -146,6 +162,7 @@ export default {
       total: 0,
       // 短信模板表格数据
       companySmsTempList: [],
+      smsApiOptions: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -178,6 +195,9 @@ export default {
         tempType: [
           { required: true, message: "模板类型不能为空", trigger: "blur" }
         ],
+        smsApiIds: [
+          { required: true, message: "请选择绑定的短信接口", trigger: "change" }
+        ],
         status: [
           { required: true, message: "状态不能为空", trigger: "blur" }
         ],
@@ -198,6 +218,16 @@ export default {
       this.queryParams.isAudit=tab.name
       this.getList();
     },
+    formatSmsApiOption(item) {
+      const typeMap = { 1: '行业验证码通知', 2: '营销短信', 3: '5G消息' }
+      const typeLabel = typeMap[item.smsType] || '未知类型'
+      return (item.apiName || '接口' + item.apiId) + ' (' + typeLabel + ')'
+    },
+    loadSmsApiOptions() {
+      listSmsApiOptions().then(response => {
+        this.smsApiOptions = response.data || []
+      })
+    },
     /** 查询短信模板列表 */
     getList() {
       this.loading = true;
@@ -224,7 +254,8 @@ export default {
         createTime: null,
         updateTime: null,
         status: "1",
-        cateId: null
+        cateId: null,
+        smsApiIds: null
       };
       this.resetForm("form");
     },
@@ -247,15 +278,20 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      this.loadSmsApiOptions();
       this.open = true;
       this.title = "添加短信模板";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
+      this.loadSmsApiOptions();
       const tempId = row.tempId || this.ids
       getCompanySmsTemp(tempId).then(response => {
         this.form = response.data;
+        if (this.form.smsApiIds != null) {
+          this.form.smsApiIds = String(this.form.smsApiIds)
+        }
         this.open = true;
         this.title = "修改短信模板";
       });

+ 89 - 22
src/views/company/companyVoiceApi/index.vue

@@ -1,9 +1,27 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="关键词" prop="keyword">
-        <el-input v-model="queryParams.keyword" placeholder="请输入关键词" clearable size="small"
-          @keyup.enter.native="handleQuery" />
+      <el-form-item label="接口名称" prop="apiName">
+        <el-input
+          v-model="queryParams.apiName"
+          placeholder="请输入接口名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="接口类型" prop="apiType">
+        <el-select v-model="queryParams.apiType" placeholder="请选择类型" clearable size="small">
+          <el-option label="SIP" :value="0" />
+          <el-option label="网关" :value="1" />
+          <el-option label="API" :value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <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>
@@ -13,26 +31,65 @@
     <el-row :gutter="10" class="mb8">
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-    <el-table v-loading="loading" :data="list">
-      <el-table-column type="selection" width="50" align="center" />
-      <el-table-column label="ID" align="center" prop="id" width="80" />
-      <el-table-column label="名称" align="center" prop="name" />
-      <el-table-column label="创建时间" align="center" prop="createTime" width="160" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
+    <el-table v-loading="loading" :data="list" border style="width: 100%">
+      <el-table-column label="接口ID" align="center" prop="apiId" width="90" />
+      <el-table-column label="接口名称" align="center" prop="apiName" min-width="100" show-overflow-tooltip />
+      <el-table-column label="接口类型" align="center" prop="apiType" width="120">
+        <template slot-scope="scope">
+          <span>{{ getApiTypeLabel(scope.row.apiType) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="价格(元/分钟)" align="center" prop="salePrice" width="120">
+        <template slot-scope="scope">
+          <span>{{ scope.row.salePrice != null ? scope.row.salePrice : '未定价' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="优先级" align="center" prop="priority" width="80">
+        <template slot-scope="scope">
+          <span>{{ scope.row.priority != null ? scope.row.priority : '-' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="主线路" align="center" prop="isPrimary" width="80">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetail(scope.row)">详情</el-button>
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
+          <el-tag v-if="scope.row.isPrimary === 1" type="success" size="small">是</el-tag>
+          <span v-else>-</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status" width="80">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.status === 0 || scope.row.status === '0'" type="danger" size="small">禁用</el-tag>
+          <el-tag v-else type="success" size="small">启用</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="备注"
+        align="center"
+        prop="remark"
+        width="300"
+        show-overflow-tooltip
+        :formatter="formatRemark"
+      />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="160">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
         </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"
+    />
   </div>
 </template>
 
 <script>
+import { listCompanyVoiceApi } from '@/api/company/companyVoiceApi'
+
 export default {
-  name: 'Company语音API',
+  name: 'CompanyVoiceApi',
   data() {
     return {
       loading: false,
@@ -42,18 +99,31 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        keyword: null
-      }
+        apiName: null,
+        apiType: null,
+        status: null
+      },
+      apiTypeMap: { 0: 'SIP', 1: '网关', 2: 'API', '0': 'SIP', '1': '网关', '2': 'API' }
     }
   },
   created() {
     this.getList()
   },
   methods: {
+    getApiTypeLabel(type) {
+      return this.apiTypeMap[type] || '未知'
+    },
+    formatRemark(row) {
+      return row.remark || '-'
+    },
     getList() {
       this.loading = true
-      // TODO: 接入实际API
-      this.loading = false
+      listCompanyVoiceApi(this.queryParams).then(response => {
+        this.list = response.rows || []
+        this.total = response.total || 0
+      }).finally(() => {
+        this.loading = false
+      })
     },
     handleQuery() {
       this.queryParams.pageNum = 1
@@ -62,10 +132,7 @@ export default {
     resetQuery() {
       this.resetForm('queryForm')
       this.handleQuery()
-    },
-    handleDetail(row) { this.$message.info('详情功能待实现') },
-    handleUpdate(row) { this.$message.info('修改功能待实现') },
-    handleDelete(row) { this.$message.confirm('确认删除?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$message.success('删除成功') }) }
+    }
   }
 }
 </script>