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