Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bill-manager-ui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
bill-manager-ui
Commits
542cec95
Commit
542cec95
authored
Jul 03, 2024
by
“yiyousong”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 排队报表接口调试
parent
fa17d4e5
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
516 additions
and
128 deletions
+516
-128
admin_2/src/App.vue
admin_2/src/App.vue
+38
-2
admin_2/src/api/site.js
admin_2/src/api/site.js
+34
-0
admin_2/src/assets/css/common.less
admin_2/src/assets/css/common.less
+6
-1
admin_2/src/components/autoRegister/AreaTree.vue
admin_2/src/components/autoRegister/AreaTree.vue
+6
-3
admin_2/src/components/autoRegister/YDatePicker.vue
admin_2/src/components/autoRegister/YDatePicker.vue
+96
-0
admin_2/src/components/autoRegister/YTable.vue
admin_2/src/components/autoRegister/YTable.vue
+1
-0
admin_2/src/layouts/components/HeaderSite.vue
admin_2/src/layouts/components/HeaderSite.vue
+1
-37
admin_2/src/pages/market/Market.vue
admin_2/src/pages/market/Market.vue
+3
-3
admin_2/src/pages/market/QueueUpReport.vue
admin_2/src/pages/market/QueueUpReport.vue
+216
-55
admin_2/src/pages/market/components/QueueUpDetails.vue
admin_2/src/pages/market/components/QueueUpDetails.vue
+75
-27
admin_2/src/utils/index.js
admin_2/src/utils/index.js
+40
-0
No files found.
admin_2/src/App.vue
View file @
542cec95
<
template
>
<
template
>
<div
class=
"app h-full w-full"
>
<div
class=
"app h-full w-full"
>
<div
class=
"loading"
v-if=
"loading"
>
<div>
<div
class=
"title"
>
{{
title
}}
...
</div>
<el-progress
:percentage=
"percentage"
color=
"#1890ff"
></el-progress>
</div>
</div>
<router-view
/>
<router-view
/>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
Vue
from
"
vue
"
;
export
default
{
export
default
{
data
()
{
data
()
{
return
{};
return
{
percentage
:
1
,
loading
:
false
,
title
:
"
文件导出中
"
,
};
},
beforeCreate
()
{
Vue
.
prototype
.
$app
=
this
;
},
},
created
()
{},
created
()
{},
methods
:
{},
methods
:
{},
};
};
...
@@ -19,5 +32,28 @@ export default {
...
@@ -19,5 +32,28 @@ export default {
.app {
.app {
background-color: #eff0f4;
background-color: #eff0f4;
font-family: Source Han Sans CN;
font-family: Source Han Sans CN;
.loading {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0px;
left: 0px;
z-index: 99999;
.title {
color: #fff;
font-size: 14px;
text-align: center;
}
.el-progress {
width: 300px;
:deep(.el-progress__text) {
color: #fff !important;
}
}
}
}
}
</
style
>
</
style
>
admin_2/src/api/site.js
View file @
542cec95
...
@@ -8,3 +8,37 @@ export const getSiteTree = (params) => {
...
@@ -8,3 +8,37 @@ export const getSiteTree = (params) => {
params
,
params
,
});
});
};
};
// 获取部门
export
const
getDepartment
=
(
data
)
=>
{
return
request
({
url
:
`/base/dept/list`
,
method
:
"
post
"
,
data
,
});
};
// 获取大厅
export
const
getHall
=
(
data
)
=>
{
return
request
({
url
:
`/base/site/hall/list`
,
method
:
"
post
"
,
data
,
});
};
// 获取窗口
export
const
getWindow
=
(
data
)
=>
{
return
request
({
url
:
`/base/window/list`
,
method
:
"
post
"
,
data
,
});
};
// 获取站点业务
export
const
getSiteBusiness
=
(
data
)
=>
{
return
request
({
url
:
`/base/site/business/list`
,
method
:
"
post
"
,
data
,
});
};
admin_2/src/assets/css/common.less
View file @
542cec95
...
@@ -160,6 +160,11 @@
...
@@ -160,6 +160,11 @@
background-color:var(--primary)
background-color:var(--primary)
}
}
.el-descriptions-item__content:empty::before {
content: "--";
color: gray;
}
// .search-popover{
// .search-popover{
// box-shadow: 0 0 12px 0 rgba(24, 144, 255, 0.1);
// box-shadow: 0 0 12px 0 rgba(24, 144, 255, 0.1);
// border: 1px solid var(--primary);
// border: 1px solid var(--primary);
...
@@ -167,4 +172,4 @@
...
@@ -167,4 +172,4 @@
// border-bottom-color: var(--primary) !important;
// border-bottom-color: var(--primary) !important;
// }
// }
// }
// }
\ No newline at end of file
admin_2/src/components/autoRegister/AreaTree.vue
View file @
542cec95
<
template
>
<
template
>
<div
class=
"h-full w-full"
>
<div
class=
"h-full w-full"
>
<el-tree
<el-tree
:data=
"
site
Tree"
:data=
"
area
Tree"
:props=
"defaultProps"
:props=
"defaultProps"
node-key=
"id"
node-key=
"id"
highlight-current
highlight-current
...
@@ -50,8 +50,11 @@ export default {
...
@@ -50,8 +50,11 @@ export default {
created
()
{},
created
()
{},
methods
:
{
methods
:
{
handleNodeClick
(
data
)
{
handleNodeClick
(
data
)
{
let
type
=
data
.
type
;
let
form
=
{
this
.
$emit
(
"
change
"
,
type
,
data
.
id
);
type
:
data
.
type
,
id
:
data
.
id
,
};
this
.
$emit
(
"
change
"
,
form
);
},
},
},
},
};
};
...
...
admin_2/src/components/autoRegister/YDatePicker.vue
0 → 100644
View file @
542cec95
<
template
>
<el-date-picker
:value=
"value"
type=
"daterange"
:value-format=
"valueFormat"
unlink-panels
:picker-options=
"pickerOptions"
:clearable=
"Clearable"
v-bind=
"$attrs"
@
input=
"handleChange"
v-on=
"$listeners"
>
</el-date-picker>
</
template
>
<
script
>
export
default
{
name
:
"
YDatePicker
"
,
model
:
{
event
:
"
change
"
,
prop
:
"
value
"
,
},
props
:
{
value
:
{
type
:
Array
,
default
:
()
=>
{
return
[];
},
},
clearable
:
{
type
:
Boolean
,
default
:
false
,
},
valueFormat
:
{
type
:
String
,
default
:
"
yyyy-MM-dd
"
,
},
},
data
()
{
return
{
pickerOptions
:
{
shortcuts
:
[
{
text
:
"
今天
"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
picker
.
$emit
(
"
pick
"
,
[
start
,
end
]);
},
},
{
text
:
"
最近一周
"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
7
);
picker
.
$emit
(
"
pick
"
,
[
start
,
end
]);
},
},
{
text
:
"
最近一个月
"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
30
);
picker
.
$emit
(
"
pick
"
,
[
start
,
end
]);
},
},
{
text
:
"
最近三个月
"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
90
);
picker
.
$emit
(
"
pick
"
,
[
start
,
end
]);
},
},
],
},
};
},
computed
:
{
Clearable
()
{
return
!!
this
.
clearable
;
},
},
methods
:
{
handleChange
(
val
)
{
this
.
$emit
(
"
change
"
,
val
);
},
},
};
</
script
>
<
style
lang=
"less"
scoped
></
style
>
admin_2/src/components/autoRegister/YTable.vue
View file @
542cec95
...
@@ -62,6 +62,7 @@ export default {
...
@@ -62,6 +62,7 @@ export default {
handler
()
{
handler
()
{
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
$refs
.
MyTable
.
bodyWrapper
.
scrollTop
=
0
;
this
.
$refs
.
MyTable
.
bodyWrapper
.
scrollTop
=
0
;
this
.
$refs
.
MyTable
.
bodyWrapper
.
scrollLeft
=
0
;
});
});
},
},
immediate
:
true
,
immediate
:
true
,
...
...
admin_2/src/layouts/components/HeaderSite.vue
View file @
542cec95
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
class=
"content"
class=
"content"
style=
"min-width: 60vw; max-width: 80vw; min-height: 200px"
style=
"min-width: 60vw; max-width: 80vw; min-height: 200px"
>
>
<div
class=
"
flex_row flex_align_c primary-color
name"
>
<div
class=
"name"
>
<i
class=
"el-icon-location"
style=
"margin-right: 10px"
></i>
<i
class=
"el-icon-location"
style=
"margin-right: 10px"
></i>
<span
style=
""
>
{{
siteName
}}
</span>
<span
style=
""
>
{{
siteName
}}
</span>
</div>
</div>
...
@@ -230,40 +230,4 @@ export default {
...
@@ -230,40 +230,4 @@ export default {
color: #ffffff;
color: #ffffff;
cursor: pointer;
cursor: pointer;
}
}
.select-site {
position: fixed;
left: 300px !important;
top: 65px;
background: #fff;
border-radius: 6px;
padding: 10px;
min-width: 60%;
max-width: 80%;
z-index: 9;
color: rgba(0, 0, 0, 0.8);
font-size: 14px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
.name {
font-size: 20px;
}
.site-list {
// padding: 10px 0;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
overflow: hidden;
span {
float: left;
line-height: 1.5;
padding: 10px 20px;
cursor: pointer;
&:hover {
color: #1890ff;
}
}
}
.check-site,
.site-btn {
padding: 0 20px;
}
}
</
style
>
</
style
>
admin_2/src/pages/market/Market.vue
View file @
542cec95
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
</el-tab-pane>
</el-tab-pane>
</el-tabs>
</el-tabs>
<div
class=
"out-box flex-1 p-[20px]"
>
<div
class=
"out-box flex-1 p-[20px]"
>
<router-view></router-view>
<router-view
ref=
"Page"
></router-view>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -56,8 +56,8 @@ export default {
...
@@ -56,8 +56,8 @@ export default {
);
);
},
},
// 改变站点选择
// 改变站点选择
changeSite
(
type
,
siteId
)
{
changeSite
(
data
)
{
console
.
log
(
type
,
siteId
);
this
.
$refs
.
Page
.
getSite
(
data
);
},
},
},
},
};
};
...
...
admin_2/src/pages/market/QueueUpReport.vue
View file @
542cec95
This diff is collapsed.
Click to expand it.
admin_2/src/pages/market/components/QueueUpDetails.vue
View file @
542cec95
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
labelClassName=
"label-name"
labelClassName=
"label-name"
>
>
<el-descriptions-item
<el-descriptions-item
v-for=
"(v, i) in d
etailsList
"
v-for=
"(v, i) in d
ataInfo
"
:key=
"i"
:key=
"i"
:label=
"v.title"
:label=
"v.title"
>
>
...
@@ -25,123 +25,156 @@
...
@@ -25,123 +25,156 @@
</
template
>
</
template
>
<
script
>
<
script
>
import
{
formatSeconds
}
from
"
@/utils
"
;
export
default
{
export
default
{
props
:
{
props
:
{
show
:
{
show
:
{
type
:
Boolean
,
type
:
Boolean
,
default
:
false
,
default
:
false
,
},
},
info
:
{
required
:
true
,
type
:
Object
,
default
:
()
=>
{},
},
},
},
data
()
{
data
()
{
return
{
return
{
detailsList
:
[
detailsList
:
[
{
{
title
:
"
预约编号
"
,
title
:
"
预约编号
"
,
content
:
"
测试
"
,
prop
:
"
ordernumber
"
,
content
:
""
,
},
},
{
{
title
:
"
叫号状态
"
,
title
:
"
叫号状态
"
,
content
:
"
测试
"
,
prop
:
"
style
"
,
content
:
""
,
},
},
{
{
title
:
"
业务名称
"
,
title
:
"
业务名称
"
,
content
:
"
测试
"
,
prop
:
"
business
"
,
content
:
""
,
},
},
{
{
title
:
"
窗口名称
"
,
title
:
"
窗口名称
"
,
content
:
"
测试
"
,
prop
:
"
windowName
"
,
content
:
""
,
},
},
{
{
title
:
"
窗口编号
"
,
title
:
"
窗口编号
"
,
content
:
"
测试
"
,
prop
:
"
windowFromnum
"
,
content
:
""
,
},
},
{
{
title
:
"
流水编号,当天的第xxx号
"
,
title
:
"
流水编号,当天的第xxx号
"
,
content
:
"
测试
"
,
prop
:
"
flownum
"
,
content
:
""
,
},
},
{
{
title
:
"
呼叫转移号
"
,
title
:
"
呼叫转移号
"
,
content
:
"
测试
"
,
prop
:
"
formernum
"
,
content
:
""
,
},
},
{
{
title
:
"
姓名
"
,
title
:
"
姓名
"
,
content
:
"
测试
"
,
prop
:
"
peopleName
"
,
content
:
""
,
},
},
{
{
title
:
"
身份证号
"
,
title
:
"
身份证号
"
,
content
:
"
测试
"
,
prop
:
"
peopleIdcard
"
,
content
:
""
,
},
},
{
{
title
:
"
性别
"
,
title
:
"
性别
"
,
content
:
"
测试
"
,
prop
:
"
peopleSex
"
,
content
:
""
,
},
},
{
{
title
:
"
手机号
"
,
title
:
"
手机号
"
,
content
:
"
测试
"
,
prop
:
"
peoplePhone
"
,
content
:
""
,
},
},
{
{
title
:
"
工作人员姓名
"
,
title
:
"
工作人员姓名
"
,
content
:
"
测试
"
,
prop
:
"
workmanName
"
,
content
:
""
,
},
},
{
{
title
:
"
工作人员工号
"
,
title
:
"
工作人员工号
"
,
content
:
"
测试
"
,
prop
:
"
workmanNumber
"
,
content
:
""
,
},
},
{
{
title
:
"
取号时间
"
,
title
:
"
取号时间
"
,
content
:
"
测试
"
,
prop
:
"
taketime
"
,
content
:
""
,
},
},
{
{
title
:
"
结束时间
"
,
title
:
"
结束时间
"
,
content
:
"
测试
"
,
prop
:
"
endtime
"
,
content
:
""
,
},
},
{
{
title
:
"
等待时间
"
,
title
:
"
等待时间
"
,
content
:
"
测试
"
,
prop
:
"
waitTime
"
,
content
:
""
,
},
},
{
{
title
:
"
办理时间
"
,
title
:
"
办理时间
"
,
content
:
"
测试
"
,
prop
:
"
handleTime
"
,
content
:
""
,
},
},
{
{
title
:
"
取号设备类型
"
,
title
:
"
取号设备类型
"
,
content
:
"
测试
"
,
prop
:
"
deviceType
"
,
content
:
""
,
},
},
{
{
title
:
"
取号设备名称
"
,
title
:
"
取号设备名称
"
,
content
:
"
测试
"
,
prop
:
"
deviceName
"
,
content
:
""
,
},
},
{
{
title
:
"
呼叫设备
"
,
title
:
"
呼叫设备
"
,
content
:
"
测试
"
,
prop
:
"
callName
"
,
content
:
""
,
},
},
{
{
title
:
"
事项名称
"
,
title
:
"
事项名称
"
,
content
:
"
测试
"
,
prop
:
"
matterName
"
,
content
:
""
,
},
},
{
{
title
:
"
排号队列ID,唯一
"
,
title
:
"
排号队列ID,唯一
"
,
content
:
"
测试
"
,
prop
:
"
queueid
"
,
content
:
""
,
},
},
{
{
title
:
"
大厅名称
"
,
title
:
"
大厅名称
"
,
prop
:
"
hallName
"
,
content
:
"
测试
"
,
content
:
"
测试
"
,
},
},
{
{
title
:
"
站点ID
"
,
title
:
"
站点ID
"
,
content
:
"
测试
"
,
prop
:
"
siteId
"
,
content
:
""
,
},
},
{
{
title
:
"
站点编码
"
,
title
:
"
站点编码
"
,
content
:
"
测试
"
,
prop
:
"
siteCode
"
,
content
:
""
,
},
},
{
{
title
:
"
站点名称
"
,
title
:
"
站点名称
"
,
content
:
"
测试
"
,
prop
:
"
siteName
"
,
content
:
""
,
},
},
{
{
title
:
"
扩展编号
"
,
title
:
"
扩展编号
"
,
content
:
"
测试
"
,
prop
:
"
extNum
"
,
content
:
""
,
},
},
],
],
};
};
...
@@ -155,7 +188,22 @@ export default {
...
@@ -155,7 +188,22 @@ export default {
this
.
$emit
(
"
update:show
"
,
val
);
this
.
$emit
(
"
update:show
"
,
val
);
},
},
},
},
dataInfo
()
{
this
.
detailsList
.
forEach
((
v
)
=>
{
if
(
v
.
prop
==
"
taketime
"
||
v
.
prop
==
"
endtime
"
)
{
v
.
content
=
this
.
$moment
(
this
.
info
[
v
.
prop
]).
format
(
"
YYYY-MM-DD HH:mm:ss
"
);
}
else
if
(
v
.
prop
==
"
waitTime
"
||
v
.
prop
==
"
handleTime
"
)
{
v
.
content
=
formatSeconds
(
this
.
info
[
v
.
prop
]);
}
else
{
v
.
content
=
this
.
info
[
v
.
prop
];
}
});
return
this
.
detailsList
;
},
},
},
methods
:
{},
};
};
</
script
>
</
script
>
...
...
admin_2/src/utils/index.js
View file @
542cec95
import
Vue
from
"
vue
"
;
import
CryptoJS
from
"
crypto-js
"
;
import
CryptoJS
from
"
crypto-js
"
;
import
moment
from
"
moment
"
;
// 加密数据
// 加密数据
export
let
encrypt
=
(
str
,
keyStr
,
ivStr
)
=>
{
export
let
encrypt
=
(
str
,
keyStr
,
ivStr
)
=>
{
...
@@ -121,3 +123,41 @@ export function findBottomSubarrays(arr) {
...
@@ -121,3 +123,41 @@ export function findBottomSubarrays(arr) {
recursiveSearch
(
arr
);
recursiveSearch
(
arr
);
return
bottomSubarrays
;
return
bottomSubarrays
;
}
}
// 秒数转HH:mm:ss
export
function
formatSeconds
(
secondsNum
)
{
const
time
=
moment
.
duration
(
secondsNum
,
"
seconds
"
);
const
hours
=
time
.
hours
();
const
minutes
=
time
.
minutes
();
const
seconds
=
time
.
seconds
();
return
moment
({
h
:
hours
,
m
:
minutes
,
s
:
seconds
}).
format
(
"
HH:mm:ss
"
);
}
/**
*
* @param {*} fn 数据获取函数
* @param {*} searchForm 搜索表单
* @param {*} callback 回调函数
*/
export
const
dataSection
=
async
(
fn
,
searchForm
=
{},
callback
)
=>
{
let
dataList
=
[];
let
page
=
1
;
let
size
=
1000
;
let
execute
=
async
()
=>
{
let
{
data
,
total
}
=
await
fn
({
page
,
size
,
...
searchForm
});
dataList
=
[...
dataList
,
...
data
];
Vue
.
prototype
.
$app
.
loading
=
true
;
Vue
.
prototype
.
$app
.
percentage
=
parseInt
((
dataList
.
length
/
total
)
*
100
);
if
(
dataList
.
length
>=
total
||
data
.
data
.
length
==
0
)
{
if
(
callback
)
callback
(
dataList
);
Vue
.
prototype
.
$app
.
loading
=
false
;
Vue
.
prototype
.
$app
.
percentage
=
1
;
return
;
}
setTimeout
(()
=>
{
page
+=
1
;
execute
();
});
};
execute
();
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment