master
xy 1 year ago
parent c7ea369354
commit c77264aedf

@ -33,11 +33,12 @@ export function scheduleDelete(data){
})
}
export function scheduleLog(params){
export function scheduleLog(params,isLoading=true){
return request({
method:'get',
url:'/api/admin/schedule/schedule-log',
params
params,
isLoading
})
}

@ -0,0 +1,33 @@
import request from "@/utils/request";
export function getList(params){
return request({
method:'get',
url:'/api/admin/schedule-list-checks/get-list',
params
})
}
export function getForm(id,params){
return request({
method:'get',
url:`/api/admin/schedule-list-checks/get-form/${id}`,
params
})
}
export function save(data){
return request({
method:'post',
url:'/api/admin/schedule-list-checks/save',
data
})
}
export function destroy(id,data){
return request({
method:'post',
url:`/api/admin/schedule-list-checks/delete/${id}`,
data
})
}

@ -11,7 +11,7 @@
</div>
</div>
<div class="bs-card__body flex-1" @click="previewImgs = yiliaopeihu.map(i => i.file),isShowPreview = true">
<div class="bs-card__body flex-1" @click="imgLabel = '医疗陪护',previewImgs = yiliaopeihu.map(i => i.file),isShowPreview = true">
<el-image fit="cover" class="el-img" :src="yiliaopeihu[0] ? yiliaopeihu[0].file : ''" alt="" />
<div class="img-title">{{ yiliaopeihu[0] ? yiliaopeihu[0].label : '' }}</div>
</div>
@ -27,7 +27,7 @@
</div>
</div>
<div class="bs-card__body flex-1" @click="previewImgs = xiangmu.map(i => i.file),isShowPreview = true">
<div class="bs-card__body flex-1" @click="imgLabel = '物业项目',previewImgs = xiangmu.map(i => i.file),isShowPreview = true">
<el-image fit="cover" class="el-img" :src="xiangmu[0] ? xiangmu[0].file : ''" alt="" />
<div class="img-title">{{ xiangmu[0] ? xiangmu[0].label : '' }}</div>
</div>
@ -43,7 +43,7 @@
</div>
</div>
<div class="bs-card__body flex-1" @click="previewImgs = fengongsi.map(i => i.file),isShowPreview = true">
<div class="bs-card__body flex-1" @click="imgLabel = '分公司/站点',previewImgs = fengongsi.map(i => i.file),isShowPreview = true">
<el-image fit="cover" class="el-img" :src="fengongsi[0] ? fengongsi[0].file : ''" alt="" />
<div class="img-title">{{ fengongsi[0] ? fengongsi[0].label : '' }}</div>
</div>
@ -59,13 +59,13 @@
</div>
</div>
<div class="bs-card__body flex-1" @click="previewImgs = huodongjijin.map(i => i.file),isShowPreview = true">
<div class="bs-card__body flex-1" @click="imgLabel = '活动集锦',previewImgs = huodongjijin.map(i => i.file),isShowPreview = true">
<el-image fit="cover" class="el-img" :src="huodongjijin[0] ? huodongjijin[0].file : ''" alt="" />
<div class="img-title">{{ huodongjijin[0] ? huodongjijin[0].label : '' }}</div>
</div>
</div>
<ImgPreview v-model="isShowPreview" :imgs="previewImgs"></ImgPreview>
<ImgPreview v-model="isShowPreview" :label="imgLabel" :imgs="previewImgs"></ImgPreview>
</div>
</template>
@ -90,6 +90,7 @@ export default {
previewImgs: [],
isShowPreview: false,
imgLabel: "",
}
},
methods: {

@ -153,7 +153,6 @@
<div class="type-change">
<div class="type-change-item" @click="type = 'img'">
<i class="el-icon-picture type-change-item__icon"></i>
<div class="type-change-item__num">{{ imgs.length }}</div>
</div>
<div class="type-change-item" @click="type = 'video'">
<i class="el-icon-video-camera-solid type-change-item__icon"></i>
@ -175,7 +174,8 @@
class="today-item"
v-for="(item, index) in toDayNums"
:style="{ 'grid-area': `d${index}` }"
@click="activeToday = item"
:class="{ 'today-item-active': activeToday.name === item.name }"
@click.stop.prevent="todayClick($event,item,index)"
>
<div class="today-item__value">{{ item.val }}</div>
<div class="today-item__name">{{ item.name }}</div>
@ -183,6 +183,7 @@
</div>
<dv-scroll-board
@click="scrollBoardClick"
ref="scrollBoard"
:key="scrollBoardKey"
:config="listConfig"
@ -191,14 +192,23 @@
</div>
</div>
</div>
<dataPreview ref="dataPreview" v-model="isShowPreview" :data="selectData" :label="activeToday.name"></dataPreview>
</div>
</template>
<script>
import { scheduleList } from "@/api/schedule"
import { getList as longInsuranceIndex } from "@/api/longInsurance"
import { getList as scheduleListChecksIndex } from "@/api/scheduleListChecks"
import { getList } from "@/api/bigScreen";
import gsap from "gsap";
import dataPreview from "@/views/bigSreen/component/dataPreview.vue";
export default {
components: {
dataPreview
},
data() {
return {
total: {
@ -207,6 +217,12 @@ export default {
zongfuwushichang: 0,
},
listData: new Map([
['changhuxian',[]],
['jujiayuanzhu',[]],
['canlianjujiatuoyang',[]],
['huifangjicha',[]]
]),
toDayNums: [
{
key: "changhuxian",
@ -246,9 +262,17 @@ export default {
activeArea: {},
activeToday: {},
activeColor: "#8537d8",
activeColors: ['#8537d8','#159138', '#4b72dc', '#c92d40'],
selectData: {},
isShowPreview: false,
};
},
methods: {
todayClick(e, item, index) {
this.activeToday = item
this.activeColor = this.activeColors[index]
},
async getTotal() {
const res = (
await getList(
@ -319,17 +343,52 @@ export default {
? 0
: Number(res.find((j) => j.key === i.key)?.value);
});
this.scrollBoardKey++;
// try {
// this.listConfig.data = JSON.parse(
// res.find((i) => i.key === "list")?.value ?? "[]"
// ).map((i) => [
// i.name,
// i.people,
// `<span style="color: #03b1fa;">${i.time}</span>`,
// ]);
// this.scrollBoardKey++;
// } catch (err) {
// console.error(err);
// }
},
async getListData() {
try {
this.listConfig.data = JSON.parse(
res.find((i) => i.key === "list")?.value ?? "[]"
).map((i) => [
i.name,
i.people,
`<span style="color: #03b1fa;">${i.time}</span>`,
]);
this.scrollBoardKey++;
const res = await Promise.all([
longInsuranceIndex({
page: 1,
page_size: 20,
sort_name: 'created_at'
},false),
scheduleListChecksIndex({
page: 1,
page_size: 20,
sort_name: 'created_at'
},false),
scheduleList({
page: 1,
page_size: 20,
sort_name: 'created_at',
product_type_id: 19
}),
scheduleList({
page: 1,
page_size: 20,
sort_name: 'created_at',
product_type_id: 20
})
])
this.listData.set("changhuxian",res[0]?.data||[])
this.listData.set("huifangjicha",res[1]?.data||[])
this.listData.set("canlianjujiatuoyang",res[2]?.list?.data||[])
this.listData.set("jujiayuanzhu",res[3]?.list?.data||[])
} catch (err) {
console.error(err);
console.error(err)
}
},
@ -359,6 +418,14 @@ export default {
this.playVideo();
}
},
scrollBoardClick({row, ceil, rowIndex , columnIndex}) {
if(columnIndex === 4) {
this.selectData = this.listData.get(this.activeToday.key) ? this.listData.get(this.activeToday.key)[rowIndex] : {};
setTimeout(() => {
this.isShowPreview = true;
},300)
}
}
},
computed: {
flyingConfig() {
@ -396,21 +463,36 @@ export default {
index: true,
rowNum: 8,
align: ["center", "left", "center", "center"],
columnWidth: [52],
header: ["服务名称", "人员", "时间"],
data: Array.from({ length: 10 }, () => [
"稽查回访",
"人员a",
'<span style="color: #03b1fa;">13:55</span>',
]),
columnWidth: [54],
waitTime: 2000,
header: [`<span style="color: ${this.activeColor}">${this.activeToday?.name||"服务名称"}</span>`, "人员", "时间","操作"],
data:
this.listData.get(this.activeToday.key) ? this.listData.get(this.activeToday.key).map(i =>
[
this.activeToday?.name,
i.customer?.name||i.customer_id,
`<span style="color: #03b1fa;">${this.$moment(i.created_at).format('HH:mm')}</span>`,
'<button style="line-height: 25px; height: 25px;color: #fff;width: 68px;border-radius: 12px;background-color: #0e2e91;">查看</button>']
) : [],
// Array.from({ length: 10 }, () => [
// "访",
// "a",
// '<span style="color: #03b1fa;">13:55</span>',
// '<button style="line-height: 25px; height: 25px;color: #fff;width: 68px;border-radius: 12px;background-color: #0e2e91;"></button>'
// ]),
}
}
},
created() {
this.getTotal();
this.getData();
this.getList();
this.getAreas();
Promise.all([
this.getData(),
this.getListData()
]).then(_ => {
this.todayClick(false,this.toDayNums[0],0)
})
},
mounted() {
document.body.addEventListener("keypress", this.keywordRegister);
@ -422,6 +504,16 @@ export default {
</script>
<style scoped lang="scss">
$todayBkgColors:
linear-gradient(0deg, #8537d8 0%, #8537d8 0%, #bb7efc 100%),
linear-gradient(0deg, #159138 0%, #159138 0%, #51d893 99%, #51d893 100%),
linear-gradient(0deg, #0d2d8f 0%, #2eafdc 100%),
linear-gradient(0deg, #c92d40, #ec5b6d);
$todayColors:
#8537d8,
#159138,
#4b72dc,
#c92d40;
.center-top {
display: flex;
justify-content: space-between;
@ -522,14 +614,6 @@ export default {
height: 100%;
object-fit: cover;
}
//.video-btn {
// cursor: pointer;
// width: 230px;
// height: 230px;
// position: absolute;
// top: calc(50% - 115px);
// left: calc(50% - 115px);
//}
.video-btn {
border-radius: 100%;
background-color: #e7e6e630;
@ -616,7 +700,7 @@ export default {
width: 552px;
margin-left: 30px;
$todayColors: #db4edd, #00cf92, #59d4fc, #fff, #fe7629;
.today {
display: grid;
grid-column-gap: 14px;
@ -626,11 +710,13 @@ export default {
"d3 d3 d3 d3 d3 d3";
text-align: center;
@for $index from 1 through length($todayColors) {
@for $index from 1 through length($todayBkgColors) {
&-item:nth-child(#{$index}) {
.today-item__name {
color: nth($todayColors, $index);
}
background: nth($todayBkgColors, $index);
}
&-item-active:nth-child(#{$index}) {
background: transparent;
color: nth($todayColors, $index);
}
}
&-item {
@ -641,6 +727,8 @@ export default {
display: flex;
flex-direction: column;
justify-content: center;
color: #fff;
transition: all .2s;
&__value {
line-height: 1;
@ -651,8 +739,25 @@ export default {
&__name {
font-size: 14px;
}
&-active {
background: transparent;
}
}
}
}
}
::v-deep .header-item:nth-child(1) {
color: #3a67f7;
}
::v-deep .header-item:nth-child(2) span {
font-weight: 600;
font-size: 16px;
}
::v-deep .row-item:nth-child(2) .ceil button {
transition: all .2s;
background-color: #03b1fa !important;
color: #000000 !important;
}
</style>

@ -1,9 +1,13 @@
<template>
<transition name="fade">
<div v-show="value" class="img-preview">
<i class="el-icon-close close" @click="$emit('input',false)"></i>
<div class="mask" @click.prevent.stop="$emit('input',false)"></div>
<div class="img-container">
<div style="background: #0d2067;height: 100%;width: 100%;display: flex;justify-content: center;align-items: center;">
<div style="background: #0d2067;height: 100%;width: 100%;display: flex;justify-content: space-evenly;align-items: center;flex-direction: column;">
<div class="label">{{ label }}</div>
<carousel-3d :key="key" :autoplay="true" :autoplay-timeout="5000" :display="3" :perspective="40" :width="660" :height="460" :controlsVisible="true">
<slide v-for="(img, i) in imgs" :index="i">
<img style="width: 100%;height: 100%;object-fit: cover;" :src="img" alt="">
@ -31,7 +35,8 @@ export default {
imgs: {
type: Array,
default: () => []
}
},
label: String
},
data() {
return {
@ -58,11 +63,24 @@ export default {
z-index: 999;
inset: 0 0 0 0;
.close {
padding: 10px;
font-size: 45px;
width: 65px;
height: 65px;
color: #fff;
position: absolute;
right: 120px;
top: 120px;
border-radius: 100%;
background-color: #5ec9ea;
}
.mask {
background: #00000033;
position: fixed;
z-index: 999;
inset: 0 0 0 0;
transform: scale(2, 2);
}
.img-container {
width: 1517px;
@ -78,10 +96,26 @@ export default {
position: relative;
z-index: 1000;
padding: 5px;
.label {
font-size: 32px;
color: #aaddff;
font-weight: 500;
}
}
}
::v-deep .carousel-3d-container {
margin: auto;
//margin: auto;
}
::v-deep .carousel-3d-controls .next,::v-deep .carousel-3d-controls .prev {
color: #fff;
font-size: 120px;
}
::v-deep .carousel-3d-controls .next {
right: 180px;
}
::v-deep .carousel-3d-controls .prev {
left: 180px;
}
</style>

@ -0,0 +1,139 @@
<template>
<transition name="fade">
<div v-show="value" class="img-preview">
<i class="el-icon-close close" @click="$emit('input',false)"></i>
<div class="mask" @click.prevent.stop="$emit('input',false)"></div>
<div class="img-container">
<div style="background: #0d2067;height: 100%;width: 100%;display: flex;justify-content: space-evenly;align-items: center;flex-direction: column;">
<div class="label">{{ label }}</div>
<carousel-3d :key="key" :autoplay="true" :autoplay-timeout="5000" :display="3" :perspective="40" :width="660" :height="460" :controlsVisible="true">
<slide v-for="(img, i) in data.files ? data.files.map(i => i.url) : myFiles" :index="i">
<img style="width: 100%;height: 100%;object-fit: cover;" :src="img" alt="">
</slide>
</carousel-3d>
<div class="label">
<template v-if="data.customer">
<span>被护理人{{ data.customer.name }}</span>
</template>
<template v-if="data.nurse">
<span>护理人{{ data.nurse.name }}</span>
</template>
</div>
</div>
</div>
</div>
</transition>
</template>
<script>
import { scheduleLog } from "@/api/schedule"
import { Carousel3d, Slide } from 'vue-carousel-3d';
export default {
components: {
Carousel3d,
Slide,
},
props: {
value: {
type: Boolean,
default: false,
required: true
},
data: {
type: Object,
default: () => ({})
},
label: String
},
data() {
return {
key: 0,
myFiles: []
}
},
methods: {},
computed: {},
watch: {
data(newv) {
if(!newv.hasOwnProperty('files')) {
scheduleLog({
id: newv.id
},false).then(res => {
this.myFiles = res?.map(i => i.upload_list)?.flat()?.map(i => i.upload?.url) || []
++this.key
})
}
//
++this.key
}
}
}
</script>
<style scoped lang="scss">
.img-preview {
display: flex;
align-items: center;
justify-content: center;
position: fixed;
z-index: 999;
inset: 0 0 0 0;
.close {
padding: 10px;
font-size: 45px;
width: 65px;
height: 65px;
color: #fff;
position: absolute;
right: 120px;
top: 120px;
border-radius: 100%;
background-color: #5ec9ea;
}
.mask {
background: #00000033;
position: fixed;
z-index: 999;
inset: 0 0 0 0;
transform: scale(2, 2);
}
.img-container {
width: 1517px;
height: 839px;
border-radius: 10px;
box-sizing: border-box;
background: conic-gradient(
#de8d51,
#90b0b0,
#b9723d,
#7ac5e3
);
position: relative;
z-index: 1000;
padding: 5px;
.label {
font-size: 32px;
color: #aaddff;
font-weight: 500;
}
}
}
::v-deep .carousel-3d-container {
//margin: auto;
}
::v-deep .carousel-3d-controls .next,::v-deep .carousel-3d-controls .prev {
color: #fff;
font-size: 120px;
}
::v-deep .carousel-3d-controls .next {
right: 180px;
}
::v-deep .carousel-3d-controls .prev {
left: 180px;
}
</style>
Loading…
Cancel
Save