master
271556543@qq.com 4 years ago
parent fa72a54964
commit 579ce77ad5

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

@ -1,10 +1,11 @@
import request from "@/utils/request";
export function getList(params){
export function getList(params,isLoading=true){
return request({
method:'get',
url:'/api/admin/product-type/get-list',
params
params,
isLoading
})
}

@ -18,7 +18,7 @@ export function customerDetail(params){
export function scheduleSave(params){
return request({
method:'get',
method:'post',
url:'/api/admin/schedule/schedule-save',
params
})

@ -0,0 +1,9 @@
import request from "@/utils/request";
export function getList(params){
return request({
method:'get',
url:'/api/admin/serve-detail/get-list',
params
})
}

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

@ -89,7 +89,7 @@ Vue.prototype.$successMessage = (type,name) => {
word = '删除'
break;
default:
word = '操作'
word = type
}
Vue.prototype.$message({
type:'success',

@ -31,10 +31,10 @@ import Layout from '@/layout'
* all roles can be accessed
*/
export const constantRoutes = [{
path: '/login',
component: () => import('@/views/login/index'),
hidden: true
},
path: '/login',
component: () => import('@/views/login/index'),
hidden: true
},
{
path: '/404',
@ -54,27 +54,7 @@ export const constantRoutes = [{
icon: 'dashboard'
}
},
{
path: 'detailCustomer/:id',
name: '详细信息',
hidden:true,
component: () => import('@/views/customer/detailCustomer'),
meta: {
title: '详细信息',
icon: ''
}
},
{
path: 'applyDetail/:id',
name: '申请详情',
hidden:true,
component: () => import('@/views/order/applyDetail'),
meta: {
title: '详细信息',
icon: ''
}
}
]
]
}
]

@ -1,435 +0,0 @@
<template>
<div style="padding: 0px 20px">
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" text="新建客户" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
</lx-header>
</div>
</div>
<el-card :style="{height : cardHeight + 'px',position : 'relative'}">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="基本信息" name="first">
<el-form :model="form" :rules="rules" label-position="top" label-width="50px" class="form" ref="form">
<el-form-item label="姓名" prop="name" style="grid-area: top1-1">
<Input v-model="form.name"/>
</el-form-item>
<el-form-item label="性别" prop="sex" style="grid-area: top1-2">
<Select v-model="form.sex" >
<Option v-for="item in ['男','女']" :value="item" :key="item">{{ item }}</Option>
</Select>
</el-form-item>
<el-form-item label="身份证号" prop="idcard" style="grid-area: top1-3">
<Input v-model="form.idcard"/>
</el-form-item>
<el-form-item label="本人电话" prop="mobile" style="grid-area: top1-4">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="户籍地址" prop="mobile" style="grid-area: top2-1">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="辖区" prop="mobile" style="grid-area: top2-2">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="街道/乡镇" prop="mobile" style="grid-area: top2-3">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="社区、村委" prop="mobile" style="grid-area: top2-4">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="上门详细地址" prop="mobile" style="grid-area: top3-1">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="失能等级" prop="mobile" style="grid-area: top3-2">
<Select v-model="form.sex" >
<Option v-for="item in ['3级','4级','5级','6级']" :value="item" :key="item">{{ item }}</Option>
</Select>
</el-form-item>
<el-form-item label="备注" prop="mobile" style="grid-area: center">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="联系人" prop="mobile" style="grid-area: bottom1-1">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="联系电话" prop="mobile" style="grid-area: bottom1-2">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="与本人关系" prop="mobile" style="grid-area: bottom1-3">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="联系人备注" prop="mobile" style="grid-area: bottom1-4">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="联系人2" prop="mobile" style="grid-area: bottom2-1">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="联系电话" prop="mobile" style="grid-area: bottom2-2">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="与本人关系" prop="mobile" style="grid-area: bottom2-3">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="联系人2备注" prop="mobile" style="grid-area: bottom2-4">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="委托人联系信息" prop="mobile" style="grid-area: bottom3-1">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="委托人联系电话" prop="mobile" style="grid-area: bottom3-2">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="委托人与本人关系" prop="mobile" style="grid-area: bottom3-3">
<Input v-model="form.mobile"/>
</el-form-item>
<el-form-item label="委托人备注" prop="mobile" style="grid-area: bottom3-4">
<Input v-model="form.mobile"/>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="健康档案" name="second">
<Button type="primary" icon="ios-document-outline" ghost style="margin-bottom: 12px;">点击上传健康档案</Button>
<el-upload
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将图片拖到此处<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传jpg/png文件且不超过500kb</div>
</el-upload>
</el-tab-pane>
<el-tab-pane label="影像资料" name="third">
<div class="upload">
<div style="grid-area: top1-1;">
<div>本人身份证头像面</div>
<el-upload
style="flex: 1;"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">本人身份证头像面</div>
</el-upload>
</div>
<div style="grid-area: top1-2;">
<div>本人身份证国徽面</div>
<el-upload
style="flex: 1;"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">本人身份证国徽面</div>
</el-upload>
</div>
<div style="grid-area: top1-3;">
<div>社保卡正面</div>
<el-upload
style="flex: 1;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">社保卡正面</div>
</el-upload>
</div>
<div style="grid-area: top2-1;">
<div>委托人身份证头像面</div>
<el-upload
style="flex: 1;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">委托人身份证头像面</div>
</el-upload>
</div>
<div style="grid-area: top2-2;">
<div>委托人身份证国徽面</div>
<el-upload
style="flex: 1;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">委托人身份证国徽面</div>
</el-upload>
</div>
<div style="grid-area: top2-3;">
<div>第三方代理委托书</div>
<el-upload
style="flex: 1"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">第三方代理委托书</div>
</el-upload>
</div>
<div style="grid-area: center1;">
<div>出院小结</div>
<el-upload
style="flex: 1"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">出院小结</div>
</el-upload>
</div>
<div style="grid-area: center2;">
<div>街道证明</div>
<el-upload
style="flex: 1"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">街道证明</div>
</el-upload>
</div>
<div style="grid-area: bottom;">
<div>其他如残疾人证等</div>
<el-upload
style="flex: 1"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">其他如残疾人证等</div>
</el-upload>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="纸质材料" name="fourth">
<div class="page-upload">
<div>
<div>长护险申请人承诺书</div>
<el-upload
style="grid-area: bottom;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">长护险申请人承诺书</div>
</el-upload>
</div>
<div>
<div>长护险申请人承诺书</div>
<el-upload
style="grid-area: bottom;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">长护险申请人承诺书</div>
</el-upload>
</div>
<div>
<div>长护险申请人承诺书</div>
<el-upload
style="grid-area: bottom;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">长护险申请人承诺书</div>
</el-upload>
</div>
<div>
<div>长护险申请人承诺书</div>
<el-upload
style="grid-area: bottom;"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<div class="el-upload__text">长护险申请人承诺书</div>
</el-upload>
</div>
</div>
</el-tab-pane>
</el-tabs>
<div class="btns">
<Button type="primary" style="margin-left: 10px">提交</Button>
<Button type="primary" style="margin-left: 10px" ghost @click="$refs.form.resetFields()"></Button>
</div>
</el-card>
</div>
</template>
<script>
export default {
data() {
return {
activeName:'first',
cardHeight: 0,
form:{
name:"",
sex:"",
idcard:"",
mobile:""
},
rules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
],
sex: [
{ required: true, message: '请选择性别', trigger: 'change' }
],
}
}
},
methods: {
handleClick(e){
this.activeName = e.name
},
initLoad() {
var that = this;
var clientHeight = document.documentElement.clientHeight
var lxHeader_height = 96.5; //
var paginationHeight = 37; //
var topHeight = 50; //
let cardHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.cardHeight = cardHeight;
},
},
created() {
this.initLoad()
}
}
</script>
<style scoped lang="scss">
$theme:#b3241d;
.form{
display: grid;
grid-template-columns: [cline1] 1fr [cline2] 1fr [cline3] 1fr [cline4] 1fr [cline5];
grid-template-rows: [rline1] 1fr [rline2] 1fr [rline3] 1fr [rline4] 1fr [rline5] 1fr [rline6] 1fr [rline7] 1fr [rline8];
grid-column-gap: 10px;
grid-row-gap: 14px;
grid-template-areas:
"top1-1 top1-2 top1-3 top1-4"
"top2-1 top2-2 top2-3 top2-4"
"top3-1 top3-1 top3-2 ."
"center center center center"
"bottom1-1 bottom1-2 bottom1-3 bottom1-4"
"bottom2-1 bottom2-2 bottom2-3 bottom2-4"
"bottom3-1 bottom3-2 bottom3-3 bottom3-4";
}
.upload{
display: grid;
grid-template-rows: 190px 190px 190px 190px;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
grid-column-gap: 10px;
grid-row-gap: 16px;
grid-template-areas:
"top1-1 top1-2 top1-3 . . ."
"top2-1 top2-2 top2-3 top2-3 top2-3 ."
"center1 center1 center1 center2 center2 center2"
"bottom bottom bottom . . .";
&>div{
display: flex;
flex-direction: column;
font-size: 13px;
&>div{
padding: 5px 0;
}
}
}
.page-upload{
display: flex;
flex-wrap: wrap;
&>div{
flex-basis: 50%;
&>div{
padding: 5px 0;
}
}
}
.btns{
display: flex;
justify-content: center;
border-top: 1px solid rgba(180,180,180,0.35);
padding: 10px;
position: absolute;
bottom: 0px;
left: 10px;
right: 10px;
}
</style>
<style scoped lang="scss">
$theme:#b3241d;
::v-deep .el-card__body{
height: 100% !important;
min-width: 300px ;
}
::v-deep .el-tabs{
height: 100% !important;
}
::v-deep .el-tabs__content{
height: calc(92% - 50px) !important;
overflow: scroll !important;
padding-right: 4px !important;
}
::v-deep .el-tabs__content::-webkit-scrollbar {
width: 4px !important;
height: 10px !important;
}
::v-deep .el-tabs__content::-webkit-scrollbar-thumb {
border-radius: 6px !important;
background: #ddd !important;
}
::v-deep .el-form-item{
margin-bottom: 0px !important;
}
::v-deep .el-form-item__label{
font-size: 13px !important;
font-weight: 500 !important;
line-height: normal !important;
padding: 0 !important;
}
::v-deep .upload .el-upload{
width: 100% !important;
height: 100% !important;
}
::v-deep .upload .el-upload-dragger{
width: 100% !important;
height: 100% !important;
}
::v-deep .upload .el-upload__text{
color: $theme;
transform: translateY(-50%);
position: relative;
top: 50%;
}
::v-deep .page-upload .el-upload__text{
color:$theme;
transform: translateY(-50%);
position: relative;
top: 50%;
}
</style>

@ -20,7 +20,15 @@
</div>
</div>
<xy-table ref="table" :list="list" :table-item="tableItem" @editor="editor">
<xy-table
ref="table"
:total="total"
:list="list"
:table-item="tableItem"
@pageSizeChange="e => select.page_size = e"
@pageIndexChange="e => {select.page = e;getCustomers()}"
@editor="editor"
@delete="destroy">
</xy-table>
<add-customer ref="addCustomer" :disability-level="disabilityLevel" @refresh="getCustomers"></add-customer>
@ -28,7 +36,7 @@
</template>
<script>
import {getList} from '@/api/customer'
import {getList,destroy} from '@/api/customer'
import {getparameter} from '@/api/system/dictionary'
import addCustomer from "@/views/customer/component/addCustomer";
@ -52,7 +60,8 @@ export default {
{
prop: "name",
label: "姓名",
width: "180"
width: "180",
fixed:'left'
},
{
prop: "idcard",
@ -107,6 +116,12 @@ export default {
this.$refs['addCustomer'].id = row.id
this.$refs['addCustomer'].type = 'editor'
this.$refs['addCustomer'].isShow = true
},
destroy(row){
destroy(row.id).then(res => {
this.$successMessage('destroy','客户')
this.getCustomers()
})
}
},
mounted() {

@ -1,231 +0,0 @@
<template>
<div style="padding: 0px 20px">
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" text="详细信息" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content">
<Button type="primary" icon="ios-arrow-back" @click="$router.back()"></Button>
<Button type="primary" @click="$router.push(`/detailCustomer/${$route.params.id++}`)" ghost style="margin-left: 10px;">下一条<Icon type="ios-arrow-forward" /></Button>
</div>
</lx-header>
</div>
</div>
<el-card :style="{height : cardHeight + 'px'}">
<div class="grid">
<div style="grid-area: a1-1">姓名</div>
<div style="grid-area: a1-2">XXX</div>
<div style="grid-area: a1-3">性别</div>
<div style="grid-area: a1-4"></div>
<div style="grid-area: a1-5">身份证号</div>
<div style="grid-area: a1-6">320503198111122755</div>
<div style="grid-area: a1-7">户籍地址</div>
<div style="grid-area: a1-8">江苏省苏州市虎丘区阳光假日新苑90幢2404室</div>
<div style="grid-area: a2-1">辖区</div>
<div style="grid-area: a2-2"> </div>
<div style="grid-area: a2-3">街道/乡镇</div>
<div style="grid-area: a2-4"> </div>
<div style="grid-area: a2-5">社区村委</div>
<div style="grid-area: a2-6"> </div>
<div style="grid-area: a2-7">上门详细地址</div>
<div style="grid-area: a2-8"> </div>
<div style="grid-area: a3-1">联系人</div>
<div style="grid-area: a3-2"> </div>
<div style="grid-area: a3-3">联系电话</div>
<div style="grid-area: a3-4"> </div>
<div style="grid-area: a3-5">与本人关系</div>
<div style="grid-area: a3-6"> </div>
<div style="grid-area: a3-7">联系人备注</div>
<div style="grid-area: a3-8"> </div>
<div style="grid-area: a4-1">联系人2</div>
<div style="grid-area: a4-2"> </div>
<div style="grid-area: a4-3">联系电话</div>
<div style="grid-area: a4-4"> </div>
<div style="grid-area: a4-5">与本人关系</div>
<div style="grid-area: a4-6"> </div>
<div style="grid-area: a4-7">联系人2备注</div>
<div style="grid-area: a4-8"> </div>
<div style="grid-area: a5-1">委托人</div>
<div style="grid-area: a5-2"> </div>
<div style="grid-area: a5-3">联系电话</div>
<div style="grid-area: a5-4"> </div>
<div style="grid-area: a5-5">与本人关系</div>
<div style="grid-area: a5-6"> </div>
<div style="grid-area: a5-7">委托人备注</div>
<div style="grid-area: a5-8"> </div>
<div style="grid-area: a6-1">失能等级</div>
<div style="grid-area: a6-2"> </div>
<div style="grid-area: a6-3">备注</div>
<div style="grid-area: a6-4"> </div>
</div>
<el-divider></el-divider>
<div class="image">
<div class="image-title">
健康档案
</div>
<div class="image-content">
<div>
<div class="image-content-title">身份证头像面</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 180px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">身份证国徽面</div>
<div>
<el-image fit="cover" :src="srcList[1]" lazy style="width: 180px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">社保卡正面</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 180px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div style="flex-basis: 100%;">
<div class="image-content-title">出院小结</div>
<div>
<el-image fit="cover" :src="srcList[1]" lazy style="width: 340px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">街道证明</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">长护险申请人承诺书</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">委托书</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">失能等级评定表</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">申请告知书签字版</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
export default {
data() {
return {
cardHeight: 0,
srcList: [
'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
'https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg'
]
}
},
methods: {
initLoad() {
var that = this;
var clientHeight = document.documentElement.clientHeight
var lxHeader_height = 96.5; //
var paginationHeight = 37; //
var topHeight = 50; //
let cardHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.cardHeight = cardHeight;
},
},
created() {
this.initLoad()
}
}
</script>
<style scoped lang="scss">
.grid{
display: grid;
grid-template-columns: 1fr 0.6fr 1fr 0.8fr 1fr 1.4fr 1fr 2.6fr;
grid-template-rows: auto;
grid-template-areas:
"a1-1 a1-2 a1-3 a1-4 a1-5 a1-6 a1-7 a1-8"
"a2-1 a2-2 a2-3 a2-4 a2-5 a2-6 a2-7 a2-8"
"a3-1 a3-2 a3-3 a3-4 a3-5 a3-6 a3-7 a3-8"
"a4-1 a4-2 a4-3 a4-4 a4-5 a4-6 a4-7 a4-8"
"a5-1 a5-2 a5-3 a5-4 a5-5 a5-6 a5-7 a5-8"
"a6-1 a6-2 a6-3 a6-4 a6-4 a6-4 a6-4 a6-4";
&>div{
font-size: 13px;
border: 1px solid rgba(200,200,200,0.5);
padding: 10px 4px;
}
:nth-child(2n + 1){
font-size: 13.5px;
background: rgba(243,242,247,0.8);
color: #6E6B7B;
font-weight: 600;
text-align: center;
}
}
.image{
&-title{
font-size: 13.5px;
color: #6E6B7B;
font-weight: 600;
}
&-content{
display: flex;
flex-wrap: wrap;
align-items: flex-start;
&>div{
padding-right: 20px;
}
::v-deep .el-image__preview{
border-radius: 6px;
}
&-title{
padding: 10px 0;
}
}
}
</style>
<style scoped lang="scss">
::v-deep .el-card{
overflow-y: scroll !important;
}
::v-deep .el-card::-webkit-scrollbar {
width: 6px !important;
height: 10px !important;
}
::v-deep .el-card::-webkit-scrollbar-thumb {
border-radius: 5px !important;
background: #ddd !important;
}
::v-deep .el-divider{
background: #B3241D;
}
</style>

@ -0,0 +1,79 @@
<template>
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" style="margin-bottom: 10px; border: 0px; margin-top: 15px" text="收款单">
<div slot="content"></div>
<slot>
<div>
<Input v-model="select.keyword" placeholder="关键字搜索" style="width: 200px; margin-right: 10px"/>
<Button style="margin-left: 10px" type="primary">查询</Button>
<Button style="margin-left: 10px" type="primary" @click="$refs['addcollectMoney'].type = 'add',$refs['addcollectMoney'].isShow = true">新建</Button>
</div>
</slot>
</lx-header>
</div>
<xy-table
:total="total"
:list="list"
:table-item="table"
@editor="editor"
@delete="destroy"></xy-table>
<add ref="addcollectMoney" @refresh="getList" />
</div>
</template>
<script>
import {getList,destroy} from '@/api/collectMoney'
import {parseTime} from "@/utils"
import add from "./component/addcollectMoney"
export default {
components:{
add
},
data() {
return {
select:{
page:1,
page_size:10,
keyword:''
},
types:[],
total:0,
list:[],
table:[]
}
},
methods: {
async getList(){
const res = await getList(this.select)
this.total = res.total
this.list = res.data
console.log(this.list)
},
editor(row){
this.$refs['addcollectMoney'].type = 'editor'
this.$refs['addcollectMoney'].id = row.id
this.$refs['addcollectMoney'].isShow = true
},
destroy(row){
destroy(row.id).then(res => {
this.$successMessage('destroy','')
this.getList()
})
}
},
mounted() {
this.getList()
}
}
</script>
<style scoped lang="scss">
</style>

@ -0,0 +1,88 @@
<template>
<div>
<xy-dialog
ref="dialog"
:is-show.sync="isShow"
type="form"
:title="type === 'add' ? '新增' : '编辑'"
:form="form"
:rules="rules"
@submit="submit">
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>名称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" clearable placeholder="请输入分类名称" style="width: 300px;"></el-input>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {save,getForm} from '@/api/collectMoney'
export default {
data() {
return {
isShow:false,
id:'',
type:'',
form:{
name:'',
},
rules:{
name:[
{required:true,message:'请填写名称'}
]
}
}
},
methods: {
async getDetail(){
const res = await getForm(this.id)
this.$integrateData(this.form,res)
},
submit(){
if(this.type === 'editor'){
Object.defineProperty(this.form,'id',{
value:this.id,
enumerable:true,
configurable:true,
writable:true
})
}
save(this.form).then(res => {
this.$successMessage(this.type,'')
this.isShow = false
this.$emit('refresh')
})
}
},
watch:{
isShow(val){
if(val){
if(this.type === 'editor'){
this.getDetail()
}
}else{
this.id = ''
this.type = ''
this.$refs['dialog'].reset()
delete this.form.id
}
}
}
}
</script>
<style scoped lang="scss">
::v-deep .el-input__inner{
text-align: left;
}
</style>

@ -0,0 +1,59 @@
<template>
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" style="margin-bottom: 10px; border: 0px; margin-top: 15px" text="护工工资">
<div slot="content"></div>
<slot>
<div>
<Input v-model="select.keyword" placeholder="关键字搜索" style="width: 200px; margin-right: 10px"/>
<Button style="margin-left: 10px" type="primary">查询</Button>
</div>
</slot>
</lx-header>
</div>
<xy-table
:total="total"
:list="list"
:table-item="table"></xy-table>
</div>
</template>
<script>
import {salaryList as getList} from '@/api/worker'
import {parseTime} from "@/utils"
export default {
data() {
return {
select:{
page:1,
page_size:10,
keyword:''
},
types:[],
total:0,
list:[],
table:[]
}
},
methods: {
async getList(){
const res = await getList(this.select)
console.log(res)
this.total = res.total
this.list = res.data
},
},
mounted() {
this.getList()
}
}
</script>
<style scoped lang="scss">
</style>

@ -0,0 +1,59 @@
<template>
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" style="margin-bottom: 10px; border: 0px; margin-top: 15px" text="服务明细">
<div slot="content"></div>
<slot>
<div>
<Input v-model="select.keyword" placeholder="关键字搜索" style="width: 200px; margin-right: 10px"/>
<Button style="margin-left: 10px" type="primary">查询</Button>
</div>
</slot>
</lx-header>
</div>
<xy-table
:total="total"
:list="list"
:table-item="table"></xy-table>
</div>
</template>
<script>
import {getList} from '@/api/serveDetail'
import {parseTime} from "@/utils"
export default {
data() {
return {
select:{
page:1,
page_size:10,
keyword:''
},
types:[],
total:0,
list:[],
table:[]
}
},
methods: {
async getList(){
const res = await getList(this.select)
this.total = res.total
this.list = res.data
console.log(this.list)
},
},
mounted() {
this.getList()
}
}
</script>
<style scoped lang="scss">
</style>

@ -1,186 +0,0 @@
<template>
<div style="padding: 0px 20px">
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" text="详细信息" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content">
<Button type="primary" icon="ios-arrow-back" @click="$router.back()"></Button>
<Button type="primary" @click="$router.push(`/detailCustomer/${$route.params.id++}`)" ghost style="margin-left: 10px;">下一条<Icon type="ios-arrow-forward" /></Button>
</div>
</lx-header>
</div>
</div>
<el-card :style="{height : cardHeight + 'px'}">
<div class="grid">
<div style="grid-area: a1-1">姓名</div>
<div style="grid-area: a1-2">XXX</div>
<div style="grid-area: a1-3">性别</div>
<div style="grid-area: a1-4"></div>
<div style="grid-area: a1-5">身份证号</div>
<div style="grid-area: a1-6">320503198111122755</div>
<div style="grid-area: a1-7">户籍地址</div>
<div style="grid-area: a1-8">江苏省苏州市虎丘区阳光假日新苑90幢2404室</div>
</div>
<el-divider></el-divider>
<div class="image">
<div class="image-title">
健康档案
</div>
<div class="image-content">
<div>
<div class="image-content-title">身份证头像面</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 180px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">身份证国徽面</div>
<div>
<el-image fit="cover" :src="srcList[1]" lazy style="width: 180px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">社保卡正面</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 180px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div style="flex-basis: 100%;">
<div class="image-content-title">出院小结</div>
<div>
<el-image fit="cover" :src="srcList[1]" lazy style="width: 340px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">街道证明</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">长护险申请人承诺书</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">委托书</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">失能等级评定表</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
<div>
<div class="image-content-title">申请告知书签字版</div>
<div>
<el-image fit="cover" :src="srcList[0]" lazy style="width: 140px;" :preview-src-list="srcList"></el-image>
</div>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
export default {
data() {
return {
cardHeight: 0,
srcList: [
'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
'https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg'
]
}
},
methods: {
initLoad() {
var that = this;
var clientHeight = document.documentElement.clientHeight
var lxHeader_height = 96.5; //
var paginationHeight = 37; //
var topHeight = 50; //
let cardHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.cardHeight = cardHeight;
},
},
created() {
this.initLoad()
}
}
</script>
<style scoped lang="scss">
.grid{
display: grid;
grid-template-columns: 1fr 0.6fr 1fr 0.8fr 1fr 1.4fr 1fr 2.6fr;
grid-template-rows: auto;
grid-template-areas:
"a1-1 a1-2 a1-3 a1-4 a1-5 a1-6 a1-7 a1-8";
&>div{
font-size: 13px;
border: 1px solid rgba(200,200,200,0.5);
padding: 10px 4px;
}
:nth-child(2n + 1){
font-size: 13.5px;
background: rgba(243,242,247,0.8);
color: #6E6B7B;
font-weight: 600;
text-align: center;
}
}
.image{
&-title{
font-size: 13.5px;
color: #6E6B7B;
font-weight: 600;
}
&-content{
display: flex;
flex-wrap: wrap;
align-items: flex-start;
&>div{
padding-right: 20px;
}
::v-deep .el-image__preview{
border-radius: 6px;
}
&-title{
padding: 10px 0;
}
}
}
</style>
<style scoped lang="scss">
::v-deep .el-card{
overflow-y: scroll !important;
}
::v-deep .el-card::-webkit-scrollbar {
width: 6px !important;
height: 10px !important;
}
::v-deep .el-card::-webkit-scrollbar-thumb {
border-radius: 5px !important;
background: #ddd !important;
}
::v-deep .el-divider{
background: #B3241D;
}
</style>

File diff suppressed because one or more lines are too long

@ -21,7 +21,7 @@
:table-item="table"
:list="list"
@editor="editor"
@destroy="destroy"
@delete="destroy"
@pageSizeChange="e => select.page_size = e"
@pageIndexChange="e => {select.page = e;getOrder()}"></xy-table>

@ -1,436 +0,0 @@
<template>
<div style="padding: 0px 20px;">
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" text="排班管理" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
</lx-header>
</div>
</div>
<el-card :style="{height : cardHeight + 'px'}">
<div class="content">
<div class="content-left">
<Button type="primary" style="min-width: 140px;margin-top: 10px;" @click="isShowDialog = true">添加排班</Button>
<div style="color: #b9b9c3;padding: 10px 0;">筛选</div>
<div class="check">
<Checkbox :value="select.changhuxian && select.shangye" @on-change="change">全部</Checkbox>
<Checkbox v-model="select.changhuxian"></Checkbox>
<Checkbox v-model="select.shangye"></Checkbox>
</div>
</div>
<div class="content-right">
<div class="type-select">
<div class="type-select-item" @click="typeSelect = 'Month'" :class="{selectActive:typeSelect == 'Month'}">Month</div>
<div class="type-select-item" @click="typeSelect = 'Week'" :class="{selectActive:typeSelect == 'Week'}">Week</div>
<div class="type-select-item" @click="typeSelect = 'Day'" :class="{selectActive:typeSelect == 'Day'}">Day</div>
<div class="type-select-item" @click="typeSelect = 'List'" :class="{selectActive:typeSelect == 'List'}">List</div>
</div>
<el-calendar v-if="typeSelect == 'Month'">
<!-- 这里使用的是 2.5 slot 语法对于新项目请使用 2.6 slot 语法-->
<template
slot="dateCell"
slot-scope="{date, data}">
<div :class="data.isSelected ? 'is-selected' : ''" @click="dateClick(data)" style="height: 100%;width: 100%;position: relative;">
{{ data.day.split('-')[2].replace(/^(0+)/g,"") }} {{ data.isSelected ? '✔️' : ''}}
<div v-if="data.day == '2022-07-08'" class="range" :style="{width:dateWidth*3 - 16 + 'px'}" @click="isShowDialog = true"></div>
</div>
</template>
</el-calendar>
<div v-if="typeSelect == 'Week'" class="week">
<div class="week-title">
<div>
<Icon size="24" type="ios-arrow-back" />
<Icon size="24" type="ios-arrow-forward" style="margin-left: 10px;"/>
</div>
<div style="margin-left: 20px;">{{nowDate.year}}{{nowDate.weekStart}}-{{nowDate.weekEnd}}</div>
</div>
<table>
<tr style="border: 1px #ebe9f1 solid;">
<th></th>
<th v-for="item in weeks"><div>{{dateFormat(item)}}</div></th>
</tr>
<tr>
<td style="width: 50px;text-align: center;color: #b9b9c3;"><div>all-day</div></td>
<td v-for="td in 7"><div></div></td>
</tr>
<tr v-for="(tr,index) in 48">
<td style="width: 50px;text-align: center;"><div>{{ index%2 === 0 ? `${index/2}` : ' '}}</div></td>
<td v-for="td in 7"><div></div></td>
</tr>
</table>
</div>
<div v-if="typeSelect == 'Day'" class="week">
<div class="week-title">
<div>
<Icon size="24" type="ios-arrow-back" />
<Icon size="24" type="ios-arrow-forward" style="margin-left: 10px;"/>
</div>
<div style="margin-left: 20px;">{{nowDate.year}}{{nowDate.month}}{{nowDate.day}}</div>
</div>
<table>
<tr style="border: 1px #ebe9f1 solid;">
<th></th>
<th><div>{{dateFormat(new Date().getTime())}}</div></th>
</tr>
<tr>
<td style="width: 50px;text-align: center;color: #b9b9c3;"><div>all-day</div></td>
<td><div></div></td>
</tr>
<tr v-for="(tr,index) in 48">
<td style="width: 50px;text-align: center;"><div>{{ index%2 === 0 ? `${index/2}` : ' '}}</div></td>
<td><div></div></td>
</tr>
</table>
</div>
<div v-if="typeSelect == 'List'" class="list">
<div class="list-title">
<div>
<Icon size="24" type="ios-arrow-back" />
<Icon size="24" type="ios-arrow-forward" style="margin-left: 10px;"/>
</div>
<div style="margin-left: 20px;">{{nowDate.year}}{{nowDate.month}}</div>
</div>
<div class="list-content">
<div v-for="i in 3">
<div class="list-content-title">
<div>2022年7月8日</div>
<div>星期五</div>
</div>
<div class="list-content-item">
<div class="list-content-item-time">14:10 - 0:00</div>
<div class="list-content-item-icon"></div>
<div class="list-content-item-name">张大爷</div>
</div>
</div>
<div>
<div class="list-content-title">
<div>2022年7月8日</div>
<div>星期五</div>
</div>
<div class="list-content-item" v-for="i in 15">
<div class="list-content-item-time">14:10 - 0:00</div>
<div class="list-content-item-icon"></div>
<div class="list-content-item-name">张大爷</div>
</div>
</div>
</div>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
import ResizeObserver from "resize-observer-polyfill";
export default {
data() {
return {
isShowDialog:false,
nowDate:{
year:new Date().getFullYear(),
month:new Date().getMonth()+1,
day:new Date().getDate(),
date:new Date(),
weekStart:null,
weekEnd:null
},
typeSelect:'Month',
weeks:[],//
dateWidth:0,
cardHeight: 0,
select:{
changhuxian:true,
shangye:true
},
range:[
{
start:'2022-07-08',
end:'2022-07-15'
}
]
}
},
methods: {
initLoad() {
let that = this;
let clientHeight = document.documentElement.clientHeight
let lxHeader_height = 96.5; //
let paginationHeight = 37; //
let topHeight = 50; //
let cardHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.cardHeight = cardHeight;
},
change(e){
for(let i in this.select){
this.select[i] = e
}
},
dateClick(day){
console.log(day)
},
getWeeks(date = new Date()){
let one_day = 86400000;
let day = date.getDay();
// 0
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
let week_start_time = date.getTime() - (day - 1) * one_day;
let week_end_time = date.getTime() + (7 - day) * one_day;
let last = week_start_time - 2*24*60*60*1000;
let next = week_end_time + 24*60*60*1000;
let month1 = new Date(week_start_time).getMonth()+1;
let month2 = new Date(week_end_time).getMonth()+1;
let day1 = new Date(week_start_time).getDate();
let day2 = new Date(week_end_time).getDate();
this.nowDate.weekStart = `${month1}${day1}`
this.nowDate.weekEnd = `${month2}${day2}`
for(let i = 0;i<7;i++){
this.weeks.push(new Date(`${this.nowDate.year}/${month1}/${day1}`).getTime() + (i*24*60*60*1000))
}
}
},
computed:{
dateFormat(){
return function (date){
let word = ['日','一','二','三','四','五','六',]
return `${new Date(date).getMonth()+1}/${new Date(date).getDate()}${word[new Date(date).getDay()]}`
}
}
},
created() {
this.initLoad()
},
mounted() {
this.dateWidth = document.querySelector(".current").offsetWidth
this.getWeeks()
let resizeOb = new ResizeObserver((entries)=>{
let copy = this.dateWidth
this.dateWidth = document.querySelector(".current")?.offsetWidth ?? copy
})
resizeOb.observe(document.querySelector('.el-card__body'))
}
}
</script>
<style scoped lang="scss">
.content{
width: 100%;
height: 100%;
display: flex;
&-left{
flex: 0;
border-right: 0.5px solid rgba(200,200,200,0.7);
padding: 0 10px;
}
&-right{
flex: 1;
min-width: 420px;
overflow: scroll;
&::-webkit-scrollbar {
width: 4px;
height: 4px;
}
&::-webkit-scrollbar-thumb {
border-radius: 6px;
background: #ddd;
}
position: relative;
}
}
.range{
opacity: 0.7;
text-align: center;
color: #7367F0;
border-radius: 4px;
border: 0.5px solid #7367F0;
background: #EEEDFD;
z-index: 10;
position: absolute;
bottom: 0;
left: 0;
&:hover{
animation: hover-range 400ms forwards;
}
@keyframes hover-range {
from{}
to{
color: #EEEDFD;
background: #7367F0;
}
}
}
.type-select{
display: flex;
border-radius: 4px;
border:1px solid #b3241d;
color: #B3241D;
font-size: 12px;
cursor: pointer;
box-sizing: border-box;
position: absolute;
top: 8px;
right: 26px;
&-item{
border-right: 1px solid #b3241d;
padding: 7px 15px;
&:hover{
animation: hover 400ms forwards;
}
@keyframes hover {
from{}
to{
background: rgba(179,36,29,0.4);
}
}
}
&:nth-child(1){
border-right: none;
}
}
.selectActive{
background: rgba(179,36,29,0.4);
box-shadow: 0 0 5px 3px rgba(179,36,29,0.2);
}
@media screen and (max-width: 800px){
.type-select{
animation: disappear 600ms forwards;
}
@keyframes disappear {
from{
}
to{
opacity: 0;
}
}
}
.week{
padding: 12px 20px 35px 20px;
i{
cursor: pointer;
}
&-title{
font-size: 16px;
color: #6E6B7B;
font-weight: 600;
letter-spacing: 1px;
display: flex;
align-items: center;
padding-bottom: 20px;
}
&>table{
color: #6E6B7B;
border-collapse:collapse;
width: 100%;
&>tr{
&>td{
height: 60px;
border: 1px #ebe9f1 solid;
margin: 0;
&:nth-child(2n){
border: 1px #ebe9f1 dashed;
}
}
}
}
}
.list{
@extend .week;
&-title{
@extend .week-title;
}
&-content{
border-collapse: collapse;
&-title{
color: #6E6B7B;
font-weight: 600;
background-color: #f8f8f8;
display: flex;
justify-content: space-between;
border: solid 1px #d0d0d0;
padding: 8px 14px;
}
&-item{
display: flex;
align-items: center;
border: solid 1px #d0d0d0;
padding: 8px 14px;
&-time{
padding-right: 14px;
}
&-icon{
width: 10px;
height: 10px;
border-radius: 100%;
background: radial-gradient(#fff 0,#7367f0 26%) no-repeat;
margin-right: 14px;
}
&-name{
flex: 1;
}
}
}
}
</style>
<style scoped lang="scss">
::v-deep .el-card__body{
height: 100% !important;
min-width: 400px ;
}
::v-deep .ivu-checkbox-wrapper{
font-size: 13.5px;
font-weight: 500 !important;
display: block !important;
padding-bottom: 8px;
}
.check label:nth-child(2n+1){
::v-deep .ivu-checkbox-checked .ivu-checkbox-inner{
background: #7367F0;
border-color: #7367F0;
}
}
::v-deep .el-calendar-day{
height: 70px;
}
::v-deep .el-calendar__header{
justify-content: flex-start;
align-items: center;
}
::v-deep .el-calendar__button-group{
margin-left: 20px;
}
</style>

@ -1,52 +0,0 @@
<template>
<div class="container" style="padding: 0px 20px">
<!--查询-->
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" text="长护险经办人管理" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<div>
<Input style="width: 200px; margin-right: 10px" placeholder="关键字搜索" />
<Button type="primary" style="margin-left: 10px">查询</Button>
<Button type="primary" style="margin-left: 10px" @click="isShowAdd = true">创建长护险经办人</Button>
</div>
</slot>
</lx-header>
</div>
</div>
<!-- 表格-->
<xy-table :list="list" :table-item="tableItem" @delClick="del"></xy-table>
</div>
</template>
<script>
export default {
data() {
return {
isShowAdd:false,
tableItem:[
{
prop:"name",
label:"姓名"
},
{
prop:"mobile",
label:"电话"
}
],
list:JSON.parse('{"status":1,"data":{"rows":[{"id":1,"name":"\u5434\u5a1f\u82ac","mobile":"18550337240","idcard":142,"idcard_back":143,"created_at":"2021-12-16T13:36:18.000000Z","updated_at":"2021-12-16T13:36:18.000000Z","deleted_at":null},{"id":2,"name":"\u82cf\u4eba\u4eba","mobile":"18550337000","idcard":144,"idcard_back":145,"created_at":"2021-12-16T13:36:48.000000Z","updated_at":"2021-12-16T13:36:48.000000Z","deleted_at":null}],"pager":""}}').data.rows
}
},
methods: {
del(row){
console.log(row)
}
},
}
</script>
<style scoped lang="scss">
</style>

@ -1,58 +0,0 @@
<template>
<div class="container" style="padding: 0px 20px">
<!--查询-->
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" text="站点管理" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<div>
<Input style="width: 200px; margin-right: 10px" placeholder="关键字搜索" />
<Button type="primary" style="margin-left: 10px">查询</Button>
<Button type="primary" style="margin-left: 10px" @click="isShowAdd = true">创建站点</Button>
</div>
</slot>
</lx-header>
</div>
</div>
<!-- 表格-->
<xy-table :list="list" :table-item="tableItem"></xy-table>
</div>
</template>
<script>
export default {
data() {
return {
isShowAdd:false,
tableItem:[
{
prop:"name",
label:"名称"
},
{
prop:"address",
label:"地址"
},
{
prop:"manager",
label:"站长"
},
{
prop:"mobile",
label:"联系电话"
}
],
list:JSON.parse('{"status":1,"data":{"rows":[{"id":1,"manager":"\u5218\u603b","mobile":"18888888888","city_id":null,"district_id":null,"address":"\u8001\u5e72\u90e8\u5c40","created_at":"2021-12-04T06:06:44.000000Z","updated_at":"2021-12-04T06:06:44.000000Z","deleted_at":null,"name":"\u8001\u5e72\u90e8\u5c40"}],"pager":""}}').data.rows
}
},
methods: {},
}
</script>
<style scoped lang="scss">
</style>

@ -105,8 +105,12 @@
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>关联服务
</div>
<div class="xy-table-item-content">
<el-select v-model="form.product_sku_list" multiple placeholder="请选择关联服务" style="width: 300px">
<el-option v-for="item in productSku" :key="item.id" :label="item.value" :value="item.id"></el-option>
<el-select v-model="form.product_sku_list" value-key="sku_id" multiple placeholder="请选择关联服务" style="width: 300px">
<el-option v-for="item in productSku"
:key="item.id"
:label="item.name"
:value="{sku_id:item.id}"
@change="skuChange"></el-option>
</el-select>
</div>
</div>
@ -116,7 +120,7 @@
</template>
<script>
import {save,getForm} from '@/api/product'
import {save, getForm} from '@/api/product'
export default {
props: {
@ -144,53 +148,55 @@ export default {
nurse_price: '',
time_lenth: '',
type: '',
product_sku_list: ''
product_sku_list: []
},
rules: {
product_type_id: [
{ required: true, message: '请选择产品板块'}
{required: true, message: '请选择产品板块'}
],
name: [
{ required: true, message: '请填写名称'}
{required: true, message: '请填写名称'}
],
cycle: [
{ required: true, message: '请填写周期'}
{required: true, message: '请填写周期'}
],
frequency: [
{ required: true, message: '请填写服务次数'}
{required: true, message: '请填写服务次数'}
],
purchase_price: [
{ required: true, message: '请填写采购单价'}
{required: true, message: '请填写采购单价'}
],
nurse_price: [
{ required: true, message: '请填写护工单价'}
{required: true, message: '请填写护工单价'}
],
time_lenth: [
{ required: true, message: '请填写单词时长'}
{required: true, message: '请填写单词时长'}
],
type: [
{ required: true, message: '请选择规定项目'}
{required: true, message: '请选择规定项目'}
],
product_sku_list: [
{ required: true, message: '请选择关联服务'}
{required: true, message: '请选择关联服务'}
],
}
}
},
methods: {
async getDetail(){
skuChange(e){
console.log(e)
},
async getDetail() {
const res = await getForm(this.id)
this.$integrateData(this.form,res)
this.$integrateData(this.form, res)
},
submit() {
// this.form.product_sku_list = `[${this.form.product_sku_list.toString()}]`
if(this.type === 'editor'){
Object.defineProperty(this.form,'id',{
value:this.id,
writable:true,
configurable:true,
enumerable:true
if (this.type === 'editor') {
Object.defineProperty(this.form, 'id', {
value: this.id,
writable: true,
configurable: true,
enumerable: true
})
}
save(this.form).then(res => {
@ -203,7 +209,7 @@ export default {
watch: {
isShow(val) {
if (val) {
if(this.type === 'editor'){
if (this.type === 'editor') {
this.getDetail()
}
} else {

@ -34,6 +34,7 @@
import {getList,destroy} from '@/api/product'
import {getparameter} from '@/api/system/dictionary'
import {getList as getTypes} from '@/api/productType'
import {getList as getSku} from '@/api/sku'
import addProduct from "@/views/product/productComponent/addProduct";
@ -103,12 +104,12 @@ export default {
console.log(this.list)
},
async getProductType() {
const res = await getTypes({page_size: 999})
const res = await getTypes({page_size: 999},false)
this.productType = res.data
},
async getProductSku() {
const res = await getparameter({number: 'productSku'})
this.productSku = res.detail
const res = await getSku({page:1,page_size:999},false)
this.productSku = res.data
},
editor(row){

@ -0,0 +1,114 @@
<template>
<div>
<div ref="lxHeader">
<lx-header icon="md-apps" style="margin-bottom: 10px; border: 0px; margin-top: 15px" text="服务项目">
<div slot="content"></div>
<slot>
<div>
<Input placeholder="关键字搜索" style="width: 200px; margin-right: 10px"/>
<Button style="margin-left: 10px" type="primary">查询</Button>
<Button style="margin-left: 10px" type="primary" @click="$refs['addSku'].type = 'add',$refs['addSku'].isShow = true">新建服务</Button>
</div>
</slot>
</lx-header>
</div>
<xy-table
:total="total"
:list="list"
:table-item="table"
@editor="editor"
@delete="destroy"></xy-table>
<add-sku ref="addSku" :skuType="types" @refresh="getSku"></add-sku>
</div>
</template>
<script>
import {getList,destroy} from '@/api/sku'
import {getList as getTypes} from '@/api/skuCategory'
import {parseTime} from "@/utils"
import addSku from "@/views/product/skuComponent/addSku"
export default {
components:{
addSku
},
data() {
return {
select:{
page:1,
page_size:10
},
types:[],
total:0,
list:[],
table:[
{
type:'index',
width:40,
},
{
prop:'name',
label:'名称',
minWidth:200,
align:'left'
},
{
prop:'category.name',
label:'所属分类',
minWidth:200,
align:'left'
},
{
prop:'sortnumber',
label:'排序',
width:120
},
{
prop:'created_at',
label:'创建信息',
width: 200,
formatter:(cell,data,value)=>{
return parseTime(new Date(value),'{y}-{m}-{d}')
}
}
]
}
},
methods: {
async getTypes(){
const res = await getTypes({},false)
this.types = res.data
},
async getSku(){
const res = await getList(this.select)
this.total = res.total
this.list = res.data
console.log(this.list)
},
editor(row){
this.$refs['addSku'].type = 'editor'
this.$refs['addSku'].id = row.id
this.$refs['addSku'].isShow = true
},
destroy(row){
destroy(row.id).then(res => {
this.$successMessage('destroy','服务项目')
this.getSku()
})
}
},
mounted() {
this.getTypes()
this.getSku()
}
}
</script>
<style scoped lang="scss">
</style>

@ -0,0 +1,131 @@
<template>
<div>
<xy-dialog
ref="dialog"
:is-show.sync="isShow"
type="form"
:title="type === 'add' ? '新增服务项目' : '编辑服务项目'"
:form="form"
:rules="rules"
@submit="submit">
<template v-slot:category_id>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>分类
</div>
<div class="xy-table-item-content">
<el-select v-model="form.category_id" placeholder="请选择分类" style="width: 300px;">
<el-option v-for="item in skuType" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>名称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" clearable placeholder="请输入分类名称" style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:service>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>服务内容
</div>
<div class="xy-table-item-content">
<el-input type="textarea" :autosize="{minRows:2}" v-model="form.service" clearable placeholder="请输入服务内容" style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:sortnumber>
<div class="xy-table-item">
<div class="xy-table-item-label">
排序
</div>
<div class="xy-table-item-content">
<el-input-number :controls="false" :precision="0" v-model="form.sortnumber" clearable placeholder="请输入排序" style="width: 300px;"></el-input-number>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {save,getForm} from '@/api/sku'
export default {
props:{
skuType:{
type:Array,
default:()=>[]
}
},
data() {
return {
isShow:false,
id:'',
type:'',
form:{
category_id :'',
name :'',
service:'',
sortnumber:0
},
rules:{
name:[
{required:true,message:'请填写名称'}
]
}
}
},
methods: {
async getDetail(){
const res = await getForm(this.id)
this.$integrateData(this.form,res)
},
submit(){
if(this.type === 'editor'){
Object.defineProperty(this.form,'id',{
value:this.id,
enumerable:true,
configurable:true,
writable:true
})
}
save(this.form).then(res => {
this.$successMessage(this.type,'服务项目')
this.isShow = false
this.$emit('refresh')
})
}
},
watch:{
isShow(val){
if(val){
if(this.type === 'editor'){
this.getDetail()
}
}else{
this.id = ''
this.type = ''
this.$refs['dialog'].reset()
delete this.form.id
}
}
}
}
</script>
<style scoped lang="scss">
::v-deep .el-input__inner{
text-align: left;
}
</style>

@ -7,33 +7,79 @@
<div>
<Input placeholder="关键字搜索" style="width: 200px; margin-right: 10px"/>
<Button style="margin-left: 10px" type="primary">查询</Button>
<Button style="margin-left: 10px" type="primary">新建产品
<Button style="margin-left: 10px" type="primary" @click="$refs['addSkuType'].type = 'add',$refs['addSkuType'].isShow = true">新建产品
</Button>
</div>
</slot>
</lx-header>
</div>
<xy-table></xy-table>
<xy-table
:is-page="false"
:list="list"
:table-item="table"
@editor="editor"
@delete="destroy"></xy-table>
<add-sku-type ref="addSkuType" @refresh="getSkuType"></add-sku-type>
</div>
</template>
<script>
import {getList} from '@/api/skuCategory'
import {getList,destroy} from '@/api/skuCategory'
import {parseTime} from "@/utils";
import addSkuType from "@/views/product/skuTypeComponent/addSkuType";
export default {
components:{
addSkuType
},
data() {
return {
total:0,
list:[],
table:[]
table:[
{
type:'index',
width: 40
},
{
prop:'name',
label:'名称',
minWidth:300,
align:'left'
},
{
prop:'sortnumber',
label:'排序',
width:120
},
{
prop:'created_at',
label:'创建信息',
width: 200,
formatter:(cell,data,value)=>{
return parseTime(new Date(value),'{y}-{m}-{d}')
}
}
]
}
},
methods: {
async getSkuType(){
const res = await getList()
console.log(res)
this.total = res.total
this.list = res.data
},
editor(row){
this.$refs['addSkuType'].id = row.id
this.$refs['addSkuType'].type = 'editor'
this.$refs['addSkuType'].isShow = true
},
destroy(row){
destroy(row.id).then(res => {
this.$successMessage('destroy','服务项目类型')
this.getSkuType()
})
}
},
mounted() {

@ -1,18 +1,98 @@
<template>
<div>
<xy-dialog></xy-dialog>
<xy-dialog
ref="dialog"
:is-show.sync="isShow"
type="form"
:title="type === 'add' ? '新增服务类型' : '编辑服务类型'"
:form="form"
:rules="rules"
@submit="submit">
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>名称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" clearable placeholder="请输入分类名称" style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:sortnumber>
<div class="xy-table-item">
<div class="xy-table-item-label">
排序
</div>
<div class="xy-table-item-content">
<el-input-number :controls="false" :precision="0" v-model="form.sortnumber" clearable placeholder="请输入排序" style="width: 300px;"></el-input-number>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {save,getForm} from '@/api/skuCategory'
export default {
data() {
return {}
return {
isShow:false,
id:'',
type:'',
form:{
name:'',
sortnumber:0,
},
rules:{
name:[
{required:true,message:'请填写名称'}
]
}
}
},
methods: {},
methods: {
async getDetail(){
const res = await getForm(this.id)
this.$integrateData(this.form,res)
},
submit(){
if(this.type === 'editor'){
Object.defineProperty(this.form,'id',{
value:this.id,
enumerable:true,
configurable:true,
writable:true
})
}
save(this.form).then(res => {
this.$successMessage(this.type,'服务项目分类')
this.isShow = false
this.$emit('refresh')
})
}
},
watch:{
isShow(val){
if(val){
if(this.type === 'editor'){
this.getDetail()
}
}else{
this.id = ''
this.type = ''
this.$refs['dialog'].reset()
delete this.form.id
}
}
}
}
</script>
<style scoped lang="scss">
::v-deep .el-input__inner{
text-align: left;
}
</style>

@ -1,9 +1,9 @@
<template>
<div v-if="detail">
<xy-dialog
:width='84'
:form="form"
:is-show.sync="isShow"
:width='84'
title="排班"
type="form"
@submit="submit">
@ -15,12 +15,12 @@
'min-width':'380px'
}">
<el-form-item>
<div class="xy-table-item" >
<div class="xy-table-item">
<div class="xy-table-item-label">
性别
</div>
<div class="xy-table-item-content">
<el-input v-model="detail.sex" style="width: 300px;" readonly></el-input>
<el-input v-model="detail.sex" readonly style="width: 300px;"></el-input>
</div>
</div>
</el-form-item>
@ -31,42 +31,44 @@
年龄
</div>
<div class="xy-table-item-content">
<el-input :value="ageComputed" style="width: 300px;" readonly></el-input>
<el-input :value="ageComputed" readonly style="width: 300px;"></el-input>
</div>
</div>
</el-form-item>
<el-form-item>
<div class="xy-table-item" >
<div class="xy-table-item">
<div class="xy-table-item-label">
身份证号
</div>
<div class="xy-table-item-content">
<el-input :value="detail.idcard" style="width: 300px;" readonly></el-input>
<el-input :value="detail.idcard" readonly style="width: 300px;"></el-input>
</div>
</div>
</el-form-item>
<el-form-item>
<div class="xy-table-item" >
<div class="xy-table-item">
<div class="xy-table-item-label">
失能等级
</div>
<div class="xy-table-item-content">
<el-select disabled placeholder="请选择失能等级" v-model="detail.level_id" style="width: 300px">
<el-option v-for="item in levels" :key="item.id" :value="item.id" :label="item.value"></el-option>
<el-select v-model="detail.level_id" disabled placeholder="请选择失能等级" style="width: 300px">
<el-option v-for="item in levels" :key="item.id" :label="item.value" :value="item.id"></el-option>
</el-select>
</div>
</div>
</el-form-item>
<el-form-item>
<div class="xy-table-item" >
<div class="xy-table-item">
<div class="xy-table-item-label">
备注
</div>
<div class="xy-table-item-content">
<el-input readonly v-model="detail.remark" type="textarea" :autosize="{minRows:2}" style="width: 300px;" placeholder="请输入备注"></el-input>
<el-input v-model="detail.remark" :autosize="{minRows:2}" placeholder="请输入备注" readonly
style="width: 300px;"
type="textarea"></el-input>
</div>
</div>
</el-form-item>
@ -79,8 +81,8 @@
客户
</div>
<div class="xy-table-item-content">
<el-select disabled placeholder="请选择客户" v-model="form.customer_id" style="width: 300px">
<el-option v-for="item in customers" :key="item.id" :value="item.id" :label="item.name"></el-option>
<el-select v-model="form.customer_id" disabled placeholder="请选择客户" style="width: 300px">
<el-option v-for="item in customers" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
</div>
@ -92,8 +94,8 @@
产品
</div>
<div class="xy-table-item-content">
<el-select disabled placeholder="请选择产品" v-model="form.product_id" style="width: 300px">
<el-option v-for="item in products" :key="item.id" :value="item.id" :label="item.name"></el-option>
<el-select v-model="form.product_id" disabled placeholder="请选择产品" style="width: 300px">
<el-option v-for="item in products" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
</div>
@ -101,6 +103,62 @@
<template v-slot:extraFormBottom>
<el-calendar>
<template v-slot:dateCell="{date, data}">
<el-popover
ref="popover"
placement="top"
trigger="click"
width="300">
<div
slot="reference"
:style="
{
'padding':'8px',
}"
:class="{
'date-select':isInDate(data.day)
}"
style="width: 100%;height: 100%"
@click="datePicked(data,date)">
{{ data.day.split('-').slice(1).join('-') }} {{ isInDate(data.day) ? '✔️' : '' }}
</div>
<template>
<template v-if="pickType === 1">
<el-time-select
v-model="form.start_time"
:picker-options="{
start: '08:30',
step: '00:15',
end: '18:30'
}"
placeholder="开始时间">
</el-time-select>
</template>
<template v-else>
<el-time-select
v-model="form.end_time"
:picker-options="{
start: '08:30',
step: '00:15',
end: '18:30',
minTime: form.start_time
}"
placeholder="结束时间">
</el-time-select>
</template>
<el-select v-model="form.nurse_id">
<el-option
v-for="item in nurses"
:key="item.id"
:value="item.id"
:label="item.name"></el-option>
</el-select>
<Button type="primary" @click="dateConfirm"></Button>
</template>
</el-popover>
</template>
</el-calendar>
</template>
</xy-dialog>
@ -108,25 +166,25 @@
</template>
<script>
import {customerDetail} from '@/api/schedule'
import {customerDetail,scheduleSave} from '@/api/schedule'
export default {
props:{
customers:{
type:Array,
default:()=>[]
props: {
customers: {
type: Array,
default: () => []
},
products:{
type:Array,
default:()=>[]
products: {
type: Array,
default: () => []
},
nurses:{
type:Array,
default:()=>[]
nurses: {
type: Array,
default: () => []
},
levels:{
type:Array,
default:()=>[]
levels: {
type: Array,
default: () => []
}
},
data() {
@ -135,16 +193,17 @@ export default {
customerId: '',
isShow: false,
detail:{
},
detail: {},
dateStartPick:'',
dateEndPick:'',
pickType:1,
form: {
customer_id:'',
product_id:'',
order_id:'',
start_time:'',
end_time:'',
nurse_id:'',
customer_id: '',
product_id: '',
order_id: '',
start_time: '',
end_time: '',
nurse_id: '',
}
}
},
@ -152,19 +211,47 @@ export default {
async getCustomer() {
const res = await customerDetail({
product_id: this.form.product_id,
id:this.form.customer_id,
id: this.form.customer_id,
})
console.log(res)
this.detail = res.detail
},
dateConfirm(){
this.pickType = 2
this.$refs['popover'].doClose()
console.log(this.$refs['popover'].showPopper)
},
datePicked(data,date){
console.log(data,date)
if(this.pickType === 1){
this.dateStartPick = data.day
}
if(this.pickType === 2){
this.dateEndPick = data.day
}
},
submit() {
this.form.start_time = `${this.dateStartPick} ${this.form.start_time}`
this.form.end_time = `${this.dateEndPick} ${this.form.end_time}`
scheduleSave(this.form).then(res => {
this.$successMessage('排班','')
this.isShow = false
})
}
},
computed:{
ageComputed(){
computed: {
ageComputed() {
return new Date().getFullYear() - new Date(this.detail.birthday).getFullYear()
},
isInDate(){
return function (day){
let startTimer = new Date(this.dateStartPick).getTime()
let endTimer = new Date(this.dateEndPick).getTime()
let dayTimer = new Date(day).getTime()
return dayTimer >= startTimer && dayTimer <= endTimer
}
}
},
watch: {
@ -180,4 +267,12 @@ export default {
</script>
<style lang="scss" scoped>
@import "../../../styles/index";
.date-select{
background: $primaryColor;
color: #fff;
}
::v-deep .el-calendar-day{
padding: 0 !important;
}
</style>

@ -12,7 +12,6 @@
<xy-selectors>
</xy-selectors>
<Button type="primary">新建产品</Button>
</div>
</slot>
</lx-header>
@ -70,8 +69,9 @@ export default {
let {$refs} = this
return (
<xy-table
style={{'margin':'0 20px','filter':'drop-shadow(0 2px 16px rgba(200,200,200,0.8))'}}
is-page={false}
height={200}
height={240}
list={props.row.orders}
table-item={
[
@ -112,6 +112,7 @@ export default {
['click']: () => {
$refs['addSchedule'].form.product_id = scope.row.product_id
$refs['addSchedule'].form.customer_id = scope.row.customer_id
$refs['addSchedule'].form.order_id = scope.row.id
$refs['addSchedule'].isShow = true
}
}}>排班</Button>

@ -5,14 +5,14 @@
<slot>
<div>
<div class="switch" style="margin-bottom: 8px">
<div v-for="item in types" :class="{'switch-item-active':item === select.type}" class="switch-item"
@click="select.type = item">{{ item }}
<div v-for="item in types" :class="{'switch-item-active':item.id === select.type}" class="switch-item"
@click="select.type = item.id">{{ item.name }}
</div>
</div>
<div class="switch" style="margin-bottom: 8px">
<div v-for="item in areas" :class="{'switch-item-active':item === select.area}" class="switch-item"
@click="select.area = item">{{ item }}
<div v-for="item in areas" :class="{'switch-item-active':item.id === select.area}" class="switch-item"
@click="select.area = item.id">{{ item.value }}
</div>
</div>
@ -26,7 +26,7 @@
</lx-header>
<div class="schedule-content">
<div>{{select.month}} {{select.area}} {{select.type}}</div>
<div class="schedule-content-select">{{select.month}} {{ areaFormatter(select.area) }} {{ typeFormatter(select.type) }}</div>
<div style="display: flex;justify-content: space-between;margin-bottom: 10px;">
<div style="display:flex;text-align: center">
@ -49,21 +49,28 @@
</div>
<div class="infinite-list" :infinite-scroll-disabled="scrollDisable" v-infinite-scroll="load" :infinite-scroll-delay="500" style="overflow:auto;height: 200px">
<div v-for="i in count" class="infinite-list-item" :key="i">{{ i }}</div>
<template v-for="i in count">
<div>
{{ i }}
</div>
</template>
</div>
</div>
</div>
</template>
<script>
import {getList as typeList} from '@/api/productType'
import {getparameter} from '@/api/system/dictionary'
export default {
data() {
return {
count:0,
scrollDisable:false,
types: ['长护险', '残疾人照顾', '80岁+老人照护', '商业自营'],
areas: ['武进区', '天宁区', '钟楼区', '溧阳区', '金坛区'],
types: [],
areas: [],
months: () => {
let temp = []
for (let i = 1; i <= 12; i++) {
@ -87,8 +94,8 @@ export default {
},
select: {
type: '长护险',
area: '武进区',
type: '',
area: '',
month: `${new Date().getMonth() + 1}`.padStart(2, '0')
}
}
@ -111,9 +118,32 @@ export default {
if(this.count > 50){
this.scrollDisable = true
}
},
async getTypes(){
const res = await typeList({page:1,page_size:999},false)
this.types = res.data
},
async getAreas(){
const res = await getparameter({number:'serveArea'})
this.areas = res.detail
}
},
computed: {
typeFormatter(){
return function (type){
return this.types.filter(item => {
return item.id === type
})[0]?.name || ''
}
},
areaFormatter(){
return function (area){
return this.areas.filter(item => {
return item.id === area
})[0]?.value || ''
}
},
isNowMonth() {
return function (month) {
if (month === `${new Date().getMonth() + 1}`.padStart(2, '0')) {
@ -123,6 +153,8 @@ export default {
}
},
mounted() {
this.getTypes()
this.getAreas()
this.initLoad()
}
}
@ -190,6 +222,10 @@ export default {
}
.schedule-content {
&-select{
font-size: 15px;
text-align: center;
font-weight: 600;
}
}
</style>

Loading…
Cancel
Save