三七 hai 10 horas
pai
achega
c3177d873b

+ 85 - 0
src/views/qw/sopTemp/updateSopTemp.vue

@@ -512,6 +512,27 @@
 
                                             </el-card>
                                           </div>
+                                          <div v-if="setList.contentType == 21">
+                                            <el-card class="box-card">
+                                              <el-form-item label="短信模板" >
+                                                <el-select v-model="setList.smsTemplateId"
+                                                           placeholder="请选择短信模板" size="mini"
+                                                           @change="getSmsTemplateInfo(setList)" >
+                                                  <el-option
+                                                    v-for="template in smsTemplateList"
+                                                    :key="template.tempId"
+                                                    :label="template.title"
+                                                    :value="template.tempId"
+                                                  />
+                                                </el-select>
+                                              </el-form-item>
+                                              <el-form-item label="内容预览" v-if="setList.smsTemplateContent">
+                                                <div style="color: #666; font-size: 12px; padding: 8px; border: 1px solid #eee; border-radius: 4px; background-color: #f9f9f9; max-height: 100px; overflow-y: auto;">
+                                                  {{ setList.smsTemplateContent }}
+                                                </div>
+                                              </el-form-item>
+                                            </el-card>
+                                          </div>
                                         </el-form-item>
 <!--                                        <el-form-item label="添加短链"-->
 <!--                                                      v-if="content.type == 2 && setList.contentType == 1  ">-->
@@ -719,6 +740,7 @@ import userVideo from "@/views/qw/userVideo/userVideo.vue";
 import {
   getRoles,
 } from "@/api/qw/sop";
+import { getSmsTempList } from "@/api/company/companySmsTemp";
 
 export default {
   name: "updateSopTemp",
@@ -761,6 +783,8 @@ export default {
       //类别
       sysQwSopSettingType: [],
 
+      smsTemplateList: [],
+
       courseList: [],
       videoList: [],
       // 非单个禁用
@@ -852,6 +876,8 @@ export default {
       this.courseList = response.list;
     });
 
+    this.loadSmsTemplates();
+
     const id = this.$route.params && this.$route.params.id;
     this.id = id;
     this.formType = this.$route.params && this.$route.params.type;
@@ -859,6 +885,54 @@ export default {
     this.handleUpdate(id);
   },
   methods: {
+
+    // 获取短信模板信息
+    getSmsTemplateInfo(content) {
+      // 如果短信模板列表为空,先加载数据
+      if (this.smsTemplateList.length === 0) {
+        getSmsTempList().then(response => {
+          this.smsTemplateList = response.rows || response.data || [];
+          // 加载完成后再次调用自身来处理选中项
+          this.processSelectedSmsTemplate(content);
+        }).catch(error => {
+          console.error('加载短信模板失败:', error);
+          this.$message.error('加载短信模板失败');
+        });
+      } else {
+        // 直接处理选中项
+        this.processSelectedSmsTemplate(content);
+      }
+    },
+
+    // 处理选中的短信模板
+    processSelectedSmsTemplate(content) {
+      const selectedTemplate = this.smsTemplateList.find(item => item.tempId === content.smsTemplateId);
+      if (selectedTemplate) {
+        // 自动填充模板内容预览
+        this.$set(content, 'smsTemplateContent', selectedTemplate.content || selectedTemplate.templateContent || '');
+      } else {
+        // 清空相关内容
+        this.$set(content, 'smsTemplateContent', '');
+      }
+    },
+
+    // 加载短信模板列表
+    loadSmsTemplates() {
+      if (this.smsTemplateList.length > 0) {
+        return; // 如果已经有数据,不再重复加载
+      }
+
+      getSmsTempList().then(response => {
+        this.smsTemplateList = response.rows || response.data || [];
+        if (this.smsTemplateList.length === 0) {
+          this.$message.info('暂无可用的短信模板');
+        }
+      }).catch(error => {
+        console.error('加载短信模板失败:', error);
+        this.$message.error('加载短信模板失败');
+      });
+    },
+
     handleClose(index, tag, content) {
       content.addTag.splice(content.addTag.indexOf(tag), 1);
     },
@@ -1056,6 +1130,17 @@ export default {
             if (data.content[j].setting[k].contentType == 4 && (data.content[j].setting[k].miniprogramTitle != null || data.content[j].setting[k].miniprogramTitle != "")) {
               data.content[j].setting[k].miniprogramTitle = this.truncateTextByByteLength(data.content[j].setting[k].miniprogramTitle, 60)
             }
+
+            // 处理短信模板数据映射
+            if (data.content[j].setting[k].contentType == 21 && data.content[j].setting[k].smsTemplateId) {
+              // 根据选中的短信模板ID查找对应的模板信息
+              const selectedTemplate = this.smsTemplateList.find(template => template.tempId === data.content[j].setting[k].smsTemplateId);
+              if (selectedTemplate) {
+                // 设置短信模板的相关字段
+                this.$set(data.content[j].setting[k], 'smsTemplateCode', selectedTemplate.tempCode || '');
+                this.$set(data.content[j].setting[k], 'smsTemplateTitle', selectedTemplate.title || '');
+              }
+            }
           }
         }
       }

+ 72 - 2
src/views/qw/sopUserLogsInfo/sendMsgOpenTool.vue

@@ -203,7 +203,27 @@
                           </el-form-item>
                         </el-card>
                       </div>
-
+                      <div v-if="item.contentType == 21">
+                        <el-card class="box-card">
+                          <el-form-item label="短信模板" >
+                            <el-select v-model="item.smsTemplateId"
+                                       placeholder="请选择短信模板" size="mini"
+                                       @change="getSmsTemplateInfo(item)" >
+                              <el-option
+                                v-for="template in smsTemplateList"
+                                :key="template.tempId"
+                                :label="template.title"
+                                :value="template.tempId"
+                              />
+                            </el-select>
+                          </el-form-item>
+                          <el-form-item label="内容预览" v-if="item.smsTemplateContent">
+                            <div style="color: #666; font-size: 12px; padding: 8px; border: 1px solid #eee; border-radius: 4px; background-color: #f9f9f9; max-height: 100px; overflow-y: auto;">
+                              {{ item.smsTemplateContent }}
+                            </div>
+                          </el-form-item>
+                        </el-card>
+                      </div>
                     </el-form-item>
 
                     <el-form-item label="添加短链" v-if="item.contentType == 1 "  >
@@ -274,7 +294,7 @@ import { sendMsgSopType,} from "../../../api/qw/sopUserLogsInfo";
 import ImageUpload from "@/views/qw/sop/ImageUpload.vue";
 import {courseList, videoList} from "@/api/qw/sop";
 import userVideo from "@/views/qw/userVideo/userVideo";
-
+import { getSmsTempList } from "@/api/company/companySmsTemp";
 
 export default {
   name: "sendMsgOpenTool",
@@ -346,6 +366,8 @@ export default {
         open:false,
         ids:null,
       },
+
+      smsTemplateList: [],
       // 表单参数
       form: {},
       setting:[{contentType:'1', value: '',}],
@@ -385,9 +407,57 @@ export default {
     courseList().then(response => {
       this.courseList = response.list;
     });
+    this.loadSmsTemplates();
   },
   methods: {
 
+    // 获取短信模板信息(类似福袋的处理方式)
+    getSmsTemplateInfo(content) {
+      // 如果短信模板列表为空,先加载数据
+      if (this.smsTemplateList.length === 0) {
+        getSmsTempList().then(response => {
+          this.smsTemplateList = response.rows || response.data || [];
+          // 加载完成后再次调用自身来处理选中项
+          this.processSelectedSmsTemplate(content);
+        }).catch(error => {
+          console.error('加载短信模板失败:', error);
+          this.$message.error('加载短信模板失败');
+        });
+      } else {
+        // 直接处理选中项
+        this.processSelectedSmsTemplate(content);
+      }
+    },
+
+    // 处理选中的短信模板
+    processSelectedSmsTemplate(content) {
+      const selectedTemplate = this.smsTemplateList.find(item => item.tempId === content.smsTemplateId);
+      if (selectedTemplate) {
+        // 自动填充模板内容预览
+        this.$set(content, 'smsTemplateContent', selectedTemplate.content || selectedTemplate.templateContent || '');
+      } else {
+        // 清空相关内容
+        this.$set(content, 'smsTemplateContent', '');
+      }
+    },
+
+    // 加载短信模板列表
+    loadSmsTemplates() {
+      if (this.smsTemplateList.length > 0) {
+        return; // 如果已经有数据,不再重复加载
+      }
+
+      getSmsTempList().then(response => {
+        this.smsTemplateList = response.rows || response.data || [];
+        if (this.smsTemplateList.length === 0) {
+          this.$message.info('暂无可用的短信模板');
+        }
+      }).catch(error => {
+        console.error('加载短信模板失败:', error);
+        this.$message.error('加载短信模板失败');
+      });
+    },
+
     qwUserVideoResult(val) {
 
       // 根据选中的内容,将返回的数据更新到相应的表单项

+ 88 - 0
src/views/qw/sopUserLogsInfo/sopUserLogsInfoDetails.vue

@@ -424,6 +424,27 @@
                         </el-form-item>
                       </el-card>
                     </div>
+                    <div v-if="item.contentType == 21">
+                      <el-card class="box-card">
+                        <el-form-item label="短信模板" >
+                          <el-select v-model="item.smsTemplateId"
+                                     placeholder="请选择短信模板" size="mini"
+                                     @change="getSmsTemplateInfo(item)" >
+                            <el-option
+                              v-for="template in smsTemplateList"
+                              :key="template.tempId"
+                              :label="template.title"
+                              :value="template.tempId"
+                            />
+                          </el-select>
+                        </el-form-item>
+                        <el-form-item label="内容预览" v-if="item.smsTemplateContent">
+                          <div style="color: #666; font-size: 12px; padding: 8px; border: 1px solid #eee; border-radius: 4px; background-color: #f9f9f9; max-height: 100px; overflow-y: auto;">
+                            {{ item.smsTemplateContent }}
+                          </div>
+                        </el-form-item>
+                      </el-card>
+                    </div>
 
                   </el-form-item>
 
@@ -553,6 +574,7 @@ import {listTag} from "@/api/qw/tag";
 import {searchTags} from "../../../api/qw/tag";
 import userVideo from "@/views/qw/userVideo/userVideo.vue";
 import PaginationMore from "../../../components/PaginationMore/index.vue";
+import { getSmsTempList } from "@/api/company/companySmsTemp";
 
 export default {
   name: "sopUserLogsInfoDetails",
@@ -646,6 +668,7 @@ export default {
         open:false,
         ids:null,
       },
+      smsTemplateList: [],
       // 表单参数
       form: {},
       updateLogsInfoFrom:{},
@@ -692,9 +715,60 @@ export default {
     courseList().then(response => {
       this.courseList = response.list;
     });
+
+    this.loadSmsTemplates();
+
   },
   methods: {
 
+    // 获取短信模板信息(类似福袋的处理方式)
+    getSmsTemplateInfo(content) {
+      // 如果短信模板列表为空,先加载数据
+      if (this.smsTemplateList.length === 0) {
+        getSmsTempList().then(response => {
+          this.smsTemplateList = response.rows || response.data || [];
+          // 加载完成后再次调用自身来处理选中项
+          this.processSelectedSmsTemplate(content);
+        }).catch(error => {
+          console.error('加载短信模板失败:', error);
+          this.$message.error('加载短信模板失败');
+        });
+      } else {
+        // 直接处理选中项
+        this.processSelectedSmsTemplate(content);
+      }
+    },
+
+    // 处理选中的短信模板
+    processSelectedSmsTemplate(content) {
+      const selectedTemplate = this.smsTemplateList.find(item => item.tempId === content.smsTemplateId);
+      if (selectedTemplate) {
+        // 自动填充模板内容预览
+        this.$set(content, 'smsTemplateContent', selectedTemplate.content || selectedTemplate.templateContent || '');
+      } else {
+        // 清空相关内容
+        this.$set(content, 'smsTemplateContent', '');
+      }
+    },
+
+    // 加载短信模板列表
+    loadSmsTemplates() {
+      if (this.smsTemplateList.length > 0) {
+        return; // 如果已经有数据,不再重复加载
+      }
+
+      getSmsTempList().then(response => {
+        this.smsTemplateList = response.rows || response.data || [];
+        if (this.smsTemplateList.length === 0) {
+          this.$message.info('暂无可用的短信模板');
+        }
+      }).catch(error => {
+        console.error('加载短信模板失败:', error);
+        this.$message.error('加载短信模板失败');
+      });
+    },
+
+
     selectSopUserLogsInfo(val,externalUserName){
 
       this.loading = true;
@@ -1301,6 +1375,20 @@ export default {
             if (this.setting[i].contentType == 7 && (this.setting[i].value == null || this.setting[i].value == "")) {
               return this.$message.error("语音不能为空")
             }
+            // 短信模板验证
+            if (item.contentType == 21 && (item.smsTemplateId == null || item.smsTemplateId === "")) {
+              return this.$message.error("短信模板不能为空")
+            }else {
+              if (item.contentType == 21 && item.smsTemplateId) {
+                // 根据选中的短信模板ID查找对应的模板信息
+                const selectedTemplate = this.smsTemplateList.find(template => template.tempId === item.smsTemplateId);
+                if (selectedTemplate) {
+                  // 设置短信模板的相关字段
+                  this.$set(item, 'smsTemplateCode', selectedTemplate.tempCode || '');
+                  this.$set(item, 'smsTemplateTitle', selectedTemplate.title || '');
+                }
+              }
+            }
           }
 
           this.sendMsgOpen.open = false;