lincl 3 лет назад
Родитель
Сommit
5acf33bc35

+ 4 - 2
mini-pro-web/src/assets/styles/common.scss

@ -528,6 +528,9 @@ p {
.bb-e1e1e1{
    border-bottom: 1px solid $gray;
}
.bt-e1e1e1{
    border-top: 1px solid $gray;
}
.round-img{
    border-radius: 100%;
@ -801,9 +804,8 @@ input:-moz-placeholder { color:#999999; }
    position: fixed;
    width: 100%;
}
.kitbox{
    display: flex;
    display: -webkit-box;
}
.box-flex-1{
    flex: 1;

+ 11 - 1
mini-pro-web/src/assets/styles/resetVant.scss

@ -1,3 +1,13 @@
.van-dialog__confirm, .van-dialog__confirm:active {
    color: #17b3ec;
}
}
.van-button--info{
    background-color: #17b3ec;
    border-color: #17b3ec;
}
.van-dropdown-item__option--active, .van-dropdown-item__option--active .van-dropdown-item__icon, .van-tab--active{
    color: #17b3ec;
}
.van-tabs__line{
    background-color: #17b3ec;
}

+ 13 - 8
mini-pro-web/src/router/index.js

@ -10,6 +10,9 @@ import Login from '@/views/login/Login'
import Register from '@/views/login/Register'
import FotgetPassword from '@/views/login/FotgetPassword'
import Index from '@/views/index/Index'
import personal from './personal'
import order from './order'
import replenishment from './replenishment'
Vue.use(VueRouter)
const routes = [
@ -63,13 +66,13 @@ const routes = [
const whiteList = [
	'/login', 
	'/register', 
	'/fotgetPassword'
	'/fotgetPassword',
]
const router = new VueRouter({
    mode: 'history',
    base: process.env.BASE_URL,
    routes: routes.concat( [] )
    routes: routes.concat( personal, order, replenishment )
})
@ -85,17 +88,19 @@ function redirectToLogin(to, from, next) {
if(process.env.NODE_ENV==='production') {
    router.beforeEach(async (to, from, next) => {
        if((store.getters.user && store.getters.user.accessToken)) {
          next()
        } else {
          if( whiteList.indexOf(to.path) > -1) {
            next()
          } else {
            redirectToLogin(to, from, next)
          }
        } else {
            if( whiteList.indexOf(to.path) > -1) {
                next()
            } else {
                redirectToLogin(to, from, next)
            }
        }
    })
} else {
    router.beforeEach(async (to, from, next) => {
        next()
        return
        if ((!store.getters.user || !store.getters.user.accessToken) && whiteList.indexOf(to.path) == -1) {
            next('/login')
            return

+ 32 - 0
mini-pro-web/src/router/order.js

@ -0,0 +1,32 @@
import NavLayout from "@/components/layout/NavLayout"
const routeMap = [
    {
        path: "/order",
        name: "order",
        component: NavLayout,
		children: [
            {
                path: "/order/list",
                name: "orderList",
                meta: {
                    title: "订单管理",
                    hasTop: false,
                    hasBot: false
                },
				component: () => import("@/views/order/list.vue")
            },
            {
                path: "/order/detail",
                name: "orderDetail",
                meta: {
                    title: "订单详情",
                    hasTop: false,
                    hasBot: false
                },
				component: () => import("@/views/order/detail/index.vue")
            },
		]
    }
];
export default routeMap;

+ 32 - 0
mini-pro-web/src/router/personal.js

@ -0,0 +1,32 @@
import NavLayout from "@/components/layout/NavLayout"
const routeMap = [
    {
        path: "/personal",
        name: "personal",
        component: NavLayout,
		children: [
            {
                path: "/personal/index",
                name: "personalIndex",
                meta: {
                    title: "我的",
                    hasTop: false,
                    hasBot: true
                },
				component: () => import("@/views/personal/index.vue")
            },
            {
                path: "/personal/changePassword",
                name: "personalChangePassword",
                meta: {
                    title: "修改密码",
                    hasTop: false,
                    hasBot: false
                },
				component: () => import("@/views/personal/changePassword.vue")
            },
		]
    }
];
export default routeMap;

+ 42 - 0
mini-pro-web/src/router/replenishment.js

@ -0,0 +1,42 @@
import NavLayout from "@/components/layout/NavLayout"
const routeMap = [
    {
        path: "/replenishment",
        name: "replenishment",
        component: NavLayout,
		children: [
            {
                path: "/replenishment/device/list",
                name: "replenishmentDeviceList",
                meta: {
                    title: "设备商品概况",
                    hasTop: false,
                    hasBot: false
                },
				component: () => import("@/views/replenishment/device/list.vue")
            },
            {
                path: "/replenishment/device/detail",
                name: "replenishmentDeviceDetail",
                meta: {
                    title: "设备商品概况",
                    hasTop: false,
                    hasBot: false
                },
				component: () => import("@/views/replenishment/device/detail.vue")
            },
            {
                path: "/replenishment/recordList",
                name: "replenishmentRecordList",
                meta: {
                    title: "补货记录",
                    hasTop: false,
                    hasBot: false
                },
				component: () => import("@/views/replenishment/recordList.vue")
            },
		]
    }
];
export default routeMap;

+ 27 - 0
mini-pro-web/src/views/order/detail/components/DeviceInfo.vue

@ -0,0 +1,27 @@
<template>
    <div class='order-detail-device-info lh26 plr15 ptb10 break-all bgc-fff fs-14'>
        <div>出货设备:众健信联1号</div>
        <div>设备编号:14912202107000001500000000000000</div>
        <div>设备地址:厦门市湖里区金山街道101号101室</div>
    </div>
</template>
<script>
    export default{
        data(){
            return {
                
            }
        },
        created() {
            
        },
        methods:{
            
        },
    }
</script>
<style lang='scss' scoped>
.order-detail-device-info{
    
}
</style>

+ 41 - 0
mini-pro-web/src/views/order/detail/components/DrugList.vue

@ -0,0 +1,41 @@
<template>
    <div class='order-detail-drug-list'>
        <div v-for="i in 20" :key="i" class="item kitbox  plr15 ptb10 break-all bgc-fff fs-14 bb-e1e1e1">
            <div class="">
                <van-image
                    radius="5px"
                    src="https://img01.yzcdn.cn/vant/cat.jpeg"
                />
            </div>
            <div class="pl10 box-flex-1">
                <div class="ellipsis">J氯化钠注射液(90mg)J氯化钠注射液(90mg)J氯化钠注射液(90mg)</div>
                <div class="pt8">¥25.78</div>
            </div>
            <div class="kitbox box-v-middle pl15">x4</div>
        </div>
    </div>
</template>
<script>
export default{
    data(){
        return {
            
        }
    },
    created() {
        
    },
    methods:{
        
    },
}
</script>
<style lang='scss' scoped>
.order-detail-drug-list{
    .van-image{
        width: 50px;
        height: 50px;
        display: block;
    }
}
</style>

+ 33 - 0
mini-pro-web/src/views/order/detail/components/LogList.vue

@ -0,0 +1,33 @@
<template>
    <div class='order-detail-log-list'>
        <div v-for="i in 20" :key="i" class="item lh26 plr15 ptb10 break-all bgc-fff fs-14 bb-e1e1e1">
            <div>出货货道: <span>0号柜4行36列</span></div>
            <div class="kitbox">
                <div class="box-flex-1">商品名称: <span>J氯化钠注射液(90mg)</span></div>
                <div>x4</div>
            </div>
            <div>设备日志: <span>(无异常)红外检测出货成功</span></div>
            <div>设备名称: <span>众健信联1号</span></div>
        </div>
    </div>
</template>
<script>
export default{
    data(){
        return {
            
        }
    },
    created() {
        
    },
    methods:{
        
    },
}
</script>
<style lang='scss' scoped>
.order-detail-log-list{
    
}
</style>

+ 93 - 0
mini-pro-web/src/views/order/detail/index.vue

@ -0,0 +1,93 @@
<template>
    <div class='order-detail'>
        <div class="lh26 plr15 ptb10 bgc-fff fs-14">
            <div class="row">
                <div>处方号</div>
                <div>D2021090811040440280122</div>
            </div>
            <div class="row">
                <div>订单类型</div>
                <div>取货订单</div>
            </div>
            <div class="row">
                <div>开方时间</div>
                <div>2021-09-08 11:04</div>
            </div>
            <div class="row">
                <div>订单金额</div>
                <div>¥0</div>
            </div>
            <div class="row">
                <div>社保扣款</div>
                <div>¥264.66</div>
            </div>
            <div class="row">
                <div>订单状态</div>
                <div>待取货</div>
            </div>
            <div class="row">
                <div>存取信息</div>
                <div>取药码 43057502</div>
            </div>
        </div>
        <van-tabs class="mt10" v-model="active" sticky>
            <van-tab title="药品详情">
                <DrugList/>
            </van-tab>
            <van-tab title="出货日志">
                <LogList/>
            </van-tab>
            <van-tab title="设备信息">
                <DeviceInfo/>
            </van-tab>
        </van-tabs>
    </div>
</template>
<script>
import DeviceInfo from './components/DeviceInfo'
import LogList from './components/LogList'
import DrugList from './components/DrugList'
export default{
    name: 'orderDetail',
    components:{
        DeviceInfo,
        DrugList,
        LogList
    },
    data(){
        return {
            
        }
    },
    created() {
        
    },
    methods:{
        
    },
}
</script>
<style lang='scss' scoped>
.order-detail{
    .row{
        display: -webkit-box;
        div{
            &:first-child{
                width: 60px;
                position: relative;
                text-align: justify;
                text-align-last: justify;
                margin-right: 12px;
                &::after{
                    content: ":";
                    display: inline-block;
                    position: absolute;
                    right: -14px;
                    top: 0;
                }
            }
        }
    }
}
</style>

+ 176 - 0
mini-pro-web/src/views/order/list.vue

@ -0,0 +1,176 @@
<template>
    <div class='order-list'>
        <van-sticky>
            <div class="top-banner kitbox fs-14 ptb10 pl15">
                <div @click="pickDate(1)" class="date-item">{{$moment(startDate).format('YYYY-MM-DD')}}</div>
                <div class="ptb5 plr10">至</div>
                <div @click="pickDate(2)" class="date-item">{{$moment(endDate).format('YYYY-MM-DD')}}</div>
                <div class="pl15 pt2">
                    <van-button @click="onSearch" type="info" size="mini">搜索</van-button>
                </div>
                <div class="fs-25 pr15 tr box-flex-1 pt3 c-pr">
                    <van-dropdown-menu>
                        <van-dropdown-item ref="dropdown" v-model="value1" :options="option1" />
                    </van-dropdown-menu>
                    <van-icon class="block" @click.stop="$refs.dropdown.toggle()" name="filter-o" />
                </div>
            </div>
        </van-sticky>
        <CustomList 
			ref="customList"
            :searchfun="false"
			@onLoad="onLoad">
			<div class="list plr15">
                <div v-for="(item, i) in list" :key="i" class="item plr15 c-333 fs-14">
                    <div class="kitbox ptb10 bb-e1e1e1">
                        <div class="box-flex-1 fs-14">D2021090811040440280122</div>
                        <div class="">待取货</div>
                        <!-- <div class="c-17b3ec">取货成功</div> -->
                    </div>
                    <div class="lh20 ptb10">
                        <div>订单类型:取货订单</div>
                        <div>开方时间:2021-09-08 11:04</div>
                        <div>存取信息:取药码 43057502</div>
                    </div>
                    <div class="ptb10 bt-e1e1e1">¥120</div>
                </div>
            </div>
		</CustomList>
        <van-popup v-model="datePickerShow" position="bottom"  >
            <van-datetime-picker
                v-model="currentDate"
                @confirm="onPick"
                @cancel="datePickerShow=false"
                type="date"
                title=""
                :max-date="maxDate"
            />
        </van-popup>
        <div class="filter-panel">
        </div>
    </div>
</template>
<script>
    export default{
        name: 'orderList',
        data(){
            return {
                list: [],
                currentDate: new Date(),
                maxDate: new Date(),
                datePickerShow: false,
                startDate: new Date(),
                endDate: new Date(),
                pickType: 1,
                value1: '',
                option1: [
                    { text: '全部商品', value: 0 },
                    { text: '新款商品', value: 1 },
                    { text: '活动商品', value: 2 },
                ],
            }
        },
        created() {
            
        },
        methods:{
            onLoad({page, pageSize, searchText}){
                setTimeout(()=>{
                    for(var i=0; i<pageSize; i++){
                        this.list.push((page-1)*pageSize + i)
                    }
                    console.log(this.list)
                    debugger
                    this.$refs.customList.endLoad(page==5, this.list.length)
                }, 1000)
                return
                var that = this, 
                    params = {
                        orgCode: this.$store.getters.orgCode,
                        doctorNameKey: searchText,
                        dept: this.routerParam.dept,
                        diseaseKey: this.routerParam.disease,
                        page: page,
                        pagesize: pageSize
                    };
                
                zhuanjiazixunApi
                    .findDoctorByHospitalAndDiseaseAndDept(params)
                    .then(res=>{
                        if(res.status == 200){
                            var list = res.detailModelList.map(item=>{
                                var data = item
                                data.photo = this.$root.setDocPhoto(data.photo)
                                return data
                            })
                            this.list = page==1? list : this.list.concat(list)
                            this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                        } else {
                            this.$refs.customList[this.active].endLoad(false, true)
                        }
                    }).catch(err=>{
                        console.error(err)
                        this.$refs.customList[this.active].endLoad(false, true)
                    })
            },
            pickDate(pickType){
                this.pickType = pickType
                this.currentDate = pickType ==1? this.startDate : this.endDate
                this.datePickerShow = true
            },
            onPick(){
                var date = this.$moment(this.currentDate).toDate()
                if(this.pickType ==1){
                    this.startDate = date
                } else {
                    this.endDate = date
                }
                this.datePickerShow = false
            },
            onSearch(){
                this.list = []
                this.$refs.customList.refresh(true)
            }
        },
    }
</script>
<style lang='scss' scoped>
.order-list{
    .top-banner{
        background: #f2f3f5;
        .date-item{
            padding: 5px 10px;
            border: 1px solid #ccc;
            background: #fff;
            color: #333;
            border-radius: 30px;
            // line-height: 21px;
        }
        .van-button--mini{
            height: 28px;
            width: 60px;
        }
        ::v-deep .van-dropdown-menu__bar{
            position: absolute;
            bottom: -10px;
            .van-dropdown-menu__item{
                display: none;
            }
        }
    }
    .list{
        .item{
            border: 1px solid #e1e1e1;
            background: #fff;
            margin-bottom: 10px;
            &:last-child{
                margin-bottom: 0;
            }
        }
    }
}
</style>

+ 152 - 0
mini-pro-web/src/views/personal/changePassword.vue

@ -0,0 +1,152 @@
<template>
    <div class="changePassword">
        <van-form validate-first>
            <van-field
                v-model="oldPassword"
                type="password"
                name="password"
                label="原密码"
                placeholder="请输入原密码"
            />
            <van-field
                @input="validPwd"
                v-model="password"
                type="password"
                name="password"
                label="密码"
                placeholder="请输入密码"
            />
            <van-field
                v-model="requirePassword"
                type="password"
                name="requirePassword"
                label="确认密码"
                placeholder="请再次输入密码"
            />
            <div class="tips">
                <div><van-icon name="success" class="v-middle" color="#14b914" v-if="s1==1"/><van-icon color="#ff0000"  class="v-middle" v-else-if="s1==2" name="cross" />8-20个字符</div>
                <div><van-icon name="success" class="v-middle" color="#14b914" v-if="s2==1"/><van-icon color="#ff0000"  class="v-middle" v-else-if="s2==2" name="cross" />只能设置大小写字母、数字及标点符号(不允许输入#:")。</div>
                <div><van-icon name="success" class="v-middle" color="#14b914" v-if="s3==1"/><van-icon color="#ff0000"  class="v-middle" v-else-if="s3==2" name="cross" />必须包含大小写字母、数字及标点符号其中三种。</div>
            </div>
            <div style="margin: 40px;">
                <van-button round block type="info" @click="onSubmit">
                提交
                </van-button>
            </div>
        </van-form>
    </div>
</template>
<script>
import { changePwd } from "@/api/login";
export default {
    data(){
        this.passwordRules = [
            { required: true, message: '请输入密码' },
        ];
        this.requirePasswordRules = [
            { required: true, message: '请再次输入密码' },
            { validator: this.setPassword, message: '两次输入密码不一致' },
            { validator:this.setTest, message: '密码规则错误'}
        ];
        return {
            oldPassword: '',
            password: '',
            requirePassword:'',
            testReq: /((?=[\x21-\x7e]+)[^A-Za-z0-9])/,
            testNumber: /[0-9]/,
            testLetter: /[A-Za-z]/,
            s1: -1,
            s2: -1,
            s3: -1,
        }
    },
    methods:{
        async onSubmit() {
            var that = this
            if(!this.oldPassword.length){
                 that.$toast("原密码不能为空");
                 return false
            }
            if(!this.password.length || !this.requirePassword.length){
                 that.$toast("密码不能为空");
                 return false
            }
            if(!this.setPassword()){
                 that.$toast("两次输入密码不一致");
                 return false
            }
            if(this.s1!=1 || this.s2!=1 || this.s3!=1 ){
                that.$toast("密码设置不符合要求");
                return false
            }
            var params = {id: this.$store.getters.user.id,pw:this.password}
                params['orgPw'] = this.oldPassword
            var res = await changePwd(params)
            var that = this
            if(res.status == 200&&res.obj){
                that.$toast('修改成功');
                await this.$store.dispatch('LogOut')
                setTimeout(function(){
                    that.$router.push('/login')
                },800)
            }else{
                if(res.message){
                    that.$toast(res.message);
                } else {
                    that.$toast('修改失败');
                }
            }
        },
        setPassword() {
            return this.password === this.requirePassword
        },
        validPwd(){
            if(this.password.length>=8&&this.password.length<=20){
                this.s1 = 1
            } else {
                this.s1 = 2
            }
            if(/^[A-Za-z0-9\x21-\x7e]{1,}$/.test(this.password) && /^((?!#|:|"|").)*$/.test(this.password)){
                this.s2 = 1
            } else {
                this.s2 = 2
            }
            if( (/[A-Z]/.test(this.password) && /[a-z]/.test(this.password) && (this.testReq.test(this.password) || this.testNumber.test(this.password)))
                ||
                (this.testReq.test(this.password) && this.testNumber.test(this.password) && this.testLetter.test(this.password))
                ){
                this.s3 = 1
            } else {
                this.s3 = 2
            }
        },
    }
}
</script>
<style lang="scss" scoped>
.changePassword{
    .van-button--info{
        background-color:#17b3ec;
        border-color: #17b3ec;
    }
    .tip{
        text-align: left;
        font-size:13px;
        color:red;
        margin-top:10px;
        letter-spacing: 1px;
        padding:0 15px;
    }
    .tips{
        margin-top:10px;
        padding:0 15px;
        font-size: 14px;
        color: #333;
        line-height: 20px;
    }
    .v-middle{
        vertical-align: middle;
    }
}
</style>

+ 280 - 0
mini-pro-web/src/views/personal/index.vue

@ -0,0 +1,280 @@
<template>
    <div class='personal-index'>
        <div class="plr15 ptb10 bgc-fff">
            <div class="kitbox">
                <div class="photo">
                    <van-image
                        width="80"
                        height="80"
                        round
                        src="https://img01.yzcdn.cn/vant/cat.jpeg"
                    />
                </div>
                <div class="pl15 lh20 kitbox box-v-middle">
                    <div>
                        <div class="fs-16 c-333">张三</div>
                        <div class="fs-14 c-666 pt5">
                            <div>15050505050</div>
                            <div>禾山街道社区卫生服务中心</div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="mt10">
            <van-cell @click="gotoUrl('/personal/changePassword')" title="修改密码" is-link/>
            <!-- <van-cell title="帮助反馈" is-link/>
            <van-cell title="切换账号" is-link/> -->
        </div>
        
        <div class="mt20 plr15 bot-btn">
            <van-button color="#ff5e6c" round class='logoutBtn' @click='logout' block type="primary">退出当前账号</van-button>
        </div>
    </div>
</template>
<script>
    import {getPatient, updPatient, uploadStream} from '@/api/patient'
    import { ImagePreview } from 'vant';
    import {getMembers} from '@/api/family'
    import store from "@/store";
    import { Dialog } from 'vant';
    export default{
        name: 'meIndex',
        data(){
            return {
                fileList: [],
                screenWidth: document.body.clientWidth,
                family:[],
                patient:{},
                file: '',
                filename: '',
                defaultImg: '',
                members:[],
                
       
            }
        },
        created() {
            
        },
        methods:{
            activeList3Names(n){
                this.orgPage = 1;
                if(typeof n == 'number'){
                    this.getTeacherList(n)
                }
            },
            dataURLtoFile(dataurl, filename) { 
                var arr = dataurl.split(','),
                    mime = arr[0].match(/:(.*?);/)[1],
                    bstr = atob(arr[1]),
                    n = bstr.length,
                    u8arr = new Uint8Array(n);
                while (n--) {
                    u8arr[n] = bstr.charCodeAt(n);
                }
                return new File([u8arr], filename, { type: mime });
            },
            afterRead(){
                let that = this;
                that.patient.photo = that.fileList[0].content;
                that.file = that.fileList[0].content;
                that.filename = that.fileList[0].file.name;
                that.fileList = [];
                let param = new FormData();
                param.append('file', that.dataURLtoFile(that.file, that.filename));
                param.append('filename', that.filename);
                uploadStream(param).then(res => {
                    if(res.status == 200){
                        console.log(res)
                        that.patient.photo = res.obj.fullUri;
                        updPatient({'jsonData': {'patient':that.patient}}).then( res1 => {
                            if(res1.status == 200){
                                that.updLocalUser();
                            }
                            else{
                                that.$toast('修改失败');
                            }
                            console.log(res1)
                        })
                    }
                })
            },
            redirectToLogin() {
                let appId = process.env.VUE_APP_APPID,
                    protocol = window.location.protocol,
                    host = window.location.host,
                    redirctWxAuthUrl = encodeURIComponent(`${protocol}//${host}${process.env.VUE_APP_PRE_PATH}/login`),
                    wxAuthUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirctWxAuthUrl}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`
                
                location.replace(wxAuthUrl)
            },
            async logout(){
                await this.$store.dispatch('LogOut')
                localStorage.removeItem("Medical-Care-Wx-Logined-User-Agent")
                try{
                  localStorage.removeItem("Medical-Care-Wx-Proxy-User")
                }catch{
                }
                let isApp = this.$route.query.isApp || this.isSupportHtml5Plus
                if(!isApp) {
                  if(navigator.userAgent.toLowerCase().indexOf('micromessenger') !==-1) {
                    this.redirectToLogin()
                    return ;
                  }else{
                    this.gotoUrl('/login')
                  }
                }
            },
            Edit(str, value=''){
                this.$router.push({path: '/me/editMeInfo', query: {'key': str, 'value': value}})
            },
            imgPreview(){
                try{
                    if(this.patient.photo && this.patient.photo.toString().length>0){
                        ImagePreview({
                            images: [
                                this.patient.photo
                            ],
                            onClose() {
                                
                            },
                        });
                    }else{
                        ImagePreview({
                            images: [
                                require('@/assets/images/p-default.png')
                            ],
                            onClose() {
                                
                            },
                        });
                    }
                    
                }catch{
                    
                }
            },
            updLocalUser(){
                getPatient({id:this.patient.id}).then(res => {
                    if(res.status == 200){
                        let userInfo = _.assignIn(this.user, res.obj.patient)
                        store.dispatch('SetLoginUser', userInfo)
                        this.patient = this.user;
                        console.log(this.patient,"paskp")
                    }
                })
            },
            initMain(){
                let that = this;
                try{
                    that.patient = this.user;
                    getMembers({'patient': that.patient.id}).then(res => {
                        if(res.status == 200){
                            that.members = res.obj.normalmembers;
                            if(JSON.parse(localStorage.getItem("Medical-Care-Wx-Logined-User-Agent")).agent){
                            getMembers({'patient': JSON.parse(localStorage.getItem("Medical-Care-Wx-Logined-User-Agent")).agent}).then(res1 => {
                                console.log(res1)
                                if(res1.status == 200){
                                  if(that.members.length>0){
                                    res1.obj.normalmembers.forEach(el=>{
                                      let num = 0
                                      for(let i of that.members){
                                        if(i.id != el.id && this.user.id!=el.id){
                                          num += 1
                                        }else{
                                          el.isNotMembers = true
                                        }
                                      }
                                      if(num==that.members.length){
                                        el.isNotMembers = true
                                        that.members.push(el);
                                      }
                                    });
                                  }else{
                                    res1.obj.normalmembers.forEach(el=>{
                                      el.isNotMembers = true
                                    })
                                    that.members = res1.obj.normalmembers;
                                  }
                                }
                              })
                            }
                        }
                    })
                }catch{
                }
            },
            isSwitchLoginUser(item){
                Dialog.confirm({
                    title: '切换登录',
                    message: '是否要切换登录到'+item.name+"?",
                })
                .then(() => {
                    this.switchLoginUser(item)
                })
                .catch(() => {
                    // on cancel 
                });
            },
            async switchLoginUser(item){
                await switchLogin(item)
                this.initMain()
                this.$emitRefreshPage('homeIndex')
                this.gotoUrl('/home/index')
            },
            onCancel() {
                this.EditShow = false
            },
        },
        created(){
            this.initMain();
        },
        filters:{
            infoFliter(m){
                if(m && m.length>0){
                    return m.substr(0, m.length-8) + '****' + m.substr(m.length-4, 4);
                }
            },
            relationFilter(r){
                if(r.sex == 1){
                    switch(r.familyRelation){
                        case 2:
                            return '父亲';
                        case 4:
                            return '老公';
                        case 6:
                            return '儿子';
                    }
                }else if(r.sex == 2){
                    switch(r.familyRelation){
                        case 1:
                            return '母亲';
                        case 3:
                            return '老婆';
                        case 5:
                            return '女儿';
                    }
                }
                return r.familyRelationName;
            }
        }
    }
</script>
<style lang='scss' scoped>
.personal-index{
    .bot-btn{
        position: absolute;
        bottom: 60px;
        width: 100%;
    }
    .van-image{
        display: block;
    }
}
</style>

+ 95 - 0
mini-pro-web/src/views/replenishment/device/detail.vue

@ -0,0 +1,95 @@
<template>
    <div class='replenishment-device-detail'>
        <div class="kitbox plr15 ptb10">
            <div class="box-flex-1 box-v-middle fs-14">从上往下数</div>
            <div><van-button type="info" size="small">点击设置商品</van-button></div>
        </div>
        <div class="list ">
            <div v-for="i in 15" :key="i" class="item plr15 bt-e1e1e1 bb-e1e1e1">
                <div class="pt10">第1层</div>
                <div class="item-list ptb10">
                    <div v-for="j in 20" :key="j" :class="'pitem-full'" class="pitem">
                        <div :style="'height: 25%'" class="pitem-bg"></div>
                        <div class="pitem-inner">
                            <div class="kitbox ">
                                <div class="box-flex-1">1号位</div>
                                <div>0/5</div>
                            </div>
                            <div class="ellipsis tc pt8">J氯化钠注J氯化钠注</div>
                            <div class="tc pt5">¥27.00</div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
export default{
    name: 'replenishmentDeviceDetail',
    data(){
        return {
            
        }
    },
    created() {
        
    },
    methods:{
        
    },
}
</script>
<style lang='scss' scoped>
.replenishment-device-detail{
    .list{
        .item{
            margin-bottom: 10px;
            background: #fff;
            .item-list{
                overflow-y: scroll;
                width: 100%;
                display: flex;
                .pitem{
                    width: 100px;
                    height: 80px;
                    background: rgb(238, 238, 238);
                    border-radius: 10px;
                    margin-left: 10px;
                    padding: 5px;
                    font-size: 14px;
                    position: relative;
                    &.pitem-full{
                        color: #fff;
                    }
                    &:first-child{
                        margin-left: 0;
                    }
                    .pitem-inner{
                        position: relative;
                        z-index: 1;
                        background: transparent;
                    }
                    .pitem-bg{
                        background: #17b3ec;
                        position: absolute;
                        z-index: 0;
                        width: 100%;
                        bottom: 0;
                        left: 0;
                        border-bottom-left-radius: 10px;
                        border-bottom-right-radius: 10px;
                        &.orange{
                            background: #ff9526;
                        }
                        &.red{
                             background: #ff5e6c;
                        }
                    }
                }
            }
        }
    }
}
</style>

+ 104 - 0
mini-pro-web/src/views/replenishment/device/list.vue

@ -0,0 +1,104 @@
<template>
    <div class='replenishment-device-list'>
        <CustomList 
			ref="customList"
			@onLoad="onLoad">
			<div class="list plr15 pt10">
                <div v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                    <div class=" ptb10 kitbox">
                        <div class="box-flex-1 fs-14">众健信联1号</div>
                        <div class="">
                            <van-tag type="success">在线</van-tag>
                            <van-tag type="success" class="ml5">在售</van-tag>
                        </div>
                    </div>
                    <div class="lh20 ptb10 kitbox">
                        <div class="box-flex-1">
                            <div>药柜容量:1156</div>
                            <div>商品库存:340.00</div>
                            <div>设备所属:禾山街道社区卫生服务中心</div>
                            <div>设备编号:149122021070000</div>
                        </div>
                        <div class="fs-20 c-pr">
                            <van-icon name="arrow" />
                        </div>
                    </div>
                </div>
            </div>
		</CustomList>
    </div>
</template>
<script>
    export default{
        name: 'replenishmentDeviceList',
        data(){
            return {
                list: [],
            }
        },
        created() {
            
        },
        methods:{
            onLoad({page, pageSize, searchText}){
                setTimeout(()=>{
                    for(var i=0; i<pageSize; i++){
                        this.list.push((page-1)*pageSize + i)
                    }
                    console.log(this.list)
                    debugger
                    this.$refs.customList.endLoad(page==5, this.list.length)
                }, 1000)
                return
                var that = this, 
                    params = {
                        orgCode: this.$store.getters.orgCode,
                        doctorNameKey: searchText,
                        dept: this.routerParam.dept,
                        diseaseKey: this.routerParam.disease,
                        page: page,
                        pagesize: pageSize
                    };
                
                zhuanjiazixunApi
                    .findDoctorByHospitalAndDiseaseAndDept(params)
                    .then(res=>{
                        if(res.status == 200){
                            var list = res.detailModelList.map(item=>{
                                var data = item
                                data.photo = this.$root.setDocPhoto(data.photo)
                                return data
                            })
                            this.list = page==1? list : this.list.concat(list)
                            this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                        } else {
                            this.$refs.customList[this.active].endLoad(false, true)
                        }
                    }).catch(err=>{
                        console.error(err)
                        this.$refs.customList[this.active].endLoad(false, true)
                    })
            },
        },
    }
</script>
<style lang='scss' scoped>
.replenishment-device-list{
    .list{
        .item{
            margin-bottom: 10px;
            border-radius: 5px;
            &:last-child{
                margin-bottom: 0;
            }
            .van-icon{
                position: absolute;
                top: 50%;
                transform: translateY(calc(-50% - 15px));
                right: 0;
                color: #ccc;
            }
        }
    }   
}
</style>

+ 102 - 0
mini-pro-web/src/views/replenishment/recordList.vue

@ -0,0 +1,102 @@
<template>
    <div class='replenishment-record-list'>
        <van-sticky>
            <van-tabs v-model="active">
                <van-tab title="补货"></van-tab>
                <van-tab title="换货"></van-tab>
                <van-tab title="上货"></van-tab>
            </van-tabs>
        </van-sticky>
        <div class="list">
            <van-collapse v-model="activeName" accordion>
                <van-collapse-item v-for="(item, i) in list" :key="i" :title="item.title" :name="item.id">
                    <div class="item" v-for="(citem, k) in item.children" :key="k">
                        <div>补货时间:2020-08-24 17:15:19</div>
                        <div>设备编号:149122021070000</div>
                        <div>商品数量:2</div>
                        <div>补货人员:张三</div>
                    </div>
                </van-collapse-item>
            </van-collapse>
        </div>
    </div>
</template>
<script>
export default{
    name: 'replenishmentRecordList',
    data(){
        return {
            active: 0,
            activeName: 1,
            list: [{
                title: '众健信联1号',
                id: 1,
                children: [{}, {}],
                noMore: false
            }],
        }
    },
    created() {
        
    },
    methods:{
        onLoad({page, pageSize, searchText}){
            setTimeout(()=>{
                for(var i=0; i<pageSize; i++){
                    this.list.push((page-1)*pageSize + i)
                }
                console.log(this.list)
                debugger
                this.$refs.customList.endLoad(page==5, this.list.length)
            }, 1000)
            return
            var that = this, 
                params = {
                    orgCode: this.$store.getters.orgCode,
                    doctorNameKey: searchText,
                    dept: this.routerParam.dept,
                    diseaseKey: this.routerParam.disease,
                    page: page,
                    pagesize: pageSize
                };
            
            zhuanjiazixunApi
                .findDoctorByHospitalAndDiseaseAndDept(params)
                .then(res=>{
                    if(res.status == 200){
                        var list = res.detailModelList.map(item=>{
                            var data = item
                            data.photo = this.$root.setDocPhoto(data.photo)
                            return data
                        })
                        this.list = page==1? list : this.list.concat(list)
                        this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                    } else {
                        this.$refs.customList[this.active].endLoad(false, true)
                    }
                }).catch(err=>{
                    console.error(err)
                    this.$refs.customList[this.active].endLoad(false, true)
                })
        },
    },
}
</script>
<style lang='scss' scoped>
.replenishment-record-list{
    .list{
        ::v-deep .van-collapse-item__content{
            padding: 0 15px;
        }
        .van-cell::after
        .item{
            padding: 10px 0;
            border-bottom: 1px solid #e1e1e1;
            &:last-child{
                border-bottom: 0 ;
            }
        }
    }   
}
</style>