Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
李宁
/
Activity
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit f9320e1d
authored
Nov 12, 2025
by
李宁
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
1
1 parent
02a85402
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
225 additions
and
43 deletions
huaian/css/result.css
huaian/js/result.js
huaian/result.html
zhiJianBusi/zjbPc/src/components/system/EnterprisePersonnelManagement.vue
zhiJianBusi/zjbPc/src/views/OpportunityDetail.vue
zhiJianBusi/zjbPhone/addBusi.html
zhiJianBusi/zjbPhone/busiDetail.html
zhiJianBusi/zjbPhone/css/busiDetail.css
zhiJianBusi/zjbPhone/css/login.css
zhiJianBusi/zjbPhone/images/beijingtu.png
zhiJianBusi/zjbPhone/js/addBusi.js
zhiJianBusi/zjbPhone/js/busiDetail.js
zhiJianBusi/zjbPhone/js/login.js
zhiJianBusi/zjbPhone/js/result.js
zhiJianBusi/zjbPhone/myBusi.html
huaian/css/result.css
View file @
f9320e1
...
...
@@ -64,7 +64,7 @@ div{
line-height
:
1.2
;
}
.botButt
{
.botButt
Back
{
width
:
3.38rem
;
height
:
.88rem
;
display
:
flex
;
...
...
@@ -78,3 +78,23 @@ div{
z-index
:
9
;
margin
:
auto
;
}
.botButt
{
width
:
3.9rem
;
height
:
.88rem
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
color
:
#fff
;
border-radius
:
.08rem
;
background
:
#0068EE
;
font-weight
:
500
;
font-size
:
.34rem
;
z-index
:
9
;
margin
:
auto
;
}
.noBusi
{
color
:
#0068EE
;
background
:
#fff
;
margin-top
:
.32rem
;
}
\ No newline at end of file
huaian/js/result.js
View file @
f9320e1
...
...
@@ -6,12 +6,60 @@
vm
=
new
Vue
({
el
:
'#pageDiv'
,
data
:
{
info
:
{}
info
:
{},
busiFlag
:
'--'
,
areaCode
:
''
},
created
:
function
()
{
this
.
info
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'huaiAnAppParam'
))
// this.info.campaignId = '54321'
// sessionStorage.setItem('huaiAnAppParam',JSON.stringify(this.info))
this
.
queryOrder
()
},
methods
:
{
httpRequest
:
function
(
param
){
let
origin
=
window
.
location
.
origin
if
(
origin
.
includes
(
'localhost'
)
>
0
||
origin
==
'null'
||
origin
.
includes
(
'file:'
)
>
0
){
origin
=
'https://testznzl.lgyzpt.com'
}
origin
=
'https://testznzl.lgyzpt.com'
return
new
Promise
(
function
(
resolve
,
reject
){
axios
({
method
:
'get'
,
url
:
origin
+
param
.
url
,
timeout
:
param
.
time
||
15000
,
data
:
param
.
data
,
headers
:
{
'Content-Type'
:
'application/json'
}
}).
then
((
res
)
=>
{
resolve
(
res
.
data
)
}).
catch
(
res
=>
{
reject
(
res
)
})
})
},
queryOrder
(){
this
.
httpRequest
({
url
:
'/compass/api/common/maintenance-personnel/code?personnelCode='
+
this
.
info
.
campaignId
}).
then
(
res
=>
{
if
(
res
.
code
==
200
){
if
(
res
.
data
&&
res
.
data
.
id
){
this
.
areaCode
=
res
.
data
.
areaCode
this
.
busiFlag
=
'1'
}
else
{
this
.
busiFlag
=
'2'
}
}
})
},
goAdd
(){
window
.
location
.
replace
(
"https://testznzl.lgyzpt.com/activity/zjbPhone/addBusi.html?source=zhijian&phone="
+
this
.
info
.
accNbr
+
"&areaCode="
+
this
.
areaCode
+
"&campaignId="
+
this
.
info
.
campaignId
)
},
goBack
(){
history
.
go
(
-
1
)
}
...
...
huaian/result.html
View file @
f9320e1
...
...
@@ -4,7 +4,7 @@
<meta
charset=
"UTF-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<title>
江苏移动
</title>
<link
rel=
"stylesheet"
href=
"css/result.css?123
123213
455"
>
<link
rel=
"stylesheet"
href=
"css/result.css?123
99
455"
>
</head>
<body>
<div
id=
"pageDiv"
class=
"pageDiv"
>
...
...
@@ -28,10 +28,14 @@
</div>
</div>
<div
class=
"botButt"
@
click=
"goBack"
>
返回
</div>
<div
v-if=
"busiFlag==1"
class=
"botButt"
@
click=
"goAdd"
>
发现商机
</div>
<div
v-if=
"busiFlag==1"
class=
"botButt noBusi"
@
click=
"goBack"
>
暂无商机
</div>
<div
v-if=
"busiFlag==2"
class=
"botButtBack"
@
click=
"goBack"
>
返回
</div>
</div>
<script
src=
"js/axios.min.js"
></script>
<script
src=
"js/vue.min.js"
></script>
<script
src=
"js/result.js?12
31231233
2"
></script>
<script
src=
"js/result.js?12
0902231
2"
></script>
</body>
</html>
\ No newline at end of file
zhiJianBusi/zjbPc/src/components/system/EnterprisePersonnelManagement.vue
View file @
f9320e1
...
...
@@ -68,8 +68,8 @@
<!-- 表格 -->
<div
class=
"personnel-table"
>
<el-table
:data=
"tableData"
border
>
<el-table-column
prop=
"personnelName"
label=
"姓名"
width=
"1
0
0"
></el-table-column>
<el-table-column
prop=
"personnelCode"
label=
"工号"
width=
"1
0
0"
></el-table-column>
<el-table-column
prop=
"personnelName"
label=
"姓名"
width=
"1
5
0"
></el-table-column>
<el-table-column
prop=
"personnelCode"
label=
"工号"
width=
"1
5
0"
></el-table-column>
<el-table-column
prop=
"phone"
label=
"手机号"
width=
"150"
></el-table-column>
<el-table-column
prop=
"areaName"
label=
"所属区域"
width=
"250"
></el-table-column>
<el-table-column
label=
"状态"
width=
"120"
>
...
...
zhiJianBusi/zjbPc/src/views/OpportunityDetail.vue
View file @
f9320e1
...
...
@@ -129,7 +129,7 @@
<span
class=
"info-value"
>
{{
opportunity
.
textDescription
||
'--'
}}
</span>
</div>
<div
class=
"info-item"
style=
"margin-top: 15px;display: block"
v-if=
"opportunity.voiceDescriptionUrl
>0
"
>
<div
class=
"info-item"
style=
"margin-top: 15px;display: block"
v-if=
"opportunity.voiceDescriptionUrl"
>
<div
class=
"info-label"
>
语音描述:
</div>
<div
class=
"info-value"
>
<audio
class=
"single-audio"
controls
v-for=
"item in opportunity.audioArr"
>
...
...
@@ -382,7 +382,7 @@
<el-option
v-for=
"item in yxPersonList"
:key=
"item.id"
:label=
"item.personnel
Type
Name"
:label=
"item.personnelName"
:value=
"item.id"
></el-option>
</el-select>
...
...
zhiJianBusi/zjbPhone/addBusi.html
View file @
f9320e1
...
...
@@ -12,11 +12,6 @@
<audio
ref=
"audioObj"
playsinline
></audio>
<!-- <div class="topBut" v-if="isAlone">
<div class="left" @click="goZj">质检模拟</div>
<div class="right" @click="loginOut">退出</div>
</div> -->
<!-- 联系方式 -->
<div
class=
"section"
data-node-id=
"79:2566"
>
<div
class=
"section-card"
data-node-id=
"6:249"
>
...
...
@@ -136,7 +131,7 @@
<!-- 底部提交区域 -->
<div
class=
"bottom-bar"
v-if=
"!isAlone"
>
<div
class=
"submit-button"
data-node-id=
"6:498"
@
click=
"
submitBusiness
"
>
<div
class=
"submit-button"
data-node-id=
"6:498"
@
click=
"
addHaZjBusi
"
>
提交商机
</div>
</div>
...
...
@@ -144,7 +139,7 @@
提交商机
</div>
<div
class=
"loginOut"
@
click=
"loginOut"
>
<div
class=
"loginOut"
@
click=
"loginOut"
v-if=
"isAlone"
>
<img
src=
"images/loginout.png"
alt=
""
>
<div>
退出
</div>
</div>
...
...
@@ -216,6 +211,6 @@
<script
src=
"js/vue.min.js"
></script>
<script
src=
"js/util.js"
></script>
<script
src=
"js/addressData.js"
></script>
<script
src=
"js/addBusi.js?
123233
11"
></script>
<script
src=
"js/addBusi.js?
09
11"
></script>
</body>
</html>
\ No newline at end of file
zhiJianBusi/zjbPhone/busiDetail.html
View file @
f9320e1
...
...
@@ -161,6 +161,9 @@
<div
class=
"progress-details"
data-node-id=
"294:2699"
>
<p
class=
"progress-time"
>
{{ switchTime(item.createTime) }}
</p>
<p
class=
"progress-desc"
>
{{ item.followPersonName }}:{{ item.followContent }}
</p>
<div
class=
"progress-img"
v-if=
"followImgArr(item.followImages).length > 0"
>
<img
v-for=
"iitem in followImgArr(item.followImages)"
:src=
"iitem"
>
</div>
</div>
</div>
</div>
...
...
zhiJianBusi/zjbPhone/css/busiDetail.css
View file @
f9320e1
...
...
@@ -418,12 +418,25 @@ body {
color
:
#666
;
margin-bottom
:
0.08rem
;
}
.progress-status
{
flex-grow
:
1
;
}
.progress-desc
{
font-size
:
0.28rem
;
color
:
#333
;
line-height
:
0.40rem
;
}
.progress-img
{
display
:
flex
;
flex-wrap
:
wrap
;
}
.progress-img
img
{
width
:
1.4rem
;
margin-right
:
.4rem
;
flex-shrink
:
0
;
height
:
1.4rem
;
margin-top
:
.2rem
;
}
.botButt
{
display
:
flex
;
...
...
zhiJianBusi/zjbPhone/css/login.css
View file @
f9320e1
...
...
@@ -98,6 +98,7 @@ div{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
center
;
padding-top
:
0
;
}
.input-group
{
...
...
zhiJianBusi/zjbPhone/images/beijingtu.png
View file @
f9320e1
653 KB
|
W:
|
H:
286 KB
|
W:
|
H:
2-up
Swipe
Onion skin
zhiJianBusi/zjbPhone/js/addBusi.js
View file @
f9320e1
...
...
@@ -27,8 +27,6 @@ new Vue({
phone
:
''
,
},
// 语音录制状态
isRecording
:
false
,
recordingTimer
:
null
,
...
...
@@ -52,13 +50,18 @@ new Vue({
timeWriteStr
:
''
,
nIndex
:
'--'
,
haZjData
:
{}
},
mounted
()
{
this
.
isAlone
=
utils
.
getUrlParam
(
'source'
)
!=
'zhijian'
if
(
!
this
.
isAlone
){
this
.
initData
()
this
.
queryHaZjLabel
()
}
else
{
this
.
queryLabel
()
this
.
getUserInfo
()
}
// 添加页面可见性变化监听
document
.
addEventListener
(
'visibilitychange'
,
this
.
handleVisibilityChange
);
...
...
@@ -82,10 +85,101 @@ new Vue({
navigateToList
(){
location
.
href
=
'myBusi.html'
},
queryHaZjLabel
(){
let
param
=
{}
param
.
middle
=
'common'
param
.
url
=
'/opportunity-tags/area-code'
param
.
data
=
{
areaCode
:
this
.
haZjData
.
areaCode
,
isEnabled
:
true
,
pageNum
:
1
,
pageSize
:
10000
}
utils
.
httpRequest
(
param
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
res
.
data
.
records
.
forEach
(
item
=>
{
item
.
selected
=
false
,
item
.
ifCho
=
true
})
this
.
businessTypes
=
res
.
data
.
records
}
})
},
async
addHaZjBusi
(){
// 表单验证
if
(
this
.
isAlone
&&
!
this
.
contactPhone
)
{
utils
.
toast
(
'请输入手机号'
);
return
;
}
if
(
!
/^1
[
3-9
]\d{9}
$/
.
test
(
this
.
contactPhone
))
{
utils
.
toast
(
'请输入正确的手机号'
);
return
;
}
// 检查是否选择了商机类型
const
selectedTypes
=
this
.
businessTypes
.
filter
(
t
=>
t
.
selected
);
if
(
selectedTypes
.
length
===
0
)
{
utils
.
toast
(
'请选择商机类型'
);
return
false
;
}
if
(
this
.
isSubmitting
)
{
utils
.
toast
(
'正在提交,请稍候...'
);
return
;
}
this
.
isSubmitting
=
true
try
{
const
fd
=
new
FormData
();
fd
.
append
(
'personnelCode'
,
this
.
haZjData
.
campaignId
)
fd
.
append
(
'customerPhone'
,
this
.
contactPhone
)
fd
.
append
(
'customerAddress'
,
this
.
haZjData
.
address
?(
'--:'
+
this
.
haZjData
.
address
):
''
)
const
tagArr
=
selectedTypes
.
map
(
item
=>
{
return
item
.
id
})
fd
.
append
(
'opportunityType'
,(
tagArr
.
includes
(
1
)
||
tagArr
.
includes
(
2
)?
'2'
:
'1'
))
fd
.
append
(
'tagIds'
,
tagArr
.
join
(
','
))
fd
.
append
(
'textDescription'
,
this
.
textDescription
)
fd
.
append
(
'audioType'
,
this
.
getSupportedMimeType
())
if
(
this
.
recordingUrlArr
.
length
>
0
){
this
.
recordingUrlArr
.
forEach
(
item
=>
{
fd
.
append
(
'audioFiles'
,
item
.
blob
)
})
}
// 调用API提交
const
result
=
await
utils
.
httpRequest
({
url
:
'/public/opportunity/create'
,
middle
:
'common'
,
data
:
fd
})
if
(
result
.
code
==
200
)
{
utils
.
toast
(
'商机提交成功!'
)
setTimeout
(()
=>
{
history
.
go
(
-
1
)
},
1000
);
}
else
{
utils
.
toast
(
result
.
message
||
'提交失败,请重试'
);
}
}
catch
(
error
)
{
console
.
error
(
'提交商机失败:'
,
error
);
utils
.
toast
(
'提交失败,请重试'
);
}
finally
{
this
.
isSubmitting
=
false
;
}
},
queryLabel
(){
utils
.
httpRequest
({
url
:
'/opportunity/tags'
,
data
:
{}
data
:{
isEnabled
:
true
}
}).
then
(
res
=>
{
if
(
res
.
code
==
200
){
res
.
data
.
forEach
(
item
=>
{
...
...
@@ -99,21 +193,16 @@ new Vue({
/**
*
获取用户信息
*
初始化质检数据
*/
getUserInfo
()
{
try
{
const
loginInfo
=
localStorage
.
getItem
(
'userInfo'
);
if
(
loginInfo
)
{
this
.
userInfo
=
JSON
.
parse
(
loginInfo
);
// 如果有用户手机号,可以脱敏显示
if
(
this
.
userInfo
&&
this
.
userInfo
.
phone
&&
!
this
.
isAlone
)
{
this
.
contactPhone
=
this
.
maskPhone
(
this
.
userInfo
.
phone
);
}
}
}
catch
(
error
)
{
console
.
error
(
'获取用户信息失败:'
,
error
);
initData
()
{
this
.
haZjData
=
{
accNbr
:
utils
.
getUrlParam
(
'phone'
),
campaignId
:
utils
.
getUrlParam
(
'campaignId'
),
areaCode
:
utils
.
getUrlParam
(
'areaCode'
),
}
this
.
contactPhone
=
this
.
haZjData
.
accNbr
},
/**
...
...
@@ -488,7 +577,7 @@ new Vue({
fd
.
append
(
'customerAddress'
,
this
.
selectedAddressCode
?(
this
.
selectedAddressCode
+
":"
+
this
.
selectedAddressText
+
this
.
detailAddress
):
''
)
const
tagArr
=
selectedTypes
.
map
(
item
=>
{
return
item
.
id
})
fd
.
append
(
'opportunityType'
,(
tagArr
.
includes
(
1
)
||
tagArr
.
includes
(
2
)
)?
'2'
:
'1'
)
fd
.
append
(
'opportunityType'
,(
tagArr
.
includes
(
1
)
||
tagArr
.
includes
(
2
)
?
'2'
:
'1'
)
)
fd
.
append
(
'tagIds'
,
tagArr
.
join
(
','
))
fd
.
append
(
'textDescription'
,
this
.
textDescription
)
...
...
zhiJianBusi/zjbPhone/js/busiDetail.js
View file @
f9320e1
...
...
@@ -79,6 +79,13 @@ new Vue({
},
methods
:
{
followImgArr
(
value
){
if
(
!
value
){
return
[]
}
return
value
.
split
(
','
)
},
getAddressShow
(
value
){
if
(
!
value
){
return
'--'
...
...
zhiJianBusi/zjbPhone/js/login.js
View file @
f9320e1
...
...
@@ -20,14 +20,14 @@ new Vue({
localStorage
.
setItem
(
'platform'
,
type
)
// if(type == 'gw'){
// this.loginForm.employeeId = '
1235456
'
// this.loginForm.phoneNumber = '1
3718596969
'
// this.loginForm.employeeId = '
54321
'
// this.loginForm.phoneNumber = '1
5611154004
'
// }else if(type == 'yx'){
// this.loginForm.employeeId = '
23123456
'
// this.loginForm.employeeId = '
12345
'
// this.loginForm.phoneNumber = '13718590607'
// }else{
// this.loginForm.employeeId = '
15862709858
'
// this.loginForm.phoneNumber = '1
5862709858
'
// this.loginForm.employeeId = '
54321
'
// this.loginForm.phoneNumber = '1
3212789513
'
// }
},
getVerifyCode
()
{
...
...
zhiJianBusi/zjbPhone/js/result.js
View file @
f9320e1
const
util
=
new
window
.
publicMethod
()
;
(
function
(
$$
)
{
"use strict"
;
let
vm
...
...
zhiJianBusi/zjbPhone/myBusi.html
View file @
f9320e1
...
...
@@ -120,7 +120,7 @@
<!-- 处理人信息 -->
<div
class=
"processor-info"
data-name=
"Container"
data-node-id=
"355:457"
>
<span>
处理人:{{ business.processorName }}
</span>
<span>
处理人:{{
isWorker?business.marketingStaffName:
business.processorName }}
</span>
</div>
<!-- 时间信息 -->
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment