浏览代码

获客链接

三七 2 周之前
父节点
当前提交
f2b9681d0b
共有 2 个文件被更改,包括 244 次插入12 次删除
  1. 9 0
      src/api/qw/acquisitionAssistant.js
  2. 235 12
      src/views/qw/acquisitionAssistant/index.vue

+ 9 - 0
src/api/qw/acquisitionAssistant.js

@@ -117,6 +117,15 @@ export function extractLink(params) {
   })
 }
 
+
+export function extractLinkNol(params) {
+  return request({
+    url: '/qw/linkInfo/extractLinkNol',
+    method: 'post',
+    data: params
+  })
+}
+
 /**
  * ipad加好友
  */

+ 235 - 12
src/views/qw/acquisitionAssistant/index.vue

@@ -138,7 +138,13 @@
               type="text"
               icon="el-icon-link"
               @click="handleExtractLink(scope.row)"
-            >提取链接</el-button>
+            >提取电话版链接</el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-link"
+              @click="handleExtractLinkNol(scope.row)"
+            >提取获客链接</el-button>
           </div>
           <!-- 第二行:扩展操作 -->
           <div class="action-group">
@@ -259,6 +265,80 @@
           </div>
         </el-form-item>
 
+        <el-form-item label="员工添加上限" prop="isUserLimit">
+          <el-table  :data="userLimitJson" style="border: 1px solid #e6e6e6;width: 80%;">
+            <el-table-column label="成员" align="center" prop="userId" >
+              <template slot-scope="scope">
+                  <div v-for="(qwUser, index) in qwUserOptions" :key="index">
+                    <span v-if="qwUser.id==scope.row.qwUserId">{{qwUser.qwUserName}}</span>
+                  </div>
+              </template>
+            </el-table-column>
+            <el-table-column label="数量" align="center" prop="limitCount" >
+              <template slot-scope="scope">
+                <div>
+                  <el-input-number v-model="scope.row.limitCount"    size="mini" :min="0"   ></el-input-number>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-form-item>
+<!--        <el-form-item label="备用员工" prop="spareUserIds" >-->
+<!--          <el-select v-model="spareUserIds" remote multiple placeholder="员工" filterable >-->
+<!--            <el-option-->
+<!--              v-for="dict in this.form.qwUserOptions"-->
+<!--              :key="dict.qwUserId"-->
+<!--              :label="dict.qwUserName"-->
+<!--              :value="dict.qwUserId">-->
+<!--            </el-option>-->
+<!--          </el-select>-->
+<!--        </el-form-item>-->
+
+
+        <el-form-item label="备用员工" prop="spareUserIds">
+          <el-select
+            v-model="spareUserIds"
+            multiple
+            filterable
+            remote
+            reserve-keyword
+            :remote-method="searchQwUsers"
+            :loading="userLoading"
+            :multiple-limit="500"
+            :disabled="!queryParams.corpId"
+            :placeholder="getUserSelectPlaceholder"
+            style="width: 100%"
+            @visible-change="handleSelectVisible"
+            @focus="loadUsersByCorp"
+          >
+            <el-option
+              v-for="item in qwUserOptions"
+              :key="item.id"
+              :label="`${item.qwUserName} (${item.qwUserId})`"
+              :value="item.id"
+            >
+              <span style="float: left">{{ item.qwUserName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">{{ item.qwUserId }}</span>
+              <div style="clear: both;"></div>
+              <div style="font-size: 12px; color: #999;" v-if="item.department">
+                部门:{{ item.departmentName || item.department }} | 本地ID:{{ item.id }}
+              </div>
+            </el-option>
+
+            <!-- 加载更多 -->
+            <div style="text-align: center; padding: 10px;" v-if="hasMoreUsers">
+              <el-button type="text" @click="loadMoreUsers" :loading="loadingMore">加载更多</el-button>
+            </div>
+
+            <!-- 空状态 -->
+            <div slot="empty" style="text-align: center; padding: 20px;">
+              <span v-if="!queryParams.corpId">请先在搜索栏选择主体</span>
+              <span v-else-if="searchKeyword">未找到相关成员</span>
+              <span v-else>暂无成员数据</span>
+            </div>
+          </el-select>
+        </el-form-item>
+
         <!-- 部门选择(如果有部门选择组件) -->
         <el-form-item label="关联部门" prop="departmentListParam" v-if="showDepartment">
           <el-select
@@ -322,6 +402,9 @@
             {{ detailData.status === 1 ? '正常' : '已失效' }}
           </el-tag>
         </el-form-item>
+        <el-form-item label="备用成员">
+          <span>{{ formatDetailMembers(detailData.spareUserIds) }}</span>
+        </el-form-item>
         <el-form-item label="企微创建时间">{{ parseTime(detailData.qwCreateTime) }}</el-form-item>
         <el-form-item label="最后同步时间">{{ parseTime(detailData.syncTime) }}</el-form-item>
         <el-form-item label="备注">{{ detailData.remark || '-' }}</el-form-item>
@@ -488,6 +571,54 @@
       </div>
     </el-dialog>
 
+    <el-dialog
+      title="提取链接"
+      :visible.sync="extractLinkDialogNol.visible"
+      width="500px"
+      append-to-body
+      :close-on-click-modal="false"
+      @close="closeExtractLinkDialog"
+    >
+      <div v-loading="extractLinkDialogNol.loading" element-loading-text="生成中...">
+        <el-form :model="extractLinkDialogNol" label-width="100px">
+          <el-form-item label="生成结果(短链)" v-if="extractLinkDialogNol.shortLink">
+            <el-input
+              type="textarea"
+              :rows="4"
+              v-model="extractLinkDialogNol.shortLink"
+              readonly
+              placeholder="生成的文本内容"
+            />
+            <div class="el-form-item__tips" style="color: #67C23A; font-size: 12px; margin-top: 5px;">
+              点击下方按钮复制文本
+            </div>
+          </el-form-item>
+
+          <el-form-item label="生成结果(长链接)" v-if="extractLinkDialogNol.linkPlus">
+            <el-input
+              type="textarea"
+              :rows="4"
+              v-model="extractLinkDialogNol.linkPlus"
+              readonly
+              placeholder="生成的文本内容"
+            />
+            <div class="el-form-item__tips" style="color: #67C23A; font-size: 12px; margin-top: 5px;">
+              点击下方按钮复制文本
+            </div>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+          <el-button type="success" @click="copyExtractResultNol">
+            <i class="el-icon-document-copy"></i> 复制文本(短链)
+          </el-button>
+        <el-button type="success" @click="copyExtractResultNolLong">
+          <i class="el-icon-document-copy"></i> 复制文本(长链链接)
+        </el-button>
+          <el-button @click="closeExtractLinkDialogNol">关 闭</el-button>
+      </div>
+    </el-dialog>
+
     <!-- iPad获客链接加好友弹窗 -->
     <el-dialog
       title="iPad获客链接加好友"
@@ -578,6 +709,7 @@ import {
 } from '@/api/qw/acquisitionAssistant'
 
 import QRCode from 'qrcodejs2'
+import {extractLinkNol} from "../../../api/qw/acquisitionAssistant";
 
 export default {
   name: 'AcquisitionAssistant',
@@ -591,6 +723,13 @@ export default {
         rowData: null,
         resultText: ''
       },
+      extractLinkDialogNol:{
+        visible: false,
+        loading: false,
+        rowData: null,
+        linkPlus: '',
+        shortLink: ''
+      },
       // 导入电话号码弹窗数据
       uploadPhoneDialog: {
         visible: false,
@@ -683,6 +822,8 @@ export default {
         // 选中的ID(用于el-select绑定)
         selectedUserIds: []          // 与qwUserTableIdList同步,用于前端选择框显示
       },
+      spareUserIds:[],
+      userLimitJson:[],
       // 表单校验
       rules: {
         linkName: [
@@ -725,6 +866,8 @@ export default {
     })
   },
   methods: {
+
+
     /**
      * 下载获客链接创建模板
      */
@@ -757,6 +900,29 @@ export default {
       }
     },
 
+    handleExtractLinkNol(row){
+      extractLinkNol({
+        id: row.id,
+        url: row.url
+      }).then(response => {
+        if (response.code === 200) {
+          console.log("response",response)
+          // 修改这里:使用 response.msg 而不是 response.data
+          this.extractLinkDialogNol.visible = true
+          this.extractLinkDialogNol.shortLink = response.shortLink
+          this.extractLinkDialogNol.linkPlus = response.linkPlus
+          this.$message.success('短链接生成成功')
+        } else {
+          this.$message.error(response.msg || '生成失败')
+        }
+      }).catch(error => {
+        const errorMsg = error.response?.data?.msg || error.message || '生成失败'
+        this.$message.error(errorMsg)
+      }).finally(() => {
+        this.extractLinkDialogNol.loading = false
+      })
+    },
+
     /** 确认提取链接 */
     confirmExtractLink() {
       // 验证手机号码
@@ -803,12 +969,31 @@ export default {
       this.copyToClipboard(this.extractLinkDialog.resultText, '文本已复制到剪贴板')
     },
 
+    /** 复制提取的链接文本 */
+    copyExtractResultNol() {
+      if (!this.extractLinkDialogNol.shortLink) return
+
+      this.copyToClipboard(this.extractLinkDialogNol.shortLink, '文本已复制到剪贴板')
+    },
+
+    copyExtractResultNolLong() {
+      if (!this.extractLinkDialogNol.linkPlus) return
+
+      this.copyToClipboard(this.extractLinkDialogNol.linkPlus, '文本已复制到剪贴板')
+    },
+
     /** 关闭提取链接弹窗 */
     closeExtractLinkDialog() {
       this.extractLinkDialog.visible = false
       this.extractLinkDialog.phone = ''
       this.extractLinkDialog.resultText = ''
     },
+
+    closeExtractLinkDialogNol() {
+      this.extractLinkDialogNol.visible = false
+      this.extractLinkDialogNol.linkPlus = ''
+      this.extractLinkDialogNol.shortLink = ''
+    },
     /** 获取完整链接 */
     getFullUrl(row) {
       if (!row || !row.pageParam) return `${this.baseDomain}`
@@ -1059,12 +1244,34 @@ export default {
       }
       this.form.userList = JSON.stringify(userListData)
 
-      console.log('更新后的数据:', {
-        qwUserTableIdList: this.form.qwUserTableIdList,
-        userListParam: this.form.userListParam,
-        departmentListParam: this.form.departmentListParam,
-        userList: this.form.userList
+      // 4. 更新 userLimitJson,确保与当前选择的用户同步
+      // 先移除不在当前选择中的用户限制
+      this.userLimitJson = this.userLimitJson.filter(limitItem =>
+        this.form.qwUserTableIdList.includes(limitItem.qwUserId)
+      )
+
+      // 再添加新选择用户的默认限制(如果不存在)
+      this.form.qwUserTableIdList.forEach((localId) => {
+        if (!this.userLimitJson.find(item => item.qwUserId === localId)) {
+          // 从 qwUserOptions 中找到对应的用户,获取企微用户ID
+          const user = this.qwUserOptions.find(u => u.id === localId)
+          this.userLimitJson.push({
+            qwUserId: localId,                          // 本地数据库ID
+            userId: user ? user.qwUserId : '',    // 企微用户ID
+            limitCount: 100
+          })
+        }
       })
+
+      // console.log("userLimitJson",this.userLimitJson)
+      // console.log("this.qwUserOptions",this.qwUserOptions)
+      // console.log(" this.form.selectedUserIds", this.form.selectedUserIds)
+      // console.log('更新后的数据:', {
+      //   qwUserTableIdList: this.form.qwUserTableIdList,
+      //   userListParam: this.form.userListParam,
+      //   departmentListParam: this.form.departmentListParam,
+      //   userList: this.form.userList
+      // })
     },
     /** 检查是否已选择主体 */
     checkCorpId() {
@@ -1286,6 +1493,7 @@ export default {
     },
     /** 格式化详情页面的成员显示(不显示部门) */
     formatDetailMembers(localIds) {
+
       if (!localIds || !localIds.length) return '-'
 
       const memberNames = []
@@ -1379,6 +1587,14 @@ export default {
 
         // ========== 关联成员相关字段回显 ==========
 
+        if(data.userLimitJson!=null){
+          this.userLimitJson=JSON.parse(data.userLimitJson)
+        }else{ this.userLimitJson=[]}
+
+        if(data.spareUserIds!=null){
+          this.spareUserIds=JSON.parse(data.spareUserIds)
+        }else{ this.spareUserIds=[]}
+
         // 1. 处理 qwUserTableIdList(本地数据库ID)
         if (data.qwUserTableIdList) {
           if (typeof data.qwUserTableIdList === 'string') {
@@ -1485,6 +1701,11 @@ export default {
         const data = response.data
         this.detailData = { ...data }
 
+        if(data.spareUserIds!=null){
+          this.detailData.spareUserIds=JSON.parse(data.spareUserIds)
+        }else{ this.detailData.spareUserIds=[]
+        }
+
         // 解析qwUserTableIdList
         if (data.qwUserTableIdList) {
           if (typeof data.qwUserTableIdList === 'string') {
@@ -1523,7 +1744,6 @@ export default {
     /** 提交按钮 */
     submitForm() {
       if (!this.checkCorpId()) return
-
       this.$refs['form'].validate(valid => {
         if (valid) {
           // 验证关联成员是否超过500
@@ -1558,11 +1778,11 @@ export default {
 
             userListParam: this.form.userListParam || [],
             departmentListParam: this.form.departmentListParam || [],
-            priorityUserListParam: this.form.priorityUserListParam || []
+            priorityUserListParam: this.form.priorityUserListParam || [],
+            userLimitJson:JSON.stringify(this.userLimitJson || []),
+            spareUserIds:JSON.stringify(this.spareUserIds || [])
           }
 
-          console.log('提交的数据:', submitData)
-
           if (this.form.id) {
             updateAssistant(submitData).then(response => {
               this.msgSuccess('修改成功')
@@ -1624,7 +1844,8 @@ export default {
         departmentListParam: [],     // 部门ID
         qwUserTableIdList: [],       // 本地数据库ID
         userList: '{"userList":[],"departmentList":[],"userIds":[]}', // 完整JSON
-
+        userLimitJson: null,
+        spareUserIds: null,
         // 优先分配相关
         priorityUserListParam: [],   // 优先分配的企微用户ID
         priorityDepartmentListParam: [], // 优先分配的部门ID
@@ -1632,8 +1853,10 @@ export default {
 
         // 选中的ID(用于el-select绑定)
         selectedUserIds: []
-      }
 
+      }
+      this.spareUserIds=[];
+      this.userLimitJson=[];
       this.searchKeyword = ''
       this.userPage = 1
       this.hasMoreUsers = true