Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
company_app
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
毛细亚
company_app
Commits
5e642f8d
提交
5e642f8d
authored
12月 17, 2025
作者:
施汉文
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'release' into shw-feat-style
上级
2b12a804
f170e90a
显示空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
1848 行增加
和
819 行删除
+1848
-819
game.js
src/api/game.js
+43
-0
copy.svg
src/assets/icon/svg/copy.svg
+2
-0
copy.js
src/directive/copy/copy.js
+86
-0
index.js
src/directive/copy/index.js
+13
-0
main.js
src/main.js
+2
-1
user.js
src/store/modules/user.js
+7
-0
index.scss
src/styles/index.scss
+4
-0
index.vue
src/views/components/InstructionalVideo/index.vue
+157
-0
emailGift.vue
src/views/components/giftRecord/emailGift.vue
+387
-196
roleTimeRecharge.vue
...ws/components/giftRecord/giftDetails/roleTimeRecharge.vue
+4
-2
sendGame.vue
src/views/components/quickSendGame/sendGame.vue
+937
-503
roleInfoPanel.vue
src/views/components/roleInfo/roleInfoPanel.vue
+164
-74
taskDetails.vue
src/views/components/taskList/taskDetails.vue
+2
-2
newLogin.vue
src/views/newLogin.vue
+2
-0
quickReply.vue
src/views/quickReply.vue
+33
-39
vipLevel.vue
src/views/userInfo/components/gameInfo/vipLevel.vue
+5
-2
没有找到文件。
src/api/game.js
浏览文件 @
5e642f8d
...
...
@@ -1467,3 +1467,45 @@ export function sendEmail(data) {
})
})
}
// 获取开/合服天数
export
function
getServerDayApi
(
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
cross_systemRequest
({
system
:
'zhangyou'
,
api
:
'/api/role/getServerDay'
,
params
:
data
}).
then
((
res
)
=>
{
resolve
(
res
)
}).
catch
((
error
)
=>
{
reject
(
error
)
})
})
}
// 项目-视频分类
export
function
teachingVideoCategoryListApi
(
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
cross_systemRequest
({
system
:
'zhangyou'
,
api
:
'/api/teaching_video/categoryList'
,
params
:
data
}).
then
((
res
)
=>
{
resolve
(
res
)
}).
catch
((
error
)
=>
{
reject
(
error
)
})
})
}
// 视频列表
export
function
teachingVideoVideoListApi
(
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
cross_systemRequest
({
system
:
'zhangyou'
,
api
:
'/api/teaching_video/videoList'
,
params
:
data
}).
then
((
res
)
=>
{
resolve
(
res
)
}).
catch
((
error
)
=>
{
reject
(
error
)
})
})
}
\ No newline at end of file
src/assets/icon/svg/copy.svg
0 → 100644
浏览文件 @
5e642f8d
<svg
width=
"14"
height=
"14"
viewBox=
"0 0 14 14"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
><g
clip-path=
"url(#a)"
><mask
id=
"b"
style=
"mask-type:luminance"
maskUnits=
"userSpaceOnUse"
x=
"0"
y=
"0"
width=
"14"
height=
"14"
><path
d=
"M14 0H0v14h14z"
fill=
"#fff"
/></mask><g
mask=
"url(#b)"
stroke=
"#267ef0"
stroke-width=
".875"
stroke-linecap=
"round"
stroke-linejoin=
"round"
><path
d=
"M9.333 7.525v2.45c0 2.042-.816 2.858-2.858 2.858h-2.45c-2.042 0-2.858-.816-2.858-2.858v-2.45c0-2.042.816-2.858 2.858-2.858h2.45c2.042 0 2.858.816 2.858 2.858"
/><path
d=
"M12.833 4.025v2.45c0 2.042-.816 2.858-2.858 2.858h-.642V7.525c0-2.042-.816-2.858-2.858-2.858H4.667v-.642c0-2.042.816-2.858 2.858-2.858h2.45c2.042 0 2.858.816 2.858 2.858"
/></g></g><defs><clipPath
id=
"a"
><path
fill=
"#fff"
d=
"M0 0h14v14H0z"
/></clipPath></defs></svg>
\ No newline at end of file
src/directive/copy/copy.js
0 → 100644
浏览文件 @
5e642f8d
import
Vue
from
'vue'
{
/* <iconpark-icon name="icon-fuzhi"></iconpark-icon> */
}
const
copy
=
{
// 当被绑定的元素插入到DOM中时
inserted
:
function
(
el
,
binding
)
{
// 创建复制图标元素
const
copyIcon
=
document
.
createElement
(
'iconpark-icon'
)
// const copyIcon = document.createElement('div')
// copyIcon.setAttribute('icon-class', 'copy')
copyIcon
.
name
=
'icon-fuzhi'
copyIcon
.
style
.
cursor
=
'pointer'
copyIcon
.
style
.
marginLeft
=
'8px'
copyIcon
.
style
.
fontSize
=
'16px'
copyIcon
.
title
=
'点击复制'
copyIcon
.
innerHTML
=
'<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><mask id="b" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="14" height="14"><path d="M14 0H0v14h14z" fill="#fff"/></mask><g mask="url(#b)" stroke="#267ef0" stroke-width=".875" stroke-linecap="round" stroke-linejoin="round"><path d="M9.333 7.525v2.45c0 2.042-.816 2.858-2.858 2.858h-2.45c-2.042 0-2.858-.816-2.858-2.858v-2.45c0-2.042.816-2.858 2.858-2.858h2.45c2.042 0 2.858.816 2.858 2.858"/><path d="M12.833 4.025v2.45c0 2.042-.816 2.858-2.858 2.858h-.642V7.525c0-2.042-.816-2.858-2.858-2.858H4.667v-.642c0-2.042.816-2.858 2.858-2.858h2.45c2.042 0 2.858.816 2.858 2.858"/></g></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h14v14H0z"/></clipPath></defs></svg>'
// 设置元素的position为relative,确保图标的absolute定位正确
if
(
getComputedStyle
(
el
).
position
===
'static'
)
{
el
.
style
.
position
=
'relative'
}
// 添加复制图标到元素后面
el
.
insertBefore
(
copyIcon
,
el
.
nextSibling
)
// 复制功能实现
copyIcon
.
addEventListener
(
'click'
,
async
function
(
e
)
{
// 阻止事件冒泡
e
.
stopPropagation
()
try
{
// 获取要复制的内容
const
textToCopy
=
binding
.
value
||
''
if
(
!
textToCopy
)
{
Vue
.
prototype
.
$message
.
warning
(
'没有可复制的内容'
)
return
}
// 使用现代的剪贴板API
if
(
navigator
.
clipboard
&&
window
.
isSecureContext
)
{
await
navigator
.
clipboard
.
writeText
(
textToCopy
)
}
else
{
// 兼容旧版浏览器
const
textArea
=
document
.
createElement
(
'textarea'
)
textArea
.
value
=
textToCopy
textArea
.
style
.
position
=
'fixed'
textArea
.
style
.
left
=
'-999999px'
textArea
.
style
.
top
=
'-999999px'
document
.
body
.
appendChild
(
textArea
)
textArea
.
focus
()
textArea
.
select
()
// 执行复制命令
const
success
=
document
.
execCommand
(
'copy'
)
document
.
body
.
removeChild
(
textArea
)
if
(
!
success
)
{
throw
new
Error
(
'复制失败'
)
}
}
// 显示复制成功的提示
Vue
.
prototype
.
$message
.
success
(
'复制成功'
)
}
catch
(
error
)
{
console
.
error
(
'复制失败:'
,
error
)
Vue
.
prototype
.
$message
.
error
(
'复制失败,请手动复制'
)
}
})
// 存储图标引用,以便在组件卸载时清理
el
.
__copyIcon
=
copyIcon
},
// 当指令与元素解绑时
unbind
:
function
(
el
)
{
// 清理事件监听器和元素
if
(
el
.
__copyIcon
)
{
el
.
__copyIcon
.
removeEventListener
(
'click'
,
null
)
el
.
parentNode
.
removeChild
(
el
.
__copyIcon
)
delete
el
.
__copyIcon
}
}
}
export
default
copy
\ No newline at end of file
src/directive/copy/index.js
0 → 100644
浏览文件 @
5e642f8d
import
copy
from
'./copy.js'
const
install
=
function
(
Vue
)
{
Vue
.
directive
(
'copy'
,
copy
)
}
if
(
window
.
Vue
)
{
window
.
copy
=
copy
Vue
.
use
(
install
);
// eslint-disable-line
}
copy
.
install
=
install
export
default
copy
src/main.js
浏览文件 @
5e642f8d
...
...
@@ -15,6 +15,7 @@ import '@/styles/index.scss';
import
moment
from
'moment'
import
'@/styles/tailwind.css'
import
VConsole
from
'vconsole'
;
import
copy
from
'./directive/copy'
import
uploading
from
'@/utils/cos-upload'
import
errorHandle
from
'@/utils/errorHandle'
import
{
getParams
,
deepClone
}
from
'@/utils/index'
...
...
@@ -24,7 +25,7 @@ import loadmore from '@/directive/loadmore/index.js' // 加载更多
import
clickagain
from
'./directive/clickagain'
import
permission
from
'@/directive/permission/index.js'
// 权限判断指令
import
scroll
from
'@/directive/scroll'
// 下拉加载更多指令
Vue
.
use
(
globalComponent
).
use
(
permission
).
use
(
clickagain
).
use
(
loadmore
).
use
(
scroll
)
Vue
.
use
(
globalComponent
).
use
(
permission
).
use
(
clickagain
).
use
(
loadmore
).
use
(
scroll
)
.
use
(
copy
)
// 导入 VConsole 清理工具
import
'@/utils/vconsoleCleanup'
...
...
src/store/modules/user.js
浏览文件 @
5e642f8d
...
...
@@ -16,6 +16,7 @@ const state = {
},
avatar
:
''
,
//客服头像
userid
:
Cookies
.
get
(
'userid'
),
weixin_blongs_id
:
localStorage
.
getItem
(
'weixin_blongs_id'
),
//客服号项目id
corp_id
:
''
,
external_userid
:
''
,
token
:
''
,
...
...
@@ -39,6 +40,12 @@ const state = {
}
const
mutations
=
{
set_weixin_blongs_id
(
state
,
weixin_blongs_id
){
state
.
weixin_blongs_id
=
weixin_blongs_id
// Cookies.set('weixin_blongs_id', weixin_blongs_id)
localStorage
.
setItem
(
'weixin_blongs_id'
,
weixin_blongs_id
)
},
set_userInfo
(
state
,
userInfo
){
state
.
userInfo
=
userInfo
},
...
...
src/styles/index.scss
浏览文件 @
5e642f8d
...
...
@@ -564,6 +564,10 @@ li {
height
:
100%
;
font-size
:
300px
;
}
.el-loading-spinner
{
display
:
flex
;
justify-content
:
center
;
}
.el-loading-spinner
.circular
{
width
:
60px
!
important
;
...
...
src/views/components/InstructionalVideo/index.vue
0 → 100644
浏览文件 @
5e642f8d
<
template
>
<div
class=
"h-full flex flex-col"
>
<el-input
placeholder=
"请输入内容"
prefix-icon=
"el-icon-search"
v-model
.
trim=
"searchText"
@
input=
"debouncedGetVideoList"
>
</el-input>
<el-cascader
class=
"w-full mt-[8px]"
v-model=
"categoryValue"
:props=
"
{ emitPath: false, expandTrigger: 'click' }"
:options="categoryList"
@change="debouncedGetVideoList"
>
</el-cascader>
<div
class=
"mt-[2px] space-y-[8px] flex-1 overflow-auto pb-[10px]"
v-loading=
"loading"
>
<div
v-for=
"item in videoList"
:key=
"item.id"
class=
"flex justify-between items-center py-[3px] px-[8px] bottom-[1px] border border-[#E5E7EB] rounded-[4px]"
>
<div
class=
"text-[14px]"
>
{{
item
.
video_name
}}
</div>
<div
class=
"flex items-center"
>
<el-button
type=
"text"
size=
"small"
class=
"text-[12px] button-color-hover"
@
click=
"previewVideo(item)"
>
<div
class=
"flex items-center"
>
<iconpark-icon
name=
"xiaoxicaozuo-chakan"
class=
"mr-[4px] text-[14px]"
></iconpark-icon>
预览
</div>
</el-button>
<div
@
click=
"sendVideo(item)"
class=
"h-[24px] ml-[8px] cursor-pointer hover:bg-[#E7F1FD] text-[12px] w-[58px] p-0 flex justify-center items-center rounded-full bg-[#F7F8FA] text-[#267EF0]"
>
<iconpark-icon
name=
"icon-fasonghuashu"
class=
"text-[14px] mr-[4px]"
></iconpark-icon>
<span>
发送
</span>
</div>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
teachingVideoVideoListApi
,
teachingVideoCategoryListApi
,
}
from
"@/api/game"
;
import
{
mapMutations
,
mapState
}
from
"vuex"
;
import
{
sendChatMessage
}
from
"@/utils/index"
;
import
{
debounce
}
from
"@/utils"
;
export
default
{
name
:
"InstructionalVideo"
,
data
()
{
return
{
searchText
:
""
,
categoryValue
:
{},
categoryList
:
[],
videoList
:
[],
debouncedGetVideoList
:
()
=>
{},
loading
:
false
,
};
},
mounted
()
{
this
.
getCategoryList
();
// 初始化防抖函数,延迟300ms执行
this
.
debouncedGetVideoList
=
debounce
(()
=>
{
this
.
loading
=
true
;
this
.
getVideoList
().
finally
(()
=>
{
this
.
loading
=
false
;
});
},
300
);
},
computed
:
{
...
mapState
(
"user"
,
[
"userInfo"
,
"weixin_blongs_id"
]),
},
methods
:
{
...
mapMutations
(
"common"
,
[
"set_sendSkillMessage"
]),
// 视频分类
async
getCategoryList
()
{
// return;
const
{
data
}
=
await
teachingVideoCategoryListApi
({
weixin_blongs_id
:
this
.
weixin_blongs_id
,
});
this
.
categoryList
=
this
.
formatCategoryList
(
data
);
},
formatCategoryList
(
data
)
{
return
data
.
map
((
item
)
=>
{
return
{
value
:
item
,
label
:
item
.
main_game_name
,
children
:
item
.
category
.
map
((
item
)
=>
({
value
:
item
,
label
:
item
.
category_name
,
})),
};
});
},
// 视频列表
async
getVideoList
()
{
if
(
!
this
.
categoryValue
.
id
)
{
return
;
}
const
{
data
}
=
await
teachingVideoVideoListApi
({
weixin_blongs_id
:
this
.
categoryValue
.
weixin_blongs_id
||
this
.
weixin_blongs_id
,
main_game_id
:
this
.
categoryValue
.
main_game_id
,
video_type
:
this
.
categoryValue
.
id
,
video_name
:
this
.
searchText
,
page
:
1
,
page_size
:
200
,
});
this
.
videoList
=
data
.
data
;
},
sendVideo
(
item
)
{
try
{
const
link
=
{
title
:
item
.
video_name
,
imgUrl
:
item
.
cover_url
||
""
,
desc
:
"点击观看教学视频"
,
link
:
item
.
video_url
,
};
sendChatMessage
(
link
,
"link"
);
}
catch
(
error
)
{
console
.
error
(
"发送视频链接失败:"
,
error
);
this
.
$message
({
message
:
"发送视频链接失败"
,
type
:
"error"
});
}
},
previewVideo
(
item
)
{
window
.
open
(
item
.
video_url
);
},
},
};
</
script
>
<
style
scoped
>
.button-color-hover.el-button--text
:hover
{
color
:
#267ef0
!important
;
}
.button-color-hover.el-button--text
{
color
:
#86909c
;
}
</
style
>
src/views/components/giftRecord/emailGift.vue
浏览文件 @
5e642f8d
<
template
>
<div
class=
"detailsGiftApply columnFlex"
>
<div
class=
"detailsGiftApplyContent"
v-scroll=
"requestemailGiftList"
v-loading=
"listLoading"
>
<div
class=
"detailsGiftApplyContent"
v-scroll=
"requestemailGiftList"
v-loading=
"listLoading"
>
<div
class=
"detailsGiftApplyTitle rowFlex spaceBetween columnCenter"
>
<!--
<p>
充值礼包
</p>
-->
<span></span>
<el-button
type=
"primary"
size=
"small"
@
click=
"showApplyGift = true"
>
礼包申请
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"showApplyGift = true"
>
礼包申请
</el-button
>
</div>
<!-- 过滤条件 -->
<el-form
class=
"filterList"
label-position=
"top"
:class=
"
{ 'collapsed-form': isCollapsed }">
<el-form
class=
"filterList"
label-position=
"top"
:class=
"
{ 'collapsed-form': isCollapsed }"
>
<div
class=
"filter-header"
>
<span
class=
"filter-title"
>
筛选条件
</span>
<i
:class=
"isCollapsed ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"
class=
"collapse-icon"
@
click=
"toggleCollapse"
></i>
<i
:class=
"isCollapsed ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"
class=
"collapse-icon"
@
click=
"toggleCollapse"
></i>
</div>
<el-form-item
label=
"主游戏"
>
<el-select
v-model
.
trim=
"form.main_game_id"
filterable
remote
clearable
reserve-keyword
placeholder=
"请输入主游戏名"
style=
"width:100%;"
:remote-method=
"remoteMethod"
:loading=
"loading"
@
change=
"searchInput"
@
focus=
"gameNameList = optionsList"
>
<el-option
v-for=
"item in gameNameList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
<el-select
v-model
.
trim=
"form.main_game_id"
filterable
remote
clearable
reserve-keyword
placeholder=
"请输入主游戏名"
style=
"width: 100%"
:remote-method=
"remoteMethod"
:loading=
"loading"
@
change=
"searchInput"
@
focus=
"gameNameList = optionsList"
>
<el-option
v-for=
"item in gameNameList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"区服"
>
<el-select
v-model
.
trim=
"form.zyou_server_id"
filterable
remote
multiple
reserve-keyword
style=
"width:100%;"
placeholder=
"请先选择主游戏"
:remote-method=
"remoteMethodServer"
:loading=
"loading"
@
change=
"searchInput"
>
<el-option
v-for=
"item in serverNameList"
:key=
"item.id"
:label=
"item.label"
:value=
"item.value"
>
<el-select
v-model
.
trim=
"form.zyou_server_id"
filterable
remote
multiple
reserve-keyword
style=
"width: 100%"
placeholder=
"请先选择主游戏"
:remote-method=
"remoteMethodServer"
:loading=
"loading"
@
change=
"searchInput"
>
<el-option
v-for=
"item in serverNameList"
:key=
"item.id"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"svip权益"
>
<el-select
v-model
.
trim=
"form.right_type"
filterable
style=
"width:100%;"
placeholder=
"请选择svip权益"
@
change=
"searchInput"
>
<el-option
v-for=
"item in benefitOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
<el-select
v-model
.
trim=
"form.right_type"
filterable
style=
"width: 100%"
placeholder=
"请选择svip权益"
@
change=
"searchInput"
>
<el-option
v-for=
"item in benefitOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"角色名称"
>
<el-input
v-model=
"form.role_name_or_cp_id"
placeholder=
"请输入角色名称"
style=
"width:100%;"
@
change=
"searchInput"
></el-input>
<el-input
v-model=
"form.role_name_or_cp_id"
placeholder=
"请输入角色名称"
style=
"width: 100%"
@
change=
"searchInput"
></el-input>
</el-form-item>
<el-form-item
label=
"礼包标题"
>
<el-input
v-model=
"form.active_title"
placeholder=
"请输入礼包名称"
style=
"width:100%;"
@
change=
"searchInput"
></el-input>
<el-input
v-model=
"form.active_title"
placeholder=
"请输入礼包名称"
style=
"width: 100%"
@
change=
"searchInput"
></el-input>
</el-form-item>
</el-form>
<el-tabs
v-model=
"form.gift_type"
class=
"tabStyle"
@
tab-click=
"tabChange"
>
<el-tab-pane
v-for=
"(item, index) in giftTypeList"
:key=
"index"
:label=
"item.label"
:name=
"item.value"
></el-tab-pane>
<el-tab-pane
v-for=
"(item, index) in giftTypeList"
:key=
"`$
{item.active_title}-${index}`"
:label="item.label"
:name="item.value"
>
</el-tab-pane>
</el-tabs>
<!-- 订单列表 -->
<div
class=
"email-gift-main-scroll"
>
<div
v-if=
"emailGiftList.length > 0"
style=
"height: auto"
>
<div
class=
"email-gift-main-scroll"
>
<div
v-if=
"emailGiftList.length > 0"
style=
"height:auto;"
>
<div
v-for=
"(item, index) in emailGiftList"
:key=
"index"
class=
"orderDetails"
>
v-for=
"(item, index) in emailGiftList"
:key=
"index"
class=
"orderDetails"
>
<div
class=
"orderDetailsTitle"
>
<div
class=
"rowFlex spaceBetween columnCenter"
>
<div>
<p
class=
"text"
><label>
角色信息:
</label>
{{
`${item.role_name
}
- ${item.server_name
}
`
}}
<
/p
>
<
p
class
=
"text hidden"
><
label
>
礼包标题:
<
/label> {{ item.active_title
}}
</
p
>
<
p
class
=
"text hidden"
><
label
>
充值金额
:
<
/label> ¥{{ item.amount
}}
</
p
>
<
p
class
=
"text hidden"
><
label
>
充值日期
:
<
/label> {{ item.apply_recharge_date
}}
</
p
>
<p
class=
"text"
>
<label>
角色信息:
</label>
{{
`${item.role_name
}
- ${item.server_name
}
`
}}
<
/p
>
<
p
class
=
"text hidden"
>
<
label
>
礼包标题:
<
/label> {{ item.active_title
}}
<
/p
>
<
p
class
=
"text hidden"
>
<
label
>
充值金额
:
<
/label> ¥{{ item.amount
}}
<
/p
>
<
p
class
=
"text hidden"
>
<
label
>
充值日期
:
<
/label> {{ item.apply_recharge_date
}}
<
/p
>
<
/div
>
<
i
v
-
if
=
"item.showDetails"
class
=
"el-icon-arrow-down iconStyle"
@
click
=
"closePage(item, index)"
><
/i
>
<
i
v
-
else
class
=
"el-icon-arrow-right iconStyle"
@
click
=
"openPage(item, index)"
><
/i
>
<
i
v
-
if
=
"item.showDetails"
class
=
"el-icon-arrow-down iconStyle"
@
click
=
"closePage(item, index)"
><
/i
>
<
i
v
-
else
class
=
"el-icon-arrow-right iconStyle"
@
click
=
"openPage(item, index)"
><
/i
>
<
/div
>
<
el
-
collapse
-
transition
>
<
div
v
-
if
=
"item.showDetails"
>
<
p
class
=
"text hidden"
><
label
>
svip
权益
:
<
/label> {{ item.right_type_name || '-'
}}
</
p
>
<
p
v
-
if
=
"item.status == '待提交'"
class
=
"text"
><
label
>
状态:
<
/label> <span class="noSend">{{ item.statu
s
}}
<
/span> </
p
>
<
p
v
-
else
-
if
=
"item.status == '已提交'"
class
=
"text"
><
label
>
状态:
<
/label> <span class="sended">{{
item
.
status
}}
<
/span> </
p
>
<
p
v
-
else
-
if
=
"item.status == '已驳回'"
class
=
"text"
><
label
>
状态:
<
/label> <span class="sendFail">{{
item
.
status
}}
<
/span> </
p
>
<
p
class
=
"text"
><
label
>
申请时间:
<
/label> {{ item.create_time
}}
</
p
>
<
p
class
=
"text"
><
label
>
提交时间:
<
/label> {{ item.confirm_time
}}
</
p
>
<
label
style
=
"margin-right:10px;margin-top:3px;"
class
=
"text"
>
<
label
>
奖品信息:
<
/label> </
label
>
<
div
v
-
for
=
"items in item.level_attribute"
:
key
=
"items.rule_id"
class
=
"columnCenter userInfoStyle"
style
=
"border-top: 1px solid rgb(196 205 226);margin-top: 5px;"
>
<
div
class
=
"contentConfirmItem rowFlex spaceBetween"
style
=
"padding-left:0;margin-top:10px;"
>
<
p
class
=
"text hidden"
>
<
label
>
svip
权益
:
<
/label> {{ item.right_type_name || "-"
}}
<
/p
>
<
p
v
-
if
=
"item.status == '待提交'"
class
=
"text"
>
<
label
>
状态:
<
/label
>
<
span
class
=
"noSend"
>
{{
item
.
status
}}
<
/span
>
<
/p
>
<
p
v
-
else
-
if
=
"item.status == '已提交'"
class
=
"text"
>
<
label
>
状态:
<
/label
>
<
span
class
=
"sended"
>
{{
item
.
status
}}
<
/span
>
<
/p
>
<
p
v
-
else
-
if
=
"item.status == '已驳回'"
class
=
"text"
>
<
label
>
状态:
<
/label
>
<
span
class
=
"sendFail"
>
{{
item
.
status
}}
<
/span
>
<
/p
>
<
p
class
=
"text"
>
<
label
>
申请时间:
<
/label> {{ item.create_time
}}
<
/p
>
<
p
class
=
"text"
>
<
label
>
提交时间:
<
/label> {{ item.confirm_time
}}
<
/p
>
<
label
style
=
"margin-right: 10px; margin-top: 3px"
class
=
"text"
>
<
label
>
奖品信息:
<
/label
>
<
/label
>
<
div
v
-
for
=
"items in item.level_attribute"
:
key
=
"items.rule_id"
class
=
"columnCenter userInfoStyle"
style
=
"
border-top: 1px solid rgb(196 205 226);
margin-top: 5px;
"
>
<
div
class
=
"contentConfirmItem rowFlex spaceBetween"
style
=
"padding-left: 0; margin-top: 10px"
>
<
p
class
=
"title"
>
{{
items
.
prize_level_name
}}
<
/p
>
<
p
v
-
if
=
"items.compare_amount"
>
{{
items
.
compare_amount
?
Number
(
items
.
compare_amount
)
/
100
+
(
item
.
exchange_score_status
==
1
?
'积分'
:
'金额'
)
:
items
.
compare_amount
}}
<
span
>
*
{{
items
.
apply_num
}}
<
/span></
p
>
{{
items
.
compare_amount
?
Number
(
items
.
compare_amount
)
/
100
+
(
item
.
exchange_score_status
==
1
?
"积分"
:
"金额"
)
:
items
.
compare_amount
}}
<
span
>
*
{{
items
.
apply_num
}}
<
/span
>
<
/p
>
<
/div
>
<!--
固定奖
-->
<
div
v
-
if
=
"items.prize_default"
>
<
div
class
=
"contentConfirmItem"
>
<
p
class
=
"title"
>
固定奖
<
span
v
-
if
=
"item.exchange_score_status == 1"
>
{{
items
.
apply_num
?
'*'
+
items
.
apply_num
:
''
}}
<
/span></
p
>
<
div
v
-
for
=
"(prize, prizeIndex) in items.prize_default"
:
key
=
"prizeIndex"
class
=
"contentConfirmItem rowFlex "
>
<
p
class
=
"info"
>
{{
prize
.
name
}}
<
/p
>
<
p
class
=
"info"
style
=
"margin-left:40px;"
>
ID
:
{{
prize
.
prize_id
}}
<
/p
>
<
p
class
=
"title"
>
固定奖
<
span
v
-
if
=
"item.exchange_score_status == 1"
>
{{
items
.
apply_num
?
"*"
+
items
.
apply_num
:
""
}}
<
/span
>
<
/p
>
<
div
v
-
for
=
"(prize, prizeIndex) in items.prize_default"
:
key
=
"prizeIndex"
class
=
"contentConfirmItem rowFlex"
>
<
p
class
=
"info"
>
{{
prize
.
name
}}
<
/p
>
<
p
class
=
"info"
style
=
"margin-left: 40px"
>
ID
:
{{
prize
.
prize_id
}}
<
/p
>
<
/div
>
<
/div
>
<
/div
>
<!--
自选奖
-->
<
div
v
-
if
=
"items.prize_auto"
class
=
"contentConfirmItem"
>
<
p
class
=
"title"
>
自选奖
({{
items
.
prize_auto
.
length
}}
选
{{
items
.
prize_auto_num
}}
)
<
/p
>
<
div
v
-
for
=
"(prize, prizeIndex) in items.prize_auto"
:
key
=
"prizeIndex"
class
=
"contentConfirmItem "
>
<
div
v
-
for
=
"(auto, autoIndex) in prize.group"
:
key
=
"autoIndex"
>
<
div
v
-
if
=
"prize.apply_num > 0"
class
=
"rowFlex spaceBetween"
>
<
p
class
=
"title"
>
自选奖
({{
items
.
prize_auto
.
length
}}
选
{{
items
.
prize_auto_num
}}
)
<
/p
>
<
div
v
-
for
=
"(prize, prizeIndex) in items.prize_auto"
:
key
=
"prizeIndex"
class
=
"contentConfirmItem"
>
<
div
v
-
for
=
"(auto, autoIndex) in prize.group"
:
key
=
"autoIndex"
>
<
div
v
-
if
=
"prize.apply_num > 0"
class
=
"rowFlex spaceBetween"
>
<
span
>
{{
auto
.
name
}}
<
/span
>
<
span
>
ID
:{{
auto
.
prize_id
}}
<
/span
>
<
div
>*
{{
prize
.
apply_num
}}
<
/div
>
...
...
@@ -114,17 +253,26 @@
<
/div
>
<
/div
>
<!--
返利
-->
<
div
v
-
if
=
"item.rebate_ratio_amount"
class
=
"contentConfirmItem"
>
<
p
class
=
"rowFlex spaceBetween"
>
<
span
>
返利
:
¥
{{
item
.
rebate_ratio_amount
}}
<
/span> <span>1:{{
items
.
rebate_ratio_rate
}}
<
/span> </
p
>
<
div
v
-
if
=
"item.rebate_ratio_amount"
class
=
"contentConfirmItem"
>
<
p
class
=
"rowFlex spaceBetween"
>
<
span
>
返利
:
¥
{{
item
.
rebate_ratio_amount
}}
<
/span
>
<
span
>
1
:{{
items
.
rebate_ratio_rate
}}
<
/span
>
<
/p
>
<
/div
>
<
/div
>
<
div
v
-
if
=
"item.prize && item.prize.length > 0"
>
<
div
v
-
for
=
"(prize, prizeIndex) in item.prize"
:
key
=
"prizeIndex"
class
=
"contentConfirmItem rowFlex "
>
<
p
class
=
"info"
>
{{
prize
.
name
}}
<
/p
>
<
p
class
=
"info"
style
=
"margin-left:40px;"
>
ID
:
{{
prize
.
prize_id
}}
<
/p
>
<
div
v
-
for
=
"(prize, prizeIndex) in item.prize"
:
key
=
"prizeIndex"
class
=
"contentConfirmItem rowFlex"
>
<
p
class
=
"info"
>
{{
prize
.
name
}}
<
/p
>
<
p
class
=
"info"
style
=
"margin-left: 40px"
>
ID
:
{{
prize
.
prize_id
}}
<
/p
>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -132,34 +280,47 @@
<
/div
>
<
/div
>
<
/div
>
<
div
v
-
else
-
if
=
"!listLoading && emailGiftList.length == 0"
class
=
"noContent rowFlex allCenter"
>
<
div
v
-
else
-
if
=
"!listLoading && emailGiftList.length == 0"
class
=
"noContent rowFlex allCenter"
>
<
noContent
/>
<
/div
>
<
/div
>
<
/div
>
<!--
申请礼包
-->
<
applyGift
v
-
if
=
"showApplyGift"
:
show
.
sync
=
"showApplyGift"
title
=
"礼包申请"
@
requestData
=
"requestData"
/>
<
applyGift
v
-
if
=
"showApplyGift"
:
show
.
sync
=
"showApplyGift"
title
=
"礼包申请"
@
requestData
=
"requestData"
/>
<
/div
>
<
/template
>
<
script
>
import
{
emailGiftList
,
memberView
,
completionOrder
,
selectSearch
}
from
'@/api/game'
import
{
mapMutations
,
mapActions
,
mapState
}
from
'vuex'
import
{
removeDp
,
debounce
}
from
'@/utils/index'
import
{
emailGiftList
,
memberView
,
completionOrder
,
selectSearch
,
}
from
"@/api/game"
;
import
{
mapMutations
,
mapActions
,
mapState
}
from
"vuex"
;
import
{
debounce
}
from
"@/utils/index"
;
// import
{
roleList
,
memberView
,
zyouBind
,
selectSearch
}
from
'@/api/game'
import
applyGift
from
'./applyGift.vue'
import
selectDate
from
'@/components/selectDate.vue'
import
applyGift
from
"./applyGift.vue"
;
import
selectDate
from
"@/components/selectDate.vue"
;
export
default
{
name
:
'emailGift'
,
name
:
"emailGift"
,
components
:
{
selectDate
,
applyGift
applyGift
,
}
,
data
()
{
return
{
isloadMore
:
true
,
showApplyGift
:
false
,
collapseValue
:
[
'1'
],
collapseValue
:
[
"1"
],
emailGiftList
:
[],
optionsList
:
[],
gameNameList
:
[],
...
...
@@ -168,188 +329,219 @@ export default {
serverNameList
:
[],
giftTypeList
:
[],
form
:
{
main_game_id
:
''
,
main_game_id
:
""
,
zyou_server_id
:
[],
role_name_or_cp_id
:
''
,
member_id
:
''
,
active_title
:
''
,
gift_type
:
''
,
right_type
:
''
,
role_name_or_cp_id
:
""
,
member_id
:
""
,
active_title
:
""
,
gift_type
:
""
,
right_type
:
""
,
}
,
benefitOptions
:
[],
inputValue
:
''
,
inputValue
:
""
,
pageInfo
:
{
page
:
0
,
page_size
:
20
,
total
:
0
total
:
0
,
}
,
isCollapsed
:
false
}
isCollapsed
:
false
,
}
;
}
,
computed
:
{
...
mapState
(
'game'
,
[
'accountSelect'
]),
...
mapState
(
"game"
,
[
"accountSelect"
]),
}
,
watch
:
{
accountSelect
(
newVal
,
oldVal
)
{
if
(
newVal
&&
newVal
!==
''
)
{
if
(
newVal
&&
newVal
!==
""
)
{
this
.
pageInfo
=
{
page
:
0
,
page_size
:
20
,
total
:
0
}
this
.
emailGiftList
=
[]
this
.
isloadMore
=
true
this
.
requestemailGiftList
()
}
total
:
0
,
}
;
this
.
emailGiftList
=
[];
this
.
isloadMore
=
true
;
this
.
requestemailGiftList
();
}
}
,
}
,
mounted
()
{
this
.
requestGameList
()
this
.
requestGiftType
()
this
.
getBenefitOptions
()
this
.
requestGameList
()
;
this
.
requestGiftType
()
;
this
.
getBenefitOptions
()
;
}
,
methods
:
{
// 重新拉去数据
requestData
()
{
this
.
emailGiftList
=
[]
this
.
isloadMore
=
true
this
.
requestemailGiftList
()
this
.
emailGiftList
=
[]
;
this
.
isloadMore
=
true
;
this
.
requestemailGiftList
()
;
}
,
tabChange
:
debounce
(
function
()
{
this
.
pageInfo
.
page
=
0
this
.
emailGiftList
=
[]
this
.
isloadMore
=
true
this
.
requestemailGiftList
()
this
.
pageInfo
.
page
=
0
;
this
.
emailGiftList
=
[]
;
this
.
isloadMore
=
true
;
this
.
requestemailGiftList
()
;
}
,
1000
),
async
requestGiftType
()
{
const
data
=
{
field_name
:
'gift_type'
,
table_name
:
'role_gift_bag'
,
type
:
'dictionaries'
}
const
res
=
await
selectSearch
(
data
)
field_name
:
"gift_type"
,
table_name
:
"role_gift_bag"
,
type
:
"dictionaries"
,
}
;
const
res
=
await
selectSearch
(
data
)
;
if
(
res
.
status_code
===
1
)
{
res
.
data
.
data
.
map
(
item
=>
{
item
.
value
=
item
.
value
.
toString
()
}
)
this
.
giftTypeList
=
res
.
data
.
data
res
.
data
.
data
.
map
(
(
item
)
=>
{
item
.
value
=
item
.
value
.
toString
()
;
}
)
;
this
.
giftTypeList
=
res
.
data
.
data
;
this
.
giftTypeList
.
unshift
({
value
:
''
,
label
:
'全部'
}
)
value
:
""
,
label
:
"全部"
,
}
)
;
}
}
,
requestGameList
()
{
const
data
=
{
type
:
'mainGameList'
,
value
:
''
,
weixin_blong_id
:
''
}
selectSearch
(
data
).
then
(
res
=>
{
this
.
loading
=
false
type
:
"mainGameList"
,
value
:
""
,
weixin_blong_id
:
""
,
}
;
selectSearch
(
data
).
then
(
(
res
)
=>
{
this
.
loading
=
false
;
if
(
res
.
status_code
==
1
)
{
this
.
gameNameList
=
this
.
optionsList
=
res
.
data
.
data
this
.
gameNameList
=
this
.
optionsList
=
res
.
data
.
data
;
}
}
)
}
)
;
}
,
closePage
(
item
,
index
)
{
this
.
$set
(
this
.
emailGiftList
[
index
],
'showDetails'
,
false
)
this
.
$set
(
this
.
emailGiftList
[
index
],
"showDetails"
,
false
);
}
,
openPage
(
item
,
index
)
{
this
.
$set
(
this
.
emailGiftList
[
index
],
'showDetails'
,
true
)
this
.
$set
(
this
.
emailGiftList
[
index
],
"showDetails"
,
true
);
}
,
remoteMethodServer
(
query
)
{
if
(
query
!==
''
)
{
this
.
loading
=
true
if
(
query
!==
""
)
{
this
.
loading
=
true
;
const
data
=
{
type
:
'server_info'
,
type
:
"server_info"
,
value
:
query
,
main_game_ids
:
this
.
form
.
main_game_id
}
selectSearch
(
data
).
then
(
res
=>
{
this
.
loading
=
false
main_game_ids
:
this
.
form
.
main_game_id
,
}
;
selectSearch
(
data
).
then
(
(
res
)
=>
{
this
.
loading
=
false
;
if
(
res
.
status_code
==
1
)
{
this
.
serverNameList
=
res
.
data
.
data
this
.
serverNameList
=
res
.
data
.
data
;
}
}
)
}
)
;
}
}
,
remoteMethod
(
query
)
{
if
(
query
!==
''
)
{
this
.
gameNameList
=
this
.
optionsList
.
filter
(
item
=>
{
return
item
.
label
.
toLowerCase
()
.
indexOf
(
query
.
toLowerCase
())
>
-
1
}
)
if
(
query
!==
""
)
{
this
.
gameNameList
=
this
.
optionsList
.
filter
((
item
)
=>
{
return
item
.
label
.
toLowerCase
().
indexOf
(
query
.
toLowerCase
())
>
-
1
;
}
);
}
else
{
this
.
gameNameList
=
[]
this
.
gameNameList
=
[]
;
}
}
,
searchInput
(
value
)
{
console
.
log
(
value
)
console
.
log
(
value
)
;
this
.
pageInfo
=
{
page
:
0
,
page_size
:
20
,
total
:
0
}
this
.
isloadMore
=
true
this
.
emailGiftList
=
[]
this
.
requestemailGiftList
()
total
:
0
,
}
;
this
.
isloadMore
=
true
;
this
.
emailGiftList
=
[]
;
this
.
requestemailGiftList
()
;
}
,
async
getBenefitOptions
()
{
try
{
const
data
=
{
type
:
'svip_right'
,
}
const
res
=
await
selectSearch
(
data
)
if
(
res
.
status_code
===
1
&&
res
.
data
&&
res
.
data
.
data
&&
res
.
data
.
data
.
length
>
0
)
{
const
showList
=
[
'转生石福利'
,
'月核心玩家礼包'
,
'超R生日福利礼包'
,
'超R行会专属礼包'
]
this
.
benefitOptions
=
res
.
data
.
data
.
filter
((
item
,
index
)
=>
{
return
showList
.
includes
(
item
.
label
)
}
).
map
(
item
=>
({
type
:
"svip_right"
,
}
;
const
res
=
await
selectSearch
(
data
);
if
(
res
.
status_code
===
1
&&
res
.
data
&&
res
.
data
.
data
&&
res
.
data
.
data
.
length
>
0
)
{
const
showList
=
[
"转生石福利"
,
"月核心玩家礼包"
,
"超R生日福利礼包"
,
"超R行会专属礼包"
,
];
this
.
benefitOptions
=
res
.
data
.
data
.
filter
((
item
,
index
)
=>
{
return
showList
.
includes
(
item
.
label
);
}
)
.
map
((
item
)
=>
({
...
item
,
value
:
item
.
value
||
item
.
id
// 确保每个选项都有value属性,优先使用value,不存在则使用id
value
:
item
.
value
||
item
.
id
,
// 确保每个选项都有value属性,优先使用value,不存在则使用id
}
));
console
.
log
(
this
.
benefitOptions
)
console
.
log
(
this
.
benefitOptions
)
;
}
}
catch
(
error
)
{
console
.
error
(
'获取权益选项失败:'
,
error
)
console
.
error
(
"获取权益选项失败:"
,
error
);
}
}
,
requestemailGiftList
()
{
this
.
listLoading
=
true
if
(
this
.
accountSelect
==
''
)
{
this
.
$message
.
warning
(
'暂无关联的账号,请先去关联账号!'
)
return
false
this
.
listLoading
=
true
;
if
(
this
.
accountSelect
==
""
)
{
this
.
$message
.
warning
(
"暂无关联的账号,请先去关联账号!"
);
return
false
;
}
if
(
!
this
.
isloadMore
)
{
console
.
log
(
'没有更多数据了'
)
this
.
listLoading
=
false
return
false
}
this
.
pageInfo
.
page
+=
1
this
.
form
.
member_id
=
this
.
accountSelect
emailGiftList
({
...
this
.
form
,
...
this
.
pageInfo
}
).
then
(
res
=>
{
this
.
listLoading
=
false
console
.
log
(
"没有更多数据了"
);
this
.
listLoading
=
false
;
return
false
;
}
this
.
pageInfo
.
page
+=
1
;
this
.
form
.
member_id
=
this
.
accountSelect
;
emailGiftList
({
...
this
.
form
,
...
this
.
pageInfo
}
).
then
(
(
res
)
=>
{
this
.
listLoading
=
false
;
if
(
res
.
data
.
data
&&
res
.
data
.
data
.
length
<
20
)
{
this
.
isloadMore
=
false
this
.
isloadMore
=
false
;
}
res
.
data
.
data
.
map
((
item
,
index
)
=>
{
item
.
showDetails
=
false
}
)
this
.
emailGiftList
=
removeDp
(
res
.
data
.
data
,
this
.
emailGiftList
,
'id'
)
}
,
err
=>
{
this
.
listLoading
=
false
}
)
item
.
showDetails
=
false
;
}
);
this
.
emailGiftList
=
this
.
removeDp
(
this
.
emailGiftList
,
res
.
data
.
data
,
"id"
);
}
,
toggleCollapse
()
{
this
.
isCollapsed
=
!
this
.
isCollapsed
}
(
err
)
=>
{
this
.
listLoading
=
false
;
}
}
);
}
,
toggleCollapse
()
{
this
.
isCollapsed
=
!
this
.
isCollapsed
;
}
,
removeDp
(
arr1
,
arr2
,
id
)
{
console
.
log
(
arr1
,
arr2
,
"合并"
);
let
arr
;
arr2
?
(
arr
=
arr1
.
concat
(
arr2
))
:
(
arr
=
arr1
);
const
obj
=
{
}
;
console
.
log
(
arr
,
"合并前"
);
const
newArray
=
arr
.
reduce
((
pre
,
cur
)
=>
{
if
(
!
obj
[
cur
[
id
]])
{
obj
[
cur
[
id
]]
=
true
;
pre
.
push
(
cur
);
}
return
pre
;
}
,
[]);
return
newArray
;
}
,
}
,
}
;
<
/script
>
<
style
lang
=
"scss"
scoped
>
.
detailsGiftApply
{
...
...
@@ -382,14 +574,14 @@ export default {
padding
:
0
10
px
;
overflow
:
auto
;
overflow
-
x
:
hidden
;
::
v
-
deep
.
el
-
tabs__content
{
::
v
-
deep
.
el
-
tabs__content
{
height
:
auto
;
}
::
v
-
deep
.
el
-
tabs
{
::
v
-
deep
.
el
-
tabs
{
height
:
auto
;
}
.
noContent
{
.
noContent
{
margin
-
top
:
50
px
;
}
...
...
@@ -439,7 +631,7 @@ export default {
display
:
inline
-
block
;
width
:
8
px
;
height
:
8
px
;
background
:
#
409
EFF
;
background
:
#
409
eff
;
border
-
radius
:
5
px
;
}
...
...
@@ -472,7 +664,7 @@ export default {
p
{
font
-
size
:
22
px
;
color
:
#
409
EFF
;
color
:
#
409
eff
;
}
}
}
...
...
@@ -480,7 +672,7 @@ export default {
.
filterList
{
margin
-
bottom
:
10
px
;
position
:
relative
;
border
:
1
px
solid
#
EBEEF
5
;
border
:
1
px
solid
#
ebeef
5
;
border
-
radius
:
4
px
;
padding
:
10
px
;
transition
:
all
0.3
s
;
...
...
@@ -491,7 +683,7 @@ export default {
align
-
items
:
center
;
margin
-
bottom
:
10
px
;
padding
-
bottom
:
5
px
;
border
-
bottom
:
1
px
dashed
#
EBEEF
5
;
border
-
bottom
:
1
px
dashed
#
ebeef
5
;
}
.
filter
-
title
{
...
...
@@ -502,7 +694,7 @@ export default {
.
collapse
-
icon
{
cursor
:
pointer
;
color
:
#
409
EFF
;
color
:
#
409
eff
;
font
-
size
:
16
px
;
padding
:
5
px
;
transition
:
all
0.3
s
;
...
...
@@ -585,7 +777,7 @@ export default {
.
iconStyle
{
font
-
size
:
18
px
;
cursor
:
pointer
;
color
:
#
409
EFF
;
color
:
#
409
eff
;
}
.
money
{
...
...
@@ -621,7 +813,7 @@ export default {
background
:
#
e1fff0
;
font
-
family
:
PingFangSC
-
Regular
,
PingFang
SC
;
font
-
weight
:
400
;
color
:
#
409
EFF
;
color
:
#
409
eff
;
border
:
none
;
}
}
...
...
@@ -661,7 +853,6 @@ export default {
}
}
}
}
.
tabStyle
{
...
...
src/views/components/giftRecord/giftDetails/roleTimeRecharge.vue
浏览文件 @
5e642f8d
...
...
@@ -308,6 +308,9 @@ export default {
showConfirmLayer
:
false
}
},
computed
:
{
...
mapState
(
'user'
,
[
'cser_name'
])
},
watch
:
{
show
(
newVal
,
oldVal
)
{
if
(
newVal
)
{
...
...
@@ -432,7 +435,6 @@ export default {
}
}
catch
(
error
)
{
console
.
error
(
'处理礼包等级属性时出错:'
,
error
)
// 出错时保持level_attribute为空数组
}
// 构建规则数据
const
rule
=
[{
level_attribute
,
id
:
activeInfo
.
id
}]
...
...
@@ -440,7 +442,7 @@ export default {
role_id
:
role_id
,
recharge_date
:
''
,
remark
:
this
.
remark
,
create_user
:
this
.
name
,
create_user
:
this
.
cser_
name
,
task_id
:
this
.
task_id
||
null
,
right_type
:
this
.
activeInfo
.
right_type
||
''
,
select_type
:
this
.
activeInfo
.
gift_type
==
7
?
2
:
''
,
...
...
src/views/components/quickSendGame/sendGame.vue
浏览文件 @
5e642f8d
...
...
@@ -3,51 +3,114 @@
<div
v-if=
"!disabled && bindGameUserList.length > 0"
class=
"btnRelease"
>
<div
class=
"btntab"
>
<el-radio-group
size=
"small"
v-model=
"activeName"
class=
"radio-group"
>
<el-radio-button
border
label=
"1"
@
click
.
native=
"activeName = '1'"
>
转端
</el-radio-button>
<el-radio-button
border
label=
"3"
@
click
.
native=
"recallTabChange"
>
召回
</el-radio-button>
<el-radio-button
border
label=
"2"
@
click
.
native=
"requestRegGameList"
>
转游
</el-radio-button>
<el-radio-button
border
label=
"1"
@
click
.
native=
"activeName = '1'"
>
转端
</el-radio-button
>
<el-radio-button
border
label=
"3"
@
click
.
native=
"recallTabChange"
>
召回
</el-radio-button
>
<el-radio-button
border
label=
"2"
@
click
.
native=
"requestRegGameList"
>
转游
</el-radio-button
>
</el-radio-group>
</div>
<div
v-loading=
"contentLoading"
class=
"gameList"
>
<!-- 转端 -->
<el-collapse
v-if=
"activeName == '1' && conversionGameList.length > 0"
:disabled=
"disabled"
@
change=
"conversionChangeOld"
>
<el-collapse-item
class=
"mb-[10px]"
v-for=
"(item, index) in conversionGameList"
:key=
"index"
:name=
"item.game_type"
>
<el-collapse
v-if=
"activeName == '1' && conversionGameList.length > 0"
:disabled=
"disabled"
@
change=
"conversionChangeOld"
>
<el-collapse-item
class=
"mb-[10px]"
v-for=
"(item, index) in conversionGameList"
:key=
"index"
:name=
"item.game_type"
>
<template
slot=
"title"
>
<div
class=
"title-with-icon"
>
<svg-icon
v-if=
"item.game_type == 1"
icon-class=
"wxgame"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 5"
icon-class=
"douyin"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 3"
icon-class=
"Android"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 4"
icon-class=
"IOS"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 2"
icon-class=
"H5"
class=
"game-icon"
/>
<svg-icon
v-if=
"item.game_type == 1"
icon-class=
"wxgame"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 5"
icon-class=
"douyin"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 3"
icon-class=
"Android"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 4"
icon-class=
"IOS"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 2"
icon-class=
"H5"
class=
"game-icon"
/>
{{
item
.
game_text
}}
</div>
</
template
>
<div
v-if=
"item.children && item.children.length > 0"
>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{ items.game_name + '/' + items.game_id }}
</p>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{ items.game_name + "/" + items.game_id }}
</p>
<el-popover
placement=
"top"
width=
"160"
trigger=
"hover"
>
<div>
<p
class=
"sendLink"
@
click=
"sendLink(items, item.game_type)"
>
<p
class=
"sendLink"
@
click=
"sendLink(items, item.game_type)"
>
仅发送链接
</p>
<p
class=
"sendLink"
@
click=
"sendPassword(items, item.game_type)"
>
<p
class=
"sendLink"
@
click=
"sendPassword(items, item.game_type)"
>
仅发送账号密码
</p>
<p
class=
"sendLink"
@
click=
"sendMessage(items, item.game_type)"
>
<p
class=
"sendLink"
@
click=
"sendMessage(items, item.game_type)"
>
发送链接和账号密码
</p>
<p
class=
"sendLink"
@
click=
"sendDownLoadPage(items, item.game_type, index)"
>
<p
class=
"sendLink"
@
click=
"sendDownLoadPage(items, item.game_type, index)"
>
发送落地页
</p>
<p
class=
"sendLink"
v-if=
"[3, 4].includes(item.game_type)"
@
click=
"sendDownLoadQrCode(items, item.game_type, index)"
>
下载二维码
</p>
</div>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button
>
</el-popover>
</div>
</div>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<i
class=
"el-icon-loading"
></i>
<el-button
type=
"text"
>
加载中
</el-button>
</div>
...
...
@@ -55,31 +118,75 @@
</el-collapse-item>
</el-collapse>
<!-- 召回 -->
<div
v-else-if=
"activeName == '3' && recallGameList.length > 0"
class=
"collapseContent"
>
<div
v-else-if=
"activeName == '3' && recallGameList.length > 0"
class=
"collapseContent"
>
<!-- v-if="chatUser.task_type && chatUser.task_type == 7"-->
<el-button
v-if=
'false'
type=
"primary"
style=
"margin-left:50px;"
:loading=
"sendLoading"
@
click=
"sendTaskChannel"
>
根据任务一键发送链接
</el-button>
<el-button
v-if=
"false"
type=
"primary"
style=
"margin-left: 50px"
:loading=
"sendLoading"
@
click=
"sendTaskChannel"
>
根据任务一键发送链接
</el-button
>
<el-collapse
:disabled=
"disabled"
@
change=
"recallChange"
>
<el-collapse-item
v-for=
"(item, index) in recallGameList"
:key=
"index"
:name=
"item.game_type"
>
<el-collapse-item
v-for=
"(item, index) in recallGameList"
:key=
"index"
:name=
"item.game_type"
>
<
template
slot=
"title"
>
<div
class=
"title-with-icon"
>
<svg-icon
v-if=
"item.game_type == 1"
icon-class=
"wxgame"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 5"
icon-class=
"douyin"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 3"
icon-class=
"Android"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 4"
icon-class=
"IOS"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 2"
icon-class=
"H5"
class=
"game-icon"
/>
<svg-icon
v-if=
"item.game_type == 1"
icon-class=
"wxgame"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 5"
icon-class=
"douyin"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 3"
icon-class=
"Android"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 4"
icon-class=
"IOS"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.game_type == 2"
icon-class=
"H5"
class=
"game-icon"
/>
{{
item
.
game_text
}}
</div>
</
template
>
<div
v-if=
"item.children && item.children.length > 0"
>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{ items.game_name + '/' + items.game_id }}
</p>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
@
click=
"sendChannel(items)"
>
发送
</el-button>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{ items.game_name + "/" + items.game_id }}
</p>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
@
click=
"sendChannel(items)"
>
发送
</el-button
>
</div>
</div>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<div
v-else-if=
"gameLoding"
class=
"channelLoading rowFlex allCenter"
>
<i
class=
"el-icon-loading"
></i>
<el-button
type=
"text"
>
加载中
</el-button>
</div>
...
...
@@ -89,7 +196,12 @@
</el-collapse>
<div
class=
"createChannel rowFlex allCenter"
>
<span
class=
"label"
>
找不到对应游戏的链接点此
</span>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel = true"
>
新建渠道链接
</el-button>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel = true"
>
新建渠道链接
</el-button
>
</div>
</div>
<!--
...
...
@@ -100,21 +212,53 @@
-->
<div
v-else-if=
"activeName == '2'"
>
<el-collapse
:disabled=
"disabled"
>
<el-input
v-model=
"filterGameText"
placeholder=
"请输入游戏名 按回车搜索"
style=
"margin-top: 10px"
@
keydown
.
enter
.
native=
"changeGameText"
@
blur=
"changeGameText"
>
<el-input
v-model=
"filterGameText"
placeholder=
"请输入游戏名 按回车搜索"
style=
"margin-top: 10px"
@
keydown
.
enter
.
native=
"changeGameText"
@
blur=
"changeGameText"
>
<i
slot=
"prefix"
class=
"el-input__icon el-icon-search"
></i>
</el-input>
<el-collapse-item
v-for=
"(item, index) in regGameList"
:key=
"index"
:name=
"item.label"
>
<el-collapse-item
v-for=
"(item, index) in regGameList"
:key=
"index"
:name=
"item.label"
>
<
template
slot=
"title"
>
<div
class=
"title-with-icon"
>
<svg-icon
v-if=
"item.label.includes('微信')"
icon-class=
"wxgame"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.label.includes('抖音')"
icon-class=
"douyin"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.label.includes('安卓')"
icon-class=
"Android"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.label.includes('IOS') || item.label.includes('iOS') || item.label.includes('ios')"
icon-class=
"IOS"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.label.includes('H5') || item.label.includes('h5')"
icon-class=
"H5"
class=
"game-icon"
/>
v-if=
"item.label.includes('微信')"
icon-class=
"wxgame"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.label.includes('抖音')"
icon-class=
"douyin"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"item.label.includes('安卓')"
icon-class=
"Android"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"
item.label.includes('IOS') ||
item.label.includes('iOS') ||
item.label.includes('ios')
"
icon-class=
"IOS"
class=
"game-icon"
/>
<svg-icon
v-else-if=
"
item.label.includes('H5') || item.label.includes('h5')
"
icon-class=
"H5"
class=
"game-icon"
/>
{{
item
.
label
}}
</div>
</
template
>
...
...
@@ -127,39 +271,64 @@
H5游戏 item.game_type == 2 icon 是 H5.svg
-->
<div
v-if=
"regGameList.length > 0"
>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<div
v-for=
"(items, indexs) in item.children"
:key=
"indexs"
class=
"gameListItem rowFlex columnCenter spaceBetween"
>
<p>
{{ items.label + "/" + items.id }}
</p>
<!--game_type: 1 微信小游戏 2 H5 游戏 3 安卓游戏 4 IOS 游戏 5 抖音小游戏 -->
<!-- 微信小游戏 安卓游戏 IOS游戏 处理逻辑 -->
<el-popover
v-if=
"items.game_type == 1 || items.game_type == 3 || items.game_type == 4"
placement=
"top"
trigger=
"click"
>
<el-popover
v-if=
"
items.game_type == 1 ||
items.game_type == 3 ||
items.game_type == 4
"
placement=
"top"
trigger=
"click"
>
<p
class=
"sendLink"
@
click=
"sendChannelGame(items, item)"
>
发送链接/渠道二维码
</p>
<p
class=
"sendLink"
@
click=
"handleGameType(items, item, item.game_type, index)"
>
<p
class=
"sendLink"
@
click=
"
handleGameType(items, item, item.game_type, index)
"
>
发送落地页
</p>
<div
v-if=
"items.game_type == 1"
>
<!-- 发送 H5 安卓分身包 -->
<p
class=
"sendLink"
@
click=
"sendH5CloneGame(items,'android')"
@
click=
"sendH5CloneGame(items,
'android')"
>
发送H5-安卓分身包
</p>
<!-- 发送 H5 IOS 分身包 -->
<p
class=
"sendLink"
@
click=
"sendH5CloneGame(items,'ios')"
@
click=
"sendH5CloneGame(items,
'ios')"
>
发送H5-IOS分身包
</p>
</div>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button>
<el-button
slot=
"reference"
size=
"mini"
:disabled=
"accountSelect == ''"
>
发送
</el-button
>
</el-popover>
<el-button
v-else
size=
"mini"
:disabled=
"accountSelect == ''"
@
click=
"noH5AndroidIOSGame(items, item)"
>
发送
</el-button>
<el-button
v-else
size=
"mini"
:disabled=
"accountSelect == ''"
@
click=
"noH5AndroidIOSGame(items, item)"
>
发送
</el-button
>
</div>
</div>
<!-- <div
...
...
@@ -170,12 +339,16 @@
<el-button type="text">加载中</el-button>
</div> -->
<div
v-else
class=
"rowFlex allCenter"
>
暂无游戏
</div>
</el-collapse-item>
</el-collapse>
<div
class=
"createChannel rowFlex allCenter"
>
<span
class=
"label"
>
找不到对应游戏的链接点此
</span>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel = true"
>
新建渠道链接
</el-button>
<el-button
type=
"text"
size=
"medium"
@
click=
"showCreateChannel = true"
>
新建渠道链接
</el-button
>
</div>
</div>
</div>
...
...
@@ -184,23 +357,62 @@
<p>
暂未绑定关联账号,请先去绑定账号
</p>
</div>
<!-- 新建渠道链接 -->
<createChannel
v-if=
"showCreateChannel"
:type=
"activeName"
:show=
"showCreateChannel"
:game-user-info=
"gameUserInfo"
@
close=
"showCreateChannel = false"
/>
<sendPage
v-if=
"showSendPage"
:show
.
sync=
"showSendPage"
:game-list=
"conversionGameList"
@
confirm=
"startSendPage"
/>
<createChannel
v-if=
"showCreateChannel"
:type=
"activeName"
:show=
"showCreateChannel"
:game-user-info=
"gameUserInfo"
@
close=
"showCreateChannel = false"
/>
<sendPage
v-if=
"showSendPage"
:show
.
sync=
"showSendPage"
:game-list=
"conversionGameList"
@
confirm=
"startSendPage"
/>
<!-- 小游戏转游判断 -->
<SendTransWxGame
v-if=
"showWxGameDrawer"
:show
.
sync=
"showWxGameDrawer"
:game-list=
"selectedWxGameList"
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransWxGameClose"
@
confirm=
"handleWxGameConfirm"
/>
<SendTransAppGame
v-if=
"showAppGameDrawer"
:show
.
sync=
"showAppGameDrawer"
:game-list=
"selectedAppGameList"
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransAppGameClose"
@
confirm=
"handleAppGameConfirm"
/>
<SendTransWxGame
v-if=
"showWxGameDrawer"
:show
.
sync=
"showWxGameDrawer"
:game-list=
"selectedWxGameList"
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransWxGameClose"
@
confirm=
"handleWxGameConfirm"
/>
<SendTransAppGame
v-if=
"showAppGameDrawer"
:show
.
sync=
"showAppGameDrawer"
:game-list=
"selectedAppGameList"
:chat-user-info=
"chatUserInfo"
@
close=
"SendTransAppGameClose"
@
confirm=
"handleAppGameConfirm"
/>
<!-- 选择发送渠道 -->
<selectChannel
v-if=
"showLayer"
:show
.
sync=
"showLayer"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
<selectChannel
v-if=
"showLayer"
:show
.
sync=
"showLayer"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
<!-- 如果选择发送的渠道链接只有一个 直接发送 -->
<sendSelectChannel
:show
.
sync=
"showSendChannel"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
<sendSelectChannel
:show
.
sync=
"showSendChannel"
:chat-user=
"chatUserInfo"
:channel-info-list=
"channelInfoList"
/>
<!-- 二维码生成组件 (隐藏) -->
<div
v-show=
"false"
class=
"qrcode-container"
>
<qrcode-vue
ref=
"qrcode"
:value=
"qrCodeValue"
:size=
"qrCodeSize"
level=
"H"
></qrcode-vue>
</div>
</div>
</template>
<
script
>
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
import
{
mapState
,
mapMutations
,
mapActions
}
from
"vuex"
;
import
{
memberExtensionGameList
,
passwardEncryption
,
...
...
@@ -213,21 +425,29 @@ import {
getLandingPageMemberLink
,
getClonePackageLink
,
getLandingPageConfig
,
getMemberTransStatus
}
from
'@/api/game'
import
{
getRecentSendLog
,
markTransScene
,
getZqCserGroup
,
getZqCserWxBelong
,
getMediaId
,
send_log_add
}
from
'@/api/works'
import
{
companyviewConfig
}
from
'@/api/user'
import
{
throttle
,
throttleStart
}
from
'@/utils/index'
import
createChannel
from
'./sendGame/createChannel'
import
sendPage
from
'./sendGame/SendTransPage.vue'
import
SendTransWxGame
from
'./sendGame/SendTransWxGame.vue'
import
SendTransAppGame
from
'./sendGame/SendTransAppGame.vue'
import
selectChannel
from
'./sendGame/selectChannel.vue'
import
sendSelectChannel
from
'./sendGame/sendSelectChannel.vue'
import
gameLogMixin
from
'@/mixins/gameLogMixin'
import
{
sendChatMessage
}
from
'@/utils/index'
getMemberTransStatus
,
}
from
"@/api/game"
;
import
{
getRecentSendLog
,
markTransScene
,
getZqCserGroup
,
getZqCserWxBelong
,
getMediaId
,
send_log_add
,
}
from
"@/api/works"
;
import
{
companyviewConfig
}
from
"@/api/user"
;
import
{
throttle
,
throttleStart
}
from
"@/utils/index"
;
import
createChannel
from
"./sendGame/createChannel"
;
import
sendPage
from
"./sendGame/SendTransPage.vue"
;
import
SendTransWxGame
from
"./sendGame/SendTransWxGame.vue"
;
import
SendTransAppGame
from
"./sendGame/SendTransAppGame.vue"
;
import
selectChannel
from
"./sendGame/selectChannel.vue"
;
import
sendSelectChannel
from
"./sendGame/sendSelectChannel.vue"
;
import
gameLogMixin
from
"@/mixins/gameLogMixin"
;
import
{
sendChatMessage
}
from
"@/utils/index"
;
import
QrcodeVue
from
"qrcode.vue"
;
export
default
{
name
:
'sendGame'
,
name
:
"sendGame"
,
mixins
:
[
gameLogMixin
],
components
:
{
createChannel
,
...
...
@@ -235,7 +455,8 @@ export default {
SendTransWxGame
,
SendTransAppGame
,
selectChannel
,
sendSelectChannel
sendSelectChannel
,
QrcodeVue
,
},
data
()
{
return
{
...
...
@@ -250,15 +471,15 @@ export default {
weixin_blongs_id
:
[],
regGameList
:
[],
allRegGameList
:
[],
filterGameText
:
''
,
filterGameText
:
""
,
channelselectList
:
[],
webForm
:
{
channel_id
:
''
channel_id
:
""
,
},
sendLoading
:
false
,
belongList
:
[],
// 项目列表
activeName
:
'1'
,
// 转端 1 转游 2 召回 3
sendType
:
''
,
// 1 进发送链接 2 仅发送账号密码 3 发送链接和账号密码
activeName
:
"1"
,
// 转端 1 转游 2 召回 3
sendType
:
""
,
// 1 进发送链接 2 仅发送账号密码 3 发送链接和账号密码
showCreateChannel
:
false
,
showImageComposer
:
false
,
showWxGameDrawer
:
false
,
...
...
@@ -270,206 +491,227 @@ export default {
showLayer
:
false
,
showSendChannel
:
false
,
channelInfoList
:
{},
transMemberStatus
:
true
}
transMemberStatus
:
true
,
qrCodeValue
:
""
,
// 二维码内容
qrCodeSize
:
200
,
// 二维码大小
};
},
mounted
()
{
this
.
initDisable
()
this
.
sendGameInfo
()
this
.
initDisable
()
;
this
.
sendGameInfo
()
;
},
computed
:
{
...
mapState
(
'game'
,
[
'accountSelect'
,
'bindGameUserList'
,
'chatUserInfo'
,
'gameUserInfo'
,
'send_game_log'
]),
...
mapState
(
'user'
,
[
'userInfo'
,
'corp_id'
])
...
mapState
(
"game"
,
[
"accountSelect"
,
"bindGameUserList"
,
"chatUserInfo"
,
"gameUserInfo"
,
"send_game_log"
,
]),
...
mapState
(
"user"
,
[
"userInfo"
,
"corp_id"
]),
},
// props: [ 'chatUserInfo', 'chatUser'],
watch
:
{
accountSelect
(
newVal
,
oldVal
)
{
// 切换 w 账号的时候清空 conversionGameList 数据
this
.
conversionGameList
=
[]
this
.
getMemberTransStatus
()
if
(
newVal
&&
newVal
!==
''
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
this
.
conversionGameList
=
[]
;
this
.
getMemberTransStatus
()
;
if
(
newVal
&&
newVal
!==
""
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
;
}
else
{
this
.
disabled
=
true
this
.
disabled
=
true
;
}
},
activeName
(
newVal
,
oldVal
)
{
if
(
newVal
)
{
}
}
},
},
methods
:
{
...
mapMutations
(
'game'
,
[
'set_send_game_log'
]),
...
mapMutations
(
"game"
,
[
"set_send_game_log"
]),
initDisable
()
{
// 切换 w 账号的时候清空 conversionGameList 数据
this
.
conversionGameList
=
[]
this
.
getMemberTransStatus
()
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
''
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
this
.
conversionGameList
=
[];
this
.
getMemberTransStatus
();
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
""
&&
this
.
bindGameUserList
.
length
>
0
)
{
this
.
disabled
=
false
;
}
else
{
this
.
disabled
=
true
this
.
disabled
=
true
;
}
},
channelInfo
(
info
)
{
this
.
channelInfoList
=
info
this
.
channelInfoList
=
info
;
// 只有 1 个渠道的时候 直接发送不出现弹窗
if
(
info
.
channelList
.
length
===
1
)
{
this
.
showSendChannel
=
true
this
.
showSendChannel
=
true
;
}
else
{
this
.
showLayer
=
true
this
.
showLayer
=
true
;
}
},
async
sendH5CloneGame
(
items
,
type
)
{
const
res
=
await
getClonePackageLink
({
mini_game_id
:
items
.
id
})
if
(
res
.
status_code
==
1
)
{
if
(
type
==
'android'
&&
!
res
?.
data
?.
data
?.
android_download_url
)
{
this
.
$message
.
warning
(
'安卓分身包链接不存在,请联系掌游配置'
)
return
}
else
if
(
type
==
'ios'
&&
!
res
?.
data
?.
data
?.
ios_download_url
)
{
this
.
$message
.
warning
(
'IOS分身包链接不存在,请联系掌游配置'
)
return
}
let
srt
=
''
if
(
type
==
'android'
)
{
srt
=
'安卓分身包链接: '
+
res
.
data
.
data
.
android_download_url
}
else
{
srt
=
'IOS分身包链接: '
+
res
.
data
.
data
.
ios_download_url
}
sendChatMessage
(
srt
,
'text'
)
}
else
{
this
.
$message
.
warning
(
res
.
msg
)
const
res
=
await
getClonePackageLink
({
mini_game_id
:
items
.
id
})
;
if
(
res
.
status_code
==
1
)
{
if
(
type
==
"android"
&&
!
res
?.
data
?.
data
?.
android_download_url
)
{
this
.
$message
.
warning
(
"安卓分身包链接不存在,请联系掌游配置"
);
return
;
}
else
if
(
type
==
"ios"
&&
!
res
?.
data
?.
data
?.
ios_download_url
)
{
this
.
$message
.
warning
(
"IOS分身包链接不存在,请联系掌游配置"
);
return
;
}
let
srt
=
""
;
if
(
type
==
"android"
)
{
srt
=
"安卓分身包链接: "
+
res
.
data
.
data
.
android_download_url
;
}
else
{
srt
=
"IOS分身包链接: "
+
res
.
data
.
data
.
ios_download_url
;
}
sendChatMessage
(
srt
,
"text"
);
}
else
{
this
.
$message
.
warning
(
res
.
msg
)
;
}
},
requestConfig
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
companyviewConfig
({
corp_id
:
this
.
corp_id
}).
then
((
res
)
=>
{
this
.
weixin_blongs_id
=
res
.
data
.
weixin_blongs_id
resolve
()
})
})
this
.
weixin_blongs_id
=
res
.
data
.
weixin_blongs_id
;
resolve
()
;
})
;
})
;
},
// 请求当前 W 账号是否符合转端条件 如果不符合 提示 当前w账号不满足转端要求,请联系组长处理
async
getMemberTransStatus
()
{
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
''
)
{
const
res
=
await
getMemberTransStatus
({
member_id
:
this
.
accountSelect
})
if
(
this
.
accountSelect
&&
this
.
accountSelect
!==
""
)
{
const
res
=
await
getMemberTransStatus
({
member_id
:
this
.
accountSelect
,
});
if
(
res
.
status_code
==
1
)
{
this
.
transMemberStatus
=
res
.
data
.
data
.
allow_trans
||
false
this
.
transMemberStatus
=
res
.
data
.
data
.
allow_trans
||
false
;
}
}
else
{
this
.
transMemberStatus
=
false
this
.
transMemberStatus
=
false
;
}
},
recallTabChange
()
{
this
.
activeName
=
'3'
this
.
sendGameRecallList
()
this
.
activeName
=
"3"
;
this
.
sendGameRecallList
()
;
},
async
requestGameSendLog
()
{
this
.
filterGameText
=
''
const
res
=
await
getRecentSendLog
()
this
.
filterGameText
=
""
;
const
res
=
await
getRecentSendLog
()
;
if
(
res
.
status_code
==
1
)
{
if
(
res
.
status_code
==
1
&&
res
.
data
.
length
>
0
)
{
res
.
data
.
map
((
item
)
=>
{
item
.
label
=
item
.
game_name
item
.
id
=
item
.
game_id
})
item
.
label
=
item
.
game_name
;
item
.
id
=
item
.
game_id
;
})
;
}
// 检查是否已经存在"最近发送"项
const
recentSendIndex
=
this
.
regGameList
.
findIndex
(
item
=>
item
.
label
===
'最近发送'
)
const
recentSendIndex
=
this
.
regGameList
.
findIndex
(
(
item
)
=>
item
.
label
===
"最近发送"
);
if
(
recentSendIndex
!==
-
1
)
{
// 如果已存在,更新它
this
.
$set
(
this
.
regGameList
[
recentSendIndex
],
'children'
,
res
.
data
)
this
.
$set
(
this
.
regGameList
[
recentSendIndex
],
"children"
,
res
.
data
);
}
else
{
// 如果不存在,添加它
this
.
regGameList
.
unshift
({
label
:
'最近发送'
,
children
:
res
.
data
})
label
:
"最近发送"
,
children
:
res
.
data
,
})
;
}
}
},
async
sendGameInfo
()
{
this
.
activeName
=
'1'
this
.
conversionGameList
=
[]
this
.
recallGameList
=
[]
this
.
getMemberTransStatus
()
await
this
.
requestConfig
()
this
.
sendGameList
()
this
.
activeName
=
"1"
;
this
.
conversionGameList
=
[]
;
this
.
recallGameList
=
[]
;
this
.
getMemberTransStatus
()
;
await
this
.
requestConfig
()
;
this
.
sendGameList
()
;
},
requestRegGameList
()
{
this
.
activeName
=
'2'
if
(
this
.
gameUserInfo
.
main_game_id
||
this
.
gameUserInfo
.
main_game_id
==
0
)
{
this
.
contentLoading
=
true
this
.
activeName
=
"2"
;
if
(
this
.
gameUserInfo
.
main_game_id
||
this
.
gameUserInfo
.
main_game_id
==
0
)
{
this
.
contentLoading
=
true
;
const
data
=
{
type
:
'gameListWithType'
,
value
:
''
,
type
:
"gameListWithType"
,
value
:
""
,
use_type
:
2
,
game_id
:
this
.
gameUserInfo
.
main_game_id
,
use_user_id
:
this
.
userInfo
.
id
,
weixin_blongs_id
:
this
.
weixin_blongs_id
}
weixin_blongs_id
:
this
.
weixin_blongs_id
,
}
;
selectSearch
(
data
).
then
((
res
)
=>
{
this
.
contentLoading
=
false
this
.
contentLoading
=
false
;
if
(
res
.
status_code
==
1
)
{
// 暂时隐藏快手小游戏
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
label
===
'快手小游戏'
)
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
(
item
)
=>
item
.
label
===
"快手小游戏"
);
if
(
ksGameIndex
!==
-
1
)
{
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
;
}
this
.
regGameList
=
res
.
data
.
data
this
.
allRegGameList
=
this
.
regGameList
this
.
regGameList
=
res
.
data
.
data
;
this
.
allRegGameList
=
this
.
regGameList
;
}
this
.
requestGameSendLog
()
this
.
requestGameSendLog
()
;
setTimeout
(()
=>
{
this
.
contentLoading
=
false
},
2000
)
})
this
.
contentLoading
=
false
;
},
2000
)
;
})
;
}
else
{
}
},
onConfirm
()
{
},
onConfirm
()
{},
// 召回发送渠道
sendChannel
(
items
,
type
)
{
items
.
type
=
3
type
?
this
.
sendType
=
type
:
''
this
.
channelList
(
items
)
items
.
type
=
3
;
type
?
(
this
.
sendType
=
type
)
:
""
;
this
.
channelList
(
items
)
;
},
// 转游发送渠道
sendChannelGame
(
items
,
item
,
type
)
{
console
.
log
(
items
,
'items'
,
item
)
type
?
this
.
sendType
=
type
:
''
const
gameInfo
=
this
.
$clone
(
items
)
gameInfo
.
type
=
2
this
.
channelList
(
gameInfo
)
console
.
log
(
items
,
"items"
,
item
);
type
?
(
this
.
sendType
=
type
)
:
""
;
const
gameInfo
=
this
.
$clone
(
items
)
;
gameInfo
.
type
=
2
;
this
.
channelList
(
gameInfo
)
;
},
changeGameText
()
{
console
.
log
(
this
.
filterGameText
)
if
(
this
.
filterGameText
.
trim
()
===
''
)
{
this
.
regGameList
=
this
.
allRegGameList
console
.
log
(
this
.
filterGameText
)
;
if
(
this
.
filterGameText
.
trim
()
===
""
)
{
this
.
regGameList
=
this
.
allRegGameList
;
}
else
{
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allRegGameList
))
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allRegGameList
))
;
list
.
map
((
item
,
index
)
=>
{
item
.
children
=
item
.
children
.
filter
(
(
items
)
=>
items
.
label
.
indexOf
(
this
.
filterGameText
)
!==
-
1
)
})
this
.
regGameList
=
list
)
;
})
;
this
.
regGameList
=
list
;
}
},
// 获取渠道列表
channelList
(
items
)
{
console
.
log
(
items
,
'items'
)
console
.
log
(
items
,
"items"
);
const
data
=
{
game_id
:
items
.
game_id
||
items
.
id
,
page_size
:
200
,
page
:
1
,
zq_user_id
:
this
.
userInfo
.
id
,
weixin_blongs_id
:
items
.
weixin_blongs_id
?
[
items
.
weixin_blongs_id
]
:
this
.
weixin_blongs_id
,
request_system
:
'company_wx'
,
weixin_blongs_id
:
items
.
weixin_blongs_id
?
[
items
.
weixin_blongs_id
]
:
this
.
weixin_blongs_id
,
request_system
:
"company_wx"
,
member_id
:
this
.
accountSelect
,
use_type
:
this
.
activeName
}
use_type
:
this
.
activeName
,
}
;
channelList
(
data
).
then
((
res
)
=>
{
if
(
res
?.
data
?.
data
?.
data
?.
length
>
0
)
{
// 只有一个的时候自动发送渠道链接
...
...
@@ -477,89 +719,94 @@ export default {
game_id
:
items
.
game_id
||
items
.
id
,
use_type
:
this
.
activeName
,
sendType
:
this
.
sendType
,
channelList
:
res
.
data
.
data
.
data
}
channelList
:
res
.
data
.
data
.
data
,
}
;
// 只有 1 个渠道的时候 直接发送不出现弹窗
if
(
this
.
channelInfoList
.
channelList
.
length
===
1
)
{
this
.
showSendChannel
=
true
this
.
showSendChannel
=
true
;
}
else
{
this
.
showLayer
=
true
this
.
showLayer
=
true
;
}
this
.
sendGameLog
(
items
)
this
.
sendGameLog
(
items
)
;
}
else
{
this
.
$message
.
warning
(
'请到掌游创建运营渠道'
)
this
.
$message
.
warning
(
"请到掌游创建运营渠道"
);
}
})
})
;
},
showSendGameLayer
()
{
this
.
showLayer
=
true
this
.
showLayer
=
true
;
},
async
sendGameList
()
{
if
(
this
.
conversionGameList
.
length
==
0
)
{
this
.
contentLoading
=
true
this
.
contentLoading
=
true
;
// 获取召回转端的游戏列表 user_type: 1 转端 3 召回
const
res
=
await
getGameConfig
({
use_type
:
1
})
this
.
contentLoading
=
false
const
res
=
await
getGameConfig
({
use_type
:
1
})
;
this
.
contentLoading
=
false
;
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
.
length
>
0
)
{
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
game_type
==
6
)
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
(
item
)
=>
item
.
game_type
==
6
);
if
(
ksGameIndex
!=
-
1
)
{
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
this
.
conversionGameList
=
res
.
data
.
data
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
;
this
.
conversionGameList
=
res
.
data
.
data
;
}
else
{
this
.
conversionGameList
=
res
.
data
.
data
this
.
conversionGameList
=
res
.
data
.
data
;
}
}
setTimeout
(()
=>
{
this
.
contentLoading
=
false
},
2000
)
this
.
contentLoading
=
false
;
},
2000
)
;
}
},
async
conversionChangeOld
(
value
)
{
console
.
log
(
'请求数据'
,
this
.
conversionGameList
)
console
.
log
(
"请求数据"
,
this
.
conversionGameList
);
if
(
this
.
isReqeustData
)
{
return
return
;
}
try
{
this
.
isReqeustData
=
true
this
.
gameLoding
=
true
this
.
isReqeustData
=
true
;
this
.
gameLoding
=
true
;
// 使用 Promise.all 并发请求游戏列表数据
const
promiseList
=
this
.
conversionGameList
.
map
(
async
(
item
,
index
)
=>
{
// 如果已有子项数据则跳过
if
(
this
.
conversionGameList
[
index
].
children
?.
length
>
0
)
{
return
return
;
}
try
{
const
params
=
{
member_id
:
this
.
accountSelect
,
type
:
item
.
game_type
}
const
reslist
=
await
memberExtensionGameList
(
params
)
type
:
item
.
game_type
,
}
;
const
reslist
=
await
memberExtensionGameList
(
params
)
;
if
(
reslist
.
status_code
===
1
)
{
// 使用解构赋值简化数据设置
const
updates
=
{
children
:
reslist
.
data
?.
length
>
0
?
reslist
.
data
:
[],
send_trans_page_id
:
''
,
// 转端要发送的游戏 ID
isReqeustData
:
true
}
send_trans_page_id
:
""
,
// 转端要发送的游戏 ID
isReqeustData
:
true
,
}
;
Object
.
entries
(
updates
).
forEach
(([
key
,
value
])
=>
{
this
.
$set
(
this
.
conversionGameList
[
index
],
key
,
value
)
})
this
.
$set
(
this
.
conversionGameList
[
index
],
key
,
value
)
;
})
;
}
}
catch
(
error
)
{
console
.
error
(
`Failed to fetch game list for index
${
index
}
:`
,
error
)
console
.
error
(
`Failed to fetch game list for index
${
index
}
:`
,
error
);
// 设置空数组作为默认值
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
[])
this
.
$set
(
this
.
conversionGameList
[
index
],
"children"
,
[]);
}
})
})
;
await
Promise
.
all
(
promiseList
)
this
.
handleConversionGameList
()
await
Promise
.
all
(
promiseList
)
;
this
.
handleConversionGameList
()
;
}
catch
(
error
)
{
console
.
error
(
'Failed to fetch conversion game lists:'
,
error
)
console
.
error
(
"Failed to fetch conversion game lists:"
,
error
);
}
finally
{
this
.
gameLoding
=
false
this
.
isReqeustData
=
false
this
.
gameLoding
=
false
;
this
.
isReqeustData
=
false
;
}
},
// 处理转端数据 之前王鑫和冯渊说要隐藏破日开天游戏 至于什么时候放开 没说
...
...
@@ -567,38 +814,72 @@ export default {
if
(
this
.
conversionGameList
.
length
>
0
)
{
this
.
conversionGameList
.
forEach
((
item
,
index
)
=>
{
// 隐藏 h5的游戏 912:神权之战 784:荣耀时刻
if
(
item
.
game_type
===
2
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
child
.
game_id
!==
'912'
&&
child
.
game_id
!=
'784'
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
if
(
item
.
game_type
===
2
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
const
filteredChildren
=
item
.
children
.
filter
((
child
)
=>
{
return
child
.
game_id
!==
"912"
&&
child
.
game_id
!=
"784"
;
});
this
.
$set
(
this
.
conversionGameList
[
index
],
"children"
,
filteredChildren
);
}
// 隐藏安卓游戏 安卓游戏 game_type: 3
if
(
item
.
game_type
===
3
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
if
(
item
.
game_type
===
3
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
// 过滤掉 game_name 为"破日开天"的数据
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
child
.
game_name
!==
'破日开天'
&&
child
.
game_name
!==
'英雄霸业'
&&
child
.
game_id
!==
'741'
&&
child
.
game_id
!==
'912'
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
const
filteredChildren
=
item
.
children
.
filter
((
child
)
=>
{
return
(
child
.
game_name
!==
"破日开天"
&&
child
.
game_name
!==
"英雄霸业"
&&
child
.
game_id
!==
"741"
&&
child
.
game_id
!==
"912"
);
});
this
.
$set
(
this
.
conversionGameList
[
index
],
"children"
,
filteredChildren
);
}
// 隐藏 IOS 游戏 雄霸天下 有两个包 1 个是 691 一个是 819 王鑫说 暂时先隐藏 691 的功能
if
(
item
.
game_type
===
4
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
const
filteredChildren
=
item
.
children
.
filter
(
child
=>
{
return
Number
(
child
.
game_id
)
!==
691
})
this
.
$set
(
this
.
conversionGameList
[
index
],
'children'
,
filteredChildren
)
}
})
console
.
log
(
this
.
conversionGameList
,
'conversionGameList'
)
if
(
item
.
game_type
===
4
&&
item
.
children
&&
item
.
children
.
length
>
0
)
{
const
filteredChildren
=
item
.
children
.
filter
((
child
)
=>
{
return
Number
(
child
.
game_id
)
!==
691
;
});
this
.
$set
(
this
.
conversionGameList
[
index
],
"children"
,
filteredChildren
);
}
});
console
.
log
(
this
.
conversionGameList
,
"conversionGameList"
);
}
},
// 转端展开
async
conversionChange
(
value
)
{
if
(
value
&&
value
.
length
>
0
)
{
const
gameType
=
value
[
value
.
length
-
1
]
const
gameIndex
=
this
.
conversionGameList
.
findIndex
(
item
=>
item
.
game_type
===
gameType
)
if
(
!
this
.
conversionGameList
[
gameIndex
].
children
||
this
.
conversionGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
const
gameType
=
value
[
value
.
length
-
1
];
const
gameIndex
=
this
.
conversionGameList
.
findIndex
(
(
item
)
=>
item
.
game_type
===
gameType
);
if
(
!
this
.
conversionGameList
[
gameIndex
].
children
||
this
.
conversionGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
;
const
params
=
{
page_size
:
200
,
page
:
1
,
...
...
@@ -606,50 +887,60 @@ export default {
weixin_blongs_id
:
this
.
weixin_blongs_id
,
use_type
:
1
,
member_id
:
this
.
accountSelect
,
type
:
this
.
conversionGameList
[
gameIndex
].
game_type
}
const
reslist
=
await
getTransferRecallGameList
(
params
)
this
.
gameLoding
=
false
type
:
this
.
conversionGameList
[
gameIndex
].
game_type
,
}
;
const
reslist
=
await
getTransferRecallGameList
(
params
)
;
this
.
gameLoding
=
false
;
if
(
reslist
.
status_code
===
1
&&
reslist
.
data
.
data
.
length
>
0
)
{
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
'children'
,
reslist
.
data
.
data
)
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
"children"
,
reslist
.
data
.
data
);
}
else
{
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
'children'
,
[])
this
.
$set
(
this
.
conversionGameList
[
gameIndex
],
"children"
,
[]);
}
setTimeout
(()
=>
{
this
.
gameLoding
=
false
},
2000
)
this
.
gameLoding
=
false
;
},
2000
)
;
}
else
{
}
}
},
// 召回的游戏列表
async
sendGameRecallList
()
{
if
(
this
.
recallGameList
.
length
==
0
)
{
this
.
contentLoading
=
true
const
res
=
await
getGameConfig
({
use_type
:
3
})
this
.
contentLoading
=
false
this
.
contentLoading
=
true
;
const
res
=
await
getGameConfig
({
use_type
:
3
})
;
this
.
contentLoading
=
false
;
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
.
length
>
0
)
{
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
item
=>
item
.
game_type
==
6
)
const
ksGameIndex
=
res
.
data
.
data
.
findIndex
(
(
item
)
=>
item
.
game_type
==
6
);
if
(
ksGameIndex
!==
-
1
)
{
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
this
.
recallGameList
=
res
.
data
.
data
res
.
data
.
data
.
splice
(
ksGameIndex
,
1
)
;
this
.
recallGameList
=
res
.
data
.
data
;
}
else
{
this
.
recallGameList
=
res
.
data
.
data
this
.
recallGameList
=
res
.
data
.
data
;
}
}
setTimeout
(()
=>
{
this
.
contentLoading
=
false
},
2000
)
this
.
contentLoading
=
false
;
},
2000
)
;
}
},
// 召回展开
async
recallChange
(
value
)
{
if
(
value
&&
value
.
length
>
0
)
{
const
gameType
=
value
[
value
.
length
-
1
]
const
gameIndex
=
this
.
recallGameList
.
findIndex
(
item
=>
item
.
game_type
===
gameType
)
if
(
!
this
.
recallGameList
[
gameIndex
].
children
||
this
.
recallGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
const
gameType
=
value
[
value
.
length
-
1
];
const
gameIndex
=
this
.
recallGameList
.
findIndex
(
(
item
)
=>
item
.
game_type
===
gameType
);
if
(
!
this
.
recallGameList
[
gameIndex
].
children
||
this
.
recallGameList
[
gameIndex
].
children
.
length
==
0
)
{
this
.
gameLoding
=
true
;
const
params
=
{
// type: 2,
page_size
:
200
,
...
...
@@ -658,86 +949,90 @@ export default {
weixin_blongs_id
:
this
.
weixin_blongs_id
,
use_type
:
3
,
member_id
:
this
.
accountSelect
,
type
:
this
.
recallGameList
[
gameIndex
].
game_type
}
const
reslist
=
await
getTransferRecallGameList
(
params
)
this
.
gameLoding
=
false
type
:
this
.
recallGameList
[
gameIndex
].
game_type
,
}
;
const
reslist
=
await
getTransferRecallGameList
(
params
)
;
this
.
gameLoding
=
false
;
if
(
reslist
.
status_code
===
1
&&
reslist
.
data
.
data
.
length
>
0
)
{
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
'children'
,
reslist
.
data
.
data
)
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
"children"
,
reslist
.
data
.
data
);
}
else
{
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
'children'
,
[])
this
.
$set
(
this
.
recallGameList
[
gameIndex
],
"children"
,
[]);
}
setTimeout
(()
=>
{
this
.
gameLoding
=
false
},
2000
)
this
.
gameLoding
=
false
;
},
2000
)
;
}
else
{
console
.
log
(
'之前请求过了'
)
console
.
log
(
"之前请求过了"
);
}
}
},
showPopover
()
{
this
.
showCreateChannel
=
false
this
.
isReqeustData
=
false
this
.
showCreateChannel
=
false
;
this
.
isReqeustData
=
false
;
},
handlePopover
()
{
this
.
showCreateChannel
=
false
this
.
showCreateChannel
=
false
;
},
handleAccount
()
{
if
(
this
.
bindGameUserList
.
length
>
0
)
{
const
account
=
this
.
bindGameUserList
.
find
(
(
item
)
=>
item
.
member_id
==
this
.
accountSelect
)
)
;
if
(
account
)
{
return
true
return
true
;
}
else
{
return
false
return
false
;
}
}
else
{
return
false
return
false
;
}
},
sendLink
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
this
.
$message
.
warning
(
"当前w账号不满足转端要求,请联系组长处理"
);
return
;
}
console
.
log
(
item
,
'转端发送仅发送链接'
)
const
result
=
this
.
handleAccount
()
console
.
log
(
item
,
"转端发送仅发送链接"
);
const
result
=
this
.
handleAccount
()
;
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
this
.
$message
.
warning
(
"请稍后再试"
);
return
false
;
}
let
str
=
''
let
str
=
""
;
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
str
=
"网页游戏链接:"
;
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
str
=
"安卓游戏链接:"
;
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
str
=
"IOS游戏链接:"
;
}
else
{
}
// const list = [
// { msgtype: 'text', text: { content: `${str}${item.url}` }}
// ]
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
`
,
'text'
)
this
.
markTransScene
(
type
)
item
.
type
=
1
this
.
sendGameLog
(
item
)
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
`
,
"text"
);
this
.
markTransScene
(
type
)
;
item
.
type
=
1
;
this
.
sendGameLog
(
item
)
;
},
500
),
sendPassword
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
this
.
$message
.
warning
(
"当前w账号不满足转端要求,请联系组长处理"
);
return
;
}
console
.
log
(
item
,
'转端仅发送账号密码'
)
const
result
=
this
.
handleAccount
()
console
.
log
(
item
,
"转端仅发送账号密码"
);
const
result
=
this
.
handleAccount
()
;
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
this
.
$message
.
warning
(
"请稍后再试"
);
return
false
;
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
).
username
;
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
// const list = [
...
...
@@ -747,132 +1042,239 @@ export default {
// }
// ]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
'text'
)
this
.
markTransScene
(
type
)
this
.
sendGameLog
(
item
)
this
.
sendChatMessage
(
`账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
"text"
);
this
.
markTransScene
(
type
);
this
.
sendGameLog
(
item
);
})
.
catch
((
err
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
text
:
{
content
:
`账号:
${
username
}
`
}
}
]
{
msgtype
:
"text"
,
text
:
{
content
:
`账号:
${
username
}
`
}
},
]
;
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`账号:
${
username
}
`
,
'text'
)
item
.
type
=
1
this
.
sendGameLog
(
item
)
console
.
log
(
err
)
})
this
.
sendChatMessage
(
`账号:
${
username
}
`
,
"text"
);
item
.
type
=
1
;
this
.
sendGameLog
(
item
)
;
console
.
log
(
err
)
;
})
;
},
500
),
sendMessage
:
throttle
(
function
(
item
,
type
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
this
.
$message
.
warning
(
"当前w账号不满足转端要求,请联系组长处理"
);
return
;
}
const
result
=
this
.
handleAccount
()
const
result
=
this
.
handleAccount
()
;
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
this
.
$message
.
warning
(
"请稍后再试"
);
return
false
;
}
let
str
=
''
let
str
=
""
;
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
str
=
"网页游戏链接:"
;
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
str
=
"安卓游戏链接:"
;
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
str
=
"IOS游戏链接:"
;
}
else
{
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
).
username
;
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
msgtype
:
"text"
,
text
:
{
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
}
}
]
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
,
},
},
];
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
'text'
)
this
.
markTransScene
(
type
)
item
.
type
=
1
this
.
sendGameLog
(
item
)
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
"text"
);
this
.
markTransScene
(
type
);
item
.
type
=
1
;
this
.
sendGameLog
(
item
);
})
.
catch
((
err
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
text
:
{
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
}
}
]
msgtype
:
"text"
,
text
:
{
content
:
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
}
,
}
,
]
;
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
,
'text'
)
this
.
sendGameLog
(
item
)
console
.
log
(
err
)
})
this
.
sendChatMessage
(
`
${
str
}${
item
.
url
}
\n账号:
${
username
}
`
,
"text"
);
this
.
sendGameLog
(
item
)
;
console
.
log
(
err
)
;
})
;
},
500
),
// 发送游戏落地页
startSendPage
(
value
)
{
console
.
log
(
value
,
'value'
)
console
.
log
(
value
,
"value"
);
// this.set_sendSkillMessage(list)
this
.
getMediaId
(
value
,
'image'
)
this
.
getMediaId
(
value
,
"image"
);
},
// 转端发送落地页面
sendDownLoadPage
:
throttleStart
(
function
(
items
,
type
,
index
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
'当前w账号不满足转端要求,请联系组长处理'
)
return
this
.
$message
.
warning
(
"当前w账号不满足转端要求,请联系组长处理"
);
return
;
}
this
.
$set
(
this
.
conversionGameList
[
index
],
"send_trans_page_id"
,
items
.
game_id
);
this
.
showSendPage
=
true
;
},
500
),
// 转端发送游戏二维码
sendDownLoadQrCode
:
throttleStart
(
async
function
(
items
,
type
,
index
)
{
if
(
!
this
.
transMemberStatus
)
{
this
.
$message
.
warning
(
"当前w账号不满足转端要求,请联系组长处理"
);
return
;
}
const
result
=
this
.
handleAccount
();
if
(
!
result
)
{
this
.
$message
.
warning
(
"请稍后再试"
);
return
false
;
}
try
{
this
.
sendLoading
=
true
;
// 获取游戏落地页链接
let
landingPageUrl
=
""
;
if
(
items
.
url
)
{
landingPageUrl
=
items
.
url
;
}
if
(
!
landingPageUrl
)
{
this
.
$message
.
error
(
"没有有效的链接可生成二维码"
);
return
;
}
// 设置二维码内容
this
.
qrCodeValue
=
landingPageUrl
;
// 等待DOM更新,确保二维码已生成
await
this
.
$nextTick
();
// 获取二维码canvas并转换为Blob
const
canvas
=
this
.
$refs
.
qrcode
.
$el
.
querySelector
(
"canvas"
);
if
(
!
canvas
)
{
throw
new
Error
(
"获取二维码canvas失败"
);
}
const
blob
=
await
new
Promise
((
resolve
)
=>
{
canvas
.
toBlob
((
blob
)
=>
{
resolve
(
blob
);
},
"image/png"
);
});
// 创建File对象
blob
.
name
=
"qrcode.png"
;
// 上传图片
const
uploadConfig
=
{
dir
:
"/company_wx/service/avatars/"
,
};
const
uploadResult
=
await
this
.
uploading
(
blob
,
uploadConfig
);
debugger
;
if
(
uploadResult
.
data
)
{
// 发送上传后的链接
// const list = [
// {
// msgtype: "image",
// image: {
// picurl: uploadResult.data,
// },
// },
// ];
// const image = {
// picurl: uploadResult.data,
// };
// console.log(image, 12312321);
this
.
sendChatMessage
(
uploadResult
.
data
,
"image"
);
this
.
markTransScene
(
type
);
items
.
type
=
1
;
this
.
sendGameLog
(
items
);
this
.
$message
.
success
(
"二维码发送成功"
);
}
else
{
throw
new
Error
(
"上传失败"
);
}
}
catch
(
error
)
{
console
.
error
(
"发送二维码失败:"
,
error
);
this
.
$message
.
error
(
"发送二维码失败,请重试"
);
}
finally
{
this
.
sendLoading
=
false
;
}
this
.
$set
(
this
.
conversionGameList
[
index
],
'send_trans_page_id'
,
items
.
game_id
)
this
.
showSendPage
=
true
},
500
),
// 转端标记
async
markTransScene
(
type
)
{
const
data
=
{
external_userid
:
this
.
chatUserInfo
.
external_userid
,
trans_scene
:
type
}
const
res
=
await
markTransScene
(
data
)
trans_scene
:
type
,
}
;
const
res
=
await
markTransScene
(
data
)
;
if
(
res
.
status_code
==
1
)
{
console
.
log
(
'标记转端成功'
)
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!==
''
&&
this
.
chatUserInfo
.
trans_scene
!=
type
)
{
this
.
chatUserInfo
.
trans_scene
=
type
console
.
log
(
"标记转端成功"
);
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!==
""
&&
this
.
chatUserInfo
.
trans_scene
!=
type
)
{
this
.
chatUserInfo
.
trans_scene
=
type
;
}
}
},
getZqCserWxBelong
()
{
return
new
Promise
(
async
(
resolve
,
reject
)
=>
{
const
data
=
{
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
}
const
res
=
await
getZqCserWxBelong
(
data
)
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
,
}
;
const
res
=
await
getZqCserWxBelong
(
data
)
;
if
(
res
.
status_code
===
1
&&
res
.
data
.
data
)
{
this
.
belongList
=
res
.
data
.
data
.
map
(
item
=>
{
this
.
belongList
=
res
.
data
.
data
.
map
(
(
item
)
=>
{
return
{
value
:
item
.
value
,
label
:
item
.
label
&&
item
.
label
.
split
(
'-'
)[
0
]
?
item
.
label
.
split
(
'-'
)[
0
]
:
''
}
})
resolve
(
this
.
belongList
)
label
:
item
.
label
&&
item
.
label
.
split
(
"-"
)[
0
]
?
item
.
label
.
split
(
"-"
)[
0
]
:
""
,
};
});
resolve
(
this
.
belongList
);
}
else
{
this
.
$message
.
warning
(
'暂无绑定项目,请先绑定项目'
)
reject
(
null
)
this
.
$message
.
warning
(
"暂无绑定项目,请先绑定项目"
);
reject
(
null
)
;
}
})
})
;
},
// 一键发送任务链接
async
sendTaskChannel
()
{
let
groupItem
=
{}
let
belonsList
=
{}
const
group
=
await
getZqCserGroup
({
zq_user_id
:
Number
(
this
.
userInfo
.
id
)
})
belonsList
=
await
this
.
getZqCserWxBelong
()
if
(
group
.
status_code
==
1
&&
group
.
data
.
data
.
length
>
0
&&
belonsList
&&
belonsList
.
length
>
0
)
{
groupItem
=
group
.
data
.
data
[
0
]
const
group_name_list
=
groupItem
.
label
.
split
(
'-'
)
let
groupItem
=
{};
let
belonsList
=
{};
const
group
=
await
getZqCserGroup
({
zq_user_id
:
Number
(
this
.
userInfo
.
id
),
});
belonsList
=
await
this
.
getZqCserWxBelong
();
if
(
group
.
status_code
==
1
&&
group
.
data
.
data
.
length
>
0
&&
belonsList
&&
belonsList
.
length
>
0
)
{
groupItem
=
group
.
data
.
data
[
0
];
const
group_name_list
=
groupItem
.
label
.
split
(
"-"
);
const
data
=
{
blongs_name
:
belonsList
[
0
].
label
,
member_id
:
this
.
accountSelect
,
...
...
@@ -880,27 +1282,27 @@ export default {
use_user_name
:
this
.
userInfo
.
username
,
group_id
:
groupItem
.
value
,
group_name
:
group_name_list
[
group_name_list
.
length
-
1
],
game_type
:
this
.
chatUserInfo
.
trans_scene
||
''
}
this
.
sendLoading
=
true
game_type
:
this
.
chatUserInfo
.
trans_scene
||
""
,
}
;
this
.
sendLoading
=
true
;
try
{
setTimeout
(()
=>
{
this
.
sendLoading
=
false
},
3000
)
const
res
=
await
quickRecallChannelLink
(
data
)
this
.
sendLoading
=
false
this
.
sendLoading
=
false
;
},
3000
)
;
const
res
=
await
quickRecallChannelLink
(
data
)
;
this
.
sendLoading
=
false
;
if
(
res
.
status_code
==
1
)
{
this
.
sendGameInfoSave
=
res
.
data
.
data
this
.
handleSendType
(
res
.
data
.
data
)
this
.
$message
.
success
(
res
.
msg
)
this
.
sendGameInfoSave
=
res
.
data
.
data
;
this
.
handleSendType
(
res
.
data
.
data
)
;
this
.
$message
.
success
(
res
.
msg
)
;
}
}
catch
(
error
)
{
this
.
$message
.
error
(
'获取召回链接失败,请重新再试'
)
this
.
sendLoading
=
false
this
.
$message
.
error
(
"获取召回链接失败,请重新再试"
);
this
.
sendLoading
=
false
;
}
}
else
{
this
.
$message
.
error
(
'获取分组失败,请到掌权添加分组'
)
return
this
.
$message
.
error
(
"获取分组失败,请到掌权添加分组"
);
return
;
}
},
/**
...
...
@@ -917,16 +1319,17 @@ export default {
*/
handleSendType
(
data
)
{
console
.
log
(
data
,
'获取一键发送的信息'
)
console
.
log
(
data
,
"获取一键发送的信息"
);
// 转端发送优先逻辑 不需要了 现在发送当前会话框选中的账号对应的注册游戏
data
?.
game_data
?.
game_type
?
this
.
chatUserInfo
.
trans_scene
=
data
.
game_data
.
game_type
:
''
data
?.
game_data
?.
game_type
?
(
this
.
chatUserInfo
.
trans_scene
=
data
.
game_data
.
game_type
)
:
""
;
if
(
this
.
chatUserInfo
.
trans_scene
&&
this
.
chatUserInfo
.
trans_scene
!=
1
)
{
this
.
sendCreateChannel
(
data
.
game_data
,
data
.
game_data
.
game_type
)
this
.
sendCreateChannel
(
data
.
game_data
,
data
.
game_data
.
game_type
)
;
}
else
{
// 没有转端标记过,发送小程序链接 判断标题和封面是否存在 存在发小程序卡片 不存在发二维码
if
(
data
.
share_data
.
share_title
&&
data
.
share_data
.
share_img
)
{
const
miniprogramInfo
=
{
const
miniprogramInfo
=
{
appid
:
data
.
share_data
.
app_id
,
rawid
:
data
.
share_data
.
raw_id
,
channle_id
:
data
.
share_data
.
channel_key
,
...
...
@@ -934,182 +1337,210 @@ export default {
title
:
data
.
share_data
.
share_title
,
platform
:
27
,
page
:
data
.
share_data
.
page
,
imgUrl
:
data
.
share_data
.
share_img
}
imgUrl
:
data
.
share_data
.
share_img
,
}
;
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
miniprogramInfo
,
'miniprogram'
)
const
game_data
=
this
.
$clone
(
data
.
game_data
)
game_data
.
type
=
3
console
.
log
(
game_data
,
'data----------'
)
this
.
sendGameLog
(
game_data
)
this
.
sendChatMessage
(
miniprogramInfo
,
"miniprogram"
);
const
game_data
=
this
.
$clone
(
data
.
game_data
)
;
game_data
.
type
=
3
;
console
.
log
(
game_data
,
"data----------"
);
this
.
sendGameLog
(
game_data
)
;
}
else
{
// this.set_sendSkillMessage(list)
this
.
getMediaId
(
data
.
game_data
.
game_url
,
'image'
)
this
.
sendGameLog
(
data
.
game_data
)
this
.
getMediaId
(
data
.
game_data
.
game_url
,
"image"
);
this
.
sendGameLog
(
data
.
game_data
)
;
}
}
this
.
recallChannelSeq
(
data
)
this
.
recallChannelSeq
(
data
)
;
},
// 召回染色
async
recallChannelSeq
(
data
)
{
const
param
=
{
game_id
:
data
.
game_data
.
game_id
,
member_id
:
this
.
accountSelect
,
key
:
data
.
game_data
.
channel_key
||
data
.
share_data
.
channel_key
}
const
res
=
await
recallChannelSeq
(
param
)
key
:
data
.
game_data
.
channel_key
||
data
.
share_data
.
channel_key
,
}
;
const
res
=
await
recallChannelSeq
(
param
)
;
},
sendCreateChannel
:
throttle
(
function
(
item
,
type
)
{
const
result
=
this
.
handleAccount
()
const
result
=
this
.
handleAccount
()
;
if
(
!
result
)
{
this
.
$message
.
warning
(
'请稍后再试'
)
return
false
this
.
$message
.
warning
(
"请稍后再试"
);
return
false
;
}
let
str
=
''
let
str
=
""
;
if
(
type
==
2
)
{
str
=
'网页游戏链接:'
str
=
"网页游戏链接:"
;
}
else
if
(
type
==
3
)
{
str
=
'安卓游戏链接:'
str
=
"安卓游戏链接:"
;
}
else
if
(
type
==
4
)
{
str
=
'IOS游戏链接:'
str
=
"IOS游戏链接:"
;
}
else
{
}
const
username
=
this
.
bindGameUserList
.
find
(
(
items
)
=>
items
.
member_id
==
this
.
accountSelect
).
username
passwardEncryption
({
member_id
:
this
.
accountSelect
})
.
then
((
res
)
=>
{
).
username
;
passwardEncryption
({
member_id
:
this
.
accountSelect
}).
then
((
res
)
=>
{
const
list
=
[
{
msgtype
:
'text'
,
msgtype
:
"text"
,
// 一键发送渠道任务相关的参数
taskInfo
:
{
task_id
:
this
.
chatUser
.
task_id
,
game_id
:
item
.
game_id
,
member_id
:
this
.
accountSelect
,
channel_key
:
item
.
channel_key
channel_key
:
item
.
channel_key
,
},
text
:
{
content
:
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
}
}
]
key
:
res
.
data
.
key
,
iv
:
res
.
data
.
iv
,
},
},
];
// 这里需要特殊处理,因为有taskInfo参数
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
'text'
)
item
.
type
=
3
this
.
sendGameLog
(
item
)
})
this
.
sendChatMessage
(
`
${
str
}${
item
.
game_url
}
\n账号:
${
username
}
\n密码:
${
res
.
data
.
password
}
`
,
"text"
);
item
.
type
=
3
;
this
.
sendGameLog
(
item
);
});
},
500
),
async
getLandingPageConfig
(
items
,
item
)
{
try
{
const
params
=
{
main_game_id
:
items
.
main_game_id
,
weixin_blongs_id
:
items
.
weixin_blongs_id
,
type
:
items
.
game_type
==
1
?
2
:
items
.
game_type
==
3
||
items
.
game_type
==
4
?
1
:
''
}
const
res
=
await
getLandingPageConfig
(
params
)
type
:
items
.
game_type
==
1
?
2
:
items
.
game_type
==
3
||
items
.
game_type
==
4
?
1
:
""
,
};
const
res
=
await
getLandingPageConfig
(
params
);
if
(
res
.
status_code
===
1
&&
res
.
data
)
{
return
{
data
:
res
.
data
,
game_type
:
items
.
game_type
}
game_type
:
items
.
game_type
,
}
;
}
else
{
return
null
}
}
catch
(
error
)
{
return
null
;
}
}
catch
(
error
)
{}
},
// 处理微信小程序游戏
handleWechatMiniGame
(
items
,
item
,
index
)
{
try
{
this
.
selectedWxGameList
=
[]
this
.
selectedWxGameList
=
[]
;
// 直接替换微信小游戏列表(单选)
this
.
selectedWxGameList
=
[
item
]
this
.
selectedWxGameList
[
0
].
send_trans_game_id
=
items
.
id
this
.
selectedWxGameList
[
0
].
send_trans_game_info
=
items
this
.
showWxGameDrawer
=
true
return
true
this
.
selectedWxGameList
=
[
item
]
;
this
.
selectedWxGameList
[
0
].
send_trans_game_id
=
items
.
id
;
this
.
selectedWxGameList
[
0
].
send_trans_game_info
=
items
;
this
.
showWxGameDrawer
=
true
;
return
true
;
}
catch
(
error
)
{
console
.
error
(
'处理微信小游戏失败:'
,
error
)
return
false
console
.
error
(
"处理微信小游戏失败:"
,
error
);
return
false
;
}
},
// 过滤游戏列表的公共方法
filterGameList
(
sourceGame
,
targetList
)
{
if
(
!
sourceGame
||
!
targetList
?.
length
)
return
[]
if
(
!
sourceGame
||
!
targetList
?.
length
)
return
[]
;
return
targetList
.
filter
(
game
=>
return
targetList
.
filter
(
(
game
)
=>
game
.
weixin_blongs_id
===
sourceGame
.
weixin_blongs_id
&&
game
.
main_game_id
===
sourceGame
.
main_game_id
)
)
;
},
handleAndroidList
(
items
,
item
)
{
const
androidGameList
=
this
.
regGameList
.
find
(
item
=>
item
.
label
.
includes
(
'安卓'
))
if
(
androidGameList
&&
androidGameList
.
children
&&
androidGameList
.
children
.
length
>
0
)
{
androidGameList
.
children
=
this
.
filterGameList
(
items
,
androidGameList
.
children
)
const
androidGameList
=
this
.
regGameList
.
find
((
item
)
=>
item
.
label
.
includes
(
"安卓"
)
);
if
(
androidGameList
&&
androidGameList
.
children
&&
androidGameList
.
children
.
length
>
0
)
{
androidGameList
.
children
=
this
.
filterGameList
(
items
,
androidGameList
.
children
);
}
else
{
androidGameList
.
children
=
[]
androidGameList
.
children
=
[]
;
}
androidGameList
.
game_type
=
3
androidGameList
.
game_type
=
3
;
if
(
items
.
game_type
==
3
)
{
androidGameList
.
android_game_id
=
items
.
id
androidGameList
.
android_game_info
=
items
androidGameList
.
android_game_id
=
items
.
id
;
androidGameList
.
android_game_info
=
items
;
}
return
androidGameList
return
androidGameList
;
},
handleIosList
(
items
,
item
)
{
const
IOSGameList
=
this
.
regGameList
.
find
(
item
=>
item
.
label
.
includes
(
'IOS'
||
'ios'
))
IOSGameList
.
game_type
=
4
if
(
IOSGameList
&&
IOSGameList
.
children
&&
IOSGameList
.
children
.
length
>
0
)
{
IOSGameList
.
children
=
this
.
filterGameList
(
items
,
IOSGameList
.
children
)
const
IOSGameList
=
this
.
regGameList
.
find
((
item
)
=>
item
.
label
.
includes
(
"IOS"
||
"ios"
)
);
IOSGameList
.
game_type
=
4
;
if
(
IOSGameList
&&
IOSGameList
.
children
&&
IOSGameList
.
children
.
length
>
0
)
{
IOSGameList
.
children
=
this
.
filterGameList
(
items
,
IOSGameList
.
children
);
}
else
{
IOSGameList
.
children
=
[]
IOSGameList
.
children
=
[]
;
}
if
(
items
.
game_type
==
4
)
{
IOSGameList
.
ios_game_id
=
items
.
id
IOSGameList
.
ios_game_info
=
items
IOSGameList
.
ios_game_id
=
items
.
id
;
IOSGameList
.
ios_game_info
=
items
;
}
return
IOSGameList
return
IOSGameList
;
},
// 处理安卓 IOS 游戏
handleAppGameList
(
items
,
item
,
index
)
{
this
.
showAppGameDrawer
=
true
const
androidGameList
=
this
.
handleAndroidList
(
items
,
item
)
const
IOSGameList
=
this
.
handleIosList
(
items
,
item
)
androidGameList
?
this
.
selectedAppGameList
.
push
(
androidGameList
)
:
''
IOSGameList
?
this
.
selectedAppGameList
.
push
(
IOSGameList
)
:
''
console
.
log
(
this
.
selectedAppGameList
,
'selectedAppGameList'
)
this
.
showAppGameDrawer
=
true
;
const
androidGameList
=
this
.
handleAndroidList
(
items
,
item
)
;
const
IOSGameList
=
this
.
handleIosList
(
items
,
item
)
;
androidGameList
?
this
.
selectedAppGameList
.
push
(
androidGameList
)
:
""
;
IOSGameList
?
this
.
selectedAppGameList
.
push
(
IOSGameList
)
:
""
;
console
.
log
(
this
.
selectedAppGameList
,
"selectedAppGameList"
);
},
// 主方法
async
handleGameType
(
items
,
item
,
type
,
index
)
{
if
((
items
.
game_type
==
1
||
items
.
game_type
==
3
||
items
.
game_type
==
4
)
&&
items
.
main_game_id
&&
items
.
weixin_blongs_id
)
{
const
result
=
await
this
.
getLandingPageConfig
(
items
,
item
)
if
(
(
items
.
game_type
==
1
||
items
.
game_type
==
3
||
items
.
game_type
==
4
)
&&
items
.
main_game_id
&&
items
.
weixin_blongs_id
)
{
const
result
=
await
this
.
getLandingPageConfig
(
items
,
item
);
if
(
result
&&
result
.
data
?.
data
?.
tag
)
{
if
(
items
.
game_type
==
1
)
{
// 处理微信小程序游戏
this
.
handleWechatMiniGame
(
items
,
item
,
index
)
this
.
handleWechatMiniGame
(
items
,
item
,
index
)
;
}
else
{
// 处理安卓/iOS游戏
this
.
handleAppGameList
(
items
,
item
,
index
)
this
.
handleAppGameList
(
items
,
item
,
index
)
;
}
}
else
{
this
.
sendChannelGame
(
items
,
item
)
this
.
sendChannelGame
(
items
,
item
)
;
}
}
else
{
this
.
sendChannelGame
(
items
,
item
)
this
.
sendChannelGame
(
items
,
item
)
;
}
},
// 不是小游戏 安卓 IOS 游戏处理
noH5AndroidIOSGame
(
items
,
item
)
{
this
.
sendChannelGame
(
items
,
item
)
this
.
sendChannelGame
(
items
,
item
)
;
},
// 小游戏游戏确认
async
handleWxGameConfirm
(
value
)
{
console
.
log
(
value
,
'value'
)
console
.
log
(
value
,
"value"
);
// const list = [
// {
// msgtype: 'image',
...
...
@@ -1119,17 +1550,17 @@ export default {
// }
// ]
// this.set_sendSkillMessage(list)
this
.
getMediaId
(
value
,
'image'
)
this
.
getMediaId
(
value
,
"image"
);
},
SendTransAppGameClose
()
{
this
.
selectedAppGameList
=
[]
this
.
selectedAppGameList
=
[]
;
},
SendTransWxGameClose
()
{
this
.
selectedWxGameList
=
[]
this
.
selectedWxGameList
=
[]
;
},
// 安卓或者 IOS 游戏处理
handleAppGameConfirm
(
data
)
{
this
.
selectedAppGameList
=
[]
this
.
selectedAppGameList
=
[]
;
// const list = [
// {
// msgtype: 'text',
...
...
@@ -1139,20 +1570,23 @@ export default {
// }
// ]
// this.set_sendSkillMessage(list)
this
.
sendChatMessage
(
`游戏地址:
${
data
.
landing_page_url
}
\n账号:
${
data
.
username
}
\n密码:
${
data
.
password
}
`
,
'text'
)
this
.
sendChatMessage
(
`游戏地址:
${
data
.
landing_page_url
}
\n账号:
${
data
.
username
}
\n密码:
${
data
.
password
}
`
,
"text"
);
},
async
getMediaId
(
picurl
)
{
// 发送图片作为链接消息
if
(
picurl
)
{
this
.
sendChatMessage
(
picurl
,
'image'
)
this
.
sendChatMessage
(
picurl
,
"image"
);
}
else
{
// 如果没有图片URL,提示用户
this
.
$message
.
error
(
'图片链接不存在,无法发送'
)
this
.
$message
.
error
(
"图片链接不存在,无法发送"
);
}
},
}
}
}
,
}
;
</
script
>
<
style
lang=
"scss"
scoped
>
.sendGameContent
{
...
...
@@ -1181,7 +1615,7 @@ export default {
}
.channelLoading
{
color
:
#3491
FA
;
color
:
#3491
fa
;
font-size
:
16px
;
text-align
:
center
;
padding
:
20px
;
...
...
@@ -1246,8 +1680,8 @@ export default {
}
::v-deep
.el-button
{
background
:
#3491
FA
;
border-color
:
#3491
FA
;
background
:
#3491
fa
;
border-color
:
#3491
fa
;
color
:
#fff
;
font-size
:
14px
;
height
:
32px
;
...
...
@@ -1268,8 +1702,8 @@ export default {
::v-deep
.el-popover__reference
{
.el-button
{
background
:
#3491
FA
;
border-color
:
#3491
FA
;
background
:
#3491
fa
;
border-color
:
#3491
fa
;
color
:
#fff
;
&:hover
{
...
...
@@ -1296,7 +1730,7 @@ export default {
font-size
:
14px
;
&:focus
{
border-color
:
#3491
FA
;
border-color
:
#3491
fa
;
}
}
...
...
@@ -1317,20 +1751,20 @@ export default {
/* 当转端按钮处于激活状态时保持自定义样式 */
::v-deep
.el-radio-button.is-active
{
.el-radio-button__inner
{
background
:
#
E8F7FF
;
border-color
:
#3491
FA
;
border
:
1px
solid
#3491
FA
;
color
:
#3491
FA
;
background
:
#
e8f7ff
;
border-color
:
#3491
fa
;
border
:
1px
solid
#3491
fa
;
color
:
#3491
fa
;
box-shadow
:
none
;
}
}
/* 统一collapse样式 */
::v-deep
.el-collapse-item__header
{
background-color
:
#
F7F8FA
;
background-color
:
#
f7f8fa
;
.el-collapse-item__arrow
{
color
:
#3491
FA
;
color
:
#3491
fa
;
}
}
}
...
...
@@ -1345,7 +1779,7 @@ export default {
}
.sendLink
:hover
{
color
:
#3491
FA
;
color
:
#3491
fa
;
background-color
:
#f5f7fa
;
}
</
style
>
src/views/components/roleInfo/roleInfoPanel.vue
浏览文件 @
5e642f8d
...
...
@@ -6,23 +6,69 @@
<p
class=
"textInfo"
>
角色充值金额信息会有5-10分钟延迟,请以订单信息为准
</p>
<el-button
type=
"primary"
size=
"small"
class=
"h-[30px]"
@
click
.
stop=
"appealLayer()"
>
申诉
</el-button>
</div>
<el-collapse
v-model=
"collapseActive"
@
change=
"handleChange"
>
<div
v-for=
"(items, indexs) in roleList"
:key=
"indexs"
class=
"contentItem mb-[10px]"
>
<el-button
type=
"primary"
size=
"small"
class=
"h-[30px]"
@
click
.
stop=
"appealLayer()"
>
申诉
</el-button
>
</div>
<el-collapse
v-model=
"collapseActive"
>
<div
v-for=
"(items, indexs) in roleList"
:key=
"indexs"
class=
"contentItem"
>
<div
class=
"title"
></div>
<el-collapse-item
:name=
"items.id"
>
<el-collapse-item
:name=
"items.
role_
id"
>
<template
slot=
"title"
>
<!--
<div
class=
"collapseTitle rowFlex columnCenter spaceBetween"
>
<p
class=
"hidden"
>
{{
items
.
role_name
}}
-
{{
items
.
server_name
}}
-
{{
items
.
recharge_total
?
items
.
recharge_total
+
'元'
:
'0元'
}}
</p>
<el-button
type=
"primary"
size=
"mini"
class=
"collapseTitleBtn"
@
click
.
stop=
"appealLayer(items)"
>
申诉
</el-button>
</div>
-->
<div
class=
"flex w-[100%] justify-between"
>
<div
class=
"py-[10px]"
>
<div
class=
"grid grid-cols-7 w-[100%] leading-[24px] gap-[8px] py-[12px]"
>
<div
class=
"col-span-3"
>
<div
class=
"text-[#323335] text-[16px] font-medium group hover:text-[#409EFF]"
>
<span
class=
"flex items-center"
>
{{
items
.
role_name
}}
<i
class=
"group-hover:visible invisible"
v-copy=
"
`$
{items.role_name}-${items.server_name}-${
items.recharge_total || 0
}元`
"
>
</i>
</span>
</div>
<div
class=
"text-[#4E5969] text-[14px]"
>
<span>
区服:
</span><span>
{{
items
.
server_name
}}
</span>
</div>
</div>
<div
class=
"col-span-2"
>
<div
class=
"text-[#4E5969] text-[14px]"
>
充值金额
</div>
<div
class=
"text-[#4E5969] text-[16px]"
>
<!--
<span>
{{
items
.
recharge_total
?
items
.
recharge_total
+
'元'
:
'0元'
}}
</span>
-->
<span>
{{
items
.
recharge_total
||
0
}}
</span>
</div>
</div>
<div
class=
"col-span-2"
@
click
.
stop=
"
() =>
recentActivitiesPopupInstance.instance.open(
items.role_id,
`$
{items.role_name}-${items.server_name}-${items.recharge_total}元`
)
"
>
<div
class=
"text-[#4E5969] text-[14px]"
>
近期要开
</div>
<el-button
type=
"text"
class=
"text-[16px] font-medium"
>
{{
getNumRoleIdList
(
items
.
role_id
)
}}
</el-button>
</div>
<!--
<div
class=
"py-[10px]"
>
<div
class=
"leading-[25px]"
>
<span>
角色名:
</span><span>
{{
items
.
role_name
}}
</span>
</div>
...
...
@@ -30,46 +76,38 @@
<span>
区服:
</span><span>
{{
items
.
server_name
}}
</span>
</div>
<div
class=
"leading-[25px]"
>
<span>
充值金额:
</span><span>
{{
items
.
recharge_total
?
items
.
recharge_total
+
'元'
:
'0元'
}}
</span>
<span>
充值金额:
</span><span>
{{
items
.
recharge_total
?
items
.
recharge_total
+
'元'
:
'0元'
}}
</span>
<vip-level
:role-info=
"items"
/>
</div>
</div>
<div
class=
"flex-1 h-0 flex justify-end items-start pt-[10px]"
>
<el-badge
:value=
"getNumRoleIdList(items.role_id)"
class=
"text-center leading-[0] ml-[8px]"
>
<el-button
type=
"primary"
size=
"mini"
@
click
.
stop=
"
() =>
recentActivitiesPopupInstance.instance.open(
items.role_id,
`$
{items.role_name}-${items.server_name}-${items.recharge_total}元`
)
">
近期要开
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click
.
stop=
"() => recentActivitiesPopupInstance.instance.open(items.role_id, `$
{items.role_name}-${items.server_name}-${items.recharge_total}元`)">近期要开
</el-button>
</el-badge>
</div>
</div>
-->
</div>
</
template
>
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<div
class=
"w-full border-t-[1px] border-t-[#E5E7EB] border-dashed"
>
<!-- <div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">区服:</span>
<p class="text">{{ items.server_name }}</p>
</div>
</div>
</div>
-->
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<div
class=
"rowFlex columnCenter"
>
<span
class=
"label"
>
合区区服:
</span>
<p
class=
"text"
>
{{ items.merge_server_name }}
</p>
</div>
</div>
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<!--
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">角色名称:</span>
<p class="text">{{ items.role_name }}</p>
</div>
</div>
</div>
-->
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<div
class=
"rowFlex columnCenter"
>
<span
class=
"label"
>
等级:
</span>
...
...
@@ -82,16 +120,16 @@
<p
class=
"text"
>
{{ items.combat_num }}
</p>
</div>
</div>
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<!--
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">充值金额:</span>
<p class="text">{{ items.recharge_total }}</p>
</div>
</div>
</div>
-->
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<div
class=
"rowFlex columnCenter"
>
<span
class=
"label"
>
转端审核:
</span>
<p
class=
"text"
>
{{ items.trans_status_name || '无'
}}
</p>
<p
class=
"text"
>
{{ items.trans_status_name || "无"
}}
</p>
</div>
</div>
<div
class=
"item rowFlex columnCenter spaceBetween"
>
...
...
@@ -106,7 +144,7 @@
<p
class=
"text"
>
{{
$moment(items.last_login_time * 1000).format(
'YYYY-MM-DD HH:mm:ss'
"YYYY-MM-DD HH:mm:ss"
)
}}
</p>
...
...
@@ -118,7 +156,7 @@
<p
class=
"text"
>
{{
$moment(items.create_time * 1000).format(
'YYYY-MM-DD HH:mm:ss'
"YYYY-MM-DD HH:mm:ss"
)
}}
</p>
...
...
@@ -130,29 +168,48 @@
<p
class=
"text"
>
{{ items.create_role_day }}天
</p>
</div>
</div>
<div
class=
"item rowFlex columnCenter spaceBetween"
>
<div
class=
"rowFlex columnCenter"
>
<span
class=
"label"
>
开/合服天数:
</span>
<p
class=
"text"
v-if=
"items.server_day"
>
{{ items?.server_day }}天
</p>
</div>
</div>
</div>
</el-collapse-item>
</div>
</el-collapse>
</div>
<div
v-else-if=
"!loading && roleList.length == 0"
class=
"noContent rowFlex allCenter"
>
<noContent
title=
"暂无数据"
description=
"当前没有任何数据,请稍后再试或联系管理员"
/>
<div
v-else-if=
"!loading && roleList.length == 0"
class=
"noContent rowFlex allCenter"
>
<noContent
title=
"暂无数据"
description=
"当前没有任何数据,请稍后再试或联系管理员"
/>
</div>
</div>
<appeal
v-if=
"showAppeal"
:show
.
sync=
"showAppeal"
:appeal-info=
"appealInfo"
/>
<appeal
v-if=
"showAppeal"
:show
.
sync=
"showAppeal"
:appeal-info=
"appealInfo"
/>
</div>
</template>
<
script
>
import
{
mapState
,
mapMutations
,
mapActions
}
from
'vuex'
;
import
{
getRoleHoLo
,
marketingRoleGrade
}
from
'@/api/game'
;
import
noContent
from
'@/components/noContent.vue'
;
import
appeal
from
'./layer/appeal.vue'
;
import
watchMember
from
'@/mixins/watchMember'
;
import
{
createDetails
}
from
'@/views/popup/RecentActivitiesPopup/index.js'
;
import
{
createRoleRecentActivityNotPushNum
}
from
'@/views/hooks/useGetCount.js'
;
import
vipLevel
from
'@/views/userInfo/components/gameInfo/vipLevel.vue'
;
import
{
mapState
,
mapMutations
,
mapActions
}
from
"vuex"
;
import
{
getRoleHoLo
,
marketingRoleGrade
,
getServerDayApi
}
from
"@/api/game"
;
import
noContent
from
"@/components/noContent.vue"
;
import
appeal
from
"./layer/appeal.vue"
;
import
watchMember
from
"@/mixins/watchMember"
;
import
{
createDetails
}
from
"@/views/popup/RecentActivitiesPopup/index.js"
;
import
{
createRoleRecentActivityNotPushNum
}
from
"@/views/hooks/useGetCount.js"
;
import
vipLevel
from
"@/views/userInfo/components/gameInfo/vipLevel.vue"
;
export
default
{
name
:
'roleInfo'
,
name
:
"roleInfo"
,
components
:
{
noContent
,
appeal
,
...
...
@@ -162,7 +219,7 @@ export default {
return
{
collapseActive
:
[],
roleList
:
[],
nowTime
:
''
,
nowTime
:
""
,
loading
:
false
,
showAppeal
:
false
,
appealInfo
:
{},
...
...
@@ -178,7 +235,14 @@ export default {
};
},
computed
:
{
...
mapState
(
'game'
,
[
'accountSelect'
]),
...
mapState
(
"game"
,
[
"accountSelect"
]),
},
watch
:
{
collapseActive
(
newVal
,
oldVal
)
{
if
(
newVal
.
length
>
0
)
{
this
.
handleChange
(
newVal
.
filter
((
item
)
=>
!
oldVal
.
includes
(
item
)));
}
},
},
mixins
:
[
watchMember
],
mounted
()
{
...
...
@@ -208,29 +272,42 @@ export default {
this
);
},
async
handleRoleListLevel
(
roleList
)
{
async
handleRoleListLevel
(
roleList
)
{
try
{
const
role_id_list
=
roleList
.
map
((
item
)
=>
item
.
role_id
)
const
res
=
await
marketingRoleGrade
({
role_id
:
role_id_list
})
if
(
res
.
status_code
==
1
&&
res
?.
data
?.
data
?.
length
>
0
)
{
const
levelList
=
res
.
data
.
data
const
role_id_list
=
roleList
.
map
((
item
)
=>
item
.
role_id
);
const
res
=
await
marketingRoleGrade
({
role_id
:
role_id_list
});
if
(
res
.
status_code
==
1
&&
res
?.
data
?.
data
?.
length
>
0
)
{
const
levelList
=
res
.
data
.
data
;
roleList
.
forEach
((
item
)
=>
{
const
levelItem
=
levelList
.
find
((
level
)
=>
level
.
role_id
==
item
.
role_id
)
if
(
levelItem
){
item
.
vip_level
=
levelItem
.
vip_level
const
levelItem
=
levelList
.
find
(
(
level
)
=>
level
.
role_id
==
item
.
role_id
);
if
(
levelItem
)
{
item
.
vip_level
=
levelItem
.
vip_level
;
}
})
});
}
}
catch
(
error
)
{
console
.
log
(
error
)
console
.
log
(
error
);
}
finally
{
this
.
roleList
=
roleList
.
sort
((
a
,
b
)
=>
{
return
Number
(
b
.
recharge_total
)
-
Number
(
a
.
recharge_total
)
})
return
Number
(
b
.
recharge_total
)
-
Number
(
a
.
recharge_total
);
});
}
},
handleChange
()
{
},
async
handleChange
(
v
)
{
const
index
=
this
.
roleList
.
findIndex
(
(
item
)
=>
v
.
includes
(
item
.
role_id
)
&&
!
item
.
server_day
);
if
(
index
!==
-
1
)
{
const
res
=
await
getServerDayApi
({
role_id
:
this
.
roleList
[
index
].
role_id
,
});
this
.
roleList
[
index
].
server_day
=
res
.
data
.
data
?.
server_day
;
this
.
roleList
=
[...
this
.
roleList
];
}
},
memberChange
()
{
this
.
requestRoleList
();
},
...
...
@@ -240,15 +317,15 @@ export default {
this
.
showAppeal
=
true
;
},
requestRoleList
()
{
if
(
this
.
accountSelect
===
''
)
{
this
.
$message
.
warning
(
'暂无关联的账号,请先去关联账号!'
);
if
(
this
.
accountSelect
===
""
)
{
this
.
$message
.
warning
(
"暂无关联的账号,请先去关联账号!"
);
return
false
;
}
this
.
loading
=
true
;
const
data
=
{
api_search_name
:
''
,
api_search_name
:
""
,
member_id
:
this
.
accountSelect
,
search_type
:
'list'
,
search_type
:
"list"
,
...
this
.
pageInfo
,
};
getRoleHoLo
(
data
).
then
(
...
...
@@ -256,7 +333,7 @@ export default {
this
.
loading
=
false
;
if
(
res
.
status_code
==
1
)
{
if
(
res
.
data
.
data
.
length
>
0
)
{
this
.
handleRoleListLevel
(
res
.
data
.
data
)
this
.
handleRoleListLevel
(
res
.
data
.
data
)
;
}
else
{
this
.
roleList
=
[];
}
...
...
@@ -396,11 +473,12 @@ export default {
}
::v-deep
.el-collapse-item
{
margin-bottom
:
20
px
;
margin-bottom
:
1
px
;
}
::v-deep
.el-collapse-item__content
{
padding-bottom
:
10px
;
//
padding-bottom
:
10px
;
padding
:
0
0
10px
0
;
}
::v-deep
.el-collapse
{
...
...
@@ -408,13 +486,17 @@ export default {
}
::v-deep
.el-collapse-item__header
{
flex-direction
:
row-reverse
;
width
:
100%
;
height
:
auto
;
background
:
#f9faff
;
background
:
transparent
;
color
:
#333333
;
padding-left
:
10px
;
font-size
:
14px
;
font-weight
:
400
;
&:hover
{
background
:
#f7f8fa
;
}
}
::v-deep
.el-collapse
.el-collapse-item__header
.el-collapse-item__arrow
{
...
...
@@ -428,7 +510,15 @@ export default {
::v-deep
.el-card__header
,
::v-deep
.el-collapse
,
::v-deep
.el-collapse-item__header
{
border
:
0
!important
;
//
border
:
0
!important
;
}
::v-deep
.el-collapse-item__arrow
{
color
:
#b1b3b8
!important
;
margin-right
:
10px
!important
;
}
::v-deep
.el-collapse-item__wrap
{
background-color
:
transparent
!important
;
border-bottom
:
1px
solid
#ebeef5
!important
;
}
/* 已移除局部 el-collapse 样式,使用全局样式 */
...
...
src/views/components/taskList/taskDetails.vue
浏览文件 @
5e642f8d
...
...
@@ -312,14 +312,14 @@
taskDetails
,
taskTrack
,
}
from
'@/api/game'
import
{
memberBindExternalUser
}
from
'@/api/works'
import
{
memberBindExternalUser
,
clientSessionBindTaskApi
}
from
'@/api/works'
import
layer
from
'@/components/dialog.vue'
import
SendEmailDialog
from
'./SendEmailDialog.vue'
import
applyGift
from
'@/views/components/giftRecord/applyGift.vue'
export
default
{
computed
:
{
...
mapState
(
'game'
,
[
'taskDetails'
]),
...
mapState
(
'user'
,
[
'userInfo'
])
...
mapState
(
'user'
,
[
'userInfo'
,
'userid'
])
},
components
:
{
layer
,
...
...
src/views/newLogin.vue
浏览文件 @
5e642f8d
...
...
@@ -188,6 +188,7 @@ export default {
"set_cser_id"
,
"set_cser_name"
,
"set_external_userid"
,
"set_weixin_blongs_id"
,
]),
async
initLogin
()
{
const
urlParams
=
getParams
();
...
...
@@ -327,6 +328,7 @@ export default {
if
(
res
.
data
.
userid
)
{
this
.
cacheuserid
(
res
.
data
.
userid
);
this
.
getUserList
(
res
.
data
.
userid
);
this
.
set_weixin_blongs_id
(
res
.
data
.
weixin_blongs_id
);
}
else
{
this
.
$message
.
error
(
"获取用户id失败"
);
return
;
...
...
src/views/quickReply.vue
浏览文件 @
5e642f8d
...
...
@@ -2,87 +2,81 @@
<div
class=
"details columnFlex"
>
<div
class=
"content search-form"
>
<el-tabs
v-model=
"activeName"
>
<el-tab-pane
label=
"个人话术"
name=
"personal"
>
<el-tab-pane
label=
"个人话术"
name=
"personal"
>
<skillPersonal
v-if=
"activeName === 'personal'"
:active-name=
"activeName"
/>
</el-tab-pane>
<el-tab-pane
label=
"企业话术"
name=
"company"
>
<skillCompany
:active-name=
"activeName"
/>
<el-tab-pane
label=
"企业话术"
name=
"company"
>
<skillCompany
:active-name=
"activeName"
/>
</el-tab-pane>
<el-tab-pane
label=
"知识库"
name=
"library"
>
<el-tab-pane
label=
"知识库"
name=
"library"
>
<skillLibrary
v-if=
"activeName === 'library'"
:active-name=
"activeName"
/>
</el-tab-pane>
<el-tab-pane
label=
"跨主体知识库"
name=
"robotLibrary"
>
<el-tab-pane
label=
"跨主体知识库"
name=
"robotLibrary"
>
<crossLibrary
v-if=
"activeName === 'robotLibrary'"
:active-name=
"activeName"
/>
</el-tab-pane>
<el-tab-pane
label=
"教学视频"
name=
"instructionalVideo"
>
<InstructionalVideo
v-if=
"activeName === 'instructionalVideo'"
:active-name=
"activeName"
/>
</el-tab-pane>
</el-tabs>
</div>
</div>
</
template
>
<
script
>
import
skillCompany
from
'./components/skill/skillCompany.vue'
import
skillPersonal
from
'./components/skill/skillPersonal.vue'
import
skillLibrary
from
'./components/skill/skillLibrary.vue'
import
crossLibrary
from
'./components/skill/crossLibrary.vue'
import
{
mapActions
}
from
'vuex'
import
skillCompany
from
"./components/skill/skillCompany.vue"
;
import
skillPersonal
from
"./components/skill/skillPersonal.vue"
;
import
skillLibrary
from
"./components/skill/skillLibrary.vue"
;
import
crossLibrary
from
"./components/skill/crossLibrary.vue"
;
import
InstructionalVideo
from
"./components/InstructionalVideo/index.vue"
;
import
{
mapActions
}
from
"vuex"
;
export
default
{
name
:
'quickReply'
,
name
:
"quickReply"
,
components
:
{
skillCompany
,
skillPersonal
,
skillLibrary
,
crossLibrary
crossLibrary
,
InstructionalVideo
,
},
data
()
{
return
{
activeName
:
'personal'
}
},
created
()
{
activeName
:
"personal"
,
};
},
created
()
{},
mounted
()
{
this
.
initializeWecom
()
this
.
initializeWecom
()
;
},
methods
:
{
...
mapActions
(
'user'
,
[
'initWecom'
]),
...
mapActions
(
"user"
,
[
"initWecom"
]),
async
initializeWecom
()
{
try
{
console
.
log
(
'🚀 开始初始化企业微信 SDK'
)
const
result
=
await
this
.
initWecom
()
console
.
log
(
'✅ 企业微信 SDK 初始化成功'
,
result
)
console
.
log
(
"🚀 开始初始化企业微信 SDK"
);
const
result
=
await
this
.
initWecom
()
;
console
.
log
(
"✅ 企业微信 SDK 初始化成功"
,
result
);
}
catch
(
error
)
{
console
.
error
(
'❌ 企业微信 SDK 初始化失败:'
,
error
)
console
.
error
(
"❌ 企业微信 SDK 初始化失败:"
,
error
);
}
},
}
}
}
,
}
;
</
script
>
<
style
lang=
"scss"
scoped
>
.details
{
::v-deep
.el-tabs__nav-next,::v-deep
.el-tabs__nav-prev{
::v-deep
.el-tabs__nav-next,
::v-deep
.el-tabs__nav-prev
{
line-height
:
50px
;
}
width
:
100
%;
...
...
src/views/userInfo/components/gameInfo/vipLevel.vue
浏览文件 @
5e642f8d
<!--
* @Author: maoxiya 937667504@qq.com
* @Date: 2025-09-13 14:05:01
* @LastEditors:
maoxiya
937667504@qq.com
* @LastEditTime: 2025-1
0-31 17:01:13
* @LastEditors:
金多虾
937667504@qq.com
* @LastEditTime: 2025-1
2-05 17:03:24
* @FilePath: /company_wx_frontend/src/views/works/component/gameInfo/vipLevel.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
...
...
@@ -25,6 +25,9 @@
<div
class=
"vipLevelItem rowFlex columnCenter"
v-for=
"(item,index) in vipLevelBenefit"
:key=
"index"
>
<p
class=
"vipLevelItemRow"
v-if=
"item.num"
:style=
"
{color: item.target ? '#333333' : '#c9cdd4'}" >
<span
v-if=
"item.name"
class=
"label"
>
{{
item
.
name
}}
</span>
<span
v-if=
"item.num && item.type!=8"
:style=
"
{color: item.target ? '#00bf8a' : '#c9cdd4'}" class="value">
{{
item
.
remain_num
||
item
.
num
}}
/
{{
item
.
num
}}
{{
item
.
unit
||
'次'
}}
</span>
<!-- 人工权益显示使用按钮 -->
<div
v-if=
"item.monitor_type === 2"
class=
"benefit-actions"
>
<el-button
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论