|
|
@@ -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
|