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 c6726567
authored
Nov 03, 2025
by
李宁
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
1
1 parent
5fd0db23
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
530 additions
and
90 deletions
zhiJianBusi/zjbPc/.claude/settings.local.json
zhiJianBusi/zjbPc/src/components/system/AccountManagement.vue
zhiJianBusi/zjbPc/src/components/system/EnterprisePersonnelManagement.vue
zhiJianBusi/zjbPc/src/components/system/PersonnelManagement.vue
zhiJianBusi/zjbPc/src/router/index.js
zhiJianBusi/zjbPc/src/views/DashboardLayout.vue
zhiJianBusi/zjbPc/src/views/GridQuery.vue
zhiJianBusi/zjbPc/src/views/OpportunityManagement.vue
zhiJianBusi/zjbPc/vue.config.js
zhiJianBusi/zjbPhone/addBusi.html
zhiJianBusi/zjbPhone/busiDetail.html
zhiJianBusi/zjbPhone/css/addBusi.css
zhiJianBusi/zjbPhone/css/busiDetail.css
zhiJianBusi/zjbPhone/css/myBusi.css
zhiJianBusi/zjbPhone/js/addBusi.js
zhiJianBusi/zjbPhone/js/addressData.js
zhiJianBusi/zjbPhone/js/busiDetail.js
zhiJianBusi/zjbPhone/js/myBusi.js
zhiJianBusi/zjbPhone/myBusi.html
zhiJianBusi/zjbPc/.claude/settings.local.json
0 → 100644
View file @
c672656
{
"permissions"
:
{
"allow"
:
[
"Bash(tree src/ -I node_modules)"
],
"deny"
:
[],
"ask"
:
[]
}
}
\ No newline at end of file
\ No newline at end of file
zhiJianBusi/zjbPc/src/components/system/AccountManagement.vue
View file @
c672656
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
</div>
</div>
<div
class=
"account-table"
>
<div
class=
"account-table"
>
<el-table
:data=
"accounts"
style=
"width: 100%"
>
<el-table
:data=
"accounts"
style=
"width: 100%"
border
>
<el-table-column
prop=
"username"
label=
"用户名"
width=
"120"
></el-table-column>
<el-table-column
prop=
"username"
label=
"用户名"
width=
"120"
></el-table-column>
<el-table-column
prop=
"name"
label=
"姓名"
width=
"100"
></el-table-column>
<el-table-column
prop=
"name"
label=
"姓名"
width=
"100"
></el-table-column>
<el-table-column
prop=
"role"
label=
"角色"
width=
"120"
>
<el-table-column
prop=
"role"
label=
"角色"
width=
"120"
>
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
<el-tag
size=
"mini"
>
{{
scope
.
row
.
role
}}
</el-tag>
<el-tag
size=
"mini"
>
{{
scope
.
row
.
role
}}
</el-tag>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"region"
label=
"所属区域"
width=
"
15
0"
></el-table-column>
<el-table-column
prop=
"region"
label=
"所属区域"
width=
"
22
0"
></el-table-column>
<el-table-column
label=
"联系方式"
width=
"150"
>
<el-table-column
label=
"联系方式"
width=
"150"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
phone
||
scope
.
row
.
email
||
'-'
}}
</span>
<span>
{{
scope
.
row
.
phone
||
scope
.
row
.
email
||
'-'
}}
</span>
...
@@ -30,12 +30,12 @@
...
@@ -30,12 +30,12 @@
</el-tag>
</el-tag>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lastLogin"
label=
"最近登录"
width=
"
15
0"
>
<el-table-column
prop=
"lastLogin"
label=
"最近登录"
width=
"
22
0"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
lastLogin
||
'从未登录'
}}
</span>
<span>
{{
scope
.
row
.
lastLogin
||
'从未登录'
}}
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"120"
>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
<el-button
type=
"text"
type=
"text"
...
...
zhiJianBusi/zjbPc/src/components/system/EnterprisePersonnelManagement.vue
View file @
c672656
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
<div
class=
"toolbar"
>
<div
class=
"toolbar"
>
<div
class=
"toolbar-left"
>
<div
class=
"toolbar-left"
>
<div
class=
"search-wrapper"
>
<div
class=
"search-wrapper"
>
<i
class=
"el-icon-search search-icon"
></i>
<el-input
<el-input
v-model=
"searchQuery"
v-model=
"searchQuery"
placeholder=
"请输入工号/手机号查询"
placeholder=
"请输入工号/手机号查询"
...
@@ -44,20 +43,20 @@
...
@@ -44,20 +43,20 @@
<!-- 表格 -->
<!-- 表格 -->
<div
class=
"personnel-table"
>
<div
class=
"personnel-table"
>
<el-table
:data=
"paginatedPersonnel"
style=
"width: 100%"
>
<el-table
:data=
"paginatedPersonnel"
border
>
<el-table-column
prop=
"name"
label=
"姓名"
width=
"100"
></el-table-column>
<el-table-column
prop=
"name"
label=
"姓名"
width=
"100"
></el-table-column>
<el-table-column
prop=
"workId"
label=
"工号"
width=
"100"
></el-table-column>
<el-table-column
prop=
"workId"
label=
"工号"
width=
"100"
></el-table-column>
<el-table-column
prop=
"phone"
label=
"手机号"
width=
"1
2
0"
></el-table-column>
<el-table-column
prop=
"phone"
label=
"手机号"
width=
"1
5
0"
></el-table-column>
<el-table-column
prop=
"region"
label=
"所属区域"
width=
"2
0
0"
></el-table-column>
<el-table-column
prop=
"region"
label=
"所属区域"
width=
"2
5
0"
></el-table-column>
<el-table-column
label=
"状态"
width=
"
8
0"
>
<el-table-column
label=
"状态"
width=
"
12
0"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-tag
:type=
"scope.row.status === 'enabled' ? 'success' : 'info'"
>
<el-tag
:type=
"scope.row.status === 'enabled' ? 'success' : 'info'"
>
{{
scope
.
row
.
status
===
'enabled'
?
'启用'
:
'关闭'
}}
{{
scope
.
row
.
status
===
'enabled'
?
'启用'
:
'关闭'
}}
</el-tag>
</el-tag>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
width=
"
15
0"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
width=
"
22
0"
></el-table-column>
<el-table-column
label=
"操作"
width=
"120"
>
<el-table-column
label=
"操作"
min-
width=
"120"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
<el-button
type=
"text"
type=
"text"
...
...
zhiJianBusi/zjbPc/src/components/system/PersonnelManagement.vue
View file @
c672656
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
<div
class=
"toolbar"
>
<div
class=
"toolbar"
>
<div
class=
"toolbar-left"
>
<div
class=
"toolbar-left"
>
<div
class=
"search-wrapper"
>
<div
class=
"search-wrapper"
>
<i
class=
"el-icon-search search-icon"
></i>
<el-input
<el-input
v-model=
"searchTerm"
v-model=
"searchTerm"
placeholder=
"请输入工号查询..."
placeholder=
"请输入工号查询..."
...
@@ -43,7 +42,7 @@
...
@@ -43,7 +42,7 @@
<!-- 人员列表 -->
<!-- 人员列表 -->
<div
class=
"personnel-table"
>
<div
class=
"personnel-table"
>
<el-table
:data=
"paginatedPersonnel"
style=
"width: 100%"
>
<el-table
:data=
"paginatedPersonnel"
style=
"width: 100%"
border
>
<el-table-column
prop=
"name"
label=
"姓名"
width=
"100"
></el-table-column>
<el-table-column
prop=
"name"
label=
"姓名"
width=
"100"
></el-table-column>
<el-table-column
prop=
"workId"
label=
"工号"
width=
"100"
></el-table-column>
<el-table-column
prop=
"workId"
label=
"工号"
width=
"100"
></el-table-column>
<el-table-column
prop=
"phone"
label=
"手机号"
width=
"120"
></el-table-column>
<el-table-column
prop=
"phone"
label=
"手机号"
width=
"120"
></el-table-column>
...
@@ -75,7 +74,7 @@
...
@@ -75,7 +74,7 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
width=
"150"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
width=
"150"
></el-table-column>
<el-table-column
label=
"操作"
width=
"12
0"
>
<el-table-column
label=
"操作"
min-width=
"15
0"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
<el-button
type=
"text"
type=
"text"
...
...
zhiJianBusi/zjbPc/src/router/index.js
View file @
c672656
...
@@ -65,7 +65,7 @@ const routes = [
...
@@ -65,7 +65,7 @@ const routes = [
]
]
const
router
=
new
VueRouter
({
const
router
=
new
VueRouter
({
mode
:
'h
istory
'
,
mode
:
'h
ash
'
,
base
:
process
.
env
.
BASE_URL
,
base
:
process
.
env
.
BASE_URL
,
routes
routes
})
})
...
...
zhiJianBusi/zjbPc/src/views/DashboardLayout.vue
View file @
c672656
...
@@ -5,8 +5,7 @@
...
@@ -5,8 +5,7 @@
<el-aside
<el-aside
:width=
"isCollapse ? '64px' : '240px'"
:width=
"isCollapse ? '64px' : '240px'"
class=
"dashboard-sidebar"
class=
"dashboard-sidebar"
:class=
"
{ 'sidebar-collapsed': isCollapse, 'sidebar-expanded': !isCollapse }"
:class=
"
{ 'sidebar-collapsed': isCollapse, 'sidebar-expanded': !isCollapse }">
>
<div
class=
"sidebar-header"
>
<div
class=
"sidebar-header"
>
<div
class=
"sidebar-logo"
:class=
"
{ 'logo-center': isCollapse }">
<div
class=
"sidebar-logo"
:class=
"
{ 'logo-center': isCollapse }">
<img
<img
...
@@ -32,8 +31,7 @@
...
@@ -32,8 +31,7 @@
active-text-color=
"#409EFF"
active-text-color=
"#409EFF"
unique-opened
unique-opened
router
router
class=
"sidebar-menu"
class=
"sidebar-menu"
>
>
<template
v-for=
"item in menuItems"
>
<template
v-for=
"item in menuItems"
>
<!-- 有子菜单的项 -->
<!-- 有子菜单的项 -->
<el-submenu
<el-submenu
...
@@ -98,7 +96,7 @@
...
@@ -98,7 +96,7 @@
</el-aside>
</el-aside>
<!-- 主内容区 -->
<!-- 主内容区 -->
<el-container>
<el-container
style=
"min-width: 1400px;overflow:auto;"
>
<!-- 顶部导航栏 -->
<!-- 顶部导航栏 -->
<el-header
class=
"dashboard-header"
>
<el-header
class=
"dashboard-header"
>
<div
class=
"header-left"
>
<div
class=
"header-left"
>
...
@@ -275,7 +273,6 @@ export default {
...
@@ -275,7 +273,6 @@ export default {
.dashboard-wrapper
{
.dashboard-wrapper
{
height
:
100%
;
height
:
100%
;
.dashboard-sidebar
{
.dashboard-sidebar
{
background-color
:
#001529
;
background-color
:
#001529
;
transition
:
width
0.3s
ease
;
transition
:
width
0.3s
ease
;
...
...
zhiJianBusi/zjbPc/src/views/GridQuery.vue
View file @
c672656
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
<div
class=
"filter-content"
>
<div
class=
"filter-content"
>
<el-row
:gutter=
"24"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
3
"
>
<el-cascader
<el-cascader
v-model=
"selectedRegion"
v-model=
"selectedRegion"
:options=
"regionOptions"
:options=
"regionOptions"
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
>
</el-cascader>
>
</el-cascader>
</el-col>
</el-col>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
3
"
>
<el-select
<el-select
v-model=
"selectedGrid"
v-model=
"selectedGrid"
placeholder=
"选择网格"
placeholder=
"选择网格"
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
</el-select>
</el-select>
</el-col>
</el-col>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
3
"
>
<el-select
<el-select
v-model=
"selectedInstaller"
v-model=
"selectedInstaller"
placeholder=
"选择装维师傅"
placeholder=
"选择装维师傅"
...
@@ -67,7 +67,7 @@
...
@@ -67,7 +67,7 @@
</el-select>
</el-select>
</el-col>
</el-col>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
3
"
>
<el-select
<el-select
v-model=
"selectedSales"
v-model=
"selectedSales"
placeholder=
"选择营销人员"
placeholder=
"选择营销人员"
...
@@ -161,11 +161,12 @@
...
@@ -161,11 +161,12 @@
<div
class=
"list-content"
>
<div
class=
"list-content"
>
<el-table
<el-table
:data=
"filteredGrids"
:data=
"filteredGrids"
border
style=
"width: 100%"
style=
"width: 100%"
@
row-click=
"handleRowClick"
@
row-click=
"handleRowClick"
>
>
<el-table-column
prop=
"name"
label=
"网格名称"
width=
"120"
></el-table-column>
<el-table-column
prop=
"name"
label=
"网格名称"
width=
"120"
></el-table-column>
<el-table-column
prop=
"region"
label=
"所属区域"
width=
"2
0
0"
></el-table-column>
<el-table-column
prop=
"region"
label=
"所属区域"
width=
"2
5
0"
></el-table-column>
<el-table-column
prop=
"installerCount"
label=
"装维师傅数"
width=
"120"
></el-table-column>
<el-table-column
prop=
"installerCount"
label=
"装维师傅数"
width=
"120"
></el-table-column>
<el-table-column
prop=
"salesCount"
label=
"营销人员数"
width=
"120"
></el-table-column>
<el-table-column
prop=
"salesCount"
label=
"营销人员数"
width=
"120"
></el-table-column>
<el-table-column
prop=
"opportunityCount"
label=
"商机数"
width=
"100"
></el-table-column>
<el-table-column
prop=
"opportunityCount"
label=
"商机数"
width=
"100"
></el-table-column>
...
@@ -179,8 +180,8 @@
...
@@ -179,8 +180,8 @@
</el-tag>
</el-tag>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lastActivity"
label=
"最后活跃"
width=
"
15
0"
></el-table-column>
<el-table-column
prop=
"lastActivity"
label=
"最后活跃"
width=
"
20
0"
></el-table-column>
<el-table-column
label=
"操作"
width=
"150"
>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
<el-button
type=
"text"
type=
"text"
...
...
zhiJianBusi/zjbPc/src/views/OpportunityManagement.vue
View file @
c672656
...
@@ -101,16 +101,16 @@
...
@@ -101,16 +101,16 @@
<el-row
:gutter=
"24"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"4"
>
<el-col
:span=
"4"
>
<div
class=
"search-wrapper"
>
<div
class=
"search-wrapper"
>
<i
class=
"el-icon-search search-icon"
></i>
<el-input
<el-input
v-model=
"searchTerm"
v-model=
"searchTerm"
placeholder=
"用户账号/师傅名字/营销人员名字"
placeholder=
"用户账号/师傅名字/营销人员名字"
style=
"padding-left: 0;"
@
keyup
.
enter
.
native=
"handleFilter"
@
keyup
.
enter
.
native=
"handleFilter"
/>
/>
</div>
</div>
</el-col>
</el-col>
<el-col
:span=
"
4
"
>
<el-col
:span=
"
6
"
>
<el-date-picker
<el-date-picker
v-model=
"dateRange"
v-model=
"dateRange"
type=
"daterange"
type=
"daterange"
...
@@ -125,19 +125,6 @@
...
@@ -125,19 +125,6 @@
<el-col
:span=
"4"
>
<el-col
:span=
"4"
>
<el-select
<el-select
v-model=
"selectedRegion"
placeholder=
"选择区域"
clearable
>
<el-option
label=
"全部区域"
value=
"all"
></el-option>
<el-option
label=
"玄武区"
value=
"玄武区"
></el-option>
<el-option
label=
"秦淮区"
value=
"秦淮区"
></el-option>
<el-option
label=
"建邺区"
value=
"建邺区"
></el-option>
</el-select>
</el-col>
<el-col
:span=
"4"
>
<el-select
v-model=
"selectedStatus"
v-model=
"selectedStatus"
placeholder=
"选择状态"
placeholder=
"选择状态"
clearable
clearable
...
@@ -169,6 +156,23 @@
...
@@ -169,6 +156,23 @@
</el-col>
</el-col>
</el-row>
</el-row>
</div>
</div>
<div
class=
"filter-content"
style=
"margin-top: 20px;"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"4"
>
<el-select
v-model=
"selectedRegion"
placeholder=
"选择区域"
clearable
>
<el-option
label=
"全部区域"
value=
"all"
></el-option>
<el-option
label=
"玄武区"
value=
"玄武区"
></el-option>
<el-option
label=
"秦淮区"
value=
"秦淮区"
></el-option>
<el-option
label=
"建邺区"
value=
"建邺区"
></el-option>
</el-select>
</el-col>
</el-row>
</div>
</el-card>
</el-card>
<!-- 商机列表 -->
<!-- 商机列表 -->
...
@@ -189,17 +193,15 @@
...
@@ -189,17 +193,15 @@
<div
class=
"list-content"
>
<div
class=
"list-content"
>
<el-table
<el-table
:data=
"paginatedOpportunities"
:data=
"paginatedOpportunities"
border
style=
"width: 100%"
v-loading=
"loading"
>
v-loading=
"loading"
>
<el-table-column
prop=
"id"
label=
"商机ID"
width=
"150"
></el-table-column>
<el-table-column
prop=
"id"
label=
"商机ID"
width=
"150"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
width=
"180"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"创建时间"
width=
"180"
></el-table-column>
<el-table-column
prop=
"customerAddress"
label=
"客户地址"
width=
"2
00"
></el-table-column>
<el-table-column
prop=
"customerAddress"
label=
"客户地址"
width=
"2
30"
show-overflow-tooltip
></el-table-column>
<el-table-column
prop=
"customerPhone"
label=
"用户账号"
width=
"120"
></el-table-column>
<el-table-column
prop=
"customerPhone"
label=
"用户账号"
width=
"120"
></el-table-column>
<el-table-column
prop=
"installerName"
label=
"装维师傅姓名"
width=
"120"
></el-table-column>
<el-table-column
prop=
"installerName"
label=
"装维师傅姓名"
width=
"120"
></el-table-column>
<el-table-column
prop=
"assignedToName"
label=
"营销人员姓名"
width=
"120"
></el-table-column>
<el-table-column
prop=
"assignedToName"
label=
"营销人员姓名"
width=
"120"
></el-table-column>
<el-table-column
label=
"商机标签"
width=
"
1
50"
>
<el-table-column
label=
"商机标签"
width=
"
2
50"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-tag
<el-tag
v-for=
"tag in scope.row.tags"
v-for=
"tag in scope.row.tags"
...
@@ -223,23 +225,10 @@
...
@@ -223,23 +225,10 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lastFollowTime"
label=
"最新跟进"
width=
"180"
></el-table-column>
<el-table-column
prop=
"lastFollowTime"
label=
"最新跟进"
width=
"180"
></el-table-column>
<el-table-column
label=
"操作"
width=
"10
0"
>
<el-table-column
label=
"操作"
min-width=
"15
0"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-dropdown
@
command=
"handleCommand"
size=
"mini"
>
<el-button
type=
"text"
@
click=
"checkDetail(scope.row)"
>
查看详情
</el-button>
<el-button
size=
"mini"
type=
"text"
>
<el-button
type=
"text"
@
click=
"checkAudio(scope.row)"
>
审核
</el-button>
<i
class=
"el-icon-more"
></i>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
:command=
"
{type: 'view', row: scope.row}">
<i
class=
"el-icon-view"
></i>
查看详情
</el-dropdown-item>
<el-dropdown-item
:command=
"
{type: 'audit', row: scope.row}">
<i
class=
"el-icon-document"
></i>
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -617,12 +606,11 @@ export default {
...
@@ -617,12 +606,11 @@ export default {
this
.
dateRange
=
[]
this
.
dateRange
=
[]
this
.
currentPage
=
1
this
.
currentPage
=
1
},
},
handleCommand
(
command
)
{
checkDetail
(
row
){
if
(
command
.
type
===
'view'
)
{
this
.
$router
.
push
(
`/opportunities/
${
row
.
id
}
`
)
this
.
$router
.
push
(
`/opportunities/
${
command
.
row
.
id
}
`
)
},
}
else
if
(
command
.
type
===
'audit'
)
{
checkAudio
(
row
){
this
.
handleOpenAudit
(
command
.
row
.
id
)
this
.
handleOpenAudit
(
row
.
id
)
}
},
},
handleCreateOpportunity
()
{
handleCreateOpportunity
()
{
this
.
$refs
.
opportunityForm
.
validate
((
valid
)
=>
{
this
.
$refs
.
opportunityForm
.
validate
((
valid
)
=>
{
...
...
zhiJianBusi/zjbPc/vue.config.js
View file @
c672656
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
const
path
=
require
(
'path'
)
const
path
=
require
(
'path'
)
module
.
exports
=
{
module
.
exports
=
{
publicPath
:
'/'
,
publicPath
:
'
.
/'
,
outputDir
:
'dist'
,
outputDir
:
'dist'
,
assetsDir
:
'static'
,
assetsDir
:
'static'
,
lintOnSave
:
process
.
env
.
NODE_ENV
===
'development'
,
lintOnSave
:
process
.
env
.
NODE_ENV
===
'development'
,
...
...
zhiJianBusi/zjbPhone/addBusi.html
View file @
c672656
...
@@ -30,8 +30,8 @@
...
@@ -30,8 +30,8 @@
<h2
class=
"section-title"
data-node-id=
"6:253"
>
用户地址
</h2>
<h2
class=
"section-title"
data-node-id=
"6:253"
>
用户地址
</h2>
<div
class=
"addressLi"
>
<div
class=
"addressLi"
>
<div
class=
"name"
>
所在地区
</div>
<div
class=
"name"
>
所在地区
</div>
<div
class=
"selectCity"
>
<div
class=
"selectCity"
@
click=
"openAddressSelector"
>
<input
v-model=
"areaStore.text"
@
touchend
.
prevent=
"selectPicker('areaStore')"
type=
"text"
placeholder=
"省、市、区、街道"
readonly
>
<input
type=
"text"
placeholder=
"省、市、区、街道"
readonly
v-model=
"selectedAddressText"
>
<img
src=
"images/right.png"
alt=
""
>
<img
src=
"images/right.png"
alt=
""
>
</div>
</div>
</div>
</div>
...
@@ -157,12 +157,49 @@
...
@@ -157,12 +157,49 @@
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 地址选择弹窗 -->
<div
class=
"modal-overlay address-modal"
v-if=
"addressSelector.show"
>
<div
class=
"modal address-modal-content"
>
<div
class=
"modal-header"
>
<div
class=
"modal-title"
>
选择地区
</div>
<div
class=
"close-btn"
@
click=
"closeAddressSelector"
>
×
</div>
</div>
<div
class=
"address-tabs"
>
<div
v-for=
"(tab, index) in addressTabs"
:key=
"index"
:class=
"['tab-item', { active: addressSelector.currentStep === index }]"
@
click=
"switchToStep(index)"
>
{{ tab.name }}
</div>
</div>
<div
class=
"address-content"
>
<div
class=
"address-options"
>
<div
v-for=
"item in currentAddressOptions"
:key=
"item.code"
:class=
"['option-item', { selected: isAddressSelected(item) }]"
@
click=
"selectAddress(item)"
>
{{ item.name }}
</div>
</div>
</div>
<div
class=
"modal-footer"
>
<div
class=
"cancel-btn"
@
click=
"closeAddressSelector"
>
取消
</div>
<div
class=
"confirm-btn"
@
click=
"confirmAddressSelection"
>
确定
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 引入Vue.js -->
<!-- 引入Vue.js -->
<script
src=
"js/vue.min.js"
></script>
<script
src=
"js/vue.min.js"
></script>
<script
src=
"js/util.js"
></script>
<script
src=
"js/util.js"
></script>
<script
src=
"js/addressData.js"
></script>
<script
src=
"js/addBusi.js"
></script>
<script
src=
"js/addBusi.js"
></script>
</body>
</body>
</html>
</html>
\ No newline at end of file
\ No newline at end of file
zhiJianBusi/zjbPhone/busiDetail.html
View file @
c672656
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
</head>
</head>
<body>
<body>
<div
id=
"app"
v-cloak
>
<div
id=
"app"
v-cloak
>
<div
class=
"app-container"
data-name=
"我的商机-营销人员2"
data-node-id=
"294:2276
"
>
<div
class=
"app-container"
:class=
"{'worker-con': isWorker}
"
>
<img
class=
"topImg"
src=
"images/bg.png"
alt=
""
>
<img
class=
"topImg"
src=
"images/bg.png"
alt=
""
>
...
@@ -74,7 +74,7 @@
...
@@ -74,7 +74,7 @@
<div
class=
"action-button contact-marketer"
data-node-id=
"294:2314"
@
click=
"callMarketer"
>
<div
class=
"action-button contact-marketer"
data-node-id=
"294:2314"
@
click=
"callMarketer"
>
<span
data-node-id=
"294:2316"
>
致电营销人员
</span>
<span
data-node-id=
"294:2316"
>
致电营销人员
</span>
</div>
</div>
<div
class=
"action-button contact-customer"
data-node-id=
"294:2317"
@
click=
"callCustomer"
>
<div
class=
"action-button contact-customer"
data-node-id=
"294:2317"
@
click=
"callCustomer"
v-if=
"!isWorker"
>
<span
data-node-id=
"294:2319"
>
联系客户
</span>
<span
data-node-id=
"294:2319"
>
联系客户
</span>
</div>
</div>
</div>
</div>
...
@@ -165,7 +165,7 @@
...
@@ -165,7 +165,7 @@
</div>
</div>
</div>
</div>
<div
class=
"botButt"
>
<div
class=
"botButt"
v-if=
"!isWorker"
>
<div
class=
"bbli"
>
<div
class=
"bbli"
>
<img
src=
"images/genjin.png"
alt=
""
>
<img
src=
"images/genjin.png"
alt=
""
>
<div>
写跟进
</div>
<div>
写跟进
</div>
...
...
zhiJianBusi/zjbPhone/css/addBusi.css
View file @
c672656
...
@@ -165,6 +165,7 @@ body {
...
@@ -165,6 +165,7 @@ body {
margin-bottom
:
0
;
margin-bottom
:
0
;
width
:
auto
;
width
:
auto
;
font-size
:
.28rem
;
font-size
:
.28rem
;
flex-grow
:
1
;
}
}
/* 商机类型 */
/* 商机类型 */
...
@@ -778,3 +779,175 @@ body {
...
@@ -778,3 +779,175 @@ body {
color
:
#0068ee
;
color
:
#0068ee
;
font-weight
:
500
;
font-weight
:
500
;
}
}
/* 地址选择弹窗样式 */
.address-modal
.address-modal-content
{
width
:
6.8rem
;
max-height
:
8rem
;
padding
:
0
;
border-radius
:
0.2rem
;
overflow
:
hidden
;
display
:
flex
;
flex-direction
:
column
;
}
.modal-header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
0.32rem
0.32rem
;
border-bottom
:
1px
solid
#f1f1f1
;
}
.modal-title
{
font-size
:
0.36rem
;
font-weight
:
bold
;
color
:
#333
;
}
.close-btn
{
font-size
:
0.48rem
;
color
:
#999
;
cursor
:
pointer
;
width
:
0.6rem
;
height
:
0.6rem
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
border-radius
:
50%
;
transition
:
all
0.3s
ease
;
}
.close-btn
:hover
{
background-color
:
#f5f5f5
;
color
:
#333
;
}
.address-tabs
{
display
:
flex
;
background-color
:
#f8f8f8
;
border-bottom
:
1px
solid
#f1f1f1
;
}
.tab-item
{
flex
:
1
;
text-align
:
center
;
padding
:
0.24rem
0.16rem
;
font-size
:
0.28rem
;
color
:
#666
;
cursor
:
pointer
;
position
:
relative
;
transition
:
all
0.3s
ease
;
}
.tab-item.active
{
color
:
#0068ee
;
background-color
:
white
;
font-weight
:
500
;
}
.tab-item.active
::after
{
content
:
''
;
position
:
absolute
;
bottom
:
0
;
left
:
50%
;
transform
:
translateX
(
-50%
);
width
:
0.8rem
;
height
:
0.04rem
;
background-color
:
#0068ee
;
border-radius
:
0.02rem
;
}
.address-content
{
flex
:
1
;
max-height
:
3.6rem
;
overflow-y
:
auto
;
}
.address-options
{
padding
:
0.16rem
0
;
}
.option-item
{
padding
:
0.24rem
0.32rem
;
font-size
:
0.28rem
;
color
:
#333
;
cursor
:
pointer
;
transition
:
all
0.3s
ease
;
border-bottom
:
1px
solid
#f5f5f5
;
}
.option-item
:last-child
{
border-bottom
:
none
;
}
.option-item
:hover
{
background-color
:
#f8f8f8
;
}
.option-item.selected
{
color
:
#0068ee
;
background-color
:
rgba
(
0
,
104
,
238
,
0.05
);
font-weight
:
500
;
}
.option-item.selected
::after
{
content
:
'✓'
;
float
:
right
;
color
:
#0068ee
;
font-weight
:
bold
;
}
.modal-footer
{
display
:
flex
;
justify-content
:
space-between
;
padding
:
0.24rem
0.32rem
0.32rem
;
border-top
:
1px
solid
#f1f1f1
;
}
.cancel-btn
,
.confirm-btn
{
width
:
3rem
;
height
:
0.8rem
;
line-height
:
0.8rem
;
text-align
:
center
;
border-radius
:
0.08rem
;
font-size
:
0.32rem
;
cursor
:
pointer
;
transition
:
all
0.3s
ease
;
}
.cancel-btn
{
background-color
:
#f6f6f6
;
color
:
#666
;
}
.cancel-btn
:hover
{
background-color
:
#e6e6e6
;
}
.confirm-btn
{
background-color
:
#0176F5
;
color
:
white
;
}
.confirm-btn
:hover
{
background-color
:
#0056d3
;
}
/* 滚动条样式 */
.address-content
::-webkit-scrollbar
{
width
:
0.04rem
;
}
.address-content
::-webkit-scrollbar-track
{
background
:
#f1f1f1
;
}
.address-content
::-webkit-scrollbar-thumb
{
background
:
#ccc
;
border-radius
:
0.02rem
;
}
.address-content
::-webkit-scrollbar-thumb:hover
{
background
:
#aaa
;
}
\ No newline at end of file
\ No newline at end of file
zhiJianBusi/zjbPhone/css/busiDetail.css
View file @
c672656
...
@@ -24,6 +24,9 @@ body {
...
@@ -24,6 +24,9 @@ body {
padding
:
0
.24rem
;
padding
:
0
.24rem
;
padding-bottom
:
1.3rem
;
padding-bottom
:
1.3rem
;
}
}
.worker-con
{
padding-bottom
:
0
;
}
.topImg
{
.topImg
{
position
:
absolute
;
position
:
absolute
;
...
@@ -282,6 +285,10 @@ body {
...
@@ -282,6 +285,10 @@ body {
.action-button.contact-marketer
{
.action-button.contact-marketer
{
border-right
:
1px
solid
#F1F1F1
;
border-right
:
1px
solid
#F1F1F1
;
}
}
.worker-con
.contact-marketer
{
width
:
100%
;
border-right
:
none
;
}
.detail-card
{
.detail-card
{
padding
:
.4rem
.32rem
;
padding
:
.4rem
.32rem
;
...
...
zhiJianBusi/zjbPhone/css/myBusi.css
View file @
c672656
...
@@ -23,6 +23,8 @@ body {
...
@@ -23,6 +23,8 @@ body {
background-color
:
#f7f8fa
;
background-color
:
#f7f8fa
;
margin
:
0
auto
;
margin
:
0
auto
;
position
:
relative
;
position
:
relative
;
}
.worker-con
{
padding-bottom
:
1.31rem
;
/* 为底部导航预留空间 */
padding-bottom
:
1.31rem
;
/* 为底部导航预留空间 */
}
}
...
@@ -134,9 +136,12 @@ body {
...
@@ -134,9 +136,12 @@ body {
/* 商机列表 */
/* 商机列表 */
.business-list
{
.business-list
{
padding
:
0
0.32rem
;
padding
:
0
0.32rem
;
height
:
calc
(
100vh
-
5.2
rem
);
height
:
calc
(
100vh
-
3.8
rem
);
overflow
:
auto
;
overflow
:
auto
;
}
}
.worker-con
.business-list
{
height
:
calc
(
100vh
-
5.2rem
);
}
.business-card
{
.business-card
{
background-color
:
white
;
background-color
:
white
;
...
@@ -177,23 +182,27 @@ body {
...
@@ -177,23 +182,27 @@ body {
}
}
.status-badge.follow-up
{
.status-badge.follow-up
{
background-color
:
#
f0e6ff
;
background-color
:
#
F3E8FF
;
color
:
#8
b5cf6
;
color
:
#8
200DB
;
}
}
.status-badge.pending
{
.status-badge.pending
{
background-color
:
#
e6f3ff
;
background-color
:
#
DBEAFE
;
color
:
#
3b82f
6
;
color
:
#
1447E
6
;
}
}
.status-badge.completed
{
.status-badge.completed
{
background-color
:
#dcfce7
;
background-color
:
#dcfce7
;
color
:
#
16a34a
;
color
:
#
008236
;
}
}
.status-badge.closed
{
.status-badge.closed
{
background-color
:
#f3f4f6
;
background-color
:
#f3f4f6
;
color
:
#6b7280
;
color
:
#333
;
}
.status-badge.audio
{
background-color
:
#FEF9C2
;
color
:
#A65F00
;
}
}
/* 商机详情 */
/* 商机详情 */
...
...
zhiJianBusi/zjbPhone/js/addBusi.js
View file @
c672656
...
@@ -71,7 +71,23 @@ new Vue({
...
@@ -71,7 +71,23 @@ new Vue({
// 用户信息
// 用户信息
userInfo
:
null
,
userInfo
:
null
,
mediaStream
:
''
mediaStream
:
''
,
// 地址选择器
addressSelector
:
{
show
:
false
,
currentStep
:
0
,
// 0: 省, 1: 市, 2: 区, 3: 街道
selectedProvince
:
null
,
selectedCity
:
null
,
selectedDistrict
:
null
,
selectedStreet
:
null
},
// 选中地址文本
selectedAddressText
:
''
,
// 使用外部地址数据
addressData
:
addressData
},
},
created
()
{
created
()
{
...
@@ -585,6 +601,121 @@ new Vue({
...
@@ -585,6 +601,121 @@ new Vue({
},
},
/**
/**
* 打开地址选择器
*/
openAddressSelector
()
{
this
.
addressSelector
.
show
=
true
;
this
.
addressSelector
.
currentStep
=
0
;
},
/**
* 关闭地址选择器
*/
closeAddressSelector
()
{
this
.
addressSelector
.
show
=
false
;
},
/**
* 切换到指定步骤
*/
switchToStep
(
step
)
{
// 只有在已经选择了前面步骤的情况下才能切换到后续步骤
if
(
step
===
0
)
{
this
.
addressSelector
.
currentStep
=
0
;
}
else
if
(
step
===
1
&&
this
.
addressSelector
.
selectedProvince
)
{
this
.
addressSelector
.
currentStep
=
1
;
}
else
if
(
step
===
2
&&
this
.
addressSelector
.
selectedCity
)
{
this
.
addressSelector
.
currentStep
=
2
;
}
else
if
(
step
===
3
&&
this
.
addressSelector
.
selectedDistrict
)
{
this
.
addressSelector
.
currentStep
=
3
;
}
},
/**
* 检查地址是否被选中
*/
isAddressSelected
(
item
)
{
switch
(
this
.
addressSelector
.
currentStep
)
{
case
0
:
// 省份
return
this
.
addressSelector
.
selectedProvince
===
item
;
case
1
:
// 城市
return
this
.
addressSelector
.
selectedCity
===
item
;
case
2
:
// 区县
return
this
.
addressSelector
.
selectedDistrict
===
item
;
case
3
:
// 街道
return
this
.
addressSelector
.
selectedStreet
===
item
;
default
:
return
false
;
}
},
/**
* 选择地址
*/
selectAddress
(
item
)
{
switch
(
this
.
addressSelector
.
currentStep
)
{
case
0
:
// 选择省份
this
.
addressSelector
.
selectedProvince
=
item
;
this
.
addressSelector
.
selectedCity
=
null
;
this
.
addressSelector
.
selectedDistrict
=
null
;
this
.
addressSelector
.
selectedStreet
=
null
;
this
.
addressSelector
.
currentStep
=
1
;
break
;
case
1
:
// 选择城市
this
.
addressSelector
.
selectedCity
=
item
;
this
.
addressSelector
.
selectedDistrict
=
null
;
this
.
addressSelector
.
selectedStreet
=
null
;
this
.
addressSelector
.
currentStep
=
2
;
break
;
case
2
:
// 选择区县
this
.
addressSelector
.
selectedDistrict
=
item
;
this
.
addressSelector
.
selectedStreet
=
null
;
this
.
addressSelector
.
currentStep
=
3
;
break
;
case
3
:
// 选择街道
this
.
addressSelector
.
selectedStreet
=
item
;
// 选择完街道后自动确认
this
.
confirmAddressSelection
();
break
;
}
},
/**
* 确认地址选择
*/
confirmAddressSelection
()
{
const
parts
=
[];
if
(
this
.
addressSelector
.
selectedProvince
)
{
parts
.
push
(
this
.
addressSelector
.
selectedProvince
.
name
);
}
if
(
this
.
addressSelector
.
selectedCity
)
{
parts
.
push
(
this
.
addressSelector
.
selectedCity
.
name
);
}
if
(
this
.
addressSelector
.
selectedDistrict
)
{
parts
.
push
(
this
.
addressSelector
.
selectedDistrict
.
name
);
}
if
(
this
.
addressSelector
.
selectedStreet
)
{
parts
.
push
(
this
.
addressSelector
.
selectedStreet
.
name
);
}
this
.
selectedAddressText
=
parts
.
join
(
''
);
this
.
closeAddressSelector
();
this
.
addHapticFeedback
();
},
/**
* 重置地址选择
*/
resetAddressSelection
()
{
this
.
addressSelector
.
selectedProvince
=
null
;
this
.
addressSelector
.
selectedCity
=
null
;
this
.
addressSelector
.
selectedDistrict
=
null
;
this
.
addressSelector
.
selectedStreet
=
null
;
this
.
addressSelector
.
currentStep
=
0
;
},
/**
* 清理资源
* 清理资源
*/
*/
cleanup
()
{
cleanup
()
{
...
@@ -626,6 +757,54 @@ new Vue({
...
@@ -626,6 +757,54 @@ new Vue({
*/
*/
formattedRecordingDuration
()
{
formattedRecordingDuration
()
{
return
this
.
formatRecordingDuration
(
this
.
recordingDuration
);
return
this
.
formatRecordingDuration
(
this
.
recordingDuration
);
},
/**
* 地址选择标签页
*/
addressTabs
()
{
const
tabs
=
[
{
name
:
'省份'
,
key
:
'province'
}
];
if
(
this
.
addressSelector
.
selectedProvince
)
{
tabs
.
push
({
name
:
'城市'
,
key
:
'city'
});
}
if
(
this
.
addressSelector
.
selectedCity
)
{
tabs
.
push
({
name
:
'区县'
,
key
:
'district'
});
}
if
(
this
.
addressSelector
.
selectedDistrict
)
{
tabs
.
push
({
name
:
'街道'
,
key
:
'street'
});
}
return
tabs
;
},
/**
* 当前地址选项列表
*/
currentAddressOptions
()
{
switch
(
this
.
addressSelector
.
currentStep
)
{
case
0
:
// 省份
return
this
.
addressData
.
provinces
;
case
1
:
// 城市
if
(
this
.
addressSelector
.
selectedProvince
)
{
return
this
.
addressSelector
.
selectedProvince
.
cities
||
[];
}
return
[];
case
2
:
// 区县
if
(
this
.
addressSelector
.
selectedCity
)
{
return
this
.
addressSelector
.
selectedCity
.
districts
||
[];
}
return
[];
case
3
:
// 街道
if
(
this
.
addressSelector
.
selectedDistrict
)
{
return
this
.
addressSelector
.
selectedDistrict
.
streets
||
[];
}
return
[];
default
:
return
[];
}
}
}
},
},
...
...
zhiJianBusi/zjbPhone/js/addressData.js
0 → 100644
View file @
c672656
// 全国省市区县街道数据
window
.
addressData
=
{
provinces
:
[
{
code
:
'320000'
,
name
:
'江苏省'
,
cities
:
[
{
code
:
'320100'
,
name
:
'南京市'
,
districts
:
[
{
code
:
'320102'
,
name
:
'玄武区'
,
streets
:
[{
code
:
'320102001'
,
name
:
'新街口街道'
},
{
code
:
'320102002'
,
name
:
'梅园新村街道'
},
{
code
:
'320102003'
,
name
:
'玄武门街道'
},
{
code
:
'320102004'
,
name
:
'锁金村街道'
},
{
code
:
'320102005'
,
name
:
'红山街道'
},
{
code
:
'320102006'
,
name
:
'孝陵卫街道'
},
{
code
:
'320102007'
,
name
:
'玄武湖街道'
}]
},
{
code
:
'320104'
,
name
:
'秦淮区'
,
streets
:
[{
code
:
'320104001'
,
name
:
'秦虹街道'
},
{
code
:
'320104002'
,
name
:
'红花街道'
},
{
code
:
'320104003'
,
name
:
'夫子庙街道'
},
{
code
:
'320104004'
,
name
:
'双塘街道'
},
{
code
:
'320104005'
,
name
:
'中华门街道'
},
{
code
:
'320104006'
,
name
:
'月牙湖街道'
},
{
code
:
'320104007'
,
name
:
'光华路街道'
},
{
code
:
'320104008'
,
name
:
'瑞金路街道'
},
{
code
:
'320104009'
,
name
:
'朝天宫街道'
},
{
code
:
'320104010'
,
name
:
'五老村街道'
},
{
code
:
'320104011'
,
name
:
'洪武路街道'
},
{
code
:
'320104012'
,
name
:
'建康路街道'
}]
},
{
code
:
'320105'
,
name
:
'建邺区'
,
streets
:
[{
code
:
'320105001'
,
name
:
'莫愁湖街道'
},
{
code
:
'320105002'
,
name
:
'南湖街道'
},
{
code
:
'320105003'
,
name
:
'兴隆街道'
},
{
code
:
'320105004'
,
name
:
'南苑街道'
},
{
code
:
'320105005'
,
name
:
'沙洲街道'
},
{
code
:
'320105006'
,
name
:
'双闸街道'
},
{
code
:
'320105007'
,
name
:
'江心洲街道'
}]
},
{
code
:
'320106'
,
name
:
'鼓楼区'
,
streets
:
[{
code
:
'320106001'
,
name
:
'宁海路街道'
},
{
code
:
'320106002'
,
name
:
'华侨路街道'
},
{
code
:
'320106003'
,
name
:
'湖南路街道'
},
{
code
:
'320106004'
,
name
:
'中央门街道'
},
{
code
:
'320106005'
,
name
:
'挹江门街道'
},
{
code
:
'320106006'
,
name
:
'江东街道'
},
{
code
:
'320106007'
,
name
:
'凤凰街道'
},
{
code
:
'320106008'
,
name
:
'热河南路街道'
},
{
code
:
'320106009'
,
name
:
'下关街道'
},
{
code
:
'320106010'
,
name
:
'建宁路街道'
},
{
code
:
'320106011'
,
name
:
'宝塔桥街道'
},
{
code
:
'320106012'
,
name
:
'小市街道'
},
{
code
:
'320106013'
,
name
:
'幕府山街道'
}]
},
{
code
:
'320111'
,
name
:
'浦口区'
,
streets
:
[{
code
:
'320111001'
,
name
:
'泰山街道'
},
{
code
:
'320111002'
,
name
:
'顶山街道'
},
{
code
:
'320111003'
,
name
:
'沿江街道'
},
{
code
:
'320111004'
,
name
:
'江浦街道'
},
{
code
:
'320111005'
,
name
:
'汤泉街道'
},
{
code
:
'320111006'
,
name
:
'永宁街道'
},
{
code
:
'320111007'
,
name
:
'盘城街道'
},
{
code
:
'320111008'
,
name
:
'星甸街道'
},
{
code
:
'320111009'
,
name
:
'桥林街道'
}]
},
{
code
:
'320113'
,
name
:
'栖霞区'
,
streets
:
[{
code
:
'320113001'
,
name
:
'龙潭街道'
},
{
code
:
'320113002'
,
name
:
'靖安街道'
},
{
code
:
'320113003'
,
name
:
'八卦洲街道'
},
{
code
:
'320113004'
,
name
:
'西岗街道'
},
{
code
:
'320113005'
,
name
:
'栖霞街道'
},
{
code
:
'320113006'
,
name
:
'尧化街道'
},
{
code
:
'320113007'
,
name
:
'迈皋桥街道'
},
{
code
:
'320113008'
,
name
:
'燕子矶街道'
},
{
code
:
'320113009'
,
name
:
'马群街道'
},
{
code
:
'320113010'
,
name
:
'仙林街道'
}]
},
{
code
:
'320114'
,
name
:
'雨花台区'
,
streets
:
[{
code
:
'320114001'
,
name
:
'雨花街道'
},
{
code
:
'320114002'
,
name
:
'赛虹桥街道'
},
{
code
:
'320114003'
,
name
:
'西善桥街道'
},
{
code
:
'320114004'
,
name
:
'板桥街道'
},
{
code
:
'320114005'
,
name
:
'铁心桥街道'
},
{
code
:
'320114006'
,
name
:
'宁南街道'
},
{
code
:
'320114007'
,
name
:
'梅山街道'
},
{
code
:
'320114008'
,
name
:
'古雄街道'
}]
},
{
code
:
'320115'
,
name
:
'江宁区'
,
streets
:
[{
code
:
'320115001'
,
name
:
'东山街道'
},
{
code
:
'320115002'
,
name
:
'秣陵街道'
},
{
code
:
'320115003'
,
name
:
'汤山街道'
},
{
code
:
'320115004'
,
name
:
'淳化街道'
},
{
code
:
'320115005'
,
name
:
'禄口街道'
},
{
code
:
'320115006'
,
name
:
'江宁街道'
},
{
code
:
'320115007'
,
name
:
'谷里街道'
},
{
code
:
'320115008'
,
name
:
'湖熟街道'
},
{
code
:
'320115009'
,
name
:
'横溪街道'
},
{
code
:
'320115010'
,
name
:
'麒麟街道'
}]
},
{
code
:
'320116'
,
name
:
'六合区'
,
streets
:
[{
code
:
'320116001'
,
name
:
'雄州街道'
},
{
code
:
'320116002'
,
name
:
'龙池街道'
},
{
code
:
'320116003'
,
name
:
'马鞍街道'
},
{
code
:
'320116004'
,
name
:
'横梁街道'
},
{
code
:
'320116005'
,
name
:
'程桥街道'
},
{
code
:
'320116006'
,
name
:
'金牛湖街道'
},
{
code
:
'320116007'
,
name
:
'冶山街道'
},
{
code
:
'320116008'
,
name
:
'竹镇镇'
},
{
code
:
'320116009'
,
name
:
'马鞍镇'
}]
},
{
code
:
'320117'
,
name
:
'溧水区'
,
streets
:
[{
code
:
'320117001'
,
name
:
'永阳街道'
},
{
code
:
'320117002'
,
name
:
'白马镇'
},
{
code
:
'320117003'
,
name
:
'东屏镇'
},
{
code
:
'320117004'
,
name
:
'晶桥镇'
},
{
code
:
'320117005'
,
name
:
'和凤镇'
},
{
code
:
'320117006'
,
name
:
'洪蓝镇'
},
{
code
:
'320117007'
,
name
:
'石湫镇'
},
{
code
:
'320117008'
,
name
:
'柘塘镇'
}]
},
{
code
:
'320118'
,
name
:
'高淳区'
,
streets
:
[{
code
:
'320118001'
,
name
:
'淳溪街道'
},
{
code
:
'320118002'
,
name
:
'古柏街道'
},
{
code
:
'320118003'
,
name
:
'漆桥镇'
},
{
code
:
'320118004'
,
name
:
'固城镇'
},
{
code
:
'320118005'
,
name
:
'东坝镇'
},
{
code
:
'320118006'
,
name
:
'桠溪镇'
},
{
code
:
'320118007'
,
name
:
'阳江镇'
},
{
code
:
'320118008'
,
name
:
'砖墙镇'
},
{
code
:
'320118009'
,
name
:
'荆溪镇'
}]
}
]
},
{
code
:
'320200'
,
name
:
'无锡市'
,
districts
:
[
{
code
:
'320205'
,
name
:
'梁溪区'
,
streets
:
[{
code
:
'320205001'
,
name
:
'崇安寺街道'
},
{
code
:
'320205002'
,
name
:
'清名桥街道'
},
{
code
:
'320205003'
,
name
:
'迎龙桥街道'
},
{
code
:
'320205004'
,
name
:
'南禅寺街道'
},
{
code
:
'320205005'
,
name
:
'惠山街道'
},
{
code
:
'320205006'
,
name
:
'北大街街道'
},
{
code
:
'320205007'
,
name
:
'广瑞路街道'
},
{
code
:
'320205008'
,
name
:
'扬名街道'
},
{
code
:
'320205009'
,
name
:
'黄巷街道'
},
{
code
:
'320205010'
,
name
:
'山北街道'
},
{
code
:
'320205011'
,
name
:
'瞻江街道'
}]
},
{
code
:
'320211'
,
name
:
'锡山区'
,
streets
:
[{
code
:
'320211001'
,
name
:
'东亭街道'
},
{
code
:
'320211002'
,
name
:
'安镇街道'
},
{
code
:
'320211003'
,
name
:
'厚桥街道'
},
{
code
:
'320211004'
,
name
:
'东北塘街道'
},
{
code
:
'320211005'
,
name
:
'锡北镇'
},
{
code
:
'320211006'
,
name
:
'东港镇'
},
{
code
:
'320211007'
,
name
:
'羊尖镇'
},
{
code
:
'320211008'
,
name
:
'鹅湖镇'
}]
},
{
code
:
'320213'
,
name
:
'惠山区'
,
streets
:
[{
code
:
'320213001'
,
name
:
'堰桥街道'
},
{
code
:
'320213002'
,
name
:
'长安街道'
},
{
code
:
'320213003'
,
name
:
'钱桥街道'
},
{
code
:
'320213004'
,
name
:
'前洲街道'
},
{
code
:
'320213005'
,
name
:
'玉祁街道'
},
{
code
:
'320213006'
,
name
:
'洛社镇'
},
{
code
:
'320213007'
,
name
:
'阳山镇'
}]
},
{
code
:
'320214'
,
name
:
'滨湖区'
,
streets
:
[{
code
:
'320214001'
,
name
:
'河埒街道'
},
{
code
:
'320214002'
,
name
:
'蠡湖街道'
},
{
code
:
'320214003'
,
name
:
'荣巷街道'
},
{
code
:
'320214004'
,
name
:
'蠡园街道'
},
{
code
:
'320214005'
,
name
:
'华庄街道'
},
{
code
:
'320214006'
,
name
:
'太湖街道'
},
{
code
:
'320214007'
,
name
:
'雪浪街道'
},
{
code
:
'320214008'
,
name
:
'马山街道'
}]
},
{
code
:
'320281'
,
name
:
'江阴市'
,
streets
:
[{
code
:
'320281001'
,
name
:
'澄江街道'
},
{
code
:
'320281002'
,
name
:
'南闸街道'
},
{
code
:
'320281003'
,
name
:
'云亭街道'
},
{
code
:
'320281004'
,
name
:
'夏港街道'
},
{
code
:
'320281005'
,
name
:
'申港街道'
},
{
code
:
'320281006'
,
name
:
'利港街道'
},
{
code
:
'320281007'
,
name
:
'璜土镇'
},
{
code
:
'320281008'
,
name
:
'月城镇'
},
{
code
:
'320281009'
,
name
:
'青阳镇'
},
{
code
:
'320281010'
,
name
:
'徐霞客镇'
},
{
code
:
'320281011'
,
name
:
'华士镇'
},
{
code
:
'320281012'
,
name
:
'周庄镇'
},
{
code
:
'320281013'
,
name
:
'新桥镇'
},
{
code
:
'320281014'
,
name
:
'长泾镇'
},
{
code
:
'320281015'
,
name
:
'顾山镇'
},
{
code
:
'320281016'
,
name
:
'祝塘镇'
}]
},
{
code
:
'320282'
,
name
:
'宜兴市'
,
streets
:
[{
code
:
'320282001'
,
name
:
'宜城街道'
},
{
code
:
'320282002'
,
name
:
'屺亭街道'
},
{
code
:
'320282003'
,
name
:
'新街街道'
},
{
code
:
'320282004'
,
name
:
'新庄街道'
},
{
code
:
'320282005'
,
name
:
'张渚镇'
},
{
code
:
'320282006'
,
name
:
'西渚镇'
},
{
code
:
'320282007'
,
name
:
'太华镇'
},
{
code
:
'320282008'
,
name
:
'徐舍镇'
},
{
code
:
'320282009'
,
name
:
'官林镇'
},
{
code
:
'320282010'
,
name
:
'杨巷镇'
},
{
code
:
'320282011'
,
name
:
'新建镇'
},
{
code
:
'320282012'
,
name
:
'和桥镇'
},
{
code
:
'320282013'
,
name
:
'高塍镇'
},
{
code
:
'320282014'
,
name
:
'万石镇'
},
{
code
:
'320282015'
,
name
:
'周铁镇'
},
{
code
:
'320282016'
,
name
:
'芳桥镇'
},
{
code
:
'320282017'
,
name
:
'丁蜀镇'
}]
}
]
}
]
}
]
}
\ No newline at end of file
\ No newline at end of file
zhiJianBusi/zjbPhone/js/busiDetail.js
View file @
c672656
...
@@ -5,6 +5,8 @@ new Vue({
...
@@ -5,6 +5,8 @@ new Vue({
el
:
'#app'
,
el
:
'#app'
,
data
:
{
data
:
{
isWorker
:
false
,
// 商机详情数据 - 按照设计图中的真实数据
// 商机详情数据 - 按照设计图中的真实数据
businessDetail
:
{
businessDetail
:
{
businessId
:
'OP20250928002'
,
// 商机ID
businessId
:
'OP20250928002'
,
// 商机ID
...
@@ -45,7 +47,7 @@ new Vue({
...
@@ -45,7 +47,7 @@ new Vue({
userInfo
:
null
,
userInfo
:
null
,
gjStore
:
{
gjStore
:
{
isShow
:
tru
e
,
isShow
:
fals
e
,
isLoading
:
false
isLoading
:
false
},
},
...
...
zhiJianBusi/zjbPhone/js/myBusi.js
View file @
c672656
new
Vue
({
new
Vue
({
el
:
'#app'
,
el
:
'#app'
,
data
:
{
data
:
{
isWorker
:
true
,
searchKeyword
:
''
,
searchKeyword
:
''
,
activeTab
:
'completed'
,
activeTab
:
'completed'
,
filterTags
:
[
filterTags
:
[
...
...
zhiJianBusi/zjbPhone/myBusi.html
View file @
c672656
...
@@ -8,9 +8,7 @@
...
@@ -8,9 +8,7 @@
</head>
</head>
<body>
<body>
<div
id=
"app"
v-cloak
>
<div
id=
"app"
v-cloak
>
<div
class=
"app-container"
data-name=
"我的商机"
data-node-id=
"355:428"
>
<div
class=
"app-container"
:class=
"{'worker-con': isWorker}"
>
<!-- 标签页统计 -->
<!-- 标签页统计 -->
<div
class=
"tab-stats"
data-node-id=
"355:513"
>
<div
class=
"tab-stats"
data-node-id=
"355:513"
>
<div
class=
"active-indicator"
data-node-id=
"355:514"
></div>
<div
class=
"active-indicator"
data-node-id=
"355:514"
></div>
...
@@ -143,7 +141,7 @@
...
@@ -143,7 +141,7 @@
</div>
</div>
<!-- 底部导航 -->
<!-- 底部导航 -->
<div
class=
"bottom-nav"
data-name=
"tab"
data-node-id=
"355:520
"
>
<div
class=
"bottom-nav"
v-if=
"isWorker
"
>
<div
<div
class=
"nav-item collect-business"
class=
"nav-item collect-business"
data-name=
"收集商机"
data-name=
"收集商机"
...
...
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