소스 검색

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_companyUI

wjj 6 일 전
부모
커밋
4a4f377fa7

+ 9 - 0
src/api/company/companyUser.js

@@ -298,3 +298,12 @@ export function unBindDoctorId(userId) {
     method: 'get'
   })
 }
+
+//批量修改用户的角色
+export function updateBatchUserRoles(data) {
+  return request({
+    url: '/company/user/updateBatchUserRoles',
+    method: 'post',
+    data: data
+  })
+}

+ 35 - 4
src/views/company/companyConfig/index.vue

@@ -147,6 +147,23 @@
             </div>
           </el-form>
         </el-tab-pane>
+        <el-tab-pane label="配置销售端隐藏总账号" name="adminIsShowForm">
+          <el-form ref="adminIsShowForm" label-width="140px">
+            <el-form-item label="账号是否显示">
+              <el-row>
+                <el-switch v-model="adminIsShow"></el-switch>
+                <span style="margin-left: 10px;">
+                  <el-tag :type="adminIsShow ? 'success' : 'info'" size="mini">
+                    {{ adminIsShow ? '当前显示' : '当前隐藏' }}
+                  </el-tag>
+                </span>
+              </el-row>
+            </el-form-item>
+            <div style="float:right;margin-right:20px">
+              <el-button type="primary" @click="onSubmit7">提交</el-button>
+            </div>
+          </el-form>
+        </el-tab-pane>
       </el-tabs>
 
       <el-dialog :title="customerExt.title" :visible.sync="customerExt.open" width="500px" append-to-body>
@@ -198,6 +215,7 @@ export default {
   },
   data() {
     return {
+      adminIsShow: false,
       company:null,
       statusOptions:[],
       customerExt:{
@@ -238,6 +256,7 @@ export default {
       qwConfigForm:{},
       qwkfConfigForm:{},
       companyUserConfig: {},
+      adminIsShowForm:{},
       userIsDefaultBlack: null,
     };
   },
@@ -248,6 +267,7 @@ export default {
     this.getConfigKey("sys:qw:config");
     this.getConfigKey("customer:config");
     this.getConfigKey("sys:AiKf:config");
+    this.getConfigKey("company:admin:show");
     this.getDicts("sys_company_status").then((response) => {
       this.statusOptions = response.data;
     });
@@ -379,13 +399,16 @@ export default {
                 this.AiKfConfig=JSON.parse(response.data.configValue);
               }
             }else if (key=="companyUser:config"){
-              console.log(response.data)
               this.companyUserConfig=response.data;
               if(response.data.configValue != null){
                 this.userIsDefaultBlack = JSON.parse(response.data.configValue);
               }
+            }else if(key == "company:admin:show"){
+              this.adminIsShowForm = response.data;
+              if(response.data.configValue != null){
+                this.adminIsShow = JSON.parse(response.data.configValue);
+              }
             }
-
         });
     },
     onSubmit1() {
@@ -435,8 +458,6 @@ export default {
     },
     onSubmit6() {
       this.companyUserConfig.configValue=JSON.stringify(this.userIsDefaultBlack);
-      console.log(this.companyUserConfig)
-      console.log(this.userIsDefaultBlack)
       configUserCheck({userIsDefaultBlack: this.userIsDefaultBlack}).then(response => {
         if (response.code === 200) {
           this.msgSuccess("修改成功");
@@ -444,6 +465,16 @@ export default {
         }
       });
     },
+    onSubmit7() {
+      // 实现提交逻辑
+      this.adminIsShowForm.configValue=JSON.stringify(this.adminIsShow);
+      updateConfig(this.adminIsShowForm).then(response => {
+        if (response.code === 200) {
+          this.msgSuccess("修改成功");
+          this.getConfigKey("company:admin:show");
+        }
+      })
+    },
   }
 };
 </script>

+ 81 - 38
src/views/company/companyUser/index.vue

@@ -46,6 +46,9 @@
           <el-col :span="1.5">
             <el-button  plain type="success" icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['company:user:edit']">修改</el-button>
           </el-col>
+          <el-col :span="1.5">
+            <el-button  plain type="success" icon="el-icon-edit" size="mini" :disabled="multiple" @click="batchEditRole"v-hasPermi="['company:user:edit']">批量修改角色</el-button>
+          </el-col>
           <el-col :span="1.5">
             <el-button  plain type="danger" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['company:user:remove']">删除</el-button>
           </el-col>
@@ -167,6 +170,18 @@
               <dict-tag :options="qwStatusOptions" :value="scope.row.qwStatus"/>
             </template>
           </el-table-column>
+          <el-table-column label="绑定的企微号" align="center">
+            <template slot-scope="scope">
+              <div v-if="scope.row.qwUsers && scope.row.qwUsers.length > 0">
+                <div v-for="user in scope.row.qwUsers" :key="user.id">
+                  <el-tag size="mini">{{ user.qwUserName }}</el-tag>
+                </div>
+              </div>
+              <div v-else>
+                <dict-tag :options="qwStatusOptions" :value="scope.row.qwStatus"/>
+              </div>
+            </template>
+          </el-table-column>
           <el-table-column label="区域" align="center" prop="addressId">
           </el-table-column>
           <el-table-column label="创建时间"  sortable align="center" prop="createTime" width="160">
@@ -240,7 +255,28 @@
         <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
       </el-col>
     </el-row>
-<!--当点击查或换绑微信时候弹出此框-->
+
+    <!-- 批量修改角色对话框 -->
+    <el-dialog title="批量修改角色" :visible.sync="batchRoleDialogVisible" width="500px" append-to-body>
+      <el-form :model="batchRoleForm" label-width="80px">
+        <el-form-item label="选择角色">
+          <el-select v-model="selectedRoleIds" multiple placeholder="请选择角色" style="width: 100%;">
+            <el-option
+              v-for="item in roleOptions"
+              :key="item.roleId"
+              :label="item.roleName"
+              :value="item.roleId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="batchRoleDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitBatchRoles">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <!--当点击查或换绑微信时候弹出此框-->
     <el-dialog title="绑定企微账号"  :visible.sync="qwOpen" width="800px" append-to-body >
       <el-form ref="form" :model="form"  label-width="80px" >
         <el-form-item label="查询"  prop="companyUserId">
@@ -490,10 +526,6 @@
       </div>
     </el-dialog>
 
-<!--    <el-dialog :title="user.title" :visible.sync="user.open" width="1000px" append-to-body>-->
-<!--      <selectUser ref="selectUser" @bindQwUser="bindQwUser"></selectUser>-->
-<!--    </el-dialog>-->
-
     <!-- 修改 selectUser 组件的引用 -->
     <el-dialog :title="user.title" :visible.sync="user.open" width="1000px" append-to-body>
       <selectUser ref="selectUser" @bindQwUser="bindQwUser" @close="handleSelectUserClose"/>
@@ -599,7 +631,7 @@ import {
   generateSubDomain,
   setIsRegisterMember,
   updateCompanyUserAreaList,
-  isAllowedAllRegister, unBindDoctorId, bindDoctorId
+  isAllowedAllRegister, unBindDoctorId, bindDoctorId,updateBatchUserRoles
 } from "@/api/company/companyUser";
 import { getToken } from "@/utils/auth";
 import { treeselect } from "@/api/company/companyDept";
@@ -797,6 +829,13 @@ export default {
       allowedAllRegisterForm: {
         status: true
       },
+      // 在 data() 中添加
+      batchRoleDialogVisible: false,
+      selectedRoleIds: [],
+      batchRoleForm: {
+        userIds: [],
+        roleIds: []
+      },
     };
   },
   watch: {
@@ -863,9 +902,6 @@ export default {
     },
 
     // edit G start
-    // selectQwUser(){
-    //   this.user.open=true;
-    // },
     // 修改 selectQwUser 方法
     selectQwUser() {
       this.user.open = true;
@@ -878,16 +914,6 @@ export default {
       });
     },
 
-    // bindQwUser(row){
-    //   this.user.open=false;
-    //   if (!this.qwUserList.some(item => item.id == row.id)) {
-    //     this.qwUserList.push(row)
-    //   }
-    //   if (!this.qwUser.some(item => item == row.id)) {
-    //     this.qwUser.push(row.id);
-    //   }
-    // },
-
     // 修改 bindQwUser 方法
     bindQwUser(row) {
       // this.user.open = false; // 暂时注释掉这行,改为在 handleBatchBind 中处理
@@ -899,30 +925,11 @@ export default {
       }
     },
 
-    // qwBind(row){
-    //   this.qwUser=[];
-    //   this.qwUserList=[];
-    //   this.qwForm.companyUserId=row.userId
-    //   getUser(row.userId).then((response) => {
-    //     if(response.data.qwUserId!=null){
-    //       this.qwUser=((response.data.qwUserId).split(",").map(Number))
-    //       getQwUserByIds(this.qwUser).then(res => {
-    //         this.qwUserList=res.data;
-    //       })
-    //       // this.qwUser.forEach(item => {
-    //       //     getQwUser(item).then(response => {
-    //       //         this.qwUserList.push(response.data);
-    //       //     });
-    //       // });
-    //     }
-    //     this.qwOpen = true;
-    //   });
     // 修改 qwBind 方法
     qwBind(row) {
       this.qwUser = [];
       this.qwUserList = [];
       this.qwForm.companyUserId = row.userId;
-
       getUser(row.userId).then((response) => {
         if (response.data.qwUserId != null) {
           // 保存已绑定的企微用户ID列表
@@ -936,6 +943,42 @@ export default {
       });
     },
 
+    // 在 methods 中添加批量修改角色的方法
+    batchEditRole() {
+      if (this.ids.length === 0) {
+        this.$message.warning("请至少选择一个用户");
+        return;
+      }
+      // 获取角色列表数据
+      getUser().then((response) => {
+        this.roleOptions = response.roles;
+        this.batchRoleDialogVisible = true;
+        this.selectedRoleIds = []; // 清空之前的选择
+      });
+    },
+
+    // 添加批量角色更新提交方法
+    submitBatchRoles() {
+      // 验证选择的角色
+      if (!this.selectedRoleIds || this.selectedRoleIds.length === 0) {
+        this.$message.warning("请至少选择一个角色");
+        return;
+      }
+      console.log(this.ids)
+      console.log(this.selectedRoleIds)
+
+      // 调用API批量更新用户角色
+      updateBatchUserRoles({ userIds: this.ids, roleIds: this.selectedRoleIds })
+        .then(response => {
+          if (response.code === 200) {
+            this.$message.success("批量修改角色成功");
+            this.batchRoleDialogVisible = false;
+            this.getList(); // 刷新列表
+          }
+        });
+    },
+    // edit G end
+
     /** 查询用户列表 */
     getList() {
       this.loading = true;

+ 1 - 1
src/views/course/courseFinishTemp/index.vue

@@ -722,7 +722,7 @@ export default {
 
         this.open = true;
         this.title = "修改完课模板";
-
+        this.formType = 1;
       });
     },
     /** 提交按钮 */

+ 2 - 2
src/views/course/courseWatchLog/index.vue

@@ -188,7 +188,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+      <el-col :span="1.5" v-if="queryParams.sendType == 2">
         <el-button
           type="warning"
           plain
@@ -198,7 +198,7 @@
           @click="handleExport"
           v-hasPermi="['course:courseWatchLog:export']"
         >导出</el-button>
-        <el-col :span="1.5">
+        <el-col :span="1.5" v-if="queryParams.sendType == 2">
           <el-button
             type="primary"
             plain

+ 2 - 2
src/views/course/courseWatchLog/myCourseWatchLog.vue

@@ -92,7 +92,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+      <el-col :span="1.5" v-if="queryParams.sendType == 2">
         <el-button
           type="warning"
           plain
@@ -103,7 +103,7 @@
           v-hasPermi="['course:courseWatchLog:myExport']"
         >导出</el-button>
       </el-col>
-      <el-col :span="1.5">
+      <el-col :span="1.5" v-if="queryParams.sendType == 2">
         <el-button
           type="primary"
           plain

+ 2 - 2
src/views/course/courseWatchLog/watchLog.vue

@@ -207,7 +207,7 @@
           v-hasPermi="['course:courseWatchLog:myExport']"
         >导出
         </el-button>
-        <el-col :span="1.5">
+        <el-col :span="1.5" v-if="queryParams.sendType == 2">
           <el-button
             type="primary"
             plain
@@ -216,7 +216,7 @@
             v-hasPermi="['qw:externalContact:addTag']"
           >批量添加标签</el-button>
         </el-col>
-        <el-col :span="1.5">
+        <el-col :span="1.5" v-if="queryParams.sendType == 2">
           <el-button
             type="primary"
             plain

+ 8 - 0
src/views/qw/externalContact/index.vue

@@ -1904,6 +1904,14 @@ export default {
       this.notesOpen.filter = false;
 
     },
+    notesCancel(){
+      this.notesOpen={
+        open: false,
+        notes: null,
+        type: 1,
+        nameType:3,
+      }
+    },
     notesSubmitForm() {
 
       if (this.notesOpen.notes == null || this.notesOpen.notes == "") {

+ 13 - 0
src/views/qw/externalContact/myExternalContact.vue

@@ -369,6 +369,11 @@
           <dict-tag :options="ratingType" :value="scope.row.level"/>
         </template>
       </el-table-column>
+      <el-table-column label="下单次数" align="center" width="100px">
+        <template #default="scope">
+          {{ scope.row.orderCount && scope.row.orderCount !== 0 ? scope.row.orderCount : '' }}
+        </template>
+      </el-table-column>
       <el-table-column label="state参数" align="center" prop="state" width="100px" />
       <el-table-column label="等级状态" align="center" prop="levelType" width="120px" >
         <template slot-scope="scope">
@@ -1980,6 +1985,14 @@ export default {
       this.notesOpen.filter = false;
 
     },
+    notesCancel(){
+      this.notesOpen={
+        open: false,
+        notes: null,
+        type: 1,
+        nameType:3,
+      }
+    },
     notesSubmitForm() {
 
       if (this.notesOpen.notes == null || this.notesOpen.notes == "") {

+ 13 - 1
src/views/qw/friendWelcome/deptFriendWelcome.vue

@@ -66,6 +66,8 @@
 
 
     <el-table v-loading="loading" :data="friendWelcomeList" @selection-change="handleSelectionChange" border>
+      <el-table-column label="id" align="center" prop="id" width="180"/>
+      <el-table-column label="标题" align="center" prop="welcomeTitle"/>
       <el-table-column label="消息内容" align="left" prop="welcomeText"  width="400px" >
         <template slot-scope="scope">
           <span style="color:rgb(19, 154, 50);" v-if="scope.row.isDayparting==='1'">[共 {{JSON.parse(scope.row.daypartingItemlist).length+1}} 时段]</span>
@@ -160,6 +162,16 @@
               </el-tag>
             </div>
           </el-form-item>
+          <!-- 新增整体标题 -->
+          <el-form-item label="标题:" prop="welcomeTitle">
+            <el-input v-model="form.welcomeTitle" placeholder="请输入欢迎语标题"/>
+            <el-alert style="margin-top: 8px;height: 30px"
+                      title="此标题仅用于欢迎语的用途区分"
+                      type="info"
+                      :closable="false"
+                      show-icon>
+            </el-alert>
+          </el-form-item>
           <el-form-item label="是否发送欢迎语">
             <el-switch
               v-model="form.isSendMsg"
@@ -731,7 +743,7 @@ export default {
     //选择群发的企业成员账号
     handlelistUser(){
       setTimeout(() => {
-        this.$refs.QwUserList.getDetails(this.queryParams.corpId);
+        this.$refs.QwUserList.getDetails(this.queryParams.corpId,null,null,"2");
       }, 1);
       this.listUser.title="选择企业成员"
       this.listUser.open=true;

+ 12 - 0
src/views/qw/friendWelcome/indexNew.vue

@@ -66,6 +66,8 @@
 
 
     <el-table v-loading="loading" :data="friendWelcomeList" @selection-change="handleSelectionChange" border>
+      <el-table-column label="id" align="center" prop="id" width="180"/>
+      <el-table-column label="标题" align="center" prop="welcomeTitle"/>
       <el-table-column label="消息内容" align="left" prop="welcomeText"  width="400px" >
         <template slot-scope="scope">
           <span style="color:rgb(19, 154, 50);" v-if="scope.row.isDayparting==='1'">[共 {{JSON.parse(scope.row.daypartingItemlist).length+1}} 时段]</span>
@@ -161,6 +163,16 @@
               </el-tag>
             </div>
           </el-form-item>
+          <!-- 新增整体标题 -->
+          <el-form-item label="标题:" prop="welcomeTitle">
+            <el-input v-model="form.welcomeTitle" placeholder="请输入欢迎语标题"/>
+            <el-alert style="margin-top: 8px;height: 30px"
+                      title="此标题仅用于欢迎语的用途区分"
+                      type="info"
+                      :closable="false"
+                      show-icon>
+            </el-alert>
+          </el-form-item>
           <el-form-item label="是否发送欢迎语">
             <el-switch
               v-model="form.isSendMsg"

+ 13 - 2
src/views/qw/friendWelcome/myWelcome.vue

@@ -66,6 +66,8 @@
 
 
     <el-table v-loading="loading" :data="friendWelcomeList" @selection-change="handleSelectionChange" border>
+      <el-table-column label="id" align="center" prop="id" width="180"/>
+      <el-table-column label="标题" align="center" prop="welcomeTitle"/>
       <el-table-column label="消息内容" align="left" prop="welcomeText"  width="400px" >
         <template slot-scope="scope">
           <span style="color:rgb(19, 154, 50);" v-if="scope.row.isDayparting==='1'">[共 {{JSON.parse(scope.row.daypartingItemlist).length+1}} 时段]</span>
@@ -138,7 +140,6 @@
           </el-alert>
         </div>
         <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-
           <el-form-item label="选择使用成员:" prop="qwUserIds" style="margin-top: 2%">
             <div>
               <el-button
@@ -160,6 +161,16 @@
               </el-tag>
             </div>
           </el-form-item>
+          <!-- 新增整体标题 -->
+          <el-form-item label="标题:" prop="welcomeTitle">
+            <el-input v-model="form.welcomeTitle" placeholder="请输入欢迎语标题"/>
+            <el-alert style="margin-top: 8px;height: 30px"
+                      title="此标题仅用于欢迎语的用途区分"
+                      type="info"
+                      :closable="false"
+                      show-icon>
+            </el-alert>
+          </el-form-item>
           <el-form-item label="是否发送欢迎语">
             <el-switch
               v-model="form.isSendMsg"
@@ -731,7 +742,7 @@ export default {
     //选择群发的企业成员账号
     handlelistUser(){
       setTimeout(() => {
-        this.$refs.QwUserList.getDetails(this.queryParams.corpId);
+        this.$refs.QwUserList.getDetails(this.queryParams.corpId,null,null,"1");
       }, 1);
       this.listUser.title="选择企业成员"
       this.listUser.open=true;

+ 8 - 8
src/views/qw/sop/addSop.vue

@@ -29,10 +29,10 @@
               :label="1"
             >标签
             </el-radio>
-<!--            <el-radio-->
-<!--              :label="2"-->
-<!--            >群聊-->
-<!--            </el-radio>-->
+            <el-radio
+              :label="2"
+            >群聊
+            </el-radio>
           </el-radio-group>
           <Tip :title="'标签:根据企微客户的标签筛选客户进入SOP'" />
         </el-form-item>
@@ -76,7 +76,7 @@
           </el-select>
           <Tip title="选择的企业微信员工下面的群聊" />
         </el-form-item>
-        <el-form-item label="客户评级" prop="isRating" style="margin-top: 2%">
+        <el-form-item label="客户评级" prop="isRating" style="margin-top: 2%" v-if="form.filterMode == 1">
           <el-switch
             v-model="form.isRating"
             active-color="#13ce66"
@@ -235,7 +235,7 @@
 
           </el-form-item>
         </div>
-        <el-form-item label="是否固定营期" prop="isFixed" v-if="form.type != 3">
+        <el-form-item label="是否固定营期" prop="isFixed" v-if="form.type != 3 && form.filterMode == 1">
           <el-radio-group v-model="form.isFixed">
             <el-radio
               :label="1"
@@ -265,7 +265,7 @@
           </el-row>
           <Tip title="任务生成的代发送消息,如果超过此设置的时间还未发送,自动作废" />
         </el-form-item>
-        <el-form-item v-if="(form.sendType==2 || form.sendType==4 || form.sendType==11) && form.type != 3 && form.isFixed == 0" label="自动添加SOP"
+        <el-form-item v-if="(form.sendType==2 || form.sendType==4 || form.sendType==11) && form.type != 3 && form.isFixed == 0 && form.filterMode == 1" label="自动添加SOP"
                       prop="autoSopTime.autoSopType">
           <el-radio-group v-model="form.autoSopTime.autoSopType">
             <el-radio
@@ -332,7 +332,7 @@
 <!--        </el-form-item>-->
 
 
-        <el-form-item label="是否只发送注册用户" prop="isRegister" v-if="form.type != 3">
+        <el-form-item label="是否只发送注册用户" prop="isRegister" v-if="form.type != 3 && form.filterMode == 1">
           <el-radio-group v-model="form.isRegister">
             <el-radio
               :label="1"

+ 43 - 9
src/views/qw/sop/sop.vue

@@ -760,7 +760,20 @@
                       </el-card>
                     </div>
                     <div v-if="item.contentType == 4">
-
+                      <el-card class="box-card">
+                        <el-form-item label="标题" prop="miniprogramTitle">
+                          <el-input v-model="item.miniprogramTitle" placeholder="请输入小程序消息标题,最长为64字"  />
+                        </el-form-item>
+                        <el-form-item label="封面" prop="miniprogramPicUrl">
+                          <ImageUpload v-model="item.miniprogramPicUrl"  type="image" :num="10" :width="150" :height="150" />
+                        </el-form-item>
+                        <el-form-item label="appid" prop="miniprogramAppid" v-show="false" >
+                          <el-input v-model="item.miniprogramAppid" disabled />
+                        </el-form-item>
+                        <el-form-item label="page路径" prop="miniprogramPage" v-show="false" label-width="100px" style="margin-left: -30px" >
+                          <el-input v-model="item.miniprogramPage" placeholder="小程序消息打开后的路径"  disabled />
+                        </el-form-item>
+                      </el-card>
                     </div>
                     <div v-if="item.contentType == 5 ">
 
@@ -1401,18 +1414,28 @@ export default {
             this.$set(this.setting[i], 'linkTitle', selectedCourse.dictLabel);
             this.$set(this.setting[i], 'linkImageUrl', selectedCourse.dictImgUrl);
           }
+          if (selectedCourse && this.setting[i].contentType == 4 && this.msgForm.courseId != null) {
+            this.$set(this.setting[i], 'miniprogramPicUrl', selectedCourse.dictImgUrl);
+          }
 
         }
 
       }
-      if (this.msgForm.videoId != null ) {
+      if (this.msgForm.videoId != null) {
         // 查找选中的课节对应的 label
         const selectedVideo = this.videoList.find(course => parseInt(course.dictValue) === this.msgForm.videoId);
 
         for (let i = 0; i < this.setting.length; i++) {
           //响应式直接给链接的描述上值
-          if (selectedVideo && this.setting[i].contentType == 3  && this.msgForm.videoId != null) {
-            this.$set(this.setting[i], 'linkDescribe', selectedVideo.dictLabel);
+          if (selectedVideo && this.msgForm.videoId != null) {
+            console.log(2, this.setting[i].contentType)
+            if (this.setting[i].contentType == 3 || this.setting[i].contentType == 9) {
+              this.$set(this.setting[i], 'linkDescribe', selectedVideo.dictLabel);
+            }
+            if (this.setting[i].contentType == 4) {
+              this.$set(this.setting[i], 'miniprogramTitle', selectedVideo.dictLabel);
+            }
+
           }
         }
       }
@@ -1420,14 +1443,22 @@ export default {
 
     },
     videoIdChange() {
-      if (this.msgForm.videoId != null ) {
+      if (this.msgForm.videoId != null) {
         // 查找选中的课节对应的 label
         const selectedVideo = this.videoList.find(course => parseInt(course.dictValue) === this.msgForm.videoId);
 
         for (let i = 0; i < this.setting.length; i++) {
           //响应式直接给链接的描述上值
-          if (selectedVideo && this.setting[i].contentType == 3  && this.msgForm.videoId != null) {
-            this.$set(this.setting[i], 'linkDescribe', selectedVideo.dictLabel);
+          if (selectedVideo && this.msgForm.videoId != null) {
+            if (this.setting[i].contentType == 3 || this.setting[i].contentType == 9) {
+              this.$set(this.setting[i], 'linkDescribe', selectedVideo.dictLabel);
+            }
+
+            if (this.setting[i].contentType == 4) {
+              this.$set(this.setting[i], 'miniprogramTitle', selectedVideo.dictLabel);
+            }
+
+
           }
         }
       }
@@ -1851,7 +1882,7 @@ export default {
       });
     },
     courseChange() {
-      if (this.msgForm.courseId != null ) {
+      if (this.msgForm.courseId != null) {
         const selectedCourse = this.courseList.find(course => parseInt(course.dictValue) === this.msgForm.courseId);
         for (let i = 0; i < this.setting.length; i++) {
           //响应式直接给链接的标题/封面上值
@@ -1859,12 +1890,15 @@ export default {
             this.$set(this.setting[i], 'linkTitle', selectedCourse.dictLabel);
             this.$set(this.setting[i], 'linkImageUrl', selectedCourse.dictImgUrl);
           }
+          if (selectedCourse && this.setting[i].contentType == 4 && this.msgForm.courseId != null) {
+            this.$set(this.setting[i], 'miniprogramPicUrl', selectedCourse.dictImgUrl);
+          }
 
         }
 
       }
       videoList(this.msgForm.courseId).then(response => {
-        this.videoList=response.list;
+        this.videoList = response.list;
       });
     },
     cancelMsgForm(){

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

@@ -320,6 +320,14 @@
                                           >
                                             {{ setList.isSalesCallAdded ? '移除#销售称呼#' : '添加#销售称呼#' }}
                                           </el-link>
+                                          <el-link
+                                            v-if="setList.contentType == 1 && roles.includes('edit_sop_temp_content')"
+                                            type="primary"
+                                            @click="toggleUserNameCall(index, contentIndex, setIndex)"
+                                            style="margin-top: 10px; margin-left: 20px"
+                                          >
+                                            {{ setList.isUserNameCallAdded ? '移除#客户称呼#' : '添加#客户称呼#' }}
+                                          </el-link>
 
                                           <ImageUpload :disabled="formType == 3 || !roles.includes('edit_sop_temp_content')" v-if="setList.contentType == 2 "
                                                        v-model="setList.imgUrl"
@@ -1483,6 +1491,38 @@ export default {
         textarea.setSelectionRange(newCursorPos, newCursorPos);
       });
     },
+    toggleUserNameCall(itemIndex, contentIndex, setIndex) {
+      // 获取目标对象
+      const setItem = this.setting[itemIndex].content[contentIndex].setting[setIndex];
+      const salesCall = '#客户称呼#';
+      const refKey = `textarea-${itemIndex}-${contentIndex}-${setIndex}`;
+      const textarea = this.$refs[refKey][0]?.$refs?.textarea;
+
+      if (!textarea) return;
+
+      // 获取光标位置
+      const cursorPosition = textarea.selectionStart;
+
+      if (setItem.isUserNameCallAdded) {
+        // 移除所有标签
+        setItem.value = setItem.value.replace(new RegExp(salesCall, 'g'), '');
+      } else {
+        // 插入到光标位置
+        setItem.value =
+          setItem.value.slice(0, cursorPosition) +
+          salesCall +
+          setItem.value.slice(cursorPosition);
+      }
+
+      // 切换状态
+      setItem.isUserNameCallAdded = !setItem.isUserNameCallAdded;
+
+      // 保持光标位置
+      this.$nextTick(() => {
+        const newCursorPos = cursorPosition + (setItem.isUserNameCallAdded ? salesCall.length : 0);
+        textarea.setSelectionRange(newCursorPos, newCursorPos);
+      });
+    },
     handleKeydown(event, itemIndex, contentIndex, setIndex) {
 
       const setItem = this.setting[itemIndex].content[contentIndex].setting[setIndex];
@@ -1756,6 +1796,9 @@ export default {
                     if (setList && !Object.hasOwn(setList, 'isSalesCallAdded')) {
                       this.$set(setList, 'isSalesCallAdded', false);
                     }
+                    if (setList && !Object.hasOwn(setList, 'isUserNameCallAdded')) {
+                      this.$set(setList, 'isUserNameCallAdded', false);
+                    }
                   });
                 }
               });

+ 2 - 1
src/views/qw/user/qwUserList.vue

@@ -102,7 +102,7 @@ export default {
   },
   methods: {
 
-    getDetails(corpId,type,sendType){
+    getDetails(corpId,type,sendType,isRemark){
       this.type=type;
       this.sendType=sendType;
       if (type!=null&&sendType!=null){
@@ -110,6 +110,7 @@ export default {
         this.queryParams.sendType=sendType;
       }
       this.queryParams.corpId=corpId;
+      this.queryParams.isRemark=isRemark;
       this.getList();
     },
     /** 查询企微用户列表 */