Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
peizhen-vue
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PeiZhen-Java
peizhen-vue
Commits
2cea9506
Commit
2cea9506
authored
Oct 09, 2023
by
‘巴博尔’
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加首页数据统计
parent
24f40147
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
860 additions
and
334 deletions
+860
-334
src/api/index.js
+107
-0
src/views/index.vue
+493
-108
src/views/user/companion/index.vue
+257
-224
vue.config.js
+3
-2
No files found.
src/api/index.js
0 → 100644
View file @
2cea9506
/*
* @Author: ‘巴博尔’ 2164119982@qq.com
* @Date: 2023-10-09 14:59:34
* @LastEditors: ‘巴博尔’ 2164119982@qq.com
* @LastEditTime: 2023-10-09 18:59:06
* @FilePath: \peizhen-vue\src\api\index.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import
request
from
"@/utils/request"
;
// 新增用户统计
export
function
dataUserGet
(
query
)
{
return
request
({
url
:
"/system/data/dataUser"
,
method
:
"get"
,
params
:
query
,
});
}
// 新增陪诊员统计
export
function
dataEmployeesGet
(
query
)
{
return
request
({
url
:
"/system/data/dataEmployees"
,
method
:
"get"
,
params
:
query
,
});
}
// 订单销售额
export
function
saleroomGet
(
query
)
{
return
request
({
url
:
"/system/data/saleroom"
,
method
:
"get"
,
params
:
query
,
});
}
// 平台收益
export
function
platformRevenueGet
(
query
)
{
return
request
({
url
:
"/system/data/platformRevenue"
,
method
:
"get"
,
params
:
query
,
});
}
// 订单量
export
function
orderQuantityGet
(
query
)
{
return
request
({
url
:
"/system/data/orderQuantity"
,
method
:
"get"
,
params
:
query
,
});
}
// 数据总览柱状图
export
function
orderQuantityEchartsGet
(
query
)
{
return
request
({
url
:
`/system/data/findOrderColumnarVoList`
,
method
:
"get"
,
params
:
query
,
});
}
// 新增陪诊员
export
function
addEmployeesPost
(
data
)
{
return
request
({
url
:
"/merchant/employees"
,
method
:
"post"
,
data
:
data
,
});
}
// 陪诊员详情
export
function
employeesDetailsGet
(
query
)
{
return
request
({
url
:
`/merchant/employees/
${
query
.
id
}
`
,
method
:
"get"
,
});
}
// 陪诊员修改
export
function
employeesUpdatePut
(
data
)
{
return
request
({
url
:
"/merchant/employees/EmployeesUpdate"
,
method
:
"put"
,
data
:
data
,
});
}
// 陪诊员冻结
export
function
switchStatusPut
(
data
)
{
return
request
({
url
:
`/merchant/app/employees/switchStatus?emId=
${
data
.
emId
}
`
,
method
:
"put"
,
// data: data,
});
}
// 设置为陪护人员
export
function
switchIdentityPut
(
data
)
{
return
request
({
url
:
`/merchant/app/employees/switchIdentity?emId=
${
data
.
emId
}
`
,
method
:
"put"
,
// data: data,
});
}
src/views/index.vue
View file @
2cea9506
<
template
>
<div
class=
"app-container home"
>
<el-divider
/>
<div
class=
"index-content"
>
<div
class=
"index-content-nav"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"4"
>
<div
class=
"index-content-nav-item"
>
<div
class=
"index-content-nav-item-top"
>
<h3>
新增用户
</h3>
<el-select
v-model=
"valueA"
placeholder=
"请选择"
style=
"width: 10em"
@
change=
"dataUserAxios"
>
<el-option
v-for=
"item in [
{ label: '今天', value: 1 },
{ label: '最近7天', value: 2 },
{ label: '最近30天', value: 3 },
{ label: '总计', value: 0 },
]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<h2>
{{
sumA
}}
</h2>
</div>
</el-col>
<el-col
:span=
"4"
>
<div
class=
"index-content-nav-item"
>
<div
class=
"index-content-nav-item-top"
>
<h3>
总销售额
</h3>
<el-select
v-model=
"valueB"
placeholder=
"请选择"
style=
"width: 10em"
@
change=
"saleroomAxios"
>
<el-option
v-for=
"item in [
{ label: '今天', value: 1 },
{ label: '最近7天', value: 2 },
{ label: '最近30天', value: 3 },
{ label: '总计', value: 0 },
]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<h2>
{{
sumB
}}
</h2>
</div>
</el-col>
<el-col
:span=
"4"
>
<div
class=
"index-content-nav-item"
>
<div
class=
"index-content-nav-item-top"
>
<h3>
新增陪诊员
</h3>
<el-select
v-model=
"valueC"
placeholder=
"请选择"
style=
"width: 10em"
@
change=
"dataEmployeesAxios"
>
<el-option
v-for=
"item in [
{ label: '今天', value: 1 },
{ label: '最近7天', value: 2 },
{ label: '最近30天', value: 3 },
{ label: '总计', value: 0 },
]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<h2>
{{
sumC
}}
</h2>
</div>
</el-col>
<el-col
:span=
"4"
>
<div
class=
"index-content-nav-item"
>
<div
class=
"index-content-nav-item-top"
>
<h3>
平台收益
</h3>
<el-select
v-model=
"valueD"
placeholder=
"请选择"
style=
"width: 10em"
@
change=
"platformRevenueAxios"
>
<el-option
v-for=
"item in [
{ label: '今天', value: 1 },
{ label: '最近7天', value: 2 },
{ label: '最近30天', value: 3 },
{ label: '总计', value: 0 },
]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<h2>
{{
sumD
}}
</h2>
</div>
</el-col>
<el-col
:span=
"4"
>
<div
class=
"index-content-nav-item"
>
<div
class=
"index-content-nav-item-top"
>
<h3>
总订单量
</h3>
<el-select
v-model=
"valueE"
placeholder=
"请选择"
style=
"width: 10em"
@
change=
"orderQuantityAxios"
>
<el-option
v-for=
"item in [
{ label: '今天', value: 1 },
{ label: '最近7天', value: 2 },
{ label: '最近30天', value: 3 },
{ label: '总计', value: 0 },
]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<h2>
{{
sumE
}}
</h2>
</div>
</el-col>
</el-row>
</div>
<div
class=
"index-content-order"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"24"
>
<div
class=
"index-content-order-top"
>
<h3>
已完成订单
</h3>
<div>
<el-date-picker
ref=
"dataPicker"
v-model
.
trim=
"daterangeTime"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
value-format=
"yyyy-MM-dd"
v-if=
"valueF == 2"
style=
"margin-right: 15px"
:picker-options=
"pickerOptions"
unlink-panels
@
change=
"changeDataer"
>
</el-date-picker>
<el-select
v-model=
"valueF"
placeholder=
"请选择"
style=
"width: 10em"
@
change=
"changeValueF"
>
<el-option
v-for=
"item in [
{ label: '最近7天', value: 0 },
{ label: '最近30天', value: 1 },
{ label: '自定义', value: 2 },
]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
</div>
<!--
<h2>
总量:
{{
sumF
}}
</h2>
-->
<div
class=
"chart"
id=
"mychart"
:style=
"
{ height: '450px', width: '100%' }"
/>
</el-col>
</el-row>
</div>
</div>
<!--
<el-divider
/>
<el-row
:gutter=
"20"
>
</el-row>
...
...
@@ -24,125 +215,274 @@
</div>
</el-card>
</el-col>
</el-row>
<!--
<el-row
:gutter=
"20"
>
<el-col
:sm=
"24"
:lg=
"12"
style=
"padding-left: 20px"
>
<h2>
闪陪科技
</h2>
<p>
陪诊 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
<br/>
* 前端开发框架 Vue、Element UI
<br/>
* 后端开发框架 Spring Boot
<br/>
* 容器框架 Undertow 基于 XNIO 的高性能容器
<br/>
* 权限认证框架 Sa-Token、Jwt 支持多终端认证系统
<br/>
* 关系数据库 MySQL 适配 8.X 最低 5.7
<br/>
* 关系数据库 Oracle 适配 11g 12c
<br/>
* 关系数据库 PostgreSQL 适配 13 14
<br/>
* 关系数据库 SQLServer 适配 2017 2019
<br/>
* 缓存数据库 Redis 适配 6.X 最低 4.X
<br/>
* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率
<br/>
* 数据库框架 p6spy 更强劲的 SQL 分析
<br/>
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构
<br/>
* 序列化框架 Jackson 统一使用 jackson 高效可靠
<br/>
* Redis客户端 Redisson 性能强劲、API丰富
<br/>
* 分布式限流 Redisson 全局、请求IP、集群ID 多种限流
<br/>
* 分布式锁 Lock4j 注解锁、工具锁 多种多样
<br/>
* 分布式幂等 Redisson 拦截重复提交
<br/>
* 分布式链路追踪 SkyWalking 支持链路追踪、网格分析、度量聚合、可视化
<br/>
* 分布式任务调度 Xxl-Job 高性能 高可靠 易扩展
<br/>
* 分布式文件存储 Minio 本地存储
<br/>
* 分布式云存储 七牛、阿里、腾讯 云存储
<br/>
* 监控框架 SpringBoot-Admin 全方位服务监控
<br/>
* 校验框架 Validation 增强接口安全性 严谨性
<br/>
* Excel框架 Alibaba EasyExcel 性能优异 扩展性强
<br/>
* 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释
<br/>
* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性
<br/>
* 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码
<br/>
* 部署方式 Docker 容器编排 一键部署业务集群
<br/>
* 国际化 SpringMessage Spring标准国际化方案
<br/>
</p>
<p>
<b>
当前版本:
</b>
<span>
v
{{
version
}}
</span>
</p>
<p>
<el-tag
type=
"danger"
>
¥
免费开源
</el-tag>
</p>
<p>
<el-button
type=
"primary"
size=
"mini"
icon=
"el-icon-cloudy"
plain
@
click=
"goTarget('https://gitee.com/dromara/陪诊')"
>
访问码云
</el-button
>
<el-button
type=
"primary"
size=
"mini"
icon=
"el-icon-cloudy"
plain
@
click=
"goTarget('https://github.com/dromara/陪诊')"
>
访问GitHub
</el-button
>
<el-button
type=
"primary"
size=
"mini"
icon=
"el-icon-cloudy"
plain
@
click=
"goTarget('https://gitee.com/dromara/陪诊/wikis/pages?sort_id=4106467&doc_id=1469725')"
>
更新日志
</el-button
>
</p>
</el-col>
<el-col
:sm=
"24"
:lg=
"12"
style=
"padding-left: 50px"
>
<el-row>
<el-col
:span=
"12"
>
<h2>
技术选型
</h2>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<h4>
后端技术
</h4>
<ul>
<li>
SpringBoot
</li>
<li>
Sa-Token
</li>
<li>
JWT
</li>
<li>
MyBatis
</li>
<li>
Druid
</li>
<li>
Jackson
</li>
<li>
...
</li>
</ul>
</el-col>
<el-col
:span=
"6"
>
<h4>
前端技术
</h4>
<ul>
<li>
Vue
</li>
<li>
Vuex
</li>
<li>
Element-ui
</li>
<li>
Axios
</li>
<li>
Sass
</li>
<li>
Quill
</li>
<li>
...
</li>
</ul>
</el-col>
</el-row>
</el-col>
</el-row>
<el-divider
/>
-->
</el-row>
-->
</div>
</
template
>
<
script
>
import
*
as
echarts
from
"echarts"
;
require
(
"echarts/theme/macarons"
);
// echarts theme
import
resize
from
"./dashboard/mixins/resize"
;
const
animationDuration
=
3000
;
import
{
dataUserGet
,
dataEmployeesGet
,
saleroomGet
,
platformRevenueGet
,
orderQuantityGet
,
orderQuantityEchartsGet
,
}
from
"@/api/index.js"
;
export
default
{
name
:
"Index"
,
mixins
:
[
resize
],
data
()
{
return
{
// 版本号
version
:
"4.8.0"
,
valueA
:
1
,
sumA
:
0
,
valueB
:
1
,
sumB
:
0
,
valueC
:
1
,
sumC
:
0
,
valueD
:
1
,
sumD
:
0
,
valueE
:
1
,
sumE
:
0
,
valueF
:
0
,
sumF
:
0
,
chart
:
null
,
daterangeTime
:
""
,
pickerOptions
:
{
onPick
:
({
maxDate
,
minDate
})
=>
{
this
.
daterangeTime
=
minDate
.
getTime
();
if
(
maxDate
)
{
this
.
daterangeTime
=
""
;
}
},
disabledDate
:
(
time
)
=>
{
if
(
this
.
daterangeTime
!==
""
&&
this
.
daterangeTime
!=
null
)
{
const
one
=
30
*
24
*
3600
*
1000
;
const
minTime
=
this
.
daterangeTime
-
one
;
const
maxTime
=
this
.
daterangeTime
+
one
;
return
time
.
getTime
()
<
minTime
||
time
.
getTime
()
>
maxTime
;
}
},
},
};
},
mounted
()
{
this
.
dataUserAxios
();
this
.
dataEmployeesAxios
();
this
.
saleroomAxios
();
this
.
platformRevenueAxios
();
this
.
orderQuantityAxios
();
this
.
orderQuantityEchartsAxios
();
},
beforeDestroy
()
{
if
(
!
this
.
chart
)
{
return
;
}
this
.
chart
.
dispose
();
this
.
chart
=
null
;
},
methods
:
{
changeDataer
(
e
)
{
console
.
log
(
"changeDataer"
,
e
);
if
(
!
e
)
{
this
.
daterangeTime
=
""
;
this
.
valueF
=
0
;
}
this
.
orderQuantityEchartsAxios
();
},
changeValueF
(
e
)
{
if
(
e
!=
2
)
{
this
.
orderQuantityEchartsAxios
();
}
},
async
orderQuantityEchartsAxios
()
{
let
params
=
{
type
:
this
.
valueF
,
};
if
([
0
,
1
].
includes
(
this
.
valueF
))
{
}
else
if
(
this
.
valueF
==
2
)
{
params
.
startTime
=
this
.
daterangeTime
&&
this
.
daterangeTime
.
length
?
this
.
daterangeTime
[
0
]
:
""
;
params
.
endTime
=
this
.
daterangeTime
&&
this
.
daterangeTime
.
length
?
this
.
daterangeTime
[
1
]
:
""
;
}
const
{
code
,
data
}
=
await
orderQuantityEchartsGet
(
params
);
if
(
code
===
200
&&
data
&&
data
.
length
)
{
// let sum = 0;
// data.forEach((item) => {
// sum += item.num;
// });
// this.sumF = sum;
let
xData
=
[],
yData
=
[];
xData
=
data
.
map
((
item
)
=>
{
return
item
.
key
;
});
yData
=
data
.
map
((
item
)
=>
{
return
item
.
list
;
});
let
maxList
=
[],
ykList
=
[];
data
.
forEach
((
item
)
=>
{
if
(
item
.
list
&&
item
.
list
.
length
)
{
let
ak
=
item
.
list
.
map
((
fk
)
=>
{
return
fk
.
num
;
});
let
max
=
Math
.
max
.
apply
(
null
,
ak
);
maxList
.
push
(
max
);
}
});
console
.
log
(
xData
,
yData
,
maxList
,
data
);
this
.
$nextTick
(()
=>
{
this
.
initChart
(
xData
,
yData
,
maxList
,
data
);
});
}
else
{
this
.
sumF
=
0
;
this
.
$nextTick
(()
=>
{
this
.
initChart
([],
[]);
});
}
},
async
orderQuantityAxios
()
{
const
{
code
,
data
}
=
await
orderQuantityGet
({
condition
:
this
.
valueE
,
});
if
(
code
===
200
)
{
this
.
sumE
=
data
.
dataSum
||
0
;
}
},
async
platformRevenueAxios
()
{
const
{
code
,
data
}
=
await
platformRevenueGet
({
condition
:
this
.
valueD
,
});
if
(
code
===
200
)
{
this
.
sumD
=
data
.
dataSum
||
0
;
}
},
async
saleroomAxios
()
{
const
{
code
,
data
}
=
await
saleroomGet
({
condition
:
this
.
valueB
,
});
if
(
code
===
200
)
{
this
.
sumB
=
data
.
dataSum
||
0
;
}
},
async
dataEmployeesAxios
()
{
const
{
code
,
data
}
=
await
dataEmployeesGet
({
condition
:
this
.
valueC
,
});
if
(
code
===
200
)
{
this
.
sumC
=
data
.
dataSum
||
0
;
}
},
async
dataUserAxios
()
{
const
{
code
,
data
}
=
await
dataUserGet
({
condition
:
this
.
valueA
,
});
if
(
code
===
200
)
{
this
.
sumA
=
data
.
dataSum
||
0
;
}
},
initChart
(
xData
,
yData
,
maxList
,
ykList
)
{
// 基本柱状图
const
option
=
{
// legend: {
// type: "plain", // 图列类型,默认为 'plain'
// bottom: "0px", // 图列相对容器的位置 top\bottom\left\right
// data: xData,
// },
grid
:
{
top
:
"10px"
,
bottom
:
"40px"
,
right
:
"2%"
,
left
:
"2%"
,
},
tooltip
:
{
//提示框组件,用于配置鼠标滑过或点击图表时的显示框。
show
:
true
,
// 是否显示
trigger
:
"axis"
,
// 触发类型 'item'图形触发:散点图,饼图等无类目轴的图表中使用; 'axis'坐标轴触发;'none':什么都不触发。
axisPointer
:
{
// 坐标轴指示器配置项。
type
:
"cross"
,
// 'line' 直线指示器 'shadow' 阴影指示器 'none' 无指示器 'cross' 十字准星指示器。
},
// showContent: true, //是否显示提示框浮层,默认显示。
// triggerOn: 'mouseover', // 触发时机'click'鼠标点击时触发。
backgroundColor
:
"rgba(50,50,50,0.7)"
,
// 提示框浮层的背景颜色。
borderColor
:
"#333"
,
// 提示框浮层的边框颜色。
borderWidth
:
0
,
// 提示框浮层的边框宽。
padding
:
5
,
// 提示框浮层内边距,
textStyle
:
{
// 提示框浮层的文本样式。
color
:
"#fff"
,
fontStyle
:
"normal"
,
fontWeight
:
"normal"
,
fontFamily
:
"sans-serif"
,
fontSize
:
14
,
},
// 提示框浮层内容格式器,支持字符串模板和回调函数两种形式。
// 模板变量有 {a}, {b},{c},分别表示系列名,数据名,数据值等
// formatter: '{a}--{b} 的成绩是 {c}'
formatter
:
function
(
arg
)
{
let
hk
=
""
;
ykList
.
forEach
((
item
)
=>
{
if
(
item
.
key
==
arg
[
0
].
name
&&
item
.
list
&&
item
.
list
.
length
)
{
item
.
list
.
forEach
((
fk
)
=>
{
hk
+=
`<p>
${
fk
.
name
}
:
${
fk
.
num
}
</p>`
;
});
}
});
// return arg[0].name + "的总量是:" + arg[0].data;
return
hk
;
},
},
xAxis
:
[
{
type
:
"category"
,
data
:
xData
,
},
],
yAxis
:
[
{
type
:
"value"
,
},
],
series
:
[
{
name
:
xData
,
// type: "bar",
type
:
"line"
,
barWidth
:
"40%"
,
data
:
maxList
,
animationDuration
,
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[
{
offset
:
0
,
color
:
"#6d8bec"
,
},
{
offset
:
1
,
color
:
"#1506e4"
,
},
]),
},
],
};
const
myChart
=
echarts
.
init
(
document
.
getElementById
(
"mychart"
));
myChart
.
setOption
(
option
);
//随着屏幕大小调节图表
window
.
addEventListener
(
"resize"
,
()
=>
{
myChart
.
resize
();
});
},
goTarget
(
href
)
{
window
.
open
(
href
,
"_blank"
);
},
...
...
@@ -212,5 +552,50 @@ export default {
}
}
}
</
style
>
.index-content
{
width
:
100%
;
&-nav
{
width
:
100%
;
display
:
flex
;
&-item
{
min-height
:
50px
;
border-radius
:
4px
;
box-shadow
:
0
0
10px
2px
#e2dfdf
;
padding
:
10px
;
&-top
{
display
:
flex
;
justify-content
:
space-between
;
}
h2
{
width
:
100%
;
height
:
120
rpx
;
line-height
:
120
rpx
;
}
}
.el-row
{
width
:
100%
;
margin-bottom
:
20px
;
&:last-child
{
margin-bottom
:
0
;
}
.el-col
{
width
:
20%
;
}
}
}
&
-order
{
width
:
100%
;
margin-top
:
25px
;
box-shadow
:
0
0
10px
2px
#e2dfdf
;
padding
:
10px
;
min-height
:
100px
;
border-radius
:
4px
;
&-top
{
width
:
100%
;
display
:
flex
;
justify-content
:
space-between
;
}
}
}
</
style
>
src/views/user/companion/index.vue
View file @
2cea9506
...
...
@@ -97,17 +97,16 @@
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<
!--
<
el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['system:user:add']"
>
新增
</el-button
>
</el-col>
--
>
</el-col
>
<!--
<el-col
:span=
"1.5"
>
<el-button
type=
"success"
...
...
@@ -326,7 +325,7 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column> -->
<
!-- <
el-table-column
<el-table-column
label=
"操作"
align=
"center"
width=
"160"
...
...
@@ -336,20 +335,44 @@
<el-button
size=
"mini"
type=
"text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"
@
click=
"handleUBTns(scope.row, 1)"
>
详情
</el-button
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleUBTns(scope.row, 2)"
>
修改
</el-button
>
<el-button
size=
"mini"
type=
"text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']"
>删除</el-button
@
click=
"handleUBTns(scope.row, 3)"
v-if=
"scope.row.status == 1"
>
冻结
</el-button
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleUBTns(scope.row, 3)"
v-if=
"scope.row.status == 2"
>
解禁
</el-button
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleUBTns(scope.row, 4)"
v-if=
"scope.row.nowType == 1"
>
设置为陪护人员
</el-button
>
<el-dropdown
<el-button
size=
"mini"
type=
"text"
@
click=
"handleUBTns(scope.row, 4)"
v-if=
"scope.row.nowType == 2"
>
设置为陪诊人员
</el-button
>
<!--
<el-dropdown
size=
"mini"
@
command=
"(command) => handleCommand(command, scope.row)"
v-hasPermi=
"['system:user:resetPwd', 'system:user:edit']"
...
...
@@ -371,9 +394,9 @@
>
分配角色
</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
</el-dropdown>
-->
</
template
>
</el-table-column> --
>
</el-table-column
>
</el-table>
<pagination
...
...
@@ -387,215 +410,104 @@
</el-row>
<!-- 添加或修改用户配置对话框 -->
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"60
0px
"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"
8
0px"
>
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"60
%
"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"
12
0px"
>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"
用户名"
prop=
"nickN
ame"
>
<el-form-item
label=
"
陪诊员名称"
prop=
"n
ame"
>
<el-input
v-model=
"form.n
ickN
ame"
placeholder=
"请输入
用户昵
称"
v-model=
"form.name"
placeholder=
"请输入
陪诊员名
称"
maxlength=
"30"
:disabled=
"[1].includes(typeH)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"
名称"
prop=
"userNam
e"
>
<el-form-item
label=
"
手机号码"
prop=
"phon
e"
>
<el-input
v-model=
"form.userName"
placeholder=
"请输入名称"
maxlength=
"30"
v-model=
"form.phone"
placeholder=
"请输入手机号码"
maxlength=
"11"
:disabled=
"[1, 2].includes(typeH)"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<treeselect
v-model="form.deptId"
:options="deptOptions"
:show-count="true"
placeholder="请选择归属部门"
/>
</el-form-item>
</el-col> -->
</el-row>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"密码"
prop=
"password"
>
<el-input
v-model=
"form.password"
placeholder=
"请输入密码"
type=
"password"
maxlength=
"20"
show-password
/>
<el-form-item
label=
"职业开始年份"
prop=
"startYear"
>
<el-date-picker
v-model=
"form.startYear"
type=
"year"
placeholder=
"选择职业开始年份"
style=
"width: 100%"
:disabled=
"[1].includes(typeH)"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"确认密码"
prop=
"password"
>
<el-input
v-model=
"form.password"
placeholder=
"请输入确认密码"
type=
"password"
maxlength=
"20"
show-password
/>
<el-form-item
label=
"头像"
prop=
"avatar"
>
<imageUpload
v-model=
"form.avatar"
:limit=
"1"
:disabled=
"[1].includes(typeH)"
:isShowTip=
"[0, 2].includes(typeH)"
></imageUpload>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"角色"
>
<el-select
v-model=
"form.roleIds"
multiple
placeholder=
"请选择角色"
>
<el-option
v-for=
"item in roleOptions"
:key=
"item.roleId"
:label=
"item.roleName"
:value=
"item.roleId"
:disabled=
"item.status == 1"
></el-option>
</el-select>
<el-form-item
label=
"身份证正面照"
prop=
"cardFront"
>
<imageUpload
v-model=
"form.cardFront"
:limit=
"1"
:disabled=
"[1].includes(typeH)"
:isShowTip=
"[0, 2].includes(typeH)"
></imageUpload>
</el-form-item>
</el-col>
<
template
v-if=
"title === '修改'"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"创建时间"
prop=
""
>
<el-input
disabled
/>
<el-form-item
label=
"身份证反面照"
prop=
"cardReverse"
>
<imageUpload
v-model=
"form.cardReverse"
:limit=
"1"
:disabled=
"[1].includes(typeH)"
:isShowTip=
"[0, 2].includes(typeH)"
></imageUpload>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"更新时间"
prop=
""
>
<el-input
disabled
/>
</el-form-item>
</el-col>
</
template
>
<!-- <el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input
v-model="form.phonenumber"
placeholder="请输入手机号码"
maxlength="11"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input
v-model="form.email"
placeholder="请输入邮箱"
maxlength="50"
/>
</el-form-item>
</el-col> -->
</el-row>
<!-- <el-row>
<el-col :span="12">
<el-form-item
v-if="form.userId == undefined"
label="用户名称"
prop="userName"
>
<el-input
v-model="form.userName"
placeholder="请输入用户名称"
maxlength="30"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
v-if="form.userId == undefined"
label="用户密码"
prop="password"
>
<el-input
v-model="form.password"
placeholder="请输入用户密码"
type="password"
maxlength="20"
show-password
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择性别">
<el-option
v-for="dict in dict.type.sys_user_sex"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}</el-radio
>
</el-radio-group>
<el-form-item
label=
"健康证"
prop=
"healthCertificate"
>
<imageUpload
v-model=
"form.healthCertificate"
:limit=
"1"
:disabled=
"[1].includes(typeH)"
:isShowTip=
"[0, 2].includes(typeH)"
></imageUpload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位">
<el-col
:span=
"24"
>
<el-form-item
label=
"城市"
prop=
"cityId"
>
<el-select
v-model="form.postIds"
multiple
placeholder="请选择岗位"
filterable
clearable
v-model=
"form.cityId"
placeholder=
"请选择城市"
:disabled=
"[1].includes(typeH)"
style=
"width: 100%"
>
<el-option
v-for="item in postOptions"
:key="item.postId"
:label="item.postName"
:value="item.postId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色">
<el-select
v-model="form.roleIds"
multiple
placeholder="请选择角色"
v-for=
"item in cityVoList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
<el-option
v-for="item in roleOptions"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
:disabled="item.status == 1"
></el-option>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
<el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
></el-input>
</el-form-item>
</el-col>
</el-row> -->
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<div
slot=
"footer"
class=
"dialog-footer"
v-if=
"[0, 2].includes(typeH)"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
...
...
@@ -659,6 +571,14 @@ import {
import
{
getToken
}
from
"@/utils/auth"
;
import
Treeselect
from
"@riophae/vue-treeselect"
;
import
"@riophae/vue-treeselect/dist/vue-treeselect.css"
;
import
{
cityVoListGET
}
from
"@/api/hispotalManage/hospital"
;
import
{
addEmployeesPost
,
employeesDetailsGet
,
employeesUpdatePut
,
switchStatusPut
,
switchIdentityPut
,
}
from
"@/api/index.js"
;
export
default
{
name
:
"UserCompanion"
,
...
...
@@ -666,6 +586,7 @@ export default {
components
:
{
Treeselect
},
data
()
{
return
{
typeH
:
0
,
//0新增 1详情 2修改
// 遮罩层
loading
:
true
,
// 选中数组
...
...
@@ -686,6 +607,7 @@ export default {
deptOptions
:
undefined
,
// 是否显示弹出层
open
:
false
,
cityVoList
:
[],
// 部门名称
deptName
:
undefined
,
// 默认密码
...
...
@@ -739,8 +661,8 @@ export default {
],
// 表单校验
rules
:
{
userN
ame
:
[
{
required
:
true
,
message
:
"
用户
名称不能为空"
,
trigger
:
"blur"
},
n
ame
:
[
{
required
:
true
,
message
:
"
陪诊员
名称不能为空"
,
trigger
:
"blur"
},
{
min
:
2
,
max
:
20
,
...
...
@@ -748,30 +670,54 @@ export default {
trigger
:
"blur"
,
},
],
nickName
:
[
{
required
:
true
,
message
:
"用户昵称不能为空"
,
trigger
:
"blur"
},
],
password
:
[
{
required
:
true
,
message
:
"用户密码不能为空"
,
trigger
:
"blur"
},
phone
:
[
{
required
:
true
,
message
:
"手机号码不能为空"
,
trigger
:
"blur"
},
{
min
:
5
,
max
:
20
,
message
:
"用户密码长度必须介于 5 和 20 之间"
,
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
"请输入正确的手机号码"
,
trigger
:
"blur"
,
},
],
email
:
[
startYear
:
[
{
type
:
"email"
,
message
:
"
请输入正确的邮箱地址
"
,
required
:
true
,
message
:
"
职业开始年份不能为空
"
,
trigger
:
[
"blur"
,
"change"
],
},
],
phonenumbe
r
:
[
avata
r
:
[
{
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
"请输入正确的手机号码"
,
trigger
:
"blur"
,
required
:
true
,
message
:
"头像不能为空"
,
trigger
:
[
"blur"
,
"change"
],
},
],
cardFront
:
[
{
required
:
true
,
message
:
"身份证正面照不能为空"
,
trigger
:
[
"blur"
,
"change"
],
},
],
cardReverse
:
[
{
required
:
true
,
message
:
"身份证反面照不能为空"
,
trigger
:
[
"blur"
,
"change"
],
},
],
healthCertificate
:
[
{
required
:
true
,
message
:
"健康证不能为空"
,
trigger
:
[
"blur"
,
"change"
],
},
],
cityId
:
[
{
required
:
true
,
message
:
"城市不能为空"
,
trigger
:
[
"blur"
,
"change"
],
},
],
},
...
...
@@ -852,18 +798,14 @@ export default {
// 表单重置
reset
()
{
this
.
form
=
{
userId
:
undefined
,
deptId
:
undefined
,
userName
:
undefined
,
nickName
:
undefined
,
password
:
undefined
,
phonenumber
:
undefined
,
email
:
undefined
,
sex
:
undefined
,
status
:
"0"
,
remark
:
undefined
,
postIds
:
[],
roleIds
:
[],
name
:
undefined
,
phone
:
undefined
,
startYear
:
undefined
,
avatar
:
undefined
,
cardFront
:
undefined
,
cardReverse
:
undefined
,
healthCertificate
:
undefined
,
cityId
:
undefined
,
};
this
.
resetForm
(
"form"
);
},
...
...
@@ -902,14 +844,105 @@ export default {
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
();
getUser
().
then
((
response
)
=>
{
this
.
postOptions
=
response
.
data
.
posts
;
this
.
roleOptions
=
response
.
data
.
roles
;
this
.
cityVoListAxios
();
// getUser().then((response) => {
// this.postOptions = response.data.posts;
// this.roleOptions = response.data.roles;
// this.open = true;
// // this.title = "添加用户";
// this.title = "新增";
// this.form.password = this.initPassword;
// });
this
.
typeH
=
0
;
this
.
open
=
true
;
// this.title = "添加用户";
this
.
title
=
"新增"
;
this
.
form
.
password
=
this
.
initPassword
;
},
async
cityVoListAxios
()
{
const
data_back
=
await
cityVoListGET
();
const
{
code
,
data
}
=
data_back
;
if
(
code
===
200
)
{
this
.
cityVoList
=
data
;
}
},
handleUBTns
(
row
,
typeH
)
{
let
self
=
this
;
self
.
typeH
=
typeH
;
switch
(
typeH
)
{
case
1
:
self
.
cityVoListAxios
();
self
.
employeesDetailsGetA
(
row
);
break
;
case
2
:
self
.
cityVoListAxios
();
self
.
employeesDetailsGetA
(
row
);
break
;
case
3
:
self
.
switchStatusPutA
(
row
);
break
;
case
4
:
self
.
switchIdentityPutA
(
row
);
break
;
}
},
switchIdentityPutA
(
row
)
{
let
txt
=
""
;
if
(
row
.
nowType
==
1
)
{
txt
=
"设置为陪护人员"
;
}
else
if
(
row
.
nowType
==
2
)
{
txt
=
"设置为陪诊人员"
;
}
this
.
$confirm
(
`此操作将
${
txt
}
, 是否继续?`
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(
async
()
=>
{
const
{
code
}
=
await
switchIdentityPut
({
emId
:
row
.
id
,
});
if
(
code
===
200
)
{
this
.
$message
({
type
:
"success"
,
message
:
`
${
txt
}
成功!`
,
});
this
.
getList
();
}
})
.
catch
(()
=>
{});
},
switchStatusPutA
(
row
)
{
let
txt
=
""
;
if
(
row
.
status
==
1
)
{
txt
=
"冻结"
;
}
else
if
(
row
.
status
==
2
)
{
txt
=
"解禁"
;
}
this
.
$confirm
(
`此操作将
${
txt
}
该陪诊员, 是否继续?`
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(
async
()
=>
{
const
{
code
}
=
await
switchStatusPut
({
emId
:
row
.
id
,
});
if
(
code
===
200
)
{
this
.
$message
({
type
:
"success"
,
message
:
`
${
txt
}
成功!`
,
});
this
.
getList
();
}
})
.
catch
(()
=>
{});
},
async
employeesDetailsGetA
(
row
)
{
const
{
code
,
data
}
=
await
employeesDetailsGet
({
id
:
row
.
id
});
if
(
code
===
200
)
{
this
.
form
=
data
;
this
.
$set
(
this
.
form
,
"id"
,
data
.
id
);
this
.
open
=
true
;
}
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
...
...
@@ -952,14 +985,14 @@ export default {
submitForm
:
function
()
{
this
.
$refs
[
"form"
].
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
this
.
form
.
userId
!=
undefined
)
{
updateUser
(
this
.
form
).
then
((
response
)
=>
{
if
(
this
.
form
.
id
!=
undefined
&&
this
.
typeH
==
2
)
{
employeesUpdatePut
(
this
.
form
).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
"修改成功"
);
this
.
open
=
false
;
this
.
getList
();
});
}
else
{
add
User
(
this
.
form
).
then
((
response
)
=>
{
add
EmployeesPost
(
this
.
form
).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
"新增成功"
);
this
.
open
=
false
;
this
.
getList
();
...
...
vue.config.js
View file @
2cea9506
...
...
@@ -36,9 +36,10 @@ module.exports = {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[
process
.
env
.
VUE_APP_BASE_API
]:
{
// target: `http://localhost:8089`,
target
:
`https://peizheng.shanpeikj.com/api`
,
//
target: `http://192.168.0.169:8089`,
//
target: `https://peizheng.shanpeikj.com/api`,
target
:
`http://192.168.0.169:8089`
,
// target: `http://192.168.0.137:8089`,
// target: `http://192.168.0.199:8089`,
// target: `http://192.168.0.125:8089`,
changeOrigin
:
true
,
pathRewrite
:
{
...
...
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