Commit 2cea9506 by ‘巴博尔’

添加首页数据统计

parent 24f40147
/*
* @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,
});
}
<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">&yen;免费开源</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: 120rpx;
line-height: 120rpx;
}
}
.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>
......@@ -97,17 +97,16 @@
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <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 :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="success"
......@@ -326,30 +325,54 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column> -->
<!-- <el-table-column
label="操作"
align="center"
width="160"
class-name="small-padding fixed-width"
>
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']"
>删除</el-button
>
<el-dropdown
<el-table-column
label="操作"
align="center"
width="160"
class-name="small-padding fixed-width"
>
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<el-button
size="mini"
type="text"
@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"
@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-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>
</template>
</el-table-column> -->
</el-dropdown> -->
</template>
</el-table-column>
</el-table>
<pagination
......@@ -387,215 +410,104 @@
</el-row>
<!-- 添加或修改用户配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item label="用户名" prop="nickName">
<el-form-item label="陪诊员名称" prop="name">
<el-input
v-model="form.nickName"
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="userName">
<el-form-item label="手机号码" prop="phone">
<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="身份证正面照" prop="cardFront">
<imageUpload
v-model="form.cardFront"
: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="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="healthCertificate">
<imageUpload
v-model="form.healthCertificate"
: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-form-item label="城市" prop="cityId">
<el-select
v-model="form.roleIds"
multiple
placeholder="请选择角色"
filterable
clearable
v-model="form.cityId"
placeholder="请选择城市"
:disabled="[1].includes(typeH)"
style="width: 100%"
>
<el-option
v-for="item in roleOptions"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
:disabled="item.status == 1"
></el-option>
v-for="item in cityVoList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<template v-if="title === '修改'">
<el-col :span="24">
<el-form-item label="创建时间" prop="">
<el-input disabled />
</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>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位">
<el-select
v-model="form.postIds"
multiple
placeholder="请选择岗位"
>
<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="请选择角色"
>
<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>
</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: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
name: [
{ 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"],
},
],
phonenumber: [
avatar: [
{
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 = "新增";
},
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;
// this.title = "添加用户";
this.title = "新增";
this.form.password = this.initPassword;
});
}
},
/** 修改按钮操作 */
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 {
addUser(this.form).then((response) => {
addEmployeesPost(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
......
......@@ -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: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment