You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2200 lines
82 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<div class="reatmen">
<el-form :model="form" :inline="true" :label-width="formLabelwidth" @submit.native.prevent>
<el-form-item label="手机号码:">
<div class="form-width-ms flex">
<el-input style="padding-left:0px;min-width:123px;height:100%" ref="" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" maxlength="11" v-model="form.mobilePhone" @change.enter.native="query">
<el-button size="mini" slot="append" icon="el-icon-search" @click="openMember"></el-button>
</el-input>
<el-button icon="el-icon-circle-plus-outline" type="text" @click="openAddMember"></el-button>
</div>
</el-form-item>
<el-form-item label="会员名字:">
<div class="form-width-ms">
<span>{{ form.memberName }} <i v-if="form.sex==1" class="el-icon-male text-blue"></i>
<i v-if="form.sex==0" class="el-icon-female text-pink"></i></span>
<el-button size="mini" type="text" v-if="form.memberName" @click="routePush">详情</el-button>
</div>
</el-form-item>
<el-form-item label="业务时间:" v-if="isAddition==1">
<div class="form-width-ms">
<el-date-picker ref="recDate" v-model="form.additionDate" :picker-options="pickerOptions" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</div>
</el-form-item>
<el-form-item v-if="sessionStorageData.allowdebt&&debtMoneys&&isAddition==0" label="以往欠款:">
<div class="form-width-ms">
<span>{{ debtMoneys }}</span>
<el-button size="mini" type="text" @click="openMoney()">去还款</el-button>
</div>
</el-form-item>
<el-form-item v-if="form.mobilePhone" label="成交额">
<div class="form-width-ms"><span class="text-price text-red">{{ amountType(1) }}</span></div>
</el-form-item>
<el-form-item v-if="form.mobilePhone" label="卡付">
<div class="form-width-ms"><span class="text-price text-red">{{ amountType(2) }}</span></div>
</el-form-item>
<el-form-item v-if="form.mobilePhone" label="现付">
<div class="form-width-ms"><span class="text-price text-red">{{ amountType(3) }}</span></div>
</el-form-item>
<el-form-item v-if="form.mobilePhone" label="欠款">
<div class="form-width-ms"><span class="text-price text-red">{{ amountType(4) }}</span></div>
</el-form-item>
<br /></el-form>
<el-table
:data="list"
:header-cell-style="{
background: 'linear-gradient(#6cb3ff, #1873d4)',
color: '#eeeeee'
}"
max-height="650"
stripe
ref="list">
<el-table-column width="100" align="center" label="操作">
<template slot-scope="scope">
<el-button
icon="el-icon-delete"
circle
size="mini"
type="primary"
@click.stop="handleDel(scope.$index)"
></el-button>
</template>
</el-table-column>
<el-table-column align="center" prop="projectNum" label="疗程编码" show-overflow-tooltip min-width="180">
<template slot-scope="scope">
<div class="form-width-ms flex">
<el-input placeholder="输入疗程编码" v-model="scope.row.projectNum" @change="proBlur(scope.row.projectNum,scope.$index)">
<el-button size="mini" slot="append" icon="el-icon-search" @click="openPro(scope.$index)"></el-button>
</el-input>
</div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip min-width="120" align="center" prop="projectName" label="疗程名称"></el-table-column>
<el-table-column align="center" prop="priceMember" label="单次标价" min-width="120">
<template slot-scope="scope">
<div class="form-width-xs pointer"><span class="text-price text-red">{{scope.row.priceMember?scope.row.priceMember:0}}</span></div>
</template>
</el-table-column>
<el-table-column align="center" prop="salesPrice" label="成交单价" min-width="120">
<template slot-scope="scope">
<div class="form-width-xs pointer"><span class="text-price text-red">{{scope.row.salesPrice?scope.row.salesPrice:0}}</span></div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="minumumTimes" label="最少购买(次)" min-width="90">
<template slot-scope="scope">
{{scope.row.minumumTimes?scope.row.minumumTimes:0}}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="numberTimes" label="购买次数" min-width="120">
<template slot-scope="scope">
<div class="form-width-xs pointer">
<div v-if="!scope.row.buysShow" @click="handleBuysShow(scope.row)">
<span class="text-cyan">{{ scope.row.numberTimes?scope.row.numberTimes:0 }}</span>
<i v-if="scope.row.numberTimes" class="el-icon-edit text-cyan"></i>
</div>
<el-input class="form-input-wdith" v-focus v-else size="samll" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" v-model="scope.row.numberTimes" @change="(val)=>numbertimes(val,scope.$index)" @blur="(val)=>numbertimes(val,scope.$index)" ref="buyinput"></el-input>
</div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="amount" label="成交金额" min-width="120">
<template slot-scope="scope">
<div class="form-width-xl" v-if="!scope.row.menberShow" @click="handleMenberShow(scope.row)">
<span class="text-price text-red">{{ scope.row.amount?scope.row.amount:0 }}</span>
<i v-if="scope.row.amount" class="el-icon-edit text-cyan"></i>
</div>
<el-input class="form-input-wdith" v-on:input="scope.row.amount = scope.row.amount.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')" v-focus v-else size="samll" v-model="scope.row.amount" @change="(val)=>changeDeal(val,scope.$index)" @blur="(val)=>changeDeal(val,scope.$index)" ref="priceinput"></el-input>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" label="充值卡付" min-width="120" v-if="sessionStorageData.refillCard">
<template slot-scope="scope">
<el-popover
placement="bottom"
width="700"
@show="openRec(scope.row)"
trigger="click">
<el-table :data="scope.row.rechargeAccountList" :summary-method="getSummaries" max-height="300" :header-cell-style="{
background: 'linear-gradient(#6cb3ff, #1873d4)',
color: '#eeeeee'
}" >
<el-table-column align="center" prop="rechargeTypeName" label="名称" show-overflow-tooltip min-width="120"></el-table-column>
<el-table-column show-overflow-tooltip min-width="70" align="center" prop="cardRestMoney" label="剩余金额"></el-table-column>
<el-table-column align="center" prop="cardOver" label="可用金额" width="70"></el-table-column>
<el-table-column align="center" prop="spendMoney" label="本次支付" width="90">
<template slot-scope="scopes">
<div v-if="!scopes.row.isShow" @click="openCard(scopes.row, scope.$index)" class="form-input-width">
{{ scopes.row.spendMoney }}
<i class="el-icon-edit text-cyan"></i>
</div>
<el-input v-focus οninput="value=value.replace(/^0[0-9]+/,val=>val[1]).replace(/^(\.)+/,'').replace(/[^\d.]/g,'').replace(/\.+/,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
class="form-input-width-xs" @change="endEditCard(scopes.row,scope.$index)" @blur="endEditCard(scopes.row,scope.$index)" v-else v-model.lazy="scopes.row.spendMoney" precision="2"></el-input>
</template>
</el-table-column>
<el-table-column align="center" prop="cardOvers" label="可用余额" width="70"></el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="storeName" label="所属门店" width="120"></el-table-column>
</el-table>
<el-button slot="reference" type="primary">充值卡</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" label="卡付金额" min-width="100">
<template slot-scope="scope">
{{ selectTabAmount(scope.row.rechargeAccountList,2)?selectTabAmount(scope.row.rechargeAccountList,2):0 }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" label="现付金额" min-width="100">
<template slot-scope="scope">
{{ scope.row.nowAmount.toFixed(2)*1 }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="debtMoney" label="欠款金额" min-width="100">
<template slot-scope="scope">
{{scope.row.debtMoney?scope.row.debtMoney.toFixed(2)*1:0}}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" label="实付金额" min-width="100">
<template slot-scope="scope">
{{ selectTabAmount(scope.row.rechargeAccountList,2) + scope.row.nowAmount.toFixed(2)*1 }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="storeName" label="说明" min-width="250">
<template slot-scope="scope">
<el-input style="width: 180px" v-model="scope.row.description" placeholder="请输入说明"></el-input>
</template>
</el-table-column>
</el-table>
<div class="reat">
<div class="margin-bottom-xs marginAuto">
<span style="flex:1">员工/门店管理层/高管业绩</span>
<div style="display: flex">
<staffsles ref="staffsles" @staffslesData="staffslesData"></staffsles>
<admin ref="admin" @adminData="adminData"></admin>
<manager ref="manager" @managerData="managerData"></manager>
</div>
</div>
<div class="tab">
<el-table :data="payLists" :summary-method="getSummaries" show-summary row-key="payId" :header-cell-style="{
background: 'linear-gradient(#6cb3ff, #1873d4)',
color: '#eeeeee'
}" >
<el-table-column align="center" prop="collectionTypeName" label="支付方式" min-width="100"></el-table-column>
<el-table-column align="center" prop="payMoney" fixed="right" label="本次支付 ( ¥ )" width="120">
<template slot-scope="scope">
<div class="form-input-width" v-if="!scope.row.isShow" @click="openpay(scope.row)">{{ scope.row.payMoney }}<i class="el-icon-edit text-cyan"></i></div>
<el-input v-focus type="number" class="form-input-width-xs" @blur="endEdit(scope.row)" v-else v-model.lazy="scope.row.payMoney" v-on:input="scope.row.payMoney = scope.row.payMoney.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')"></el-input>
</template>
</el-table-column>
</el-table>
</div>
<div style="width:100px">
<el-button size="mini" type="primary" :loading="saveloading" style="width:100%;height:35px;margin:10px 10px" @click="addList">添加</el-button>
<el-button size="mini" type="info" plain @click="empty" style="width:100%;height:35px;margin:10px 10px">清空</el-button>
<el-button size="mini" v-if="isAddition==0" type="primary" @click="isAddition = 1" v-role="5004005" style="width:100%;height:35px;;margin:10px 10px">补单</el-button>
<el-button size="mini" v-else type="success" @click="isAddition = 0" style="width:100%;height:35px;;margin:10px 10px">疗程</el-button>
<el-button size="mini" type="primary" plain @click="getList" v-role="5004001" style="width:100%;height:35px;;margin:10px 10px">列表</el-button>
<el-button size="mini" type="primary" @click="save((saveloading = true))" :loading="saveloading" v-role="5004002" style="width:100%;height:35px;;margin:10px 10px">提交</el-button>
</div>
</div>
<div class="reatmen">
<!-- 保存列表弹窗 -->
<el-dialog :close-on-click-modal="false" v-dialogDrag title="疗程" :visible.sync="listDialogVisible" width="90%" :close="close">
<div class="flex justify-between padding-bottom-xs">
<div>
<el-date-picker @change="getList" style="width: 200px" v-model="selectDate" type="month" placeholder="选择日期"></el-date-picker>
<selec v-if="headOffice==1" ref="selec" @selecData="selecData"></selec>
</div>
<div class="flex">
<div class="form-width-m padding-right-xs">
<el-input size="medium" v-model="queryForm.courseReatmentNum" placeholder="输入单据号" clearable @change="getList"></el-input>
</div>
<div class="form-width-m padding-right-xs">
<el-input size="medium" v-model="queryForm.memberName" placeholder="输入会员名字" clearable @change="getList"></el-input>
</div>
<div class="form-width-m padding-right-xs">
<el-input size="medium" maxlength="11" v-model="queryForm.mobilePhone" placeholder="输入会员手机号" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" clearable @change="getList"></el-input>
</div>
<el-button size="mini" type="primary" @click="getList">搜索</el-button>
</div>
</div>
<el-table :data="pageInfo.formList" max-height="500" :header-cell-style="{
background: 'linear-gradient(#6cb3ff, #1873d4)',
color: '#eeeeee'
}" ref="formList" border>
<el-table-column align="center" prop="storeName" label="门店" min-width="80"></el-table-column>
<el-table-column align="center" show-overflow-tooltip prop="courseReatmentNum" label="单号" min-width="140"></el-table-column>
<el-table-column align="center" show-overflow-tooltip prop="date" label="日期" min-width="140"></el-table-column>
<el-table-column align="center" prop="isAddition" show-overflow-tooltip label="补单" min-width="50">
<template slot-scope="scope"><span class="text-red" v-show="scope.row.isAddition == 0">否</span><span class="text-green" v-show="scope.row.isAddition == 1">是</span></template>
</el-table-column>
<el-table-column align="center" prop="mobilePhone" label="手机号码" min-width="100">
<template slot-scope="scope">
{{ scope.row.mobilePhone | query }}
</template>
</el-table-column>
<el-table-column align="center" prop="memberName" label="会员名称" min-width="80"></el-table-column>
<el-table-column align="center" prop="projectName" :show-overflow-tooltip="true" label="疗程" min-width="120"></el-table-column>
<el-table-column align="center" prop="salesPrice" label="成交单价" min-width="70"></el-table-column>
<el-table-column align="center" prop="numberTimes" label="购买次数" min-width="70"></el-table-column>
<el-table-column align="center" prop="collectionRechargeAmount" label="卡付金额" min-width="80"> </el-table-column>
<el-table-column align="center" label="现付金额" min-width="80" prop="collectionCashAmount"></el-table-column>
<el-table-column align="center" prop="amount" label="成交金额" min-width="70"></el-table-column>
<el-table-column align="center" prop="courseReatmentAmount" label="实付金额" min-width="70">
<template slot-scope="scope">
{{ scope.row.collectionCashAmount + scope.row.collectionRechargeAmount }}
</template>
</el-table-column>
<el-table-column align="center" prop="debtMoney" label="欠款" min-width="70"></el-table-column>
<el-table-column align="center" prop="storeName" label="所属门店" show-overflow-tooltip min-width="100"></el-table-column>
<el-table-column align="center" prop="inputBy" label="录单人" min-width="70"></el-table-column>
<el-table-column align="center" prop="tag" label="状态" min-width="75" fixed="right">
<template slot-scope="scope">
<el-tag :type="scope.row.isCancel == 1 ? 'primary' : 'success'">{{ scope.row.isCancel==0?'正常':'作废' }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="明细" width="76">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="detail(scope.row)" plain>明细</el-button>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="作废" width="76">
<template slot-scope="scope">
<el-button @click.stop="abolish(scope.row)" size="mini" :disabled="scope.row.isCancel === 1" type="primary" v-role="5004003">作废</el-button>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="打印" width="76">
<template slot-scope="scope">
<el-button @click.stop="print(scope.row, (printDialogVisible = true))" :disabled="scope.row.isCancel === 1" size="mini" type="success" v-role="5004004">打印
</el-button>
</template>
</el-table-column>
</el-table>
<div class="block" style="margin-top: 10px">
<!-- 分页组件 -->
<el-pagination align="left" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="queryForm.pageNum" :page-sizes="[10, 20, 30, 40, 50]" :page-size="queryForm.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</div>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" @click="exportachis()" v-if="headOffice" :loading="exportloading">导 出</el-button>
<el-button size="mini" @click="close">关 闭</el-button>
</span>
</el-dialog>
<div>
<el-dialog :close-on-click-modal="false" v-dialogDrag title="账户明细" :visible.sync="postponeDialog" width="60%">
<el-form :model="postponeForm">
<el-form-item label="会员名称" label-width="150px">
<div style="wdith: 120px">{{ postponeForm.memberName }}</div>
</el-form-item>
<el-form-item label="疗程账户名称" label-width="150px">
<div style="wdith: 120px">
{{ postponeForm.courseProjectName }}
</div>
</el-form-item>
<el-form-item label="可用次数" label-width="150px">
<div style="wdith: 120px">
{{ postponeForm.courseConsumeCount }}
</div>
</el-form-item>
<el-form-item label="到期日期" label-width="150px">
<div class="spanrs">
<span v-show="!recDateShow" @click="openDate((recDateShow = true))">{{ postponeForm.endTime }}
<el-button class="el-icon-edit" type="text" size="mini">修改</el-button>
</span>
<el-date-picker size="mini" @blur="recDateShow = false" v-show="recDateShow" ref="recDate" v-model="postponeForm.endTime" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="postponeDialog = false">取消</el-button>
<el-button size="mini" type="primary" @click="endPostpone((postponeDialog = false))">确定</el-button>
</span>
</el-dialog>
<el-dialog :close-on-click-modal="false" v-dialogDrag title="打印" :visible.sync="printDialogVisible" width="60%">
<div id="printTest" class="printDiv">
<div class="text-center padding-xs">
开卡
</div>
<br />
<hr />
<br />
<el-form :model="printForm">
<!-- <el-form-item label="门店:">
<div>
{{ printForm.storeName }}
</div>
</el-form-item><br />
<el-form-item label="时间:">
{{ printForm.date }}
</el-form-item><br />
<el-form-item label="单号:">
{{ printForm.courseReatmentNum }}
</el-form-item><br />
<el-form-item label="会员:">
<div>
{{ printForm.memberName }}/{{ printForm.mobilePhone ? (printForm.mobilePhone.substring(3, 0)) + '****' + (printForm.mobilePhone.substring(7)) : '******'}}
</div>
</el-form-item><br />
<el-form-item label="录单:">
<div>
{{ printForm.inputBy }}
</div>
</el-form-item><br />
<el-form-item label="疗程:">
<div style="min-width: 64px; display: inline-block">
{{ printForm.projectName }} <span class="text-cyan"></span>
</div>
</el-form-item><br /> -->
<!-- <el-table :data="printForm.courseLists" style="width: 200px;" show-summary>
<el-table-column align="center" prop="projectName" label="项目" min-width="100px"></el-table-column>
<el-table-column align="center" prop="courseReatmentAmount" label="实付金额" min-width="60">
<template slot-scope="scope">
{{ scope.row.amount - scope.row.debtMoney }}
</template>
</el-table-column>
<el-table-column align="center" prop="numberTimes" label="次数" min-width="40px"> </el-table-column>
</el-table>
<hr />
<el-table :data="printForm.rechargeConsumeList" style="width: 200px;" show-summary>
<el-table-column align="left" prop="rechargeTypeName" label="充值卡" min-width="100px"></el-table-column>
<el-table-column align="center" prop="spendMoney" label="支付" min-width="50px"></el-table-column>
<el-table-column align="center" prop="cardConsumeMoney" label="剩余" min-width="50px"></el-table-column>
</el-table>
<hr />
<el-table :data="payTypeLists" style="width: 200px;">
<el-table-column align="left" prop="payName" label="付款方式" ></el-table-column>
<el-table-column align="center" prop="payMoney" label="支付" width="80"></el-table-column>
</el-table> -->
<div class="box1">
<p class="font-w">日 期:</p> <span>{{ printForm.date }}</span>
</div>
<div class="box1">
<p class="font-w">交易号:</p><span>{{ printForm.courseReatmentNum }}</span>
</div>
<div class="box1">
<p class="font-w">门 店:</p><span>{{ printForm.storeName }}</span>
</div>
<div class="box1">
<p class="font-w">收银员:</p> <span>{{ printForm.inputNum }}</span>
</div>
<div class="box1">
<p class="font-w">姓 名:</p><span>{{ printForm.memberName }}</span>
</div>
<div class="box1">
<p class="font-w">手机号:</p><span>{{ printForm.mobilePhone }}</span>
</div>
<hr style="margin-top:10px"/>
<div class="print-project">
<ul>
<li class="project-top">
<p>项目</p>
<p>金额</p>
<p>次数</p>
</li>
<li v-for="(item,index) in courseProjectLists" :key="index" class="project-top-del">
<p>{{ item.projectName }}</p>
<p> {{ item.amount - item.debtMoney }}</p>
<p>{{ item.numberTimes }}</p>
</li>
</ul>
</div>
<hr style="margin-top:10px"/>
<div class="print-project">
<ul>
<li class="project-top">
<p>付款方式</p>
<p>金额</p>
</li>
<li v-for="(item,index) in payTypeLists" :key="index" class="project-top-del">
<p>{{ item.payName }}</p>
<p> {{ item.payMoney }}</p>
</li>
</ul>
</div>
<div style="height:50px"></div>
<el-form-item label="签名:">
</el-form-item><br />
<el-form-item label="服务热线:">
{{ printForm.telephone }} </el-form-item><br />
<div>{{ printForm.printDate | dateFormat }}</div>
<br /><br />
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="printDialogVisible = false">取消
</el-button>
<el-button size="mini" type="primary" v-print="'#printTest'">打印</el-button>
</span>
</el-dialog>
</div>
<el-dialog :close-on-click-modal="false" v-dialogDrag title="提示" :visible.sync="paymentcodeDialog" width="400px">
<span style="font-size: 14px; margin-left: 10px; color: #999">本次支付需要验证支付密码</span>
<el-form :model="paymentform">
<el-form-item label="支付密码 : ">
<el-input style="width: 150px" size="mini" type="password" v-model="paymentform.cashPassword" placeholder="会员的支付密码"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="paymentcodeDialog = false">取 消</el-button>
<el-button size="mini" type="primary" @click="payment((paymentcodeDialog = false))">确 定</el-button>
</span>
</el-dialog>
</div>
</div>
<staff ref="staff" @staffData="staffData"></staff>
<addmember ref="addmember" @addUserConfirm="addUserConfirm"></addmember>
<member ref="member" @memberData="memberData"></member>
<repayment ref="repayment" @repaymentData="query"></repayment>
<project ref="project" @projectData="proConfirm"></project>
<detail ref="detail" @detailData="detailData"></detail>
<trading ref="trading" :mobilePhone='form.mobilePhone'/>
<record-details ref="recordDetails" />
<record-detail ref="recordDetail"/>
</div>
</template>
<script>
import {
storeMemberOne,
couAccountOne,
recAccountList,
checkCashWord,
coursecancel,
coursepage,
addcourse,
ctlist,
editCouAccount,
selectCourseOne,
exportachis
} from "@/api/eashier.js";
import { propage } from "@/api/storeManage";
import repayment from "@/components/repayment/index.vue";
import staff from "@/components/staff/index";
import addmember from "@/components/member/edit/index";
import project from "@/components/project/index";
import member from "@/components/member/index";
import detail from "./components/detail";
import admin from "@/components/staffList/admin/index";
import manager from "@/components/staffList/manager/index";
import staffsles from "@/components/staffList/staff/index";
import selec from "@/components/store/select/index";
import recordDetails from './components/record-details.vue'
import recordDetail from './detail.vue'
export default {
name:"reatment",
components: {
staffsles,
manager,
admin,
member,
repayment,
staff,
addmember,
project,
detail,
selec,
recordDetails,
recordDetail
},
data() {
return {
exportloading:false,
courseProjectLists:[],
payTypeLists:[],
courseLists:[],
isShow:false,
list:[],
selectIndex:0,
input: null,
printDialogVisible: false, //打印弹窗开关
listDialogVisible: false,
paymentcodeDialog: false,
postponeDialog: false,
detailDialog: false,
saveloading: false,
recDateShow: false,
refreshtext: false, //搜索判断字符
menberShow: false,
infoDialog: false, //上传文件弹窗开关
buysShow: false,
moneyRatio: 100,
isAddition: 0,
total: 0, //分页总条数
queryForm: {
//查询对象
pageNum: 1, // 当前页码
pageSize: 10, // 每页的数据条数,
},
selectDate: new Date(),
payMoney: "",
payLists: [], //现付列表
proForm: {},
manageList: [],
staffList: [],
detailForm: {
rechargeConsumeList: [],
payLists: [], //现付列表
},
postponeForm: {},
pageInfos: {
reatmentList: [],
total: 0, //分页总条数
pageSize: 10,
pageNum: 1,
},
activeName: ["现付"],
openCollNumber: 0,
radioEditStaff: "",
editStaffTable: [],
sessionStorageData: {}, //门店参数集合
editStaffRatioRow: "",
radioEditStaffList: {},
formLabelwidth: "70px",
rechargeAccountList: [], //卡付列表
collectionCashAmount: "",
editStaffDailogtitle: "",
collectionRechargeAmounts: 0,
debtMoneys: 0,
paymentform: {
cashPassword: null,
},
printForm: {
date: "",
number: null,
storeId: "",
projectName: "",
memberName: "",
mobilePhone: null,
num: null,
money: null,
payMoney: null,
cardMoney: null,
numMoney: null,
numPayMoney: null,
tel: "",
printDate: new Date(),
},
form: {
mobilePhone: null,
memberName: "",
sex: "",
integralCheckbox: false,
description: "",
salesPrice: "",
numberTimes: "",
menberShow: false,
courseReatmentAmount: 0,
isDebt: false,
collectionRechargeAmount: 0,
collectionCashAmount: 0,
collectionIntegralAmount: 0,
integral: 0,
integralMoney: 0,
consumeIntegral: 0,
debtMoney: 0,
amount:0
},
headOffice: sessionStorage.getItem("headOffice") * 1,
pageInfo: {
total: 0, //分页总条数 // 总条数
formList: [],
},
addForm: {
sex: 1,
memberName: "",
mobilePhone: null,
label: null,
skinType: null,
hairLong: null,
cashPassword: null,
checkPass: null,
},
vip: {}, //会员信息
staffLists: [{ ratio: 100 }], //员工占比初始化
managerLists: [{ ratio: 100 }], //员工占比初始化
adminList: [{ ratio: 100 }], //员工占比初始化
date: [],
openStaffText: "",
pickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now();
},
},
};
},
computed:{
amountType(){
return function(type){
// 1成交额 2卡付 3现付 4欠款
let num = type==1?
eval(this.list.map(item=>{return item.amount?item.amount*1:0}).join("+")):(type==2?
eval(this.list.map(item=>{return this.selectTabAmount(item.rechargeAccountList,2)?this.selectTabAmount(item.rechargeAccountList,2):0}).join("+")):(type==3?
eval(this.payLists.map(item=>{return item.payMoney*1}).join("+")):eval(this.list.map(item=>{return item.debtMoney?item.debtMoney*1:0}).join("+"))))
return num?num.toFixed(2)*1:0
}
},
// 现付金额
selectTabAmount(){
return function(val,type){
let num = type ==1? eval(val.map(item=>{return item.payMoney?item.payMoney*1:0}).join("+")):eval(val.map(item=>{return item.spendMoney?item.spendMoney*1:0}).join("+"))
return num?num.toFixed(2)*1:0
}
},
// 待付金额
treatAmount(){
// 需要转换类型(字符串拼接需要转数值)
let cardAmount = 0 //卡付金额
let cashAmount = 0 //现金金额
if(this.rechargeAccountList.length){
// 允许卡付,金额累加
cardAmount = this.rechargeAccountList.reduce((pre,item)=>{
if(item.spendMoney){
return pre + Number(item.spendMoney)
}else return pre
},0)
}
if(this.payLists.length){
// 允许现金付
cashAmount = this.payLists.reduce((pre,item)=>{
if(item.payMoney){
return pre + Number(item.payMoney)
}else{
return pre
}
},0)
}
// 比成交金额低,返回待付金额,大于成交金额,返回超出
let num = Number(cardAmount + cashAmount)
let amount = Number(this.form.amount)
if(!amount){
// 初始化金额为0
return 0
}
if(amount>=num){
return (amount - num).toFixed(2)
}else{
return '超出'+( (num - amount).toFixed(2) ) + '元'
}
},
// 实付金额
paidAmount(){
// 需要转换类型(字符串拼接需要转数值)
let cardAmount = 0 //卡付金额
let cashAmount = 0 //现金金额
if(this.rechargeAccountList.length){
// 允许卡付,金额累加
cardAmount = this.rechargeAccountList.reduce((pre,item)=>{
if(item.spendMoney){
return pre + Number(item.spendMoney)
}else return pre
},0)
}
if(this.payLists.length){
// 允许现金付
cashAmount = this.payLists.reduce((pre,item)=>{
if(item.payMoney){
return pre + Number(item.payMoney)
}else{
return pre
}
},0)
}
return (Number(cardAmount+cashAmount)).toFixed(2)
}
},
methods: {
exportachis(){
this.exportloading = true
let params = {
date:this.formatTime(this.selectDate, "YYYY-MM-DD hh:mm:ss")
}
exportachis(params).then(res=>{
this.exportloading = false
let blob = new Blob([res]);
var a = document.createElement("a");
var url = window.URL.createObjectURL(blob);
console.log(url);
a.href = url;
a.download = "疗程导出表.xlsx";
a.click();
window.URL.revokeObjectURL(url);
})
},
addUserConfirm(phone){
this.form.mobilePhone = phone
this.query()
},
handleMenberShow(row){
// let num = eval(this.payLists.map(item=>{return item.payMoney*1}).join("+"))
// let cardNum = this.selectTabAmount(row.rechargeAccountList,2)
// if(num ||cardNum){
// this.$message.error({
// message: "当前项目存在卡付或者现付!请先清空再进行操作",
// });
// }else{
row.menberShow = true
// }
},
handleBuysShow(row){
// let num = eval(this.payLists.map(item=>{return item.payMoney*1}).join("+"))
// let cardNum = this.selectTabAmount(row.rechargeAccountList,2)
// if(num ||cardNum){
// this.$message.error({
// message: "当前项目存在卡付或者现付!请先清空再进行操作",
// });
// }else{
row.buysShow = true
// }
},
updataNowAmount(){
// 重置list
this.list.forEach(item=>{
// 清空现付,重置待付,欠款
item.nowAmount = 0
item.debtMoney = item.amount - this.selectTabAmount(item.rechargeAccountList,2)
let cardCashSum = item.nowAmount*1 + (this.selectTabAmount(item.rechargeAccountList,2)?this.selectTabAmount(item.rechargeAccountList,2):0)
item.debtAmount = ((item.amount * this.sessionStorageData.debtRatio * 1) /100 ).toFixed(2) *1
if(cardCashSum>item.debtAmount){
item.debtAmount = 0
}else{
item.debtAmount -= cardCashSum.toFixed(2)*1
}
})
let num = eval(this.payLists.map(item=>{return item.payMoney*1}).join("+")) //现金总和
this.list.forEach(item=>{
if(item.debtMoney){ //待付金额存在
if(num){
if(num>item.debtMoney){ //够付,不存在欠款
item.nowAmount = item.debtMoney
num -= item.nowAmount*1
item.debtMoney = 0
item.debtAmount = 0
}else{ //不够付
item.nowAmount = num
item.debtMoney = (item.debtMoney-num).toFixed(2)*1
num = 0
item.debtAmount = ((item.amount * this.sessionStorageData.debtRatio * 1) /100 ).toFixed(2) *1
let cardCashSum = (item.nowAmount*1 + (this.selectTabAmount(item.rechargeAccountList,2)?this.selectTabAmount(item.rechargeAccountList,2):0))
if(cardCashSum>item.debtAmount){
item.debtAmount = 0
}else{
item.debtAmount -= cardCashSum
}
}
}
}
})
},
openRec(row){
row = this.handleData(row)
},
handleData(row){
if(row){
row.rechargeAccountList.forEach(firstItem=>{
let list = []
this.list.forEach(secondItem=>{
secondItem.rechargeAccountList.forEach(thirdItem=>{
if(thirdItem.id === firstItem.id){
thirdItem.spendMoney = thirdItem.spendMoney?thirdItem.spendMoney*1:0
list.push(thirdItem)
}
})
})
// // 本单使用总和
this.$set(firstItem,'cardSum',eval(list.map(item=>item.spendMoney*1).join("+")))
this.$set(firstItem,'cardOvers',firstItem.cardOver-firstItem.cardSum)
firstItem.cardOvers = (firstItem.cardOvers).toFixed(2)*1
// // 可用余额
})
}
return row
},
handleDel(index){
this.list.splice(index,1)
this.resetAmount()
this.updataNowAmount()
},
addList(){
this.list.push({
rechargeAccountList:JSON.parse(JSON.stringify(this.rechargeAccountList)),
payLists:JSON.parse(JSON.stringify(this.payLists)),
menberShow:false,
buysShow:false,
numberTimes:0,
amount:0,
integralCheckbox:false,
debtAmount:0,
nowAmount:0
})
},
routePush(){
this.$refs.trading.dialogFormVisible = true
},
changeDeal(val,index){
if(typeof(val)=='object')return this.list[index].menberShow = false
this.list[index].numberTimes?this.list[index].numberTimes*1:0 //购买次数转化
this.list[index].amount = val*1
if((val>(this.list[index].numberTimes*this.list[index].topPriceMember))||(val<(this.list[index].minumumPriceMember*this.list[index].numberTimes))){ //金额大于最大支付或者小于最大支付
this.$message.warning({
message:
"成交金额不能低于" +
( this.list[index].minumumPriceMember*this.list[index].numberTimes).toFixed(2)*1 +
"高于" +
(this.list[index].numberTimes*this.list[index].topPriceMember).toFixed(2)*1,
});
this.list[index].amount = (this.list[index].salesPrice*this.list[index].numberTimes).toFixed(2)*1
this.list[index].salesPrice = (this.list[index].amount/this.list[index].numberTimes).toFixed(2)*1
}else{
this.list[index].salesPrice = (this.list[index].amount/this.list[index].numberTimes).toFixed(2)*1
this.list[index].rechargeAccountList = JSON.parse(JSON.stringify(this.rechargeAccountList))
this.resetAmount()
this.list[index].debtMoney = (val - (this.selectTabAmount(this.list[index].rechargeAccountList,2) + this.selectTabAmount(this.list[index].payLists,1) )).toFixed(2)*1
this.updataNowAmount()
}
this.list[index].menberShow = false
},
close() {
this.listDialogVisible = false;
this.openCollNumber = 0;
},
setStaffRatio() {
this.openCollNumber = 0;
var that = this;
this.$nextTick(() => {
that.$refs.staffsles.show(that.staffLists);
that.$refs.manager.show(that.managerLists);
that.$refs.admin.show(that.adminList);
});
},
//员工占比返回方法
staffslesData(v) {
this.staffLists = [...v];
},
//高管占比返回方法
managerData(v) {
this.managerLists = [...v];
},
//管理员占比返回方法
adminData(v) {
this.adminList = [...v];
},
openMoney() {
this.$refs.repayment.show(this.vip);
},
//打开选择会员弹窗
openMember() {
this.$refs.member.show();
},
//选中会员返回方法
memberData(v) {
this.form.mobilePhone = v.mobilePhone;
this.query();
},
//选中员工返回方法
staffData(v) {
let form = { ...this.form };
if (this.openStaffText == "manage") {
form.manageStaffName = v.manageStaffName;
form.manageStaffId = v.manageStaffId;
form.manageIdentityCard = v.manageIdentityCard;
form.manageBrandNumber = v.manageBrandNumber;
}
this.form = {};
this.form = form;
},
openPostpone(row) {
let ids = {
id: row.courseAccountId,
};
couAccountOne(ids).then((res) => {
if (res.code == "000000") {
this.postponeForm = res.data;
//console.log(this.postponeForm);
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
endPostpone() {
let form = {
id: this.postponeForm.id,
endTime: this.postponeForm.endTime,
};
editCouAccount(form).then((res) => {
if (res.code == "000000") {
this.$message.success({
message: res.message,
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
ratioChange(v, index) {
this.staffList.forEach((item) => {
if (item.id == v) {
item.ratio = this.staffLists[index].ratio;
item.staffNames = item.brandNumber + "--" + item.staffName;
this.staffLists.splice(index, 1, item);
}
});
},
ratioChangeEdit(v, index) {
this.staffList.forEach((item) => {
if (item.id == v) {
item.ratio = this.detailForm.entities[index].ratio;
item.staffNames = item.brandNumber + "--" + item.staffName;
this.detailForm.entities.splice(index, 1, item);
}
});
},
payment() {
this.paymentform.id = this.form.memberId;
checkCashWord(this.paymentform).then((res) => {
if (res.data == true) {
addcourse(this.form).then((res) => {
if (res.code == "000000") {
this.empty();
this.$message.success({
message: "疗程购买 ," + res.message,
});
} else {
this.empty();
this.$message.error({
message: "疗程购买 , " + res.message,
});
}
});
} else {
this.$message.error({
message: "密码错误",
});
}
});
},
changeIntegralCheckbox(row) {
if (this.form.amount != undefined) {
if (row == true) {
this.form.debtMoney =
this.form.amount -
this.form.collectionRechargeAmount -
this.form.collectionCashAmount;
let list = JSON.parse(
sessionStorage.getItem("sessionStorageData")
).excIntegralByMoney.split(":");
if (this.form.integralMoney >= this.form.debtMoney) {
this.form.integralMoney = this.form.debtMoney;
this.form.consumeIntegral =
this.form.debtMoney * (list[0] / list[1]);
this.form.collectionIntegralAmount = this.form.integralMoney;
this.form.debtMoney = 0;
} else {
this.form.debtMoney =
(
this.form.amount -
this.form.integralMoney -
this.collectionRechargeAmounts -
this.collectionCashAmount
).toFixed(2) * 1;
this.form.collectionIntegralAmount = 0;
}
if (this.form.debtMoney < 0) {
this.form.debtMoney = 0;
}
this.form.courseReatmentAmount =
this.form.collectionCashAmount +
this.collectionRechargeAmounts +
this.form.collectionIntegralAmount;
} else {
this.form.debtMoney =
this.form.amount -
(
this.collectionRechargeAmounts - this.form.collectionCashAmount
).toFixed(2) *
1;
this.form.courseReatmentAmount =
this.form.collectionCashAmount + this.collectionRechargeAmounts;
}
}
},
detail(row) {
this.$refs.detail.show(row);
},
editStaff(row) {
this.editStaffRatioRow = row;
},
radioEditStaffRow(row) {
this.radioEditStaff = row.brandNumber;
this.radioEditStaffList = row;
},
endRadioEditStaff() {
var show = true;
if (this.editStaffDailogtitle == "修改") {
this.detailForm.entities.forEach((item) => {
// console.log(this.radioEditStaffList);
if (item.saleStaffId == this.radioEditStaffList.id) {
this.$message.warning({
message: "员工已存在",
});
show = false;
}
});
if (show) {
this.editStaffRatioRow.brandNumber =
this.radioEditStaffList.brandNumber;
this.editStaffRatioRow.saleStaffName =
this.radioEditStaffList.saleStaffName;
this.editStaffRatioRow.saleStaffId = this.radioEditStaffList.id;
this.editStaffRatioRow.saleIdentityCard =
this.radioEditStaffList.identityCard;
}
} else if (this.editStaffDailogtitle == "添加") {
this.detailForm.entities.forEach((item) => {
if (item.saleStaffId == this.radioEditStaffList.id) {
this.$message.warning({
message: "员工已存在",
});
show = false;
}
});
if (show) {
this.radioEditStaffList.saleRatio = 0;
this.radioEditStaffList.editStaffRatioShow = false;
this.detailForm.entities.push(this.radioEditStaffList);
}
}
},
//检查手机号是否是平台会员
query() {
var mobilePhone = this.form.mobilePhone;
this.empty();
// var number = partten.phoneNum;
// if (!number.test(mobilePhone)) {
// this.$message.info({
// message: "请输入正确的手机号 ! ",
// });
// } else {
storeMemberOne({
mobilePhone: mobilePhone,
storeId: sessionStorage.getItem("parentId"),
}).then((res) => {
this.form.mobilePhone = mobilePhone;
if (res.code == "000000") {
this.vip = res.data;
this.form.memberName = res.data.memberName;
this.form.minumumTimes = res.data.minumumTimes;
this.debtMoneys = res.data.debtMoney;
this.form.memberId = res.data.id;
this.form.sex = res.data.sex;
if (this.sessionStorageData.course == true) {
this.form.integral = res.data.integral;
this.form.consumeIntegral = res.data.consumeIntegral;
this.form.integralMoney = res.data.integralMoney;
} else {
this.form.integral = 0;
this.form.consumeIntegral = 0;
this.form.integralMoney = 0;
}
var ids = {
// storeId: res.data.storeId,
memberId: res.data.id,
};
var num = 0;
recAccountList(ids).then((res) => {
if (res.code == "000000") {
var rechargeAccountList = [];
res.rows.forEach((item) => {
item.isShow = false;
item.isShows = false;
item.spendMoney = 0.0;
item.discoutMoney = 0.0;
item.cardOver = item.cardConsumeMoney;
item.cardOvers = item.cardConsumeMoney;
if (this.sessionStorageData.buycourse == true) {
if (item.type == 1) {
item.offsetMoney =
item.cardConsumeMoney / (item.discount / 100);
item.offsetMoney =
Math.floor(item.offsetMoney * 100) / 100;
item.offsetMoney = this.getDecimal(item.offsetMoney);
} else {
item.offsetMoney = item.cardConsumeMoney;
}
} else {
item.offsetMoney = item.cardConsumeMoney;
}
rechargeAccountList.push(item);
});
rechargeAccountList.forEach(items=>items.giftConsumeMoney = null)
this.rechargeAccountList = rechargeAccountList;
this.addList()
} else {
this.$alert("查询会员充值卡: " + res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
} else {
this.empty();
if (res.code == "200004") {
this.$confirm(res.message + ",请先注册!", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "cancelbtnFalses",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
}).then(() => {
this.openAddMember();
});
} else {
this.$message.warning({
message: res.message,
});
}
}
});
// }
},
openAddMember() {
this.$refs.addmember.show("添加");
},
//修改单价
changesales() {
if (this.sessionStorageData.minimum == true) {
this.form.salesPrice = this.form.salesPrice*1
if (
this.form.salesPrice > this.form.topPriceMember ||
this.form.salesPrice < this.form.minumumPriceMember
) {
this.form.salesPrice = this.form.priceMember;
this.$message.warning({
message:
"成交价不能低于" +
this.form.minumumPriceMember +
"高于" +
this.form.topPriceMember,
});
} else {
this.menberShow = false;
}
} else {
this.menberShow = false;
}
this.form.amount =
((this.form.salesPrice * 100 * this.form.numberTimes) / 100).toFixed(
2
) * 1;
this.form.debtMoney = this.form.amount;
this.form.debtMoney = this.form.debtMoney.toFixed(2) * 1;
this.moneyRatio =
(this.form.salesPrice / this.proForm.priceMember).toFixed(2) * 100;
this.resetAmount()
},
//重新计算支付
resetAmount(){
this.payLists.forEach(item=>{
item.payMoney = 0
})
this.rechargeAccountList.forEach(item=>{
item.spendMoney = 0
})
},
//修改购买次数
numbertimes(val,index) {
// debtMoney
if (this.list[index].numberTimes < this.list[index].minumumTimes) {
this.$message.info({
message: "最低购买不能少于" + this.list[index].minumumTimes + "次",
});
this.list[index].numberTimes = this.list[index].minumumTimes;
this.list[index].buysShow = false;
} else {
this.list[index].buysShow = false;
this.list[index].rechargeAccountList = JSON.parse(JSON.stringify(this.rechargeAccountList))
this.resetAmount()
this.list[index].amount = (this.list[index].numberTimes*this.list[index].salesPrice).toFixed(2)*1
this.list[index].debtMoney = (this.list[index].amount*1 -(this.selectTabAmount(this.list[index].rechargeAccountList,2) + this.selectTabAmount(this.list[index].payLists,1))).toFixed(2)*1;
this.updataNowAmount()
}
},
//选择金额.
openpay(row) {
if (this.form.memberName&&this.list.length) {
if(row.payMoney*1){
row.payMoney = 0
this.updataNowAmount()
}else{
let num = eval(this.list.map(item=>item.debtMoney?item.debtMoney*1:0).join("+")) //待付金额总和
row.payMoney = num.toFixed(2)*1
}
row.isShow = true;
} else {
this.$message.info({
message: "请先选择疗程 !",
});
}
},
updataDebtAmount(index){
let num = ( this.selectTabAmount(this.list[index].rechargeAccountList,2) + this.list[index].nowAmount*1 ) //实付金额
let maxdebt= ((this.list[index].amount * this.sessionStorageData.debtRatio * 1) /100 ).toFixed(2) *1 //最大欠款
if(num>maxdebt){ //不存在欠款
this.list[index].debtAmount = 0
}else{ //还需最少支付
this.list[index].debtAmount = (maxdebt - num).toFixed(2)*1
}
},
endEdit(row) {
row.payMoney = row.payMoney*1
// let cashNum = eval(this.payLists.map(item=>{return item.payMoney*1}).join("+")) //现金总和
let cardNum = eval(this.list.map(item=>{return item.debtMoney*1}).join("+")) //待付总和
if(row.payMoney>cardNum){
this.$message.info({
message: "超出需支付金额 !请重新选择",
});
row.payMoney = 0
}else{
this.updataNowAmount(row)
}
row.isShow = false;
this.list.push({})
this.list.pop()
},
//返回当前行的下标
tableRowClassName({ row, rowIndex }) {
row.index = rowIndex;
},
proBlur(projectNum,index) {
this.form.projectNum;
let form = {
pageSize: 999,
projectNum,
state: 1,
directConsumption: 0,
};
this.selectIndex = index
propage(form).then((res) => {
if (res.code == "000000") {
if (res.pageInfo.total == 1) {
this.proConfirm(res.pageInfo.list[0]);
} else {
this.$message.info({ message: "请输入正确的项目编码!" });
}
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
// proChange(v) {
// console.log(v);
// this.pageInfos.reatmentList.forEach((item) => {
// if (item.id == v) {
// this.proForm = item;
// }
// });
// this.proConfirm(this.proForm);
// },
//打开选择会员充值卡包弹窗
openPro(index) {
this.selectIndex = index
this.$refs.project.show(0);
},
//购买类型确定
proConfirm(pros) {
this.proForm = pros;
if (this.form.memberId) {
this.list[this.selectIndex].projectName = this.proForm.projectName;
this.list[this.selectIndex].projectNum = this.proForm.projectNum;
this.list[this.selectIndex].projctId = this.proForm.id;
this.list[this.selectIndex].price = this.proForm.price;
this.list[this.selectIndex].topPrice = this.proForm.topPrice;
this.list[this.selectIndex].topPriceMember = this.proForm.topPriceMember;
this.list[this.selectIndex].priceMember = this.proForm.priceMember;
this.list[this.selectIndex].minumumPriceMember = this.proForm.minumumPriceMember;
this.list[this.selectIndex].salesPrice = this.proForm.priceMember;
this.list[this.selectIndex].minumumPrice = this.proForm.minumumPrice;
this.list[this.selectIndex].salesAchievement = this.proForm.salesAchievement;
this.list[this.selectIndex].salesCommission = this.proForm.salesCommission;
this.list[this.selectIndex].cardSalesAchievement = this.proForm.cardSalesAchievement;
this.list[this.selectIndex].cardSalesCommission = this.proForm.cardSalesCommission;
this.list[this.selectIndex].minumumTimes = this.proForm.minumumTimes;
this.list[this.selectIndex].numberTimes = this.proForm.minumumTimes;
this.list[this.selectIndex].amount =
((this.list[this.selectIndex].salesPrice * 100 * this.list[this.selectIndex].numberTimes) / 100).toFixed(
2
) * 1;
this.list[this.selectIndex].debtMoney = this.list[this.selectIndex].amount;
this.list[this.selectIndex].debtAmount= (this.list[this.selectIndex].amount * this.sessionStorageData.debtRatio * 1/100).toFixed(2)*1;
if (this.list[this.selectIndex].integralCheckbox == true) {
if (
JSON.parse(sessionStorage.getItem("sessionStorageData"))
.excIntegralByMoney
) {
let list = JSON.parse(
sessionStorage.getItem("sessionStorageData")
).excIntegralByMoney.split(":");
}
if (this.list[this.selectIndex].integralMoney >= this.list[this.selectIndex].debtMoney) {
this.list[this.selectIndex].integralMoney = this.list[this.selectIndex].debtMoney;
this.list[this.selectIndex].consumeIntegral =
this.list[this.selectIndex].debtMoney * (list[0] / list[1]);
this.list[this.selectIndex].debtMoney = 0;
} else {
this.list[this.selectIndex].debtMoney = this.list[this.selectIndex].amount - this.list[this.selectIndex].integralMoney;
}
this.list[this.selectIndex].collectionIntegralAmount = this.list[this.selectIndex].integralMoney;
} else {
this.list[this.selectIndex].debtMoney = this.list[this.selectIndex].amount;
this.list[this.selectIndex].collectionIntegralAmount = 0;
}
this.list[this.selectIndex].collectionCashAmount = 0;
this.list[this.selectIndex].collectionRechargeAmount = 0;
this.list[this.selectIndex].courseReatmentAmount =
this.list[this.selectIndex].collectionCashAmount +
this.collectionRechargeAmounts +
this.list[this.selectIndex].collectionIntegralAmount;
this.list.push({})
this.list.pop()
let index = this.list.findIndex(item=>!item.projctId)
// 有空行index存在 ,没有空行,index = -1
if(index == -1)this.addList()
}
},
openCard(row, $index) {
if (this.list[$index].salesPrice != "") {
row.isShow = true;
} else {
return this.$message.info({
message: "请先选择疗程!",
});
}
if(row.spendMoney*1!=0){
row.cardOvers = (row.spendMoney*1+row.cardOvers).toFixed(0)*1
}
if (this.sessionStorageData.buycourse == true) {
if (this.list[$index].debtMoney * 1 > 0) {
if (
row.cardOvers >=
((row.discoutMoney * row.discount) / 100).toFixed(2) * 1
) {
row.discoutMoney = this.list[$index].debtMoney * 1;
row.spendMoney =
((row.discoutMoney * row.discount) / 100).toFixed(2) * 1;
} else {
row.discoutMoney =
(row.cardOvers / (row.discount / 100).toFixed(2)) * 1;
row.spendMoney = row.cardOvers;
}
} else {
row.spendMoney = 0;
}
} else {
if (this.list[$index].debtMoney * 1 > 0) {
if (row.cardOvers < this.list[$index].debtMoney * 1) {
row.spendMoney = row.cardOvers;
row.discoutMoney = row.cardOvers;
} else {
row.discoutMoney = this.list[$index].debtMoney * 1;
row.spendMoney = this.list[$index].debtMoney * 1;
}
} else {
row.spendMoney = 0;
}
}
},
endEditCard(row,index) {
row.spendMoney = (row.spendMoney * 1).toFixed(2) * 1;
if (row.spendMoney == "") {
row.spendMoney = 0;
}
if (row.spendMoney * 1 > row.cardOvers * 1) {
this.$message.info({
message: "支付金额不能大于可用金额!",
});
row.spendMoney = 0;
row.isShow = false;
} else {
row.isShow = false;
if (this.sessionStorageData.buycourse == true) {
if (row.spendMoney * 1 > 0) {
row.discoutMoney =
(row.spendMoney / (row.discount / 100)).toFixed(2) * 1;
row.cardOvers =
(row.cardOvers * 1 - row.spendMoney * 1).toFixed(2) * 1;
} else {
row.discoutMoney = 0;
row.cardOvers =
(row.cardOvers * 1 - row.spendMoney * 1).toFixed(2) * 1;
}
} else {
if (row.spendMoney * 1 > 0) {
row.discoutMoney = row.spendMoney.toFixed(2) * 1;
row.cardOvers =
(row.cardOvers * 1 - row.spendMoney * 1).toFixed(2) * 1;
} else {
row.discoutMoney = 0;
row.cardOvers =
(row.cardOvers * 1 - row.spendMoney * 1).toFixed(2) * 1;
}
}
}
this.cardnum(index);
this.updataDebtAmount(index)
},
disedit(row, $index) {
if (this.form.salesPrice != "") {
row.isShows = true;
this.$nextTick(() => {
this.$refs["indexs" + $index].focus();
this.$refs["indexs" + $index].select();
});
} else {
this.$message.info({
message: "请先选择疗程!",
});
}
},
endEditCards(row) {
if (row.discoutMoney == "") {
row.discoutMoney = 0;
}
if (row.discoutMoney * 1 > row.offsetMoney * 1) {
this.$message.info({
message: "抵用支付金额不能大于可抵扣额!",
});
} else {
row.isShows = false;
this.cardnum();
row.cardOvers = row.cardOver - row.spendMoney;
row.spendMoney = Math.round((row.discoutMoney * row.discount) / 100);
this.form.courseReatmentAmount =
(this.form.collectionCashAmount * 100 +
this.collectionRechargeAmounts * 100) /
100;
this.form.debtMoney =
this.form.amount -
this.form.collectionCashAmount -
this.collectionRechargeAmounts -
this.form.integralMoney;
this.form.debtMoney = this.form.debtMoney.toFixed(2) * 1;
}
},
empty() {
Object.assign(this.$data, this.$options.data.call(this));
this.setPage();
},
//保存确定方法
save() {
this.list.forEach(item=>{
item.debtMoney = item.debtMoney?item.debtMoney.toFixed(2)*1:0
})
var staffLists = [];
this.staffLists.forEach((item) => {
delete item.ratioShow;
if (item.id) {
item.ratio = item.ratio?item.ratio.toFixed(2)*1:0
staffLists.push(item);
}
});
let salesmens = [];
this.managerLists.forEach((item) => {
if (item.id) {
item.staffType = 0;
salesmens.push(item);
}
});
this.adminList.forEach((item) => {
if (item.id) {
item.staffType = 1;
salesmens.push(item);
}
});
var that = this;
let form = {salesmens,staffLists}
if (staffLists.length == 0) {
this.$confirm("没有选择员工是否保存?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "cancelbtnFalses",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
}).then(() => {
that.addCourse(form);
}).catch(()=>{
this.saveloading = false
});
} else {
that.addCourse(form);
that.loading = false;
}
setTimeout(() => {
this.loading = false;
}, 3000);
},
addCourse(val) {
setTimeout(() => {
this.loading = false;
}, 3000);
let sessionStorageData = JSON.parse(sessionStorage.getItem('sessionStorageData')) //疗程最大欠款比例
this.list = this.list.filter(item=>item.projectNum)
let courseLists = this.list.map(item=>{
return {
...item,
amount:item.amount.toFixed(2)*1,
mobilePhone:this.form.mobilePhone,
memberName:this.form.memberName,
memberId:this.form.memberId,
sex:this.form.sex,
isDebt:item.debtMoney?1:0,
isAddition:this.isAddition,
collectionCashAmount:item.nowAmount.toFixed(2)*1,
debtAmount:((item.amount * (sessionStorageData.debtRatio*1))/100).toFixed(2)*1
}
})
var payLists = [];
// 用作删除数组
const auxiliaryArr = ['isShow','state','collectionType','id','collectionTypeName']
for (let i =0;i<this.payLists.length;i++) {
let params = {...this.payLists[i]}
params.payId = this.payLists[i].id;
params.payName = this.payLists[i].collectionTypeName;
auxiliaryArr.forEach(item=>{
delete params[item]
})
if (this.payLists[i].payMoney * 1 > 0) {
payLists.push(params);
}
}
let form = {
...val,
payLists,
courseLists
}
this.$confirm('是否发送短信?', '短信', {
distinguishCancelAndClose: true,
confirmButtonText: '是',
cancelButtonText: '否'
}).then(()=>{
form.isSendSms = 1
addcourse(form).then((res) => {
this.loading = false;
if (res.code == "000000") {
this.empty();
this.$message.success({
message: res.message,
});
this.$refs.recordDetail.init()
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {
this.saveloading = false;
},
});
this.payLists.forEach(item=>{
item.spendMoney = 0
})
}
this.saveloading = false;
});
}).catch(()=>{
form.isSendSms = 0
addcourse(form).then((res) => {
this.loading = false;
if (res.code == "000000") {
this.empty();
this.$message.success({
message: res.message,
});
this.$refs.recordDetail.init()
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {
this.saveloading = false;
},
});
this.payLists.forEach(item=>{
item.spendMoney = 0
})
}
this.saveloading = false;
});
})
},
//明细返回方法
detailData(v) {
this.getList();
},
selecData(v) {
this.queryForm.storeList = v;
this.getList();
},
//列表
getList() {
this.listDialogVisible = true;
if (this.headOffice == 1) {
this.$nextTick(() => {
this.$refs.selec.show();
});
}
this.queryForm.selectDate = this.formatTime(this.selectDate, "YYYY-MM");
coursepage(this.queryForm).then((res) => {
if (res.code == "000000") {
res.pageInfo.list.forEach((item) => {
item.rechargeConsumeList.forEach((items) => {
items.cardOver = items.cardConsumeMoney + items.spendMoney;
// items.giftConsumeMoney +
items.cardOvers = items.cardConsumeMoney;
// + items.giftConsumeMoney;
});
item.entities.forEach((items) => {
items.editStaffRatioShow = false;
});
});
res.pageInfo.formList = res.pageInfo.list;
this.pageInfo = res.pageInfo;
this.total = res.pageInfo.total;
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
editStaff(row) {
this.editStaffRatioRow = row;
},
//作废
abolish(row) {
this.$confirm("此操作将作废这张单, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "cancelbtnFalses",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
})
.then(() => {
row.isCancel = 1;
row.rechargeAccountList = row.rechargeConsumeList;
delete row.payLists;
delete row.entities;
delete row.rechargeConsumeList;
delete row.tag;
row.rechargeAccountList.forEach((item) => {
delete item.cardOver;
delete item.cardOvers;
});
coursecancel(row).then((res) => {
//console.log(res);
if (row.code == "000000") {
this.$message.success({
message: res.message,
});
this.getList();
} else {
this.$message.success({
message: res.message,
});
this.getList();
}
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消",
});
});
},
//打印
// 打印方法
print(row) {
row.telephone = JSON.parse(sessionStorage.getItem("storeInfo")).telephone;
row.printDate = new Date();
this.printForm = row;
this.getDetail()
},
getDetail(){
let params = {
docId:this.printForm.courseReatmentNum,
date:this.printForm.date
}
selectCourseOne(params).then(res=>{
if(res.code == '000000'){
this.printForm.rechargeConsumeList = res.data.rechargeConsumeList
this.courseProjectLists = res.data.courseLists
let list = []
res.data.rechargeConsumeList.forEach(item=>{
let index = list.findIndex( items=>items.rechargeTypeName == item.rechargeTypeName )
if( index == -1 ){
list.push(item)
}else{
list[index].spendMoney += item.spendMoney
}
})
list = list.filter(item=>item.spendMoney)
this.payTypeLists = res.data.payLists.concat(list.map(item=>{return {payName:item.rechargeTypeName,payMoney:item.spendMoney }}))
}
})
},
propage() {
var page = {
pageNum: this.pageInfos.pageNum,
pageSize: this.pageInfos.pageSize,
state: 1,
directConsumption: 0,
// storeIds: JSON.parse(sessionStorage.getItem("storeIdLists")),
};
propage(page).then((res) => {
if (res.code == "000000") {
res.pageInfo.reatmentList = res.pageInfo.list;
this.pageInfos = res.pageInfo;
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
//求和
num(index) {
var num = 0;
this.list[index].payLists.forEach((item) => {
num += item.payMoney * 1;
});
let cardNum = eval(this.list[index].rechargeAccountList.map(item=>{return item.spendMoney*1}).join("+")) //卡付总和
this.list[index].collectionCashAmount = num.toFixed(2) * 1; //现金总和
console.log(this.list[index].collectionCashAmount,this.list[index].debtMoney,this.list[index].integralCheckbox)
if (this.list[index].integralCheckbox == true) {
this.list[index].debtMoney =
(
this.list[index].amount * 1 -
this.collectionRechargeAmounts * 1 -
this.list[index].collectionCashAmount * 1 -
this.list[index].collectionIntegralAmount * 1
).toFixed(2) * 1;
this.list[index].courseReatmentAmount =
(
this.list[index].collectionCashAmount * 1 +
this.collectionRechargeAmounts * 1 +
this.list[index].collectionIntegralAmount * 1
).toFixed(2) * 1;
this.list[index].debtMoney = this.list[index].debtMoney.toFixed(2) * 1;
} else {
this.list[index].debtMoney =
(
this.list[index].amount * 1 -
cardNum * 1 -
this.list[index].collectionCashAmount * 1
).toFixed(2) * 1;
this.list[index].courseReatmentAmount =
(
this.list[index].collectionCashAmount * 1 +
this.collectionRechargeAmounts * 1
).toFixed(2) * 1;
this.list[index].debtMoney = this.list[index].debtMoney.toFixed(2) * 1;
}
if (
this.list[index].debtMoney * 1 >
(
(this.list[index].amount * this.sessionStorageData.debtRatio * 1) /
100
).toFixed(2) *
1
) {
this.$message.warning({
message:
"本次支付金额最多可以欠款 : " +
(
(this.list[index].amount * this.sessionStorageData.debtRatio * 1) /
100
).toFixed(2) *
1,
});
}
this.list.push({})
this.list.pop()
},
cardnum(index) {
let spendMoney = 0;
let discoutMoney = 0;
this.list[index].rechargeAccountList.forEach((item) => {
spendMoney += item.spendMoney * 1; //实付金额
discoutMoney += item.discoutMoney * 1; //抵扣
});
if (this.sessionStorageData.buycourse == true) {
this.list[index].collectionRechargeAmount = spendMoney;
this.list[index].collectionRechargeAmounts = discoutMoney;
} else {
this.list[index].collectionRechargeAmount = spendMoney;
this.list[index].collectionRechargeAmounts = spendMoney;
}
if (this.list[index].integralCheckbox == true) {
this.list[index].courseReatmentAmount =
(
this.list[index].collectionCashAmount * 1 +
this.list[index].collectionRechargeAmounts * 1 +
this.list[index].collectionIntegralAmount * 1
).toFixed(2) * 1;
this.list[index].debtMoney =
(
this.list[index].amount * 1 -
this.list[index].collectionRechargeAmounts * 1 -
this.list[index].collectionCashAmount * 1 -
this.list[index].collectionIntegralAmount * 1
).toFixed(2) * 1;
} else {
this.list[index].courseReatmentAmount =
(
this.list[index].collectionCashAmount * 1 +
this.list[index].collectionRechargeAmounts * 1
).toFixed(2) * 1;
// this.list[index].debtMoney =
// (
// this.list[index].amount * 1 -
// this.list[index].collectionRechargeAmounts * 1 -
// this.list[index].collectionCashAmount * 1
// ).toFixed(2) * 1;
this.list[index].debtMoney = this.list[index].amount * 1 -(this.selectTabAmount(this.list[index].rechargeAccountList,2) + this.list[index].nowAmount.toFixed(2)*1)
}
if (
this.list[index].debtMoney * 1 >
(
(this.list[index].amount * this.sessionStorageData.debtRatio * 1) /
100
).toFixed(2) *
1
) {
this.$message.warning({
message:
"本次支付金额最多可以欠款 : " +
(
(this.list[index].amount * this.sessionStorageData.debtRatio * 1) /
100
).toFixed(2) *
1,
});
}
this.list.push({})
this.list.pop()
},
ctlist() {
var page = {
pageNum: 1,
pageSize: 50,
};
ctlist(page).then((res) => {
var money = res.rows;
money.forEach((item) => {
item.payMoney = 0;
item.isShow = false;
});
this.payLists = res.rows;
this.propage();
});
var that = this;
setTimeout(() => {
that.$refs.staffsles.show(that.staffLists);
}, 1000);
},
// 保留两位小数
getDecimal(num) {
//console.log(123);
//判断是否有小数点
var s = num.toString().indexOf(".");
if (s == -1) {
//是整数
return (
(num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,") + ".00"
);
} else {
//是小数
var arr = num.toString().split(".");
if (arr.length > 1 && arr[1].length < 2) {
//一位小数
return (
(arr[0] || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,") +
"." +
arr[1] +
"0"
);
} else {
//两位小数
return (
(arr[0] || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,") +
"." +
arr[1]
);
}
}
},
//分页方法
handleSizeChange(val) {
// //console.log(`每页 ${val} 条`);
this.queryForm.pageSize = val;
this.getList();
},
handleCurrentChange(val) {
// //console.log(`当前页: ${val}`);
this.queryForm.pageNum = val;
this.getList();
},
//指定列求和
//数组按对应字段合计返回方法
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
const values = data.map((item) => Number(item[column.property]));
if (column.property == "spendMoney") {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
sums[index] = "--";
}
}, 0).toFixed(2);
sums[index] += " ";
} else if (column.property == "payMoney") {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
sums[index] = "--";
}
}, 0);
sums[index] += " ";
} else {
sums[index] = "--";
}
});
return sums;
},
setPage() {
this.ctlist();
this.setStaffRatio();
try{
this.sessionStorageData = JSON.parse(
sessionStorage.getItem("sessionStorageData")
);
}catch(err){
this.sessionStorageData = {}
}
},
},
created() {
this.setPage();
},
};
</script>
<style scoped>
.print-project{
width:100%
}
.project-top-del p:nth-child(1){
width:110px;
}
.project-top-del p{
display:inline-block;
width:45px
}
.project-top p{
display:inline-block;
width:45px
}
.project-top p:nth-child(1){
width:110px;
}
.font-w{
display:inline-block;
}
.form-width-ms{
width: 0.8rem !important;
z-index: 999999999 !important;
}
.reatmen {
background: white;
overflow: hidden;
padding-bottom: 50px;
padding: 10px;
padding: 10px;
margin-left: 25px;
}
.reatmen .el-form-item {
height: 40px;
}
.reatmen span {
font-weight: 500;
}
.reatmen .spanr {
width: 100px;
display: inline-block;
}
.reatmen .sapns {
width: 138px;
}
.reatmens .el-radio__label {
display: none;
}
.jisuan {
height: 38px;
width: 100%;
border-bottom: 1px solid #999999;
position: relative;
font-size: 14px;
line-height: 35px;
padding-left: 50px;
}
.jisuan span:nth-child(2) {
margin-left: 180px;
}
.reatmen .el-table__row {
height: 50px;
}
.reatmen .el-radio__label {
display: none;
}
.propor {
width: 350px;
border-bottom: 1px solid #d8d8d8;
padding-bottom: 10px;
}
.reatmen .numberinput .el-input__inner {
width: 60px;
height: 30px;
padding: 0;
border-color: #ff7788;
display: inline-block;
}
.reatmen .el-dialog__body {
padding: 20px 20px;
}
.reat{
margin-top: 20px;
display: flex;
justify-content: space-around;
overflow:auto
}
.right{
margin-top: 15px;
padding: 0 40px 10px 0;
font-size: 12px;
box-sizing: border-box;
border: 1px solid #ccc;
background: white;
border-radius: 10px;
width: 200px;
margin-left: 35px;
display: flex;
}
.spanrs {
width: 160px;
}
.spanrs .el-date-editor {
width: 150px;
}
.printDiv .el-form-item {
margin-bottom: 0px;
}
.printDiv .el-form-item__label,
.el-form-item__content {
font-size: 12px;
color: black;
font-family: "宋体";
padding: 0 5px 0 0;
}
.printDiv {
width: 280px;
margin: 0 auto;
/* font-size:12px; */
/* font-family: "宋体"; */
color:#000000
/* color: black; */
}
.marginAuto{
margin-right: 10px;
width: 54%;
}
/deep/ .reatmen .el-form-item{
height: 25% !important;
}
.tab{
min-width: 20%;
}
</style>