Commit cc27e602 by 裴梁博

Merge branch 'feature/v1/plb' into 'master'

Feature/v1/plb

See merge request !3
parents b14db3e2 6891837f
/*
* @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,
});
}
// 所属商户
export function companyPlistGet(query) {
return request({
url: `/merchant/company/Plist`,
method: "get",
params: query,
});
}
// 设置时间
export function employeesSetWorkHourPut(data) {
return request({
url: "/merchant/app/employees/setWorkHour",
method: "put",
data: data,
});
}
\ No newline at end of file
import request from '@/utils/request'
// 查询商户列表
export function listCompany(query) {
return request({
url: '/merchant/company/list',
method: 'get',
params: query
})
}
// 查询商户详细
export function getCompany(id) {
return request({
url: '/merchant/company/' + id,
method: 'get'
})
}
// 新增商户
export function addCompany(data) {
return request({
url: '/merchant/company',
method: 'post',
data: data
})
}
// 修改商户
export function updateCompany(data) {
return request({
url: '/merchant/company',
method: 'put',
data: data
})
}
// 删除商户
export function delCompany(id) {
return request({
url: '/merchant/company/' + id,
method: 'delete'
})
}
import request from '@/utils/request'
// 查询陪诊员列表
export function listEmployees(query) {
return request({
url: '/merchant/employees/list',
method: 'get',
params: query
})
}
// 查询陪诊员详细
export function getEmployees(id) {
return request({
url: '/merchant/employees/' + id,
method: 'get'
})
}
// 新增陪诊员
export function addEmployees(data) {
return request({
url: '/merchant/employees',
method: 'post',
data: data
})
}
// 修改陪诊员
export function updateEmployees(data) {
return request({
url: '/merchant/employees',
method: 'put',
data: data
})
}
// 删除陪诊员
export function delEmployees(id) {
return request({
url: '/merchant/employees/' + id,
method: 'delete'
})
}
import request from '@/utils/request'
// 查询订单消息列表
export function listMessage(query) {
return request({
url: '/system/message/list',
method: 'get',
params: query
})
}
// 查询订单消息详细
export function getMessage(id) {
return request({
url: '/system/message/' + id,
method: 'get'
})
}
// 新增订单消息
export function addMessage(data) {
return request({
url: '/system/message',
method: 'post',
data: data
})
}
// 修改订单消息
export function updateMessage(data) {
return request({
url: '/system/message',
method: 'put',
data: data
})
}
// 删除订单消息
export function delMessage(id) {
return request({
url: '/system/message/' + id,
method: 'delete'
})
}
<template>
<div class="navbar">
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
<hamburger
id="hamburger-container"
:is-active="sidebar.opened"
class="hamburger-container"
@toggleClick="toggleSideBar"
/>
<breadcrumb
id="breadcrumb-container"
class="breadcrumb-container"
v-if="!topNav"
/>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
<div class="right-menu">
<template v-if="device!=='mobile'">
<template v-if="device !== 'mobile'">
<!-- <search id="header-search" class="right-menu-item" /> -->
<!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">
......@@ -22,12 +31,14 @@
<!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip> -->
</template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<el-dropdown
class="avatar-container right-menu-item hover-effect"
trigger="click"
>
<div class="avatar-wrapper">
<img :src="avatar" class="user-avatar">
<img :src="avatar" class="user-avatar" />
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
......@@ -47,15 +58,15 @@
</template>
<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
import { mapGetters } from "vuex";
import Breadcrumb from "@/components/Breadcrumb";
import TopNav from "@/components/TopNav";
import Hamburger from "@/components/Hamburger";
import Screenfull from "@/components/Screenfull";
import SizeSelect from "@/components/SizeSelect";
import Search from "@/components/HeaderSearch";
import RuoYiGit from "@/components/RuoYi/Git";
import RuoYiDoc from "@/components/RuoYi/Doc";
export default {
components: {
......@@ -66,48 +77,51 @@ export default {
SizeSelect,
Search,
RuoYiGit,
RuoYiDoc
RuoYiDoc,
},
computed: {
...mapGetters([
'sidebar',
'avatar',
'device'
]),
...mapGetters(["sidebar", "avatar", "device"]),
setting: {
get() {
return this.$store.state.settings.showSettings
return this.$store.state.settings.showSettings;
},
set(val) {
this.$store.dispatch('settings/changeSetting', {
key: 'showSettings',
value: val
})
}
this.$store.dispatch("settings/changeSetting", {
key: "showSettings",
value: val,
});
},
},
topNav: {
get() {
return this.$store.state.settings.topNav
}
}
return this.$store.state.settings.topNav;
},
},
},
methods: {
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
this.$store.dispatch("app/toggleSideBar");
},
async logout() {
this.$confirm('确定注销并退出系统吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
location.href = process.env.VUE_APP_CONTEXT_PATH + "#/index";
this.$confirm("确定注销并退出系统吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$store.dispatch("LogOut").then(() => {
console.log("process.env.NODE_ENV",process.env.NODE_ENV);
if (process.env.NODE_ENV === "development") {
location.href = process.env.VUE_APP_CONTEXT_PATH + "index";
} else {
location.href = process.env.VUE_APP_CONTEXT_PATH + "#/index";
}
});
})
}).catch(() => {});
}
}
}
.catch(() => {});
},
},
};
</script>
<style lang="scss" scoped>
......@@ -116,18 +130,18 @@ export default {
overflow: hidden;
position: relative;
background: #fff;
box-shadow: 0 1px 4px rgba(0,21,41,.08);
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
.hamburger-container {
line-height: 46px;
height: 100%;
float: left;
cursor: pointer;
transition: background .3s;
-webkit-tap-highlight-color:transparent;
transition: background 0.3s;
-webkit-tap-highlight-color: transparent;
&:hover {
background: rgba(0, 0, 0, .025)
background: rgba(0, 0, 0, 0.025);
}
}
......@@ -164,10 +178,10 @@ export default {
&.hover-effect {
cursor: pointer;
transition: background .3s;
transition: background 0.3s;
&:hover {
background: rgba(0, 0, 0, .025)
background: rgba(0, 0, 0, 0.025);
}
}
}
......
/*
* @Author: ‘巴博尔’ 2164119982@qq.com
* @Date: 2023-09-07 10:41:27
* @LastEditors: ‘巴博尔’ 2164119982@qq.com
* @LastEditTime: 2023-10-10 13:22:57
* @FilePath: \peizhen-vue\src\store\getters.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
const getters = {
sidebar: state => state.app.sidebar,
size: state => state.app.size,
......@@ -8,6 +16,7 @@ const getters = {
token: state => state.user.token,
avatar: state => state.user.avatar,
name: state => state.user.name,
user: state => state.user.user,
introduction: state => state.user.introduction,
roles: state => state.user.roles,
permissions: state => state.user.permissions,
......
......@@ -122,7 +122,6 @@ export function filterDynamicRoutes(routes) {
}
export const loadView = (view) => {
console.log(view,"=======loadView")
if (process.env.NODE_ENV === 'development') {
return (resolve) => require([`@/views/${view}`], resolve)
} else {
......
import { login, logout, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { login, logout, getInfo } from "@/api/login";
import { getToken, setToken, removeToken } from "@/utils/auth";
const user = {
state: {
token: getToken(),
name: '',
avatar: '',
name: "",
avatar: "",
roles: [],
permissions: []
permissions: [],
user: {},
},
mutations: {
SET_TOKEN: (state, token) => {
state.token = token
state.token = token;
},
SET_NAME: (state, name) => {
state.name = name
state.name = name;
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
state.avatar = avatar;
},
SET_ROLES: (state, roles) => {
state.roles = roles
state.roles = roles;
},
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
}
state.permissions = permissions;
},
SET_USER: (state, user) => {
state.user = user;
},
},
actions: {
// 登录
Login({ commit }, userInfo) {
const username = userInfo.username.trim()
const password = userInfo.password
const code = userInfo.code
const uuid = userInfo.uuid
const username = userInfo.username.trim();
const password = userInfo.password;
const code = userInfo.code;
const uuid = userInfo.uuid;
return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
setToken(res.data.token)
commit('SET_TOKEN', res.data.token)
resolve()
}).catch(error => {
reject(error)
})
})
login(username, password, code, uuid)
.then((res) => {
setToken(res.data.token);
commit("SET_TOKEN", res.data.token);
resolve();
})
.catch((error) => {
reject(error);
});
});
},
// 获取用户信息
GetInfo({ commit, state }) {
return new Promise((resolve, reject) => {
getInfo().then(res => {
const user = res.data.user
const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar;
if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.data.roles)
commit('SET_PERMISSIONS', res.data.permissions)
} else {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_NAME', user.userName)
commit('SET_AVATAR', avatar)
resolve(res)
}).catch(error => {
reject(error)
})
})
getInfo()
.then((res) => {
const user = res.data.user;
const avatar =
user.avatar == "" || user.avatar == null
? require("@/assets/images/profile.jpg")
: user.avatar;
if (res.data.roles && res.data.roles.length > 0) {
// 验证返回的roles是否是一个非空数组
commit("SET_ROLES", res.data.roles);
commit("SET_PERMISSIONS", res.data.permissions);
} else {
commit("SET_ROLES", ["ROLE_DEFAULT"]);
}
commit("SET_NAME", user.userName);
commit("SET_AVATAR", avatar);
commit("SET_USER", user);
resolve(res);
})
.catch((error) => {
reject(error);
});
});
},
// 退出系统
LogOut({ commit, state }) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
resolve()
}).catch(error => {
reject(error)
})
})
logout(state.token)
.then(() => {
commit("SET_TOKEN", "");
commit("SET_ROLES", []);
commit("SET_PERMISSIONS", []);
removeToken();
resolve();
})
.catch((error) => {
reject(error);
});
});
},
// 前端 登出
FedLogOut({ commit }) {
return new Promise(resolve => {
commit('SET_TOKEN', '')
removeToken()
resolve()
})
}
}
}
return new Promise((resolve) => {
commit("SET_TOKEN", "");
removeToken();
resolve();
});
},
},
};
export default user
export default user;
......@@ -2,7 +2,7 @@
* @Author: ‘巴博尔’ 2164119982@qq.com
* @Date: 2023-09-07 16:09:29
* @LastEditors: ‘巴博尔’ 2164119982@qq.com
* @LastEditTime: 2023-09-20 14:33:53
* @LastEditTime: 2023-09-25 09:37:51
* @FilePath: \peizhen-vue\src\views\hispotalManage\hospital\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
......@@ -293,11 +293,20 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="地址" prop="mapAddress">
<div @click="clickOpenCheckAddress">
<el-input v-model="form.mapAddress" placeholder="请选择地址" readonly="" />
</div>
</el-form-item>
<el-form-item label="经度" prop="lng">
<el-input v-model="form.lng" placeholder="请输入经度" />
<div @click="clickOpenCheckAddress">
<el-input v-model="form.lng" placeholder="请选择经度" readonly="" />
</div>
</el-form-item>
<el-form-item label="纬度" prop="lat">
<el-input v-model="form.lat" placeholder="请输入纬度" />
<div @click="clickOpenCheckAddress">
<el-input v-model="form.lat" placeholder="请选择纬度" readonly="" />
</div>
</el-form-item>
<el-form-item label="类别" prop="category">
<el-select
......@@ -341,6 +350,24 @@
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<el-dialog
title="选择区域"
:modal-append-to-body="true"
:destroy-on-close="true"
center
:visible.sync="openAddress"
width="60%"
>
<iframe
width="100%"
style="height: 60vh; width: 100%; border: none"
:src="map_src"
></iframe>
<span slot="footer">
<el-button @click="openAddress = false">取 消</el-button>
<el-button type="primary" @click="openAddress = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
......@@ -412,13 +439,58 @@ export default {
cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
name: [{ required: true, message: "请选择城市", trigger: "blur" }],
},
map_src: "",
openAddress: false,
map_data: {
url: "https://mapapi.qq.com/web/mapComponents/locationPicker/v/index.html?search=1&type=1&key=RQOBZ-K2GCA-I6NKY-CPX4H-WBQAO-4SFSQ&referer=appname",
address: "",
lng: "",
lat: "",
},
};
},
created() {
let that = this;
window.addEventListener(
"message",
function (event) {
// 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息
var loc = event.data;
if (loc && loc.module == "locationPicker") {
//防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'
//{
// module:'locationPicker',
// latlng: {
// lat: 39.998766,
// lng: 116.273938
// },
// poiaddress: "北京市海淀区新建宫门路19号",
// poiname: "颐和园",
// cityname: "北京市"
//}
that.map_data.address = loc.poiaddress;
that.map_data.lat = loc.latlng.lat;
that.map_data.lng = loc.latlng.lng;
console.log(that.map_data, "=======that.map_data");
that.$set(that.form, "mapAddress", loc.poiaddress);
that.$set(that.form, "lng", loc.latlng.lng);
that.$set(that.form, "lat", loc.latlng.lat);
}
},
false
);
this.getList();
this.getDeptTree();
},
methods: {
clickOpenCheckAddress(lat, lng) {
let mat_url = this.map_data.url;
if (lat && lng) {
mat_url += "&coord=" + lat + "," + lng;
}
this.map_src = mat_url;
this.openAddress = true;
},
/** 查询部门下拉树结构 */
getDeptTree() {
listDepartment().then((response) => {
......@@ -470,6 +542,7 @@ export default {
updateTime: undefined,
delFlag: undefined,
status: undefined,
mapAddress: undefined,
};
this.resetForm("form");
},
......
<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" v-if="user.roleId == 3">
<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,281 @@
</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";
import { mapGetters } from "vuex";
export default {
name: "Index",
mixins: [resize],
computed: {
...mapGetters(["user"]),
},
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() {
console.log("user", this.user);
this.dataUserAxios();
this.dataEmployeesAxios();
this.saleroomAxios();
if (this.user.roleId == 3) {
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 +559,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>
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="商户名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入商户名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</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="['merchant:company:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['merchant:company:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['merchant:company:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['merchant:company:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="companyList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="ID" align="center" prop="id" v-if="true"/>
<el-table-column label="商户名称" align="center" prop="name" />
<el-table-column label="城市" align="center" prop="cityId" />
<el-table-column label="商户电话" align="center" prop="tel" />
<el-table-column label="商户手机" align="center" prop="phone" />
<el-table-column label="商户地址" align="center" prop="address" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.company_state" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="营业执照" align="center" prop="businessLicense" />
<el-table-column label="是否缴纳保证金" align="center" prop="isCashDeposit">
<template slot-scope="scope">
<dict-tag :options="dict.type.company_is_cash_deposit" :value="scope.row.isCashDeposit"/>
</template>
</el-table-column>
<el-table-column label="保证金金额" align="center" prop="cashDeposit" />
<el-table-column label="创建人" align="center" prop="uid" />
<el-table-column label="总收益" align="center" prop="totalRevenue" />
<el-table-column label="当前余额" align="center" prop="balance" />
<el-table-column label="注册时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['merchant:company:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['merchant:company:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改商户对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="商户名称" prop="name">
<el-input v-model="form.name" placeholder="请输入商户名称" />
</el-form-item>
<el-form-item label="城市" prop="cityId">
<el-input v-model="form.cityId" placeholder="请输入城市" />
</el-form-item>
<el-form-item label="商户电话" prop="tel">
<el-input v-model="form.tel" placeholder="请输入商户电话" />
</el-form-item>
<el-form-item label="商户手机" prop="phone">
<el-input v-model="form.phone" placeholder="请输入商户手机" />
</el-form-item>
<el-form-item label="商户地址" prop="address">
<el-input v-model="form.address" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.company_state"
:key="dict.value"
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="营业执照" prop="businessLicense">
<el-input v-model="form.businessLicense" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="是否缴纳保证金" prop="isCashDeposit">
<el-input v-model="form.isCashDeposit" placeholder="请输入是否缴纳保证金" />
</el-form-item>
<el-form-item label="创建人" prop="uid">
<el-input v-model="form.uid" placeholder="请输入创建人" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listCompany, getCompany, delCompany, addCompany, updateCompany } from "@/api/merchant/company";
export default {
name: "Company",
dicts: ['company_state'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 商户表格数据
companyList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "ID不能为空", trigger: "blur" }
],
name: [
{ required: true, message: "商户名称不能为空", trigger: "blur" }
],
cityId: [
{ required: true, message: "城市不能为空", trigger: "blur" }
],
tel: [
{ required: true, message: "商户电话不能为空", trigger: "blur" }
],
phone: [
{ required: true, message: "商户手机不能为空", trigger: "blur" }
],
address: [
{ required: true, message: "商户地址不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态不能为空", trigger: "change" }
],
businessLicense: [
{ required: true, message: "营业执照不能为空", trigger: "blur" }
],
isCashDeposit: [
{ required: true, message: "是否缴纳保证金不能为空", trigger: "blur" }
],
cashDeposit: [
{ required: true, message: "保证金金额不能为空", trigger: "blur" }
],
uid: [
{ required: true, message: "创建人不能为空", trigger: "blur" }
],
totalRevenue: [
{ required: true, message: "总收益不能为空", trigger: "blur" }
],
balance: [
{ required: true, message: "当前余额不能为空", trigger: "blur" }
],
freezeBalance: [
{ required: true, message: "冻结余额不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询商户列表 */
getList() {
this.loading = true;
listCompany(this.queryParams).then(response => {
this.companyList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
name: undefined,
cityId: undefined,
tel: undefined,
phone: undefined,
address: undefined,
status: undefined,
businessLicense: undefined,
isCashDeposit: undefined,
cashDeposit: undefined,
uid: undefined,
totalRevenue: undefined,
balance: undefined,
freezeBalance: undefined,
createBy: undefined,
createTime: undefined,
updateBy: undefined,
updateTime: undefined,
delFlag: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加商户";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getCompany(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改商户";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateCompany(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addCompany(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除商户编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delCompany(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('merchant/company/export', {
...this.queryParams
}, `company_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="陪诊员 " prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入陪诊员 "
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户" prop="uid">
<el-input
v-model="queryParams.uid"
placeholder="请输入用户"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option
v-for="dict in dict.type.company_state"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="当前身份" prop="nowType">
<el-select v-model="queryParams.nowType" placeholder="请选择当前身份" clearable>
<el-option
v-for="dict in dict.type.employee_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</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="['merchant:employees:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['merchant:employees:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['merchant:employees:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['merchant:employees:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="employeesList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="" align="center" prop="id" v-if="true"/>
<el-table-column label="陪诊员 " align="center" prop="name" />
<el-table-column label="职业开始年份" align="center" prop="startYear" />
<el-table-column label="用户" align="center" prop="uid" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.company_state" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="所属商户" align="center" prop="companyId" />
<el-table-column label="身份证正面照" align="center" prop="cardFront" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.cardFront" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="身份证反面照" align="center" prop="cardReverse" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.cardReverse" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="健康证" align="center" prop="healthCertificate" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.healthCertificate" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="当前身份" align="center" prop="nowType">
<template slot-scope="scope">
<dict-tag :options="dict.type.employee_status" :value="scope.row.nowType"/>
</template>
</el-table-column>
<el-table-column label="总收益" align="center" prop="totalRevenue" />
<el-table-column label="当前余额" align="center" prop="balance" />
<el-table-column label="注册时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['merchant:employees:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['merchant:employees:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改陪诊员对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="陪诊员 " prop="name">
<el-input v-model="form.name" placeholder="请输入陪诊员 " />
</el-form-item>
<el-form-item label="用户" prop="uid">
<el-input v-model="form.uid" placeholder="请输入用户" />
</el-form-item>
<el-form-item label="工作时段" prop="workingHours">
<el-input v-model="form.workingHours" placeholder="请输入工作时段" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="请选择状态">
<el-option
v-for="dict in dict.type.company_state"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属商户" prop="companyId">
<el-input v-model="form.companyId" placeholder="请输入所属商户" />
</el-form-item>
<el-form-item label="身份证正面照" prop="cardFront">
<image-upload v-model="form.cardFront"/>
</el-form-item>
<el-form-item label="身份证反面照" prop="cardReverse">
<image-upload v-model="form.cardReverse"/>
</el-form-item>
<el-form-item label="健康证" prop="healthCertificate">
<image-upload v-model="form.healthCertificate"/>
</el-form-item>
<el-form-item label="经度" prop="lng">
<el-input v-model="form.lng" placeholder="请输入经度" />
</el-form-item>
<el-form-item label="纬度" prop="lat">
<el-input v-model="form.lat" placeholder="请输入纬度" />
</el-form-item>
<el-form-item label="城市" prop="cityId">
<el-input v-model="form.cityId" placeholder="请输入城市" />
</el-form-item>
<el-form-item label="当前身份" prop="nowType">
<el-select v-model="form.nowType" placeholder="请选择当前身份">
<el-option
v-for="dict in dict.type.employee_status"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="冻结余额" prop="freezeBalance">
<el-input v-model="form.freezeBalance" placeholder="请输入冻结余额" />
</el-form-item>
<el-form-item label="取消订单次数" prop="killOrder">
<el-input v-model="form.killOrder" placeholder="请输入取消订单次数" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listEmployees, getEmployees, delEmployees, addEmployees, updateEmployees } from "@/api/merchant/employees";
export default {
name: "Employees",
dicts: ['company_state', 'employee_status'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 陪诊员表格数据
employeesList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
startYear: undefined,
uid: undefined,
status: undefined,
nowType: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "不能为空", trigger: "blur" }
],
name: [
{ required: true, message: "陪诊员 不能为空", trigger: "blur" }
],
startYear: [
{ required: true, message: "职业开始年份不能为空", trigger: "blur" }
],
uid: [
{ required: true, message: "用户不能为空", trigger: "blur" }
],
workingHours: [
{ required: true, message: "工作时段不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态不能为空", trigger: "change" }
],
companyId: [
{ required: true, message: "所属商户不能为空", trigger: "blur" }
],
cardFront: [
{ required: true, message: "身份证正面照不能为空", trigger: "blur" }
],
cardReverse: [
{ required: true, message: "身份证反面照不能为空", trigger: "blur" }
],
healthCertificate: [
{ required: true, message: "健康证不能为空", trigger: "blur" }
],
lng: [
{ required: true, message: "经度不能为空", trigger: "blur" }
],
lat: [
{ required: true, message: "纬度不能为空", trigger: "blur" }
],
cityId: [
{ required: true, message: "城市不能为空", trigger: "blur" }
],
nowType: [
{ required: true, message: "当前身份不能为空", trigger: "change" }
],
totalRevenue: [
{ required: true, message: "总收益不能为空", trigger: "blur" }
],
balance: [
{ required: true, message: "当前余额不能为空", trigger: "blur" }
],
freezeBalance: [
{ required: true, message: "冻结余额不能为空", trigger: "blur" }
],
killOrder: [
{ required: true, message: "取消订单次数不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询陪诊员列表 */
getList() {
this.loading = true;
listEmployees(this.queryParams).then(response => {
this.employeesList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
name: undefined,
startYear: undefined,
uid: undefined,
workingHours: undefined,
status: undefined,
companyId: undefined,
cardFront: undefined,
cardReverse: undefined,
healthCertificate: undefined,
lng: undefined,
lat: undefined,
cityId: undefined,
nowType: undefined,
totalRevenue: undefined,
balance: undefined,
freezeBalance: undefined,
killOrder: undefined,
createBy: undefined,
createTime: undefined,
updateBy: undefined,
updateTime: undefined,
delFlag: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加陪诊员";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getEmployees(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改陪诊员";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateEmployees(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addEmployees(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除陪诊员编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delEmployees(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('merchant/employees/export', {
...this.queryParams
}, `employees_${new Date().getTime()}.xlsx`)
}
}
};
</script>
......@@ -106,12 +106,12 @@
</template>
</el-table-column>
<el-table-column
<!-- <el-table-column
label="城市"
align="center"
prop="cityName"
:show-overflow-tooltip="true"
/>
/> -->
<el-table-column
label="内容"
align="center"
......@@ -179,7 +179,7 @@
</template>
</el-input>
</el-form-item>
<el-form-item label="城市" prop="cityId">
<!-- <el-form-item label="城市" prop="cityId">
<el-select
filterable
clearable
......@@ -194,7 +194,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="封面图" prop="cover">
<imageUpload v-model="form.cover"></imageUpload>
</el-form-item>
......@@ -260,7 +260,7 @@ export default {
form: {},
// 表单校验
rules: {
cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
// cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
},
cityVoList: [],
};
......
......@@ -100,12 +100,12 @@
:formatter="getSiteName"
:show-overflow-tooltip="true"
/>
<el-table-column
<!-- <el-table-column
label="城市"
align="center"
prop="cityName"
:show-overflow-tooltip="true"
/>
/> -->
<el-table-column label="图片" align="center" prop="imgUrl" width="180">
<template slot-scope="{ row }">
<!-- <el-image
......@@ -202,7 +202,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="城市" prop="cityId">
<!-- <el-form-item label="城市" prop="cityId">
<el-select
filterable
clearable
......@@ -217,7 +217,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="描述" prop="descr">
<el-input
......@@ -314,7 +314,7 @@ export default {
form: {},
// 表单校验
rules: {
cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
// cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
},
isUseList: [
{
......
......@@ -88,12 +88,12 @@
prop="title"
:show-overflow-tooltip="true"
/>
<el-table-column
<!-- <el-table-column
label="城市"
align="center"
prop="cityName"
:show-overflow-tooltip="true"
/>
/> -->
<el-table-column label="封面" align="center" prop="cover" width="170">
<template slot-scope="{ row }">
<!-- <el-image
......@@ -168,7 +168,7 @@
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="城市" prop="cityId">
<!-- <el-form-item label="城市" prop="cityId">
<el-select
filterable
clearable
......@@ -183,7 +183,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="封面" prop="cover">
<imageUpload v-model="form.cover"></imageUpload>
</el-form-item>
......@@ -262,7 +262,7 @@ export default {
form: {},
// 表单校验
rules: {
cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
// cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
},
openArticle: false,
rowArticle: undefined,
......
......@@ -101,12 +101,12 @@
prop="id"
:show-overflow-tooltip="true"
/>
<el-table-column
<!-- <el-table-column
label="城市"
align="center"
prop="cityName"
:show-overflow-tooltip="true"
/>
/> -->
<el-table-column
label="内容"
align="center"
......@@ -163,7 +163,7 @@
placeholder="请输入内容"
/>
</el-form-item>
<el-form-item label="城市" prop="cityId">
<!-- <el-form-item label="城市" prop="cityId">
<el-select
filterable
clearable
......@@ -178,7 +178,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="位置" prop="site">
<el-select clearable v-model="form.site" placeholder="请输入位置">
<el-option
......@@ -247,7 +247,7 @@ export default {
form: {},
// 表单校验
rules: {
cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
// cityId: [{ required: true, message: "请选择城市", trigger: "change" }],
},
placeOptions: [
{
......
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="购买用户" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入购买用户"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="业务" prop="businessName">
<el-input
v-model="queryParams.businessName"
placeholder="请输入业务"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="服务" prop="serviceName">
<el-input
v-model="queryParams.serviceName"
placeholder="请输入服务"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</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:message:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:message:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:message:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:message:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="messageList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键" align="center" prop="id" v-if="true"/>
<el-table-column label="主订单Id" align="center" prop="totalOrderId" />
<el-table-column label="城市" align="center" prop="cityId" />
<el-table-column label="购买用户" align="center" prop="userName" />
<el-table-column label="业务" align="center" prop="businessName" />
<el-table-column label="服务" align="center" prop="serviceName" />
<el-table-column label="购买时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:message:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:message:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单消息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="主订单Id" prop="totalOrderId">
<el-input v-model="form.totalOrderId" placeholder="请输入主订单Id" />
</el-form-item>
<el-form-item label="城市" prop="cityId">
<el-input v-model="form.cityId" placeholder="请输入城市" />
</el-form-item>
<el-form-item label="购买用户" prop="userName">
<el-input v-model="form.userName" placeholder="请输入购买用户" />
</el-form-item>
<el-form-item label="业务" prop="businessName">
<el-input v-model="form.businessName" placeholder="请输入业务" />
</el-form-item>
<el-form-item label="服务" prop="serviceName">
<el-input v-model="form.serviceName" placeholder="请输入服务" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listMessage, getMessage, delMessage, addMessage, updateMessage } from "@/api/system/message";
export default {
name: "Message",
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 订单消息表格数据
messageList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
businessName: undefined,
serviceName: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键不能为空", trigger: "blur" }
],
totalOrderId: [
{ required: true, message: "主订单Id不能为空", trigger: "blur" }
],
cityId: [
{ required: true, message: "城市不能为空", trigger: "blur" }
],
userName: [
{ required: true, message: "购买用户不能为空", trigger: "blur" }
],
businessName: [
{ required: true, message: "业务不能为空", trigger: "blur" }
],
serviceName: [
{ required: true, message: "服务不能为空", trigger: "blur" }
]
}
};
},
created() {
this.getList();
},
methods: {
/** 查询订单消息列表 */
getList() {
this.loading = true;
listMessage(this.queryParams).then(response => {
this.messageList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
totalOrderId: undefined,
cityId: undefined,
userName: undefined,
businessName: undefined,
serviceName: undefined,
createBy: undefined,
createTime: undefined,
updateBy: undefined,
updateTime: undefined,
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单消息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getMessage(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改订单消息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateMessage(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addMessage(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单消息编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delMessage(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/message/export', {
...this.queryParams
}, `message_${new Date().getTime()}.xlsx`)
}
}
};
</script>
......@@ -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"
......@@ -170,6 +169,7 @@
key="name"
prop="name"
:show-overflow-tooltip="true"
width="150"
/>
<el-table-column
label="职业开始年份"
......@@ -185,6 +185,7 @@
key="userName"
prop="userName"
:show-overflow-tooltip="true"
width="150"
/>
<el-table-column
label="所属商户"
......@@ -192,6 +193,7 @@
key="companyName"
prop="companyName"
:show-overflow-tooltip="true"
width="150"
/>
<el-table-column
label="身份证正面照"
......@@ -249,6 +251,7 @@
align="center"
key="nowType"
prop="nowType"
width="140"
>
<template slot-scope="{ row }">
<span v-if="row.nowType == 1">陪诊员</span>
......@@ -260,21 +263,25 @@
align="center"
key="totalRevenue"
prop="totalRevenue"
width="140"
/>
<el-table-column
label="当前余额"
align="center"
key="balance"
prop="balance"
width="140"
/>
<el-table-column
label="城市"
align="center"
key="cityName"
prop="cityName"
width="140"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> -->
<el-table-column label="状态" align="center" key="status">
<el-table-column label="状态" align="center" key="status" width="120">
<template slot-scope="{ row }">
<!-- <el-switch
v-model="scope.row.status"
......@@ -316,6 +323,12 @@
prop="createTime"
width="160"
/>
<el-table-column
label="工作时段"
align="center"
prop="workingHours"
width="120"
/>
<!-- <el-table-column
label="更新时间"
align="center"
......@@ -326,30 +339,61 @@
<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="200"
fixed="right"
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-button
size="mini"
type="text"
@click="handleUBTns(scope.row, 5)"
>设置时间</el-button
>
<!-- <el-dropdown
size="mini"
@command="(command) => handleCommand(command, scope.row)"
v-hasPermi="['system:user:resetPwd', 'system:user:edit']"
......@@ -371,9 +415,9 @@
>分配角色</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column> -->
</el-dropdown> -->
</template>
</el-table-column>
</el-table>
<pagination
......@@ -387,215 +431,125 @@
</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)"
value-format="yyyy"
>
</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="companyId">
<el-select
filterable
clearable
v-model="form.companyId"
placeholder="请选择所属商户"
:disabled="[1].includes(typeH)"
style="width: 100%"
>
<el-option
v-for="item in companyLaist"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<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-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="城市" 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>
......@@ -642,6 +596,45 @@
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<template v-if="dialogSetTime">
<el-dialog
title="设置时间"
:visible.sync="dialogSetTime"
width="60%"
append-to-body
>
<el-form
ref="formTime"
:model="formTimeData"
:rules="rulesTime"
label-width="120px"
>
<el-form-item label="时间选择" prop="workingHours">
<el-time-picker
is-range
arrow-control
v-model="formTimeData.workingHours"
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
placeholder="选择时间范围"
format="HH:mm"
value-format="HH:mm"
:picker-options="{
format: 'HH:mm',
}"
@change="timePickerChange"
>
</el-time-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmitTime">确认时间</el-button>
<el-button @click="dialogSetTime = false">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
</div>
</template>
......@@ -659,6 +652,16 @@ 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,
companyPlistGet,
employeesSetWorkHourPut,
} from "@/api/index.js";
export default {
name: "UserCompanion",
......@@ -666,6 +669,8 @@ export default {
components: { Treeselect },
data() {
return {
dialogSetTime: false,
typeH: 0, //0新增 1详情 2修改
// 遮罩层
loading: true,
// 选中数组
......@@ -686,6 +691,7 @@ export default {
deptOptions: undefined,
// 是否显示弹出层
open: false,
cityVoList: [],
// 部门名称
deptName: undefined,
// 默认密码
......@@ -727,6 +733,7 @@ export default {
// deptId: undefined
// userType: 'app_user'
},
companyLaist: [],
// 列信息
columns: [
{ key: 0, label: `用户编号`, visible: true },
......@@ -739,8 +746,8 @@ export default {
],
// 表单校验
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
name: [
{ required: true, message: "陪诊员名称不能为空", trigger: "blur" },
{
min: 2,
max: 20,
......@@ -748,30 +755,64 @@ 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"],
},
],
},
formTimeData: {},
rulesTime: {
workingHours: [
{
required: true,
message: "时间选择不能为空",
trigger: ["blur", "change"],
},
],
},
......@@ -852,18 +893,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,15 +939,137 @@ export default {
/** 新增按钮操作 */
handleAdd() {
this.reset();
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.cityVoListAxios();
this.companyPlistAxios();
// 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 companyPlistAxios() {
const { code, data } = await companyPlistGet();
if (code === 200) {
this.companyLaist = data;
}
},
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.companyPlistAxios();
self.employeesDetailsGetA(row);
break;
case 2: //修改
self.cityVoListAxios();
self.companyPlistAxios();
self.employeesDetailsGetA(row);
break;
case 3: //冻结/解禁
self.switchStatusPutA(row);
break;
case 4: //设置为陪护人员/设置为陪诊人员
self.switchIdentityPutA(row);
break;
case 5: //设置时间
self.$set(self.formTimeData, "workingHours", undefined);
self.$set(self.formTimeData, "emId", row.id);
self.dialogSetTime = true;
break;
}
},
timePickerChange(e) {
console.log("timePickerChange", e);
},
onSubmitTime() {
this.$refs["formTime"].validate((valid) => {
if (valid) {
employeesSetWorkHourPut({
workingHours: `${this.formTimeData.workingHours[0]}-${this.formTimeData.workingHours[1]}`,
emId: this.formTimeData.emId,
}).then((response) => {
this.$modal.msgSuccess("设置成功");
this.dialogSetTime = false;
this.getList();
});
}
});
},
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) {
this.reset();
......@@ -952,14 +1111,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,10 +36,11 @@ 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.170:8089`,
// target: `http://192.168.0.199:8089`,
// target: `http://192.168.0.125:8089`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
......
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