From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/mp/messageTemplate/MessageTemplateSendForm.vue |  163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 163 insertions(+), 0 deletions(-)

diff --git a/src/views/mp/messageTemplate/MessageTemplateSendForm.vue b/src/views/mp/messageTemplate/MessageTemplateSendForm.vue
new file mode 100644
index 0000000..1c31742
--- /dev/null
+++ b/src/views/mp/messageTemplate/MessageTemplateSendForm.vue
@@ -0,0 +1,163 @@
+<template>
+  <Dialog title="鍙戦�佹秷鎭ā鏉�" v-model="dialogVisible" width="600px">
+    <el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px">
+      <el-form-item label="妯℃澘缂栧彿">
+        <el-input v-model="formData.id" disabled />
+      </el-form-item>
+      <el-form-item label="妯℃澘鏍囬">
+        <el-input v-model="templateTitle" disabled />
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛" prop="userId">
+        <el-select
+          v-model="formData.userId"
+          filterable
+          remote
+          reserve-keyword
+          placeholder="璇疯緭鍏ョ敤鎴锋樀绉版悳绱�"
+          :remote-method="searchUser"
+          :loading="userLoading"
+          class="!w-full"
+        >
+          <el-option
+            v-for="user in userList"
+            :key="user.id"
+            :label="user.nickname || user.openid"
+            :value="user.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="妯℃澘鏁版嵁" prop="data">
+        <el-input
+          v-model="formData.data"
+          type="textarea"
+          :rows="4"
+          placeholder='璇疯緭鍏ユā鏉挎暟鎹紙JSON 鏍煎紡锛夛紝渚嬪锛歿"keyword1": {"value": "娴嬭瘯鍐呭"}}'
+        />
+      </el-form-item>
+      <el-form-item label="璺宠浆閾炬帴" prop="url">
+        <el-input v-model="formData.url" placeholder="璇疯緭鍏ヨ烦杞摼鎺�" />
+      </el-form-item>
+      <el-form-item label="灏忕▼搴� appId" prop="miniProgramAppId">
+        <el-input v-model="formData.miniProgramAppId" placeholder="璇疯緭鍏ュ皬绋嬪簭 appId" />
+      </el-form-item>
+      <el-form-item label="灏忕▼搴忛〉闈㈣矾寰�" prop="miniProgramPagePath">
+        <el-input v-model="formData.miniProgramPagePath" placeholder="璇疯緭鍏ュ皬绋嬪簭椤甸潰璺緞" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button type="primary" @click="submitForm" :loading="loading">鍙� 閫�</el-button>
+      <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+    </template>
+  </Dialog>
+</template>
+
+<script setup lang="ts">
+import { MessageTemplateApi, MsgTemplateVO, MsgTemplateSendVO } from '@/api/mp/messageTemplate'
+import * as MpUserApi from '@/api/mp/user'
+
+const message = useMessage() // 娑堟伅寮圭獥
+
+const dialogVisible = ref(false) // 寮圭獥鏄惁灞曠ず
+const loading = ref(false) // 鎻愪氦鍔犺浇涓�
+const templateTitle = ref('') // 妯℃澘鏍囬
+const accountId = ref<number>() // 鍏紬鍙疯处鍙风紪鍙�
+
+const formRef = ref() // 琛ㄥ崟 Ref
+const formData = ref<MsgTemplateSendVO>({
+  id: undefined!,
+  userId: undefined!,
+  data: '',
+  url: '',
+  miniProgramAppId: '',
+  miniProgramPagePath: ''
+})
+const formRules = reactive({
+  userId: [{ required: true, message: '璇烽�夋嫨鐢ㄦ埛', trigger: 'change' }]
+})
+
+// 鐢ㄦ埛鎼滅储鐩稿叧
+const userLoading = ref(false)
+const userList = ref<any[]>([])
+
+/** 鎼滅储鐢ㄦ埛 */
+const searchUser = async (query: string) => {
+  if (!accountId.value) {
+    return
+  }
+  userLoading.value = true
+  try {
+    const data = await MpUserApi.getUserPage({
+      pageNo: 1,
+      pageSize: 20,
+      accountId: accountId.value,
+      nickname: query || undefined
+    })
+    userList.value = data.list || []
+  } finally {
+    userLoading.value = false
+  }
+}
+
+/** 鎵撳紑寮圭獥 */
+const open = async (row: MsgTemplateVO) => {
+  resetForm()
+  dialogVisible.value = true
+  // 璁剧疆琛ㄥ崟鏁版嵁
+  formData.value.id = row.id
+  accountId.value = row.accountId
+  templateTitle.value = row.title
+  // 鍔犺浇鐢ㄦ埛鍒楄〃
+  await searchUser('')
+}
+defineExpose({ open }) // 鏆撮湶 open 鏂规硶
+
+/** 鎻愪氦琛ㄥ崟 */
+const submitForm = async () => {
+  // 鏍¢獙琛ㄥ崟
+  if (!formRef.value) return
+  const valid = await formRef.value.validate()
+  if (!valid) return
+  // 鎻愪氦璇锋眰
+  loading.value = true
+  try {
+    const sendData: MsgTemplateSendVO = {
+      ...formData.value
+    }
+    // 濡傛灉濉啓浜嗗皬绋嬪簭淇℃伅锛岄渶瑕佹嫾鎺ユ垚 miniprogram 瀛楁
+    if (sendData.miniProgramAppId && sendData.miniProgramPagePath) {
+      sendData.miniprogram = JSON.stringify({
+        appid: sendData.miniProgramAppId,
+        pagepath: sendData.miniProgramPagePath
+      })
+    }
+    // 濡傛灉濉啓浜� data 瀛楁
+    if (sendData.data) {
+      try {
+        sendData.data = JSON.parse(sendData.data)
+      } catch (e) {
+        message.error('妯℃澘鏁版嵁鏍煎紡涓嶆纭紝璇疯緭鍏ユ湁鏁堢殑 JSON 鏍煎紡')
+        return
+      }
+    }
+    await MessageTemplateApi.sendMessageTemplate(sendData)
+    message.success('鍙戦�佹垚鍔�')
+    dialogVisible.value = false
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 閲嶇疆琛ㄥ崟 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined!,
+    userId: undefined!,
+    data: '',
+    url: '',
+    miniProgramAppId: '',
+    miniProgramPagePath: ''
+  }
+  userList.value = []
+  formRef.value?.resetFields()
+}
+</script>

--
Gitblit v1.8.0