对接放号管理接口并完善逻辑

main
jinna 3 years ago
parent 9449364797
commit 4cbf38dc14
  1. 31
      src/api/booklist/booklist.js
  2. 32
      src/api/booknumber/booknumber.js
  3. 21
      src/views/booklist/index.vue
  4. 496
      src/views/booknumber/index.vue
  5. 34
      vue.config.js

@ -1,24 +1,33 @@
import request from '@/router/axios';
import request from "@/router/axios";
//预约列表
export const getList = (current, size, params) => {
return request({
url: '/api/blade-business/apm-record/page',
method: 'get',
url: "/api/blade-business/apm-record/page",
method: "get",
params: {
...params,
current,
size,
}
})
}
},
});
};
export const getStatus = (id) => {
return request({
url: "/api/blade-business/apm-record/register",
method: "get",
params: {
id,
},
});
};
//预约当个详情
export const queryBookDetail = (ids) => {
return request({
url: '/api/blade-business/apm-record/detail-by-id',
method: 'get',
url: "/api/blade-business/apm-record/detail-by-id",
method: "get",
params: {
ids,
}
})
}
},
});
};

@ -1,6 +1,6 @@
import request from "@/router/axios";
export const getList = (current, size, params) => {
export const getNumList = (current, size, params) => {
return request({
url: "/api/blade-business/apm-config/page",
method: "get",
@ -19,3 +19,33 @@ export const getExamProject = () => {
method: "get",
});
};
//新增放号
export const addExamProject = (data) => {
return request({
url: "/api/blade-business/apm-config/save",
method: "post",
headers: {
"Content-Type": "application/json", //如果写成contentType会报错
},
data,
});
};
// 获取放号详细
export const examProjectDetail = (query) => {
return request({
url: "/api/blade-business/apm-config/detail",
method: "get",
params: query,
});
};
// 获取医院列表
export const getHosList = (query) => {
return request({
url: "/api/blade-system/dept-hospital/list-hospital",
method: "get",
params: query,
});
};

@ -11,11 +11,15 @@
}}</el-tag>
</template>
<template slot-scope="{row}" slot="menu">
<el-button type="text" @click="handleRegister"
<el-button type="text" @click="handleRegister(row)"
:disabled="row.apmStatus == 2 ? false : true">预约报道</el-button>
</template>
</avue-crud>
<el-drawer :visible.sync="isRegister" :append-to-body="true" :direction="direction" class="my-info-dialog"
<el-drawer
:visible.sync="isRegister"
:append-to-body="true"
:direction="direction"
class="my-info-dialog"
custom-class="register_box" @close="closeDraw">
<div slot="title" class="title_box">
<div class="title_txt">
@ -294,7 +298,8 @@
<script>
import {
getList,
queryBookDetail
queryBookDetail,
getStatus
} from "@/api/booklist/booklist";
import { mapGetters } from "vuex";
import print from "vue-print-nb";
@ -411,8 +416,16 @@ export default {
created() {
},
methods: {
handleRegister() {
handleRegister(row) {
console.log(row)
this.isRegister = true
getStatus(row.id).then(res =>{
console.log(res)
})
// queryBookDetail(row.id).then(res =>{
// console.log(res)
// })
},
beforeOpen(done, type) {
// if (["add", "edit"].includes(type)) {

@ -6,16 +6,16 @@
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad">
<template slot-scope="{row}" slot="num">
<div v-for="item1 in row.itemArr.map(item => item.monment + item.time)" :key="item1">{{item1}}</div>
<div v-for="item1 in row.detailList.map(item => item.period + item.timeFrame)" :key="item1">{{item1}}</div>
</template>
<template slot-scope="{row}" slot="count">
<div v-for="item1 in row.itemArr.map(item => item.count)" :key="item1">{{item1}}</div>
<div v-for="item1 in row.detailList.map(item => item.numberNum)" :key="item1">{{item1}}</div>
</template>
<template slot-scope="{row}" slot="people">
<div :class="row.itemArr.find(item => item.count == item1) ? 'cla' :''" v-for="item1 in row.itemArr.map(item => item.people)" :key="item1">{{item1}}</div>
<div :class="row.detailList.find(item => item.numberNum == item1) ? 'cla' :''" v-for="item1 in row.detailList.map(item => item.apmNum)" :key="item1">{{item1}}</div>
</template>
<template slot-scope="{row}" slot="menu">
<el-button @click="handleRegister">修改</el-button>
<el-button @click="handleRegister(row)">修改</el-button>
</template>
<template slot-scope="scope" slot="menuLeft">
<el-button type="primary"
@ -26,25 +26,19 @@
<el-drawer
:visible.sync="isNumber"
:append-to-body="true"
:with-header="false"
@close="closeDraw"
custom-class="number_box">
<div class="title_box">
<div slot="title" class="title_box">
<div class="title_txt">
<div class="txt">{{title}}</div>
<div class="img_box" @click="closeDraw">
<img src="~@/assets/image/close.png" alt="">
</div>
</div>
<div class="sub_txt">{{subtitle}}</div>
</div>
<div class="tab_box" v-show="isShow">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane :label="item.dictValue" :name="item.dictKey" v-for="item in tabArr" :key="item.dictValue">
<el-tab-pane :label="item.dictValue" :name="item.dictValue" v-for="item in tabArr" :key="item.dictValue">
<div class="form_box">
<div class="monment_txt">上午</div>
<avue-form :option="item.addOption" v-model="item.addForm"></avue-form>
<!-- <div class="monment_txt">下午</div>
<avue-form :option="item.addOption1" v-model="item.addForm1"></avue-form> -->
<avue-form ref="addFrom" :option="item.addOption" v-model="item.addForm" @submit="handleSubmit"></avue-form>
</div>
</el-tab-pane>
</el-tabs>
@ -54,23 +48,24 @@
<template
slot="dateCell"
slot-scope="{date, data}">
<p :class="[Date.parse(new Date(data.day)) < new Date().getTime() + 3600 * 1000 * 24 * 7 ? 'selected' : 'select',dayArr.find(item => item == data.day) ? 'isSelected' : '']" @click="clickCalc(data.day)">
<p :class="[Date.parse(new Date(data.day)) <= selectDay ? 'selected' : 'select',dayArr.find(item => item == data.day) ? 'isSelected' : '']" @click="clickCalc(data.day)">
{{ data.day.slice(-2) }}
</p>
</template>
</el-calendar>
</div>
<div class="button_box">
<div class="button_box" v-show="!isShow">
<el-button>取消</el-button>
<el-button type="primary" @click="submitForm(activeName)">提交</el-button>
<el-button type="primary" @click="clickSubmit">提交</el-button>
</div>
</el-drawer>
</basic-container>
</template>
<script>
import {getList,getExamProject} from "@/api/booknumber/booknumber";
import {getUserInfo} from '@/api/system/user'
import {getNumList,getExamProject,addExamProject,getHosList,examProjectDetail} from "@/api/booknumber/booknumber";
import {getUserInfo,getList} from '@/api/system/user'
import { mapGetters } from "vuex";
export default {
data() {
return {
@ -94,6 +89,7 @@ export default {
addForm1: {
addData: []
},
selectDay:'',
addOption:{},
addOption1:{},
activeName: '',
@ -120,7 +116,11 @@ export default {
column: [
{
label: "体检项目",
prop: "regName",
prop: "project",
},
{
label: "日期",
prop: "apmDay",
},
{
label: "日期",
@ -129,9 +129,24 @@ export default {
format: "yyyy-MM-dd",
valueFormat: "yyyy-MM-dd",
search: true,
viewDisplay:false,
hide:true,
searchValue:new Date().getFullYear() + '-' + ((new Date().getMonth() + 1) < 10 ? '0' + (new Date().getMonth() + 1) : ((new Date().getMonth() + 1))) + '-' + (new Date().getDate() < 10 ? '0' + new Date().getDate() : new Date().getDate()),
searchClearable:false
},
{
label:'医院',
prop:'hosId',
type:'select',
hide: true,
viewDisplay:false,
props: {
label: 'deptName',
value: 'id'
},
dicUrl: '/api/blade-system/dept-hospital/list-hospital',
search:true
},
{
label: "体检项目",
prop: "projectName",
@ -169,64 +184,33 @@ export default {
dayArr:[],
depId:'',
tabArr:[],
tabsArr:[]
tabsArr:[],
roleName:'',
isSelect:false,
hospitalArr:[],
isEdit:false
};
},
computed: {
},
mounted() {
console.log(this.userInfo)
if(this.userInfo.role_name !== 'hospital'){
this.option.column.find(item => item.prop == "hosId").search = true
}else{
this.option.column.find(item => item.prop == "hosId").search = false
}
getExamProject().then(res =>{
res.data.data.map((item,index) =>{
this.option.column[2].dicData.push({
this.option.column.find(item => item.prop == "projectName").dicData.push({
label:item.dictValue,
value:item.dictValue,
})
})
this.tabArr.push({
dictValue:item.dictValue,
dictKey:item.dictKey,
addForm: {
addData: [
{
timerange: '08:00am,08:30am',
num: 1
},
{
timerange: '08:30am,09:00am',
num: 1
},
{
timerange: '09:00am,09:30am',
num: 1
},
{
timerange: '09:30am,10:00am',
num: 1
}
],
addData1: [
{
timerange: '13:00,13:30',
num: 1
},
{
timerange: '13:30,14:00',
num: 1
},
{
timerange: '14:00,14:30',
num: 1
},
{
timerange: '14:30,15:00',
num: 1
}
]
},
addOption:{
emptyBtn:false,
submitBtn:false,
column: [
{
label:'上午',
@ -247,7 +231,7 @@ export default {
rules: [
{
required: true,
message: '请输入姓名',
message: '请选择放号时段',
trigger: 'blur'
}
]
@ -258,7 +242,15 @@ export default {
controlsPosition:'',
type:'number',
min:1,
max:20,
span:10,
rules: [
{
required: true,
message: '请选择放号数量',
trigger: 'blur'
}
]
}
]
}
@ -279,6 +271,13 @@ export default {
format:'hh:mm a',
valueFormat:'HH:mm',
popperClass:'time',
rules: [
{
required: true,
message: '请选择放号时段',
trigger: 'blur'
}
]
},
{
label:'放号数量',
@ -286,17 +285,50 @@ export default {
controlsPosition:'',
type:'number',
min:1,
max:20,
span:10,
rules: [
{
required: true,
message: '请选择放号数量',
trigger: 'blur'
}
]
}
]
}
},
{
label: '投放医院',
prop: 'select',
type: 'select',
props: {
label: 'deptName',
value: 'id'
},
display:true,
dicUrl: '/api/blade-system/dept-hospital/list-hospital',
rules: [
{
required: true,
message: '请选择投放医院',
trigger: 'blur'
}
]
}
]
},
addForm:{
addData:[],
addData1:[]
}
})
})
})
},
computed:{
...mapGetters(["userInfo", "permission"]),
},
methods: {
clickCalc(day){
let tmp = this.dayArr.find(item => item == day)
@ -306,86 +338,252 @@ export default {
}else{
this.dayArr = this.dayArr.filter(item => item != tmp)
}
console.log(this.dayArr)
// console.log(this.dayArr)
},
spanMethod({ row, column, rowIndex, columnIndex }) {
// console.log(row)
// console.log(column)
},
beforeOpen(done, type) {
// if (["add", "edit"].includes(type)) {
// this.initData();
// }
// if (["edit", "view"].includes(type)) {
// getDept(this.form.id).then(res => {
// this.form = res.data.data;
// });
// }
done();
},
handleClick(tab, event){
this.addForm = {
addData:[]
};
this.addForm1 = {
addData:[]
//
addNumber(){
this.activeName = this.tabArr[0].dictValue;
this.isNumber = true;
this.isShow = true;
this.tabArr.map(item =>{
item.addForm={
addData: [
{
timerange: '08:00am,08:30am',
num: 1
},
{
timerange: '08:30am,09:00am',
num: 1
},
{
timerange: '09:00am,09:30am',
num: 1
},
{
timerange: '09:30am,10:00am',
num: 1
}
],
addData1: [
{
timerange: '13:00,13:30',
num: 1
},
{
timerange: '13:30,14:00',
num: 1
},
{
timerange: '14:00,14:30',
num: 1
},
{
timerange: '14:30,15:00',
num: 1
}
],
select:''
}
})
if(this.userInfo.role_name !== "hospital"){
this.selectDay = new Date().getTime();
this.tabArr.map(item =>{
item.addOption.column.find(item1 => item1.prop == "select").display = true
})
}else{
this.selectDay = new Date().getTime() + 3600 * 1000 * 24 * 7;
this.tabArr.map(item =>{
item.addOption.column.find(item1 => item1.prop == "select").display = false
})
}
},
submitForm(value){
this.count = 0;
// let tmp = this.tabArr.find(item => item.dictKey = value);
// let tmp1 = tmp.addForm.addData.find(item => item.timerange !== '' && item.num !== undefined)
// let tmp2 = tmp.addForm.addData1.find(item => item.timerange !== '' && item.num !== undefined)
// if(!tmp1 && !tmp2){
// this.$message.error('')
// }else{
// tmp.addForm.addData.map(item =>{
// if(item.timerange !== '' && item.num == undefined){
// this.$message.error('')
// }else if(item.timerange == '' && item.num !== undefined){
// this.$message.error('')
// }
// console.log(tmp)
// this.count += item.num;
// })
// tmp.addForm.addData1.map(item =>{
// if(item.timerange !== '' && item.num == undefined){
// this.$message.error('')
// }else if(item.timerange == '' && item.num !== undefined){
// this.$message.error('')
// }else{
// this.count += item.num;
// // this.addForm1 = tmp.addForm.addData1
// }
// })
// }
// // console.log(this.addForm,this.addForm1)
//
handleRegister(row){
this.isEdit = true;
let values = {
createDept:row.createDept,
project:row.project,
apmDay:row.apmDay.substr(0,10)
}
this.dayArr.push(row.apmDay.substr(0,10))
examProjectDetail(values).then(res =>{
console.log(res.data.data)
let data = res.data.data;
this.isNumber = true;
this.isShow = true;
this.activeName = data[0].project;
let val = this.tabArr.find(item => item.dictValue == this.activeName);
if(this.userInfo.role_name !== 'hospital'){
val.addOption.column.find(item => item.prop == "select").display = true;
this.selectDay = new Date().getTime();
}else{
this.selectDay = new Date().getTime() + 3600 * 1000 * 24 * 7;
val.addOption.column.find(item => item.prop == "select").display = false
}
val.addForm.addData = [];
val.addForm.addData1 = [];
data[0].createDept = "1623571646250143746"
val.addForm.select = data[0].createDept
console.log(val)
data.map(item =>{
if(item.period == '上午'){
item.timeFrame = item.timeFrame.replace('-','am,').concat('am')
val.addForm.addData.push({
num:item.numberNum,
timerange:item.timeFrame
})
}else{
let index = item.timeFrame.indexOf(":");
let index1 = item.timeFrame.indexOf("-");
let tmp = (parseInt(item.timeFrame.slice(0,item.timeFrame.indexOf(":"))) + 12) + item.timeFrame.slice(item.timeFrame.indexOf(":"));
let tmp1 = tmp.substring(0,index1 + 2) + (parseInt(tmp.substring(index1 + 2,tmp.indexOf(":",index + 2))) + 12) + tmp.substring(tmp.indexOf(":",index + 2))
item.timeFrame = tmp1.replace('-',',')
val.addForm.addData1.push({
num:item.numberNum,
timerange:item.timeFrame
})
}
})
})
},
closeDraw(){
this.isNumber = false
handleClick(tab, event){
let tmp = this.tabArr.find(item => item.dictValue == tab.label);
tmp.addForm = {
addData: [
{
timerange: '08:00am,08:30am',
num: 1
},
{
timerange: '08:30am,09:00am',
num: 1
},
{
timerange: '09:00am,09:30am',
num: 1
},
{
timerange: '09:30am,10:00am',
num: 1
}
],
addData1: [
{
timerange: '13:00,13:30',
num: 1
},
{
timerange: '13:30,14:00',
num: 1
},
{
timerange: '14:00,14:30',
num: 1
},
{
timerange: '14:30,15:00',
num: 1
}
]
}
},
addNumber(){
this.activeName = this.tabArr[0].dictKey;
this.isNumber = true;
this.addForm = {
addData:[
{
timerange: "08:00am,08:30am",
num: 1
},
handleSubmit(value,done){
this.count = 0;
value.addData.map(item => this.count += item.num)
value.addData1.map(item => this.count += item.num)
console.log(this.count)
if(JSON.stringify(value) === '{}'){
this.$message.error('请至少添加一条数据');
done()
}else{
if(this.isEdit){
this.$confirm(`是否对此时段号源进行增加号源数量变更?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
customClass:'dialog_box'
}).then(() => {
this.addForm1 = value;
this.isShow = false;
this.title = '放号日期';
this.subtitle = '请选择配置号源投放的具体日期。'
done()
}).catch(() => {
done()
});
}else{
this.$confirm(`该天投放号源为${this.count}人次, 是否确认?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
customClass:'dialog_box'
}).then(() => {
this.addForm1 = value;
this.isShow = false;
this.title = '放号日期';
this.subtitle = '请选择配置号源投放的具体日期。'
done()
}).catch(() => {
done()
});
}
}
},
//
clickSubmit(){
console.log(this.addForm1.select)
let values = {
dayList:this.dayArr,
createDept:this.addForm1.select == undefined ? this.userInfo.dept_id : this.addForm1.select,
configListVOS:[
{
timerange: "09:00am,09:30am",
num: 2
createDept:this.addForm1.select == undefined ? this.userInfo.dept_id : this.addForm1.select,
project:this.tabArr.find(item => item.dictValue == this.activeName).dictValue,
detailList:[]
}
]
}
this.addForm1.addData.map(item =>{
values.configListVOS[0].detailList.push({
period:'上午',
timeFrame:item.timerange.replace(",","-").replaceAll('am',''),
numberNum:item.num,
})
})
this.addForm1.addData1.map(item =>{
let startTime = (parseInt(item.timerange.substr(0,2)) - 12) + item.timerange.substr(2,3);
let endTime = (parseInt(item.timerange.substr(6,7)) - 12) + item.timerange.substr(8,9)
values.configListVOS[0].detailList.push({
period:'下午',
timeFrame:startTime + '-' + endTime,
numberNum:item.num,
})
})
addExamProject(values).then(res =>{
console.log(res)
if(res.data.code == 200){
this.$message.success('放号成功');
this.isNumber = false
}
})
},
closeDraw(){
this.isNumber = false
},
beforeClose(done) {
// this.parentId = "";
// const column = this.findObject(this.option.column, "parentId");
// // column.value = "";
// column.addDisabled = false;
done();
},
searchChange(params, done) {
@ -404,32 +602,41 @@ export default {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
const { releaseTime,project, } = this.query;
const { releaseTime,project,createDept } = this.query;
let values = {};
getUserInfo().then(res =>{
this.depId = res.data.data.id;
if(releaseTime){
this.hospitalArr = []
// this.userInfo.role_name = "hospital"
if(this.userInfo.role_name !== "hospital"){
getHosList().then(res =>{
this.hospitalArr = res.data.data;
this.option.column[2].search = true;
this.option.column[2].dicData = this.hospitalArr;
})
}else{
this.query.hosId = this.userInfo.dept_id
}
if(releaseTime){
values = {
startTime:this.query.releaseTime,
endTime:this.query.releaseTime,
project:this.query.projectName == '全部' ? '' : this.query.projectName,
createDept:this.depId
createDept:this.query.hosId
};
}else{
values = {
startTime : new Date().getFullYear() + '-' + ((new Date().getMonth() + 1) < 10 ? '0' + (new Date().getMonth() + 1) : ((new Date().getMonth() + 1))) + '-' + (new Date().getDate() < 10 ? '0' + new Date().getDate() : new Date().getDate()),
endTime : new Date().getFullYear() + '-' + ((new Date().getMonth() + 1) < 10 ? '0' + (new Date().getMonth() + 1) : ((new Date().getMonth() + 1))) + '-' + (new Date().getDate() < 10 ? '0' + new Date().getDate() : new Date().getDate()),
createDept:this.depId,
createDept:this.query.hosId,
project:''
}
}
getList(page.currentPage, page.pageSize,values).then(res =>{
getNumList(page.currentPage, page.pageSize,values).then(res =>{
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
console.log(this.data)
this.loading = false;
})
})
},
}
};
@ -469,6 +676,12 @@ export default {
}
</style>
<style lang="scss">
.dialog_box{
right: 10%;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.el-drawer__wrapper{
.number_box{
width: 45% !important;
@ -477,8 +690,8 @@ export default {
overflow: hidden;
}
.title_box{
padding: 0 40px;
margin-top: 40px;
// padding: 0 40px;
// margin-top: 40px;
.title_txt{
display: flex;
height: 30px;
@ -486,10 +699,9 @@ export default {
justify-content: space-between;
.txt{
font-weight: bold;
color: #333333;
line-height: 16px;
font-size: 20px;
color: rgba(0,0,0,.85);
font-weight: 500;
line-height: 24px;
}
.img_box{

@ -6,34 +6,34 @@ module.exports = {
chainWebpack: (config) => {
//忽略的打包文件
config.externals({
'vue': 'Vue',
'vue-router': 'VueRouter',
'vuex': 'Vuex',
'axios': 'axios',
'element-ui': 'ELEMENT',
vue: "Vue",
"vue-router": "VueRouter",
vuex: "Vuex",
axios: "axios",
"element-ui": "ELEMENT",
});
const entry = config.entry('app');
entry.add('babel-polyfill').end();
entry.add('classlist-polyfill').end();
entry.add('@/mock').end();
const entry = config.entry("app");
entry.add("babel-polyfill").end();
entry.add("classlist-polyfill").end();
entry.add("@/mock").end();
},
css: {
extract: { ignoreOrder: true }
extract: { ignoreOrder: true },
},
//开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理
devServer: {
port: 1888,
proxy: {
'/api': {
"/api": {
//本地服务接口地址
target: 'http://192.168.1.106',
target: "http://192.168.1.3",
//远程演示服务地址,可用于直接启动项目
// target: 'https://saber.bladex.vip/api',
ws: true,
pathRewrite: {
'^/api': '/'
}
}
}
}
"^/api": "/",
},
},
},
},
};

Loading…
Cancel
Save