Эх сурвалжийг харах

新接入腾讯云短信模版
邀请码加入发送短信通知
新增邀请码加入批量手机号指定创建邀请码
新增邀请码可勾选同步短信通知功能

liyanbo 3 долоо хоног өмнө
parent
commit
b709c0db17

+ 5 - 0
src/api/system/invitecode/index.ts

@@ -45,5 +45,10 @@ export const InviteCodeApi = {
   // 导出邀请码 Excel
   exportInviteCode: async (params) => {
     return await request.download({ url: `/system/invite-code/export-excel`, params })
+  },
+
+  // 发送邀请码短信
+  sendSms: async (id: number) => {
+    return await request.post({ url: `/system/invite-code/send-sms`, params: { id } })
   }
 }

+ 20 - 8
src/views/system/invitecode/InviteCodeForm.vue

@@ -60,11 +60,21 @@
       </el-form-item>
 
       <el-form-item v-if="formData.type === 'single'" label="指定手机号" prop="onlyPhone">
-        <el-input v-model="formData.onlyPhone" placeholder="请输入指定手机号" />
+        <div style="display: flex; align-items: center; width: 100%;">
+          <el-input v-model="formData.onlyPhone" placeholder="请输入指定手机号" style="flex: 1;" />
+          <div style="flex-shrink: 0; margin-left: 20px;">
+            <el-switch v-model="formData.sendSms" active-text="短信通知" />
+          </div>
+        </div>
       </el-form-item>
 
-      <el-form-item v-else-if="formData.type === 'batchPhone'" label="指定手机号" prop="onlyPhoneList">
-        <el-input v-model="formData.onlyPhoneList" type="textarea" placeholder="请输入多个手机号,每行一个" rows="4" />
+      <el-form-item v-else-if="formData.type === 'batchPhone'" label="指定手机号" prop="batchPhones">
+        <div style="width: 100%;">
+          <el-input v-model="formData.batchPhones" type="textarea" placeholder="请输入多个手机号,每行一个" rows="4" style="width: 100%;" />
+          <div style="width: 100%; text-align: left; margin-top: 10px;">
+            <el-switch v-model="formData.sendSms" active-text="短信通知" />
+          </div>
+        </div>
       </el-form-item>
 
       <el-form-item label="过期时间" prop="expireTime">
@@ -118,7 +128,8 @@ const formData = ref({
   roleIds: [],
   validTime: undefined,
   onlyPhone: undefined,
-  onlyPhoneList: undefined,
+  batchPhones: undefined,
+  sendSms: false,
   expireTime: undefined,
   useUserId: undefined,
   useUserTenantId: undefined,
@@ -146,7 +157,7 @@ const formRules = computed(() => ({
     { type: 'number', min: 1, max: 50, message: '批量数量必须在1-50之间', trigger: 'blur' },
     { type: 'number', integer: true, message: '批量数量必须是整数', trigger: 'blur' }
   ],
-  onlyPhoneList: [
+  batchPhones: [
     { required: formData.value.type === 'batchPhone', message: '请输入手机号', trigger: 'blur' }
   ],
 }))
@@ -216,9 +227,9 @@ const submitForm = async () => {
 
   // 处理批量手机号类型
   if (submitData.type === 'batchPhone') {
-    if (submitData.onlyPhoneList) {
+    if (submitData.batchPhones) {
       // 将textarea中的手机号按换行符分割为数组
-      submitData.onlyPhoneList = submitData.onlyPhoneList.split('\n').filter(phone => phone.trim())
+      submitData.batchPhones = submitData.batchPhones.split('\n').filter(phone => phone.trim())
     }
   }
 
@@ -251,7 +262,8 @@ const resetForm = () => {
     roleIds: [],
     validTime: undefined,
     onlyPhone: undefined,
-    onlyPhoneList: undefined,
+    batchPhones: undefined,
+    sendSms: false,
     expireTime: undefined,
     useUserId: undefined,
     useUserTenantId: undefined,

+ 44 - 1
src/views/system/invitecode/index.vue

@@ -68,6 +68,21 @@
           />
         </el-select>
       </el-form-item>
+      <el-form-item label="通知状态" prop="notifyStatus">
+        <el-select
+          v-model="queryParams.notifyStatus"
+          placeholder="请选择通知状态"
+          clearable
+          class="!w-240px"
+        >
+          <el-option
+            v-for="dict in getStrDictOptions('system_sms_send_status')"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@@ -129,6 +144,12 @@
         :formatter="dateFormatter"
         width="180px"
       />
+      <el-table-column label="通知状态" align="center" prop="notifyStatus" width="120px">
+        <template #default="scope">
+          <dict-tag :type="'system_sms_send_status'" :value="scope.row.notifyStatus" />
+        </template>
+      </el-table-column>
+      <el-table-column label="通知时间" align="center" prop="notifyTime" :formatter="dateFormatter" width="180px" />
       <el-table-column
         label="创建时间"
         align="center"
@@ -136,7 +157,7 @@
         :formatter="dateFormatter"
         width="180px"
       />
-      <el-table-column label="操作" align="center" min-width="120px" fixed="right">
+      <el-table-column label="操作" align="center" min-width="180px" fixed="right">
         <template #default="scope">
           <el-button
             link
@@ -155,6 +176,14 @@
           >
             删除
           </el-button>
+          <el-button
+            link
+            type="warning"
+            @click="handleSendSms(scope.row.id)"
+            v-hasPermi="['system:invite-code:update']"
+          >
+            通知
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -198,6 +227,7 @@ const queryParams = reactive({
   useUserName: undefined,
   useUserTenantName: undefined,
   status: undefined,
+  notifyStatus: undefined,
   createTime: [],
   tenantId: undefined
 })
@@ -262,6 +292,19 @@ const handleExport = async () => {
   }
 }
 
+/** 发送短信通知 */
+const handleSendSms = async (id: number) => {
+  try {
+    // 确认对话框
+    await message.confirm('确定要发送短信通知吗?')
+    // 发起发送短信请求
+    await InviteCodeApi.sendSms(id)
+    message.success('短信发送成功')
+  } catch (error) {
+    console.error('发送短信失败:', error)
+  }
+}
+
 /** 初始化 **/
 onMounted(() => {
   getList()