Browse Source

2023-11-25

cmy 1 year ago
parent
commit
540a08c1d0
3 changed files with 4521 additions and 1 deletions
  1. 1 1
      src/pages/account/login/index.vue
  2. 4511 0
      src/pages/cashier/reservation.vue
  3. 9 0
      src/router/modules/cashier.js

+ 1 - 1
src/pages/account/login/index.vue

@@ -354,7 +354,7 @@ export default {
       }catch (e){
       }
       return this.$router.replace({
-        path: this.$route.query.redirect || `${Setting.roterPre}/cashier/index`,
+        path: this.$route.query.redirect || `${Setting.roterPre}/cashier/reservation`,
       });
     },
     getExpiresTime(expiresTime) {

+ 4511 - 0
src/pages/cashier/reservation.vue

@@ -0,0 +1,4511 @@
+<template>
+	<div class="content">
+		<div class="goodsCard acea-row row-between">
+			<div class="conter">
+				<div class="cart">
+					<div :style="'height:' + 100 + '%'" class="acea-row">
+						<div class="acea-row row-between row-bottom cart-left">
+							<div class="left-top">
+								<div v-if="checkOut == 0" class="cart">
+									<div v-if="userInfo" class="title acea-row row-middle">
+										<div class="picture" @click="getUserDetail">
+											<img :src="userInfo.avatar" />
+										</div>`
+										<div class="text">
+											<div class="textCon line1">
+												<div class="text-wrap">
+													<div class="name-wrap">
+														<span class="name">{{ userInfo.nickname }}</span>
+														<span v-if="userInfo.phone" class="phone mr10">手机号:{{ userInfo.phone }}</span>
+													</div>
+												</div>
+												<Dropdown class="switchs" trigger="click"
+													@on-click="changeMenu($event)">
+													<a href="javascript:void(0)">
+														切换会员
+														<Icon type="ios-arrow-down"></Icon>
+													</a>
+													<DropdownMenu slot="list">
+														<DropdownItem name="1">选择用户</DropdownItem>
+														<DropdownItem name="2">游客</DropdownItem>
+													</DropdownMenu>
+												</Dropdown>
+											</div>
+											<div v-if="userInfo.uid" class="user-msg">
+												<span class="balance">积分<span class="num">{{userInfo.integral}}</span></span>
+												<span class="balance">余额<span class="num">{{userInfo.now_money}}</span></span>
+											</div>
+										</div>
+									</div>
+									<div class="count">
+										<div class="cart-sel">
+											已选购<span class="num">{{ cartSum }}</span>件
+										</div>
+										<div class="count-r">
+											<span class="clear" @click="delAll">
+												<img alt="" src="../../assets/images/clear.png" />
+												清空</span>
+										</div>
+									</div>
+									<div class="listCon">
+										<div v-if="cartList.length" class="list">
+											<div v-for="(data, proindex) in cartList" :key="proindex + 'data'"
+												class="promotions">
+												<div v-for="(pro, index) in data.promotions" :key="index + 'pro'"
+													class="promotions-msg">
+													<div class="flex-1">
+														<span class="card">{{ pro.title }}</span>
+														<span class="desc">{{ pro.desc }}</span>
+													</div>
+													<div class="collect" @click="collectOrder(pro)">
+														{{ pro.promotions_type == 1 ? "去逛逛" : "去凑单" }}
+														<span class="iconfont iconjinru"></span>
+													</div>
+												</div>
+												<div v-for="(item, indexs) in data.cart" :key="indexs + 'car'"
+													:class="{ is_give: item.is_gift }" class="item acea-row row-middle">
+													<div class="picture">
+														<img v-if="item.productInfo.attrInfo"
+															:src="item.productInfo.attrInfo.image" />
+														<img v-else :src="item.productInfo.image" />
+													</div>
+													<div v-if="!item.is_gift" class="text">
+														<div class="name line1">
+															{{ item.productInfo.store_name }}
+														</div>
+														<div v-if="
+                                item.productInfo.attrInfo &&
+                                  item.productInfo.spec_type
+                              " class="info" @click="cartAttr(item)">
+															<div class="suk line1">
+																{{ item.productInfo.attrInfo.suk }}
+															</div>
+															<span class="iconfont iconxiayi"></span>
+														</div>
+														<div v-else class="info">默认</div>
+														<div class="sum_price">¥ {{ item.sum_price }}</div>
+													</div>
+													<div v-else class="text">
+														<div class="give-name line1">
+															{{ item.productInfo.store_name }}
+														</div>
+														<div class="give-info">赠品</div>
+													</div>
+													<div v-if="!item.is_gift" class="del"
+														@click="delCart(item, proindex, indexs, 'cart')">
+														删除
+													</div>
+													<div v-if="!item.is_gift"
+														class="cartBnt acea-row row-center-wrapper">
+														<div class="iconfont iconjian"
+															@click="calculate(item, 'reduce')"></div>
+														<!--                            <input type="text" v-model="item.cart_num">-->
+														<InputNumber v-model="item.cart_num"
+															:max="item.productInfo.attrInfo.stock" :min="1" @on-blur="
+                                (e) => {
+                                  changeCart(e, item);
+                                }
+                              "></InputNumber>
+														<div class="iconfont iconjia" @click="calculate(item, 'add')">
+														</div>
+													</div>
+													<div v-else class="cartBnt">
+														<span>x{{ item.cart_num }}</span>
+													</div>
+												</div>
+											</div>
+										</div>
+										<div v-if="invalidList.length" class="list promotions">
+											<div v-for="(item, index) in invalidList" :key="index"
+												class="item acea-row row-middle">
+												<div class="picture">
+													<img v-if="item.productInfo.attrInfo"
+														:src="item.productInfo.attrInfo.image" />
+													<img v-else :src="item.productInfo.image" />
+												</div>
+												<div class="text invalid">
+													<div class="name line1">
+														{{ item.productInfo.store_name }}
+													</div>
+													<div v-if="item.productInfo.attrInfo" class="info">
+														<div class="suk line1">
+															{{ item.productInfo.attrInfo.suk }}
+														</div>
+														<span class="iconfont iconxiayi"></span>
+													</div>
+													<div v-else class="info">默认</div>
+													<div class="end">该商品已失效</div>
+												</div>
+												<div class="del" @click="delCart(item, index, 1, 'inv')">
+													删除
+												</div>
+											</div>
+										</div>
+										<div v-if="!invalidList.length && !cartList.length"
+											class="noCart acea-row row-center-wrapper">
+											<div>
+												<div class="picture">
+													<img src="@/assets/images/no-cart.png" />
+												</div>
+												<div class="tip">暂无商品,快去添加吧~</div>
+											</div>
+										</div>
+									</div>
+									<div class="footer">
+										<div class="left">
+											<div class="conInfo">
+												<div class="right">
+													<div class="storeBnt-wrap">
+														<div class="storeBnt" @click="storeTap">
+															<span class="text line1">{{
+                                storeInfos ? storeInfos.staff_name : "切换店员"
+                              }}</span>
+															<Icon style="display: inline-block; padding-left: 10px"
+																type="ios-arrow-down" />
+														</div>
+													</div>
+													<div class="discount">
+														优惠: ¥{{
+                              this.$computes.Sub(
+                                priceInfo.sumPrice || 0,
+                                priceInfo.payPrice || 0
+                              ) || 0
+                            }}
+													</div>
+													<div v-if="cartList.length" class="detailed" @click="discountCon">
+														明细
+													</div>
+													<span class="discount">实付: </span>
+													<span class="rmb">¥</span>
+													<span class="num">{{
+                            cartSum && priceInfo.payPrice ? priceInfo.payPrice : 0
+                          }}</span>
+												</div>
+											</div>
+										</div>
+										<div class="footer-bottom">
+											<Button :disabled="!cartList.length" @click="openSettle">立即结账</Button>
+										</div>
+									</div>
+								</div>
+								<div v-else class="cart" style="padding-top: 15px">
+									<Form ref="lodgeFrom" :label-width="100" :model="lodgeFrom" @submit.native.prevent>
+										<FormItem :labelWidth="20" label="" label-for="nickname">
+											<Row>
+												<Col>
+												<Input v-model="lodgeFrom.keyword" element-id="nickname" enter-button
+													placeholder="请输入用户名称/ID/手机号" search style="width: 370px"
+													@on-search="storeSearch">
+												</Input>
+												</Col>
+											</Row>
+										</FormItem>
+									</Form>
+									<Table ref="selection" :columns="columns" :data="tableHang" :loading="loading"
+										class="tableList" highlight-row no-filtered-userFrom-text="暂无筛选结果"
+										no-userFrom-text="暂无数据">
+										<template slot="nickname" slot-scope="{ row }">
+											<div>{{ row.uid ? row.nickname : "游客" }}</div>
+										</template>
+										<template slot="action" slot-scope="{ row, index }">
+											<a @click="billHang(row, index)">提单</a>
+											<a class="ml10" @click="hangDel(row, index)">删除</a>
+										</template>
+									</Table>
+									<div class="acea-row row-right page mr5">
+										<Page :current="lodgeFrom.page" :page-size="lodgeFrom.limit" :total="totalHang"
+											show-total size="small" @on-change="pageHangChange" />
+									</div>
+								</div>
+								<div class="btn-group-vertical">
+									<!-- <Button :disabled="!cartList.length" @click="lodgeTap">挂单</Button> -->
+									<Button :disabled="!userInfo.uid" @click="rechargeBnt">充值</Button>
+									<!-- <Button :disabled="!userInfo.uid || !cartList.length"
+										:class="{ selected: integral }" @click="integralTap">积分</Button> -->
+									<!-- <Button :disabled="!userInfo.uid || !cartList.length"
+										@click="couponTap">优惠券</Button> -->
+									<!-- <Button :disabled="!cartList.length" @click="changePrice">改价</Button> -->
+									<Button :disabled="!cartList.length" @click="remarks">备注</Button>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="goods">
+				<div class="acea-row" style="height: 100%">
+					<div class="goodsCon">
+						<div class="goods-top">
+							<Input v-model="goodFrom.store_name" :maxlength="20" class="input" element-id="name"
+								enter-button placeholder="搜索商品名称/ID/唯一码或点击聚焦扫码" search size="large"
+								@on-search="orderSearch">
+							<Select slot="prepend" v-model="goodFrom.field_key" style="width: 90px">
+								<Option value="all">全部</Option>
+								<Option value="store_name">商品名称</Option>
+								<Option value="id">ID</Option>
+								<Option value="bar_code">唯一码</Option>
+							</Select>
+							</Input>
+							<swiper v-if="activityTypeArr.length" :options="swiperOption" @ready="readySwiper"
+								@click="clickSwiper">
+								<swiper-slide v-for="(item, index) in activityTypeArr" :key="index"
+									:class="{ active: swiperClickedIndex === index }">{{ item.desc }}</swiper-slide>
+							</swiper>
+							<Alert v-if="swiperClickedIndex">
+								<div>活动时间:{{activityTypeArr[swiperClickedIndex].section_time[0]}} ~
+									{{activityTypeArr[swiperClickedIndex].section_time[1]}}</div>
+								<div style="margin-top: 14px;">活动内容:{{activityTypeArr[swiperClickedIndex].desc}}</div>
+							</Alert>
+							<div ref="listWrap" class="list-wrap" @scroll="pageChange">
+								<Row v-if="goodData.length && (goodFrom.cate_id !== '99999' || activityFrom.type)"
+									:gutter="15" class="list">
+									<Col v-for="(item, index) in goodData" :key="index" :sm="12" :md="12" :lg="12"
+										:xl="8" :xxl="4">
+									<div :class="{ on: item.stock }" class="item" @click="attrTap(item)">
+										<div :style="{ height: goodsHeight + 'px' }" class="picture">
+											<img :src="item.image" alt="商品图" style="width: 100%;" />
+										</div>
+										<div class="name line1">
+											{{ item.store_name || item.title }}
+										</div>
+										<div class="text">
+											<div class="text-left">
+												<div class="money">
+													<span class="rmb">¥</span>{{ item.price }}
+												</div>
+											</div>
+											<div v-if="item.cart_num && cartList.length" class="icon-cart-num">
+												{{ item.cart_num > 99 ? "99+" : item.cart_num }}
+											</div>
+											<div v-if="!item.stock && !item.cart_num" class="no-stock">
+												<div class="trip">
+													<div>暂无</div>
+													<div>库存</div>
+												</div>
+											</div>
+										</div>
+									</div>
+									</Col>
+								</Row>
+								<div v-else-if="goodFrom.cate_id === '99999' && !activityFrom.type">
+									<activityCard v-if="!activityFrom.type" :uid="userInfo.uid"
+										@selectaActivity="selectaActivity">
+									</activityCard>
+								</div>
+								<div v-else class="noGood acea-row row-center-wrapper">
+									<div>
+										<div class="picture">
+											<img :src="
+                        require(`@/assets/images/${
+                          goodFrom.cate_id == '99999'
+                            ? 'no-active.png'
+                            : 'no-goods.png'
+                        }`)
+                      " />
+										</div>
+										<div class="tip">
+											{{
+                      goodFrom.cate_id === "99999"
+                        ? "暂无活动,敬请期待~"
+                        : "暂无商品,先看看别的吧~"
+                    }}
+										</div>
+									</div>
+								</div>
+							</div>
+							<!-- </Scroll> -->
+						</div>
+					</div>
+					<div class="goodClass acea-row row-center">
+						<div>
+							<div v-for="(item, index) in cateData" :key="index"
+								:class="currentCate == index ? 'on' : ''" class="item line1"
+								@click="cateTap(item, index)">
+								{{ item.cate_name }}
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<Modal v-model="modalUser" :mask-closable="false" :scrollable="true" closable footer-hide title="用户列表"
+			width="950" class-name="user-modal">
+			<userList v-if="modalUser" ref="users" :uid="userInfo.uid || 0" @getUserId="getUserId"></userList>
+		</Modal>
+		<settleDrawer v-model="settleVisible" :list="payList" :type="payType" :money="settleMoney"
+			:collection="collection" :verify="yueVerify" :z-index="zIndex" @payPrice="payPrice" @numTap="numTap"
+			@delNum="delNum" @cashBnt="cashBnt"></settleDrawer>
+		<recharge ref="recharge" v-model="rechargeVisible" :userInfo="userInfo" @getSuccess="getSuccess"
+			@recharge="onRecharge"></recharge>
+		<couponList v-if="userInfo && cartList.length" ref="coupon" :couponId="couponId==0?-1:couponId"
+			:cartList="cartList" :uid="userInfo.uid" @getCouponId="getCouponId"></couponList>
+		<storeList ref="store" :storeInfo="storeInfos" @getStoreId="getStoreId" @getUserInfo="getUserInfo"></storeList>
+		<!-- :uid="userInfo?userInfo.uid:0" -->
+		<productAttr ref="attrs" :attr="attr" :disabled="disabled" :isCart="isCart" @ChangeAttr="ChangeAttr"
+			@goCat="goCat">
+		</productAttr>
+		<productAttr ref="skillAttrs" :attr="attr" :disabled="disabled" :isCart="isCart" isSkill
+			@ChangeAttr="ChangeAttr" @goCat="goPay"></productAttr>
+		<Modal v-model="payTypeModal" footer-hide title="支付方式" @on-visible-change="changeModal">
+			<div class="payModal">
+				<div class="type" @click="payPrice('cash')">
+					<div class="img">
+						<img alt="" src="../../assets/images/xpay.png" />
+					</div>
+					<div class="text">现金收款</div>
+				</div>
+				<div class="type" @click="payPrice('')">
+					<div class="img">
+						<img alt="" src="../../assets/images/wx_zfb_pay.png" />
+					</div>
+					<div class="text">微信/支付宝</div>
+				</div>
+				<div class="type" @click="payPrice('yue')">
+					<div class="img">
+						<img alt="" src="../../assets/images/yue.png" />
+					</div>
+					<div class="text">余额收款</div>
+				</div>
+			</div>
+		</Modal>
+		<Modal v-model="modal" title="备注" class-name="remarks-modal">
+			<!--      <form-create-->
+			<!--          v-model="fapi"-->
+			<!--          :rule="rule"-->
+			<!--          @on-submit="onSubmit"-->
+			<!--          class="remark"-->
+			<!--      ></form-create>-->
+			<Input v-model="createOrder.remarks" :rows="5" maxlength="200" placeholder="订单备注" show-word-limit
+				type="textarea" />
+			<div slot="footer">
+				<Button type="primary" size="large" long @click="onSubmit">提交</Button>
+			</div>
+		</Modal>
+		<Modal v-model="modal2" title="订单改价" class-name="change-price-modal" @on-cancel="cancelPrice">
+			<Form :model="formItem">
+				<FormItem>
+					<div class="acea-row">
+						<div class="input-number">
+							<InputNumber v-model="formItem.price" :max="9999999" :min="0" @on-change="tapPrice">
+							</InputNumber>
+							<div class="input-suffix">元</div>
+						</div>
+						<div class="input-number discount">
+							<InputNumber v-model="discountPrice" :max="100" :min="0" @on-change="tapDiscount">
+							</InputNumber>
+							<div class="input-suffix">%</div>
+						</div>
+					</div>
+				</FormItem>
+				<FormItem label="改价后金额:">
+					<div class="changePrice">
+						¥{{ formItem.price || 0 }}
+					</div>
+				</FormItem>
+			</Form>
+			<div slot="footer">
+				<Button type="primary" size="large" long @click="onSubmit2">确定</Button>
+			</div>
+			<!-- 			<form-create v-model="fapi2" :rule="rule2" @on-submit="onSubmit2" class="remark"></form-create> -->
+		</Modal>
+
+		<Modal v-model="modalPay" class="modalPay" footer-hide width="430px" @on-cancel="modalPayCancel">
+			<div class="payPage">
+				<div class="header acea-row row-center-wrapper">
+					<div class="picture"><img src="../../assets/images/gold.png" /></div>
+					<div class="text">应收金额(元)</div>
+				</div>
+				<div class="money">
+					¥<span class="num">{{
+            priceInfo.payPrice ? priceInfo.payPrice : 0
+          }}</span>
+				</div>
+				<!-- <div class="tip acea-row row-center-wrapper">
+					<Icon type="ios-alert" class="icon" />
+					{{createOrder.pay_type=='yue'?'提示:使用扫码枪扫描用户个人中心二维码':'提示:引导用户扫描柜台二维码,注册登录后支付'}}
+				</div> -->
+				<Input ref="focusNum" v-model="payNum" placeholder="请点击输入框聚焦扫码或输入编码号" size="large"
+					style="margin-top: 16px" type="url" @input="inputSaoMa" />
+				<div class="process">
+					<div class="picture">
+						<!-- <img
+              v-if="createOrder.pay_type == 'yue'"
+              src="../../assets/images/process1.png"
+            />
+            <img v-else src="../../assets/images/process2.png" /> -->
+						<img src="../../assets/images/process1.png" />
+					</div>
+					<div class="list acea-row row-between-wrapper">
+						<div class="item one">
+							<div class="name">
+								{{
+                  createOrder.pay_type == "yue" ? "出示付款码" : "打开付款码"
+                }}
+							</div>
+							<div>
+								{{
+                  createOrder.pay_type == "yue"
+                    ? "用户打开个人中心"
+                    : "微信/支付宝付款码"
+                }}
+							</div>
+						</div>
+						<div class="item two">
+							<div class="name">
+								{{ createOrder.pay_type == "yue" ? "扫描付款码" : "贴合付款盒子" }}
+							</div>
+							<div>
+								{{ createOrder.pay_type == "yue" ? "扫码枪" : "等待完成支付" }}
+							</div>
+						</div>
+						<div class="item three">
+							<div class="name">确认收款</div>
+							<div>收银台确认</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</Modal>
+		<Modal v-model="modalCash" class="cash" footer-hide width="770px" @on-cancel="cancel">
+			<div class="cashPage acea-row">
+				<div class="left">
+					<div class="picture">
+						<img src="../../assets/images/gold.png" />
+					</div>
+					<div class="text">应收金额(元)</div>
+					<div class="money">
+						¥<span class="num">{{
+              priceInfo.payPrice ? priceInfo.payPrice : 0
+            }}</span>
+					</div>
+				</div>
+				<div class="right">
+					<div class="rightCon">
+						<div class="top acea-row row-between-wrapper">
+							<div>实际收款(元)</div>
+							<div class="num">{{ collection }}</div>
+						</div>
+						<div class="center acea-row row-between-wrapper">
+							<div>需找零(元)</div>
+							<div v-if="
+                  this.$computes.Sub(
+                    collection,
+                    priceInfo.payPrice ? priceInfo.payPrice : 0
+                  ) > 0
+                " class="num">
+								{{
+                  this.$computes.Sub(
+                    collection,
+                    priceInfo.payPrice ? priceInfo.payPrice : 0
+                  )
+                }}
+							</div>
+							<div v-else class="num">0</div>
+						</div>
+						<div class="bottom acea-row">
+							<div v-for="(item, index) in numList" :key="index" :class="item == '.' ? 'spot' : ''"
+								class="item acea-row row-center-wrapper" @click="numTap(item)">
+								{{ item }}
+							</div>
+							<div class="item acea-row row-center-wrapper" @click="delNum">
+								<Icon type="ios-backspace" />
+							</div>
+						</div>
+					</div>
+					<Button type="primary" @click="cashBnt">确认</Button>
+				</div>
+			</div>
+		</Modal>
+		<Modal v-model="discount" footer-hide title="优惠明细" width="400">
+			<div class="discountCon">
+				<div class="item acea-row row-between-wrapper">
+					<div>订单原价</div>
+					<div>¥{{ priceInfo.sumPrice || 0 }}</div>
+				</div>
+				<div class="item acea-row row-between-wrapper">
+					<div>会员优惠金额:</div>
+					<div>¥{{ priceInfo.vipPrice || 0 }}</div>
+				</div>
+				<div class="item acea-row row-between-wrapper">
+					<div>优惠券金额:</div>
+					<div>¥{{ priceInfo.couponPrice || 0 }}</div>
+				</div>
+				<div class="item acea-row row-between-wrapper">
+					<div>积分抵扣:</div>
+					<div>¥{{ priceInfo.deductionPrice || 0 }}</div>
+				</div>
+				<div v-for="(item, index) in priceInfo.promotionsDetail" :key="index"
+					class="item acea-row row-between-wrapper">
+					<div>{{ item.title }}:</div>
+					<div>¥{{ item.promotions_price || 0 }}</div>
+				</div>
+			</div>
+		</Modal>
+		<Modal v-model="userInfoShow" class-name="vertical-center-modal" footer-hide title="是否切换此用户" width="340">
+			<div class="search_user_info">
+				<div class="picture">
+					<img :src="modalUserInfo.avatar" alt="" />
+				</div>
+				<p class="user_name">{{ modalUserInfo.real_name }}</p>
+				<p class="user_id">ID:{{ modalUserInfo.uid }}</p>
+				<p class="user_phone">手机号:{{ modalUserInfo.phone }}</p>
+				<div class="sure_btn" @click="checkUser()">确定</div>
+			</div>
+		</Modal>
+		<!-- 会员详情-->
+		<user-details ref="userDetails" @operation="operation"></user-details>
+	</div>
+</template>
+
+<script>
+	import userList from "@/components/userList";
+	import storeList from "@/components/storeList";
+	import couponList from "@/components/couponList";
+	import productAttr from "./components/productAttr";
+	import recharge from "@/components/recharge";
+	import activityCard from "@/components/activityCard";
+	import userDetails from "@/components/userDetail/userDetails";
+	import settleDrawer from "@/components/settleDrawer";
+	import "../../assets/js/core.js";
+	import {
+		cashierProduct,
+		cashierCate,
+		cashierUser,
+		cashierCode,
+		cashierCart,
+		cashierDetail,
+		cashierCartList,
+		cashierCartNum,
+		cashierchangeCart,
+		cashierCartDel,
+		cashierCompute,
+		cashierCreate,
+		cashierPay,
+		postCashierSwitch,
+		postCashierHang,
+		getHangList,
+		getHang,
+		cashierHang,
+		cashierGetAttr,
+		swithUser
+	} from "@/api/order";
+	import {
+		checkOrderApi,
+		getUserInfo,
+		userSaveApi
+	} from "@/api/user";
+	import {
+		activityList,
+		activityTypeList
+	} from "@/api/product";
+	import Setting from '@/setting';
+
+	export default {
+		name: "index",
+		components: {
+			userList,
+			storeList,
+			productAttr,
+			couponList,
+			recharge,
+			activityCard,
+			userDetails,
+			settleDrawer,
+		},
+		data() {
+			return {
+				formItem: {
+					price: 0,
+				},
+				discountPrice: 100,
+				loading: false,
+				cashBntLoading: false,
+				totalHang: 0,
+				tableHang: [],
+				activeHangon: -1,
+				hangData: [],
+				lodgeFrom: {
+					keyword: "",
+					page: 1,
+					limit: 10,
+				},
+				currentid: "",
+				columns: [{
+						title: "选择",
+						key: "chose",
+						width: 60,
+						align: "center",
+						render: (h, params) => {
+							let id = params.row.id;
+							let flag = false;
+							if (this.currentid === id) {
+								flag = true;
+							} else {
+								flag = false;
+							}
+							let self = this;
+							return h("div", [
+								h("Radio", {
+									props: {
+										value: flag,
+									},
+									on: {
+										"on-change": () => {
+											self.currentid = id;
+											self.activeHangon = params.index;
+											let data = {
+												uid: params.row.uid,
+											};
+											let touristId = params.row.tourist_uid;
+											if (params.row.uid) {
+												this.userInfoData(data);
+											} else {
+												this.setUp(touristId);
+											}
+										},
+									},
+								}),
+							]);
+						},
+					},
+					{
+						title: "用户",
+						slot: "nickname",
+						minWidth: 70,
+					},
+					{
+						title: "订单金额",
+						key: "price",
+						minWidth: 70,
+					},
+					{
+						title: "时间",
+						key: "_add_time",
+						minWidth: 70,
+					},
+					{
+						title: "操作",
+						slot: "action",
+						minWidth: 100,
+						align: "center",
+					},
+				],
+				checkOut: 0,
+				modalUser: false,
+				flag: true,
+				goodFrom: {
+					store_name: "",
+					field_key: "all",
+					cate_id: "",
+					page: 1,
+					limit: 20,
+					uid: 0,
+					staff_id: 0,
+				},
+				activityFrom: {
+					page: 1,
+					limit: 20,
+					type: 0,
+					uid: 0,
+					promotions_id: 0,
+				},
+				total: 0,
+				goodData: [],
+				cateData: [],
+				currentCate: 0, //分类的当前index;
+				currentTab: "2",
+				codeNum: "",
+				payNum: "",
+				userInfo: {},
+				storeInfos: {}, //门店店员信息
+				storeList: [], //门店列表
+				attr: {
+					productAttr: [],
+					productSelect: {},
+				},
+				storeInfo: {}, //商品信息
+				productValue: [],
+				attrValue: "", //已选属性
+				productId: 0, //产品id
+				seckillId: 0, //秒杀商品id
+				cartList: [],
+				isCart: 0,
+				cartInfo: {
+					//更改属性所需参数
+					cart_id: 0,
+					product_id: 0,
+					unique: "",
+				},
+				modal: false,
+				fapi: {},
+				rule: [{
+					type: "input",
+					field: "remarks",
+					title: "备注",
+					props: {
+						type: "textarea",
+						maxlength: 100,
+						"show-word-limit": true,
+					},
+				}, ],
+				modal2: false,
+				rule2: [{
+					type: "InputNumber",
+					field: "change_price",
+					title: "实付款",
+					value: 0,
+					props: {
+						min: 0,
+					},
+				}, ],
+				integral: false, //是否使用积分
+				coupon: false, //是否使用优惠券
+				couponId: 0, //优惠券id
+				modalPay: false,
+				payTypeModal: false,
+				cartSum: 0,
+				priceInfo: {},
+				createOrder: {
+					remarks: "",
+					change_price: 0,
+					cart_id: [], // 购物车id
+					userCode: "",
+					is_price: 0,
+					auth_code: "",
+				},
+				modalCash: false,
+				numList: ["7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "."],
+				collectionArray: [],
+				collection: 0,
+				isOrderCreate: 0,
+				discount: false,
+				payType: "", // 支付方式
+				orderId: "", //订单id
+				seckillOrderId: "", //秒杀订单id
+				clientHeight: 0,
+				cartHeight: 0,
+				goodsHeight: 0,
+				invalidList: [],
+				promotionsList: [],
+				defaultcalc: false,
+				orderSystem: {
+					loadingMsg: null,
+					timer: null,
+				},
+				disabled: false, //阻止属性弹窗多次提交
+				unchangedPrice: 0,
+				cumping: false, //加减节流
+				modalUserInfo: {}, //搜索出来的用户信息
+				userInfoShow: false, //扫码枪搜索用户弹窗状态
+				settleVisible: false,
+				payList: [{
+						label: '微信/支付宝',
+						value: '',
+						status: true,
+					},
+					{
+						label: '现金收款',
+						value: 'cash',
+						status: true,
+					},
+					{
+						label: '余额收款',
+						value: 'yue',
+						status: true,
+					},
+				],
+				shadow: 0,
+				rechargeVisible: false,
+				settleMoney: 0,
+				yueVerify: false,
+				activityTypeArr: [],
+				swiper: null,
+				swiperClickedIndex: 0,
+				swiperOption: {
+					slidesPerView: 'auto',
+					spaceBetween: 14,
+					setWrapperSize: true,
+				},
+				rechargeData: {},
+				zIndex: 9999,
+			};
+		},
+		watch: {
+			goodData(value) {
+				this.$nextTick(() => {
+					if (value.length) {
+						this.goodsHeight = this.$refs.listWrap.querySelector('.picture').clientWidth;
+					}
+				});
+			}
+		},
+		created() {
+			let clientWidth = document.documentElement.clientWidth;
+			let pageLimt;
+			if (clientWidth > 2260) {
+				pageLimt = 30;
+			} else if (clientWidth > 1580) {
+				pageLimt = 30;
+			} else if (clientWidth > 1270) {
+				pageLimt = 30;
+			} else {
+				pageLimt = 30;
+			}
+			this.goodFrom.limit = pageLimt;
+			this.activityFrom.limit = pageLimt;
+			this.userInfo = JSON.parse(window.localStorage.getItem("cashierUser")) || {};
+			if (!this.userInfo.uid) {
+				this.setUp();
+			}
+			this.cateList();
+			console.log(this.$route.query)
+			if (this.$route.query.uid || this.$route.query.tourist_uid) {
+				let uid = this.$route.query.uid,
+					touristId = this.$route.query.tourist_uid,
+					staffId = this.$route.query.staff_id,
+					index = this.$route.query.index;
+				this.checkOut = 0;
+				this.activeHangon = index;
+				this.storeInfos.id = staffId;
+				let data = {
+					uid,
+				};
+				if (uid != 0) {
+					this.userInfoData(data, true);
+					this.getSwithUser(data);
+				} else {
+					this.setUp(touristId, true);
+					if (touristId) {
+						this.getSwithUser({
+							tourist_uid: touristId
+						});
+					}
+				}
+			} else if (this.userInfo.uid) {
+				this.getSwithUser({
+					uid: this.userInfo.uid
+				})
+			} else if (this.userInfo.touristId) {
+				console.log(this.userInfo.touristId)
+				this.getSwithUser({
+					tourist_uid: this.userInfo.touristId
+				})
+			}
+		},
+		methods: {
+			reloadList() {
+				this.reloading = true;
+				this.limitTemp = this.goodFrom.limit;
+				this.goodFrom.limit *= this.goodFrom.page;
+				this.goodFrom.page = 1;
+				if (this.activityFrom.type) {
+					this.limitTemp = this.activityFrom.limit;
+					this.activityFrom.limit *= this.activityFrom.page;
+					this.activityFrom.page = 1;
+				}
+			},
+			getSwithUser(data) {
+				swithUser(data).then(res => {}).catch(err => {
+					this.$Message.error(err.msg);
+				})
+			},
+			ceshi() {
+				this.$router.push({
+					path: `${Setting.roterPre}/auxScreen/login`
+				})
+			},
+			jsToJava() {
+				try {
+					window.Jsbridge.invoke('openCacheBox', JSON.stringify({
+						'p1-key': 'p1-value'
+					}), this.myFunction());
+				} catch (e) {
+
+				}
+			},
+			myFunction() {
+				console.log('myFunction called222');
+			},
+			tapDiscount() {
+				this.formItem.price =
+					this.$computes
+					.Mul(this.unchangedPrice || 0, this.discountPrice / 100 || 0)
+					.toFixed(2) || 0;
+			},
+			tapPrice() {
+				this.formItem.price = Number(this.formItem.price.toFixed(2));
+				let num = this.$computes.Div(
+					this.formItem.price || 0,
+					this.unchangedPrice || 0
+				);
+				this.discountPrice = Number((num * 100).toFixed(2)) || 0;
+			},
+			cancelPrice() {
+				this.formItem.price = this.priceInfo.payPrice || 0;
+				this.tapPrice();
+			},
+			getSuccess(e) {
+				let money = this.$computes.Add(this.userInfo.now_money, e);
+				this.userInfo.now_money = money;
+				let storage = window.localStorage;
+				storage.setItem("cashierUser", JSON.stringify(this.userInfo));
+			},
+			clear() {
+				this.priceInfo.couponPrice = 0;
+				this.priceInfo.payPrice = 0;
+				this.priceInfo.deductionPrice = 0;
+				this.priceInfo.totalPrice = 0;
+				this.priceInfo.vipPrice = 0;
+				this.priceInfo.sumPrice = 0;
+				this.cartList = [];
+				this.promotionsList = [];
+				this.cartSum = 0;
+				this.collection = 0;
+				this.collectionArray = [];
+				this.createOrder.change_price = 0;
+				this.createOrder.remarks = "";
+				this.coupon = false;
+				this.couponId = 0;
+				this.integral = false;
+				this.createOrder.is_price = 0;
+				this.activityFrom.type = 0;
+				this.goodFrom.cate_id = "";
+			},
+			cancel() {
+				this.collection = 0;
+				this.collectionArray = [];
+			},
+			// 挂单区删除
+			hangDel(row, index) {
+				cashierHang(row.id)
+					.then((res) => {
+						if (this.tableHang.length == 1) {
+							this.lodgeFrom.page = 1;
+							this.hangList();
+						} else {
+							this.tableHang.splice(index, 1);
+							this.totalHang = this.totalHang - 1;
+						}
+						this.hangData[index].is_check = 1;
+						this.$Message.success(res.msg);
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			// 点击左侧挂单
+			hangDataTap(index, item) {
+				this.activeHangon = index;
+				this.checkOut = 0;
+				let touristId = item.tourist_uid;
+				let data = {
+					uid: item.uid,
+				};
+				this.activityFrom.type = 0;
+
+				if (item.uid) {
+					this.userInfoData(data);
+				} else {
+					this.setUp(touristId);
+					this.getSwithUser({
+						tourist_uid: touristId
+					})
+				}
+			},
+			// 挂单列表
+			hangList() {
+				this.loading = true;
+				let storeId = this.storeInfos.id;
+				getHangList(storeId, this.lodgeFrom)
+					.then((res) => {
+						this.loading = false;
+						this.tableHang = res.data.data;
+						this.totalHang = res.data.count;
+					})
+					.catch((err) => {
+						this.loading = false;
+						this.$Message.error(err.msg);
+					});
+			},
+			pageHangChange(e) {
+				this.lodgeFrom.page = e;
+				this.hangList();
+			},
+			// 提单;
+			billHang(item, index) {
+				this.checkOut = 0;
+				this.activeHangon = index;
+				let touristId = item.tourist_uid;
+				let data = {
+					uid: item.uid,
+				};
+				if (item.uid) {
+					this.userInfoData(data);
+				} else {
+					this.setUp(touristId);
+				}
+			},
+			//快速挂单列表(最左侧的)
+			hangDataList() {
+				let storeId = this.storeInfos.id;
+				getHang(storeId)
+					.then((res) => {
+						this.hangData = res.data;
+						this.defaultSel();
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			//保存挂单
+			lodgeTap() {
+				// let data = {
+				//   cart_ids: this.createOrder.cart_id,
+				//   uid: this.userInfo.uid || 0,
+				//   tourist_uid: this.userInfo.touristId || "",
+				//   staff_id: this.storeInfos.id,
+				//   price: this.priceInfo.payPrice || 0,
+				// };
+				let userInfo = {
+					avatar: require("@/assets/images/yonghu.png"),
+					nickname: "游客",
+					uid: 0,
+					touristId: this.userInfo.touristId,
+				};
+				this.userInfo = userInfo;
+				let storage = window.localStorage;
+				storage.setItem("cashierUser", JSON.stringify(userInfo));
+				setTimeout((e) => {
+					this.hangDataTap(0, this.hangData[0]);
+				}, 500);
+				// postCashierHang(data)
+				//     .then((res) => {
+				//       this.activeHangon = -1;
+				//       this.$Message.success(res.msg);
+				//       this.hangDataList();
+				//       this.hangList();
+				//       this.setUp();
+				//     })
+				//     .catch((err) => {
+				//       this.$Message.error(err.msg);
+				//     });
+			},
+			//搜索挂单
+			storeSearch() {
+				this.lodgeFrom.page = 1;
+				this.hangList();
+			},
+			//默认选中
+			defaultSel(type) {
+				let uid = this.userInfo.uid;
+				let touristId = this.userInfo.touristId;
+				if (uid) {
+					let flag = 0;
+					this.hangData.forEach((item, index) => {
+						if (item.uid == uid) {
+							flag = 1;
+							this.activeHangon = index;
+						}
+					});
+
+					if (!flag) {
+						this.activeHangon = -1;
+					}
+				} else if (touristId) {
+					this.activeHangon = -1;
+					this.hangData.forEach((item, index) => {
+						if (item.tourist_uid == touristId) {
+							this.activeHangon = index;
+						}
+					});
+					if (this.activeHangon == -1) {
+						this.activeHangon = 0;
+						this.userInfo.touristId = this.hangData[0].tourist_uid;
+						this.getSwithUser({
+							tourist_uid: this.userInfo.touristId
+						})
+					}
+				}
+			},
+			// 充值
+			rechargeBnt() {
+				this.rechargeVisible = true;
+			},
+			//点击出现优惠明细
+			discountCon() {
+				this.discount = true;
+			},
+			//现金收款创建订单并支付
+			cashBnt(payNum) {
+				console.log(payNum,'2333');
+				if (this.cashBntLoading) return;
+				this.cashBntLoading = true;
+				if (this.isOrderCreate) {
+					this.getCashierPay("cash");
+				} else {
+					if (this.rechargeVisible) {
+						this.rechargeBalance(payNum);
+					} else {
+						this.orderCreate();
+					}
+				}
+				setTimeout(() => {
+					this.cashBntLoading = false;
+				}, 1000);
+			},
+			//清除计算机输入的数字
+			delNum(type) {
+				if (type === -1) {
+					this.collectionArray = [];
+				} else {
+					this.collectionArray.pop();
+				}
+				this.collection = this.collectionArray.length ?
+					this.collectionArray.join("") :
+					0;
+			},
+			//输入实际收款金额
+			numTap(item) {
+				if (this.defaultcalc === false) {
+					this.collection = "";
+					this.defaultcalc = true;
+				}
+				let x = String(this.collection).indexOf(".") + 1;
+				let y = String(this.collection).length - x;
+				console.log(x, y);
+				if (x === 0 || y < 2) {
+					if (this.collectionArray.join("") <= 9999999) {
+						this.collectionArray.push(item);
+					}
+					this.collection =
+						this.collectionArray.join("") > 99999999 ?
+						99999999 :
+						this.collectionArray.join("");
+				}
+			},
+			checkOrderTime(msg) {
+				let that = this;
+				let num = 1;
+				let timer = (this.orderSystem.timer = setInterval(function() {
+					that.confirmOrder(timer, msg);
+					num++;
+					if (num >= 60) {
+						clearInterval(timer);
+						msg();
+						that.isOrderCreate = 1;
+						that.$Message.success("支付失败");
+					}
+				}, 1000));
+			},
+			confirmOrder(timer, msg) {
+				let data = {
+					order_id: this.orderId,
+				};
+				checkOrderApi(3, data)
+					.then((res) => {
+						if (res.data.status == true) {
+							msg();
+							clearInterval(timer);
+							this.isOrderCreate = 0;
+							this.$Message.success("支付成功");
+							this.goodList();
+							this.modalPay = false;
+							this.changePoints();
+							let storage = window.localStorage;
+							storage.setItem("cashierUser", JSON.stringify(this.userInfo));
+							this.clear();
+						}
+					})
+					.catch((err) => {
+						msg();
+						this.$Message.error(err.msg);
+					});
+			},
+			payPrice(payType) {
+				this.payType = payType;
+				if (payType == "" || payType == "yue") {
+					this.createOrder.userCode = "";
+					this.createOrder.auth_code = "";
+					// this.payNum = "";
+					// if (payType == '' || this.priceInfo.is_cashier_yue_pay_verify) {
+					//   // this.modalPay = true;
+					//   let that = this;
+					//   this.$nextTick(() => {
+					//     // this.$refs.focusNum.focus();
+					//     document.onkeydown = function(e) {
+					//       if (e.which == 13) {
+					//         if (that.payNum) {
+					//           that.createOrder.userCode = that.payNum;
+					//           that.createOrder.auth_code = that.payNum;
+					//           that.confirm();
+					//         }
+					//         if (that.codeNum) {
+					//           that.codeInfo({
+					//             bar_code: that.codeNum,
+					//           });
+					//         }
+					//       }
+					//     };
+					//   });
+					// } else {
+					//   this.confirm();
+					// }
+				} else if (payType == "cash") {
+					// this.modalCash = true;
+					// this.collection = this.priceInfo.payPrice ? this.priceInfo.payPrice : 0;
+					this.keyboard();
+				}
+				this.createOrder.integral = this.integral;
+				this.createOrder.coupon = this.coupon;
+				this.createOrder.coupon_id = this.couponId;
+				if (this.coupon && !this.couponId)
+					return this.$Message.error("请选择有效优惠券");
+				this.createOrder.pay_type = payType;
+				this.createOrder.staff_id = this.storeInfos.id;
+				// this.fapi.resetFields();
+			},
+			// 线上支付和余额支付
+			confirm(payNum) {
+				this.createOrder.userCode = payNum;
+				this.createOrder.auth_code = payNum;
+				if (this.payType == "yue") {
+					// this.createOrder.userCode = this.payNum;
+					if (!this.createOrder.userCode && this.priceInfo.is_cashier_yue_pay_verify) {
+						return this.$Message.error("请扫描个人中心二维码");
+					}
+					if (this.isOrderCreate) {
+						this.getCashierPay("yue");
+					} else {
+						this.orderCreate();
+					}
+				} else if (this.payType == "") {
+					// this.createOrder.auth_code = this.payNum;
+					if (!this.createOrder.auth_code) {
+						return this.$Message.error("请扫描您的付款码");
+					}
+					if (this.isOrderCreate) {
+						this.getCashierPay("");
+					} else {
+						this.orderCreate();
+					}
+				}
+			},
+			modalPayCancel() {
+				this.$Message.destroy();
+				if (this.orderSystem.timer) {
+					clearInterval(this.orderSystem.timer);
+					this.orderSystem.timer = null;
+				}
+			},
+			getCashierPay(payType) {
+				let data = {
+					payType: payType,
+					userCode: this.payNum,
+					auth_code: this.payNum,
+				};
+				if (payType == "cash") {
+					if (parseFloat(this.priceInfo.payPrice) > parseFloat(this.collection)) {
+						return this.$Message.error("您付款金额不足");
+					}
+				}
+				cashierPay(this.orderId, data)
+					.then((res) => {
+						this.payNum = "";
+						if (res.data.status == "SUCCESS") {
+							this.isOrderCreate = 0;
+							this.$Message.success("支付成功");
+							this.modalCash = false;
+							this.modalPay = false;
+							this.changePoints();
+							let storage = window.localStorage;
+							storage.setItem("cashierUser", JSON.stringify(this.userInfo));
+							this.clear();
+							this.goodList();
+							//现金收款打开钱箱
+							if (payType == "cash") {
+								this.jsToJava();
+							}
+						} else if (res.data.status == "PAY_ING") {
+							let msg = this.$Message.loading({
+								content: "等待支付中...",
+								duration: 0,
+							});
+							this.orderSystem.loadingMsg = msg;
+							this.orderId = res.data.order_id;
+							this.checkOrderTime(msg);
+							// this.confirmOrder();
+						} else {
+							this.isOrderCreate = 1;
+							this.orderId = res.data.order_id;
+							this.$Message.error(res.data.message);
+						}
+					})
+					.catch((err) => {
+						this.payNum = "";
+						this.$Message.error(err.msg);
+					});
+			},
+
+			// 创建订单
+			orderCreate() {
+				if (this.payType == "cash") {
+					if (parseFloat(this.priceInfo.payPrice) > parseFloat(this.collection)) {
+						return this.$Message.error("您付款金额不足");
+					}
+				}
+				this.createOrder.tourist_uid = this.userInfo.touristId;
+				if (this.activityFrom.type == 5) {
+					this.createOrder.cart_id = [this.seckillOrderId];
+					this.createOrder.new = 1;
+				} else if (this.storeInfo.product_type == 4) {
+					this.createOrder.new = 1;
+				}
+				cashierCreate(this.userInfo.uid, this.createOrder)
+					.then((res) => {
+						let storage = window.localStorage;
+						this.payNum = "";
+						if (this.payType == "yue") {
+							// this.modalPay = false;
+							this.settleVisible = false;
+							this.payNum = "";
+							this.createOrder.userCode = "";
+							if (res.data.status == "ORDER_CREATE") {
+								this.isOrderCreate = 1;
+								this.orderId = res.data.order_id;
+								this.$Message.success(res.data.message);
+							} else if (res.data.status == "SUCCESS") {
+								this.isOrderCreate = 0;
+								this.$Message.success("支付成功");
+								let money = this.$computes.Sub(
+									this.userInfo.now_money,
+									this.priceInfo.payPrice
+								);
+								this.userInfo.now_money = money;
+								this.changePoints();
+								this.payTypeModal = false;
+								// this.modalPay = false;
+								storage.setItem("cashierUser", JSON.stringify(this.userInfo));
+								// this.goodList();
+								this.clear();
+							} else {
+								this.isOrderCreate = 1;
+								this.orderId = res.data.order_id;
+								this.$Message.error(res.data.message);
+							}
+						}
+						if (this.payType == "cash") {
+							if (res.data.status == "SUCCESS") {
+								this.$Message.success("支付成功");
+								// storage.removeItem("cashierUser");
+								// this.userInfo = null;
+								if (this.userInfo.uid) {
+									this.changePoints();
+								}
+								storage.setItem("cashierUser", JSON.stringify(this.userInfo));
+								// this.goodList();
+								// this.modalCash = false;
+								this.payTypeModal = false;
+								this.settleVisible = false;
+								this.clear();
+								this.jsToJava();
+							}
+						}
+						if (this.payType == "") {
+							this.payNum = "";
+							this.createOrder.auth_code = "";
+							if (res.data.status == "ORDER_CREATE") {
+								this.isOrderCreate = 1;
+								this.orderId = res.data.order_id;
+								this.$Message.success(res.data.message);
+							} else if (res.data.status == "PAY_ING") {
+								let msg = this.$Message.loading({
+									content: "等待支付中...",
+									duration: 0,
+								});
+								this.orderId = res.data.order_id;
+								this.checkOrderTime(msg);
+							} else if (res.data.status == "SUCCESS") {
+								this.$Message.success("支付成功");
+								// storage.removeItem("cashierUser");
+								// this.userInfo = null;
+								// this.setUp();
+								this.changePoints();
+								storage.setItem("cashierUser", JSON.stringify(this.userInfo));
+								// this.goodList();
+								// this.modalPay = false;
+								this.settleVisible = false;
+								this.clear();
+							} else {
+								this.isOrderCreate = 1;
+								this.orderId = res.data.order_id;
+								this.$Message.error(res.data.message);
+							}
+						}
+					})
+					.catch((err) => {
+						console.log(err)
+						this.payNum = "";
+						this.$Message.error(err.msg);
+					});
+			},
+			//更新积分、更新左侧挂单、更新挂单(此函数支付成功调用)
+			changePoints() {
+				let usedIntegral = this.$computes.Sub(
+					this.userInfo.integral,
+					this.priceInfo.usedIntegral
+				);
+				this.userInfo.integral = usedIntegral;
+				// this.hangDataList();
+				//顶部挂单列表中删除刚才支付成功的用户
+				this.hangData.splice(this.activeHangon, 1);
+				//重置默认选中
+				this.activeHangon = 0;
+				this.hangDataTap(0, this.hangData[0]);
+				//
+				this.tableHang.forEach((item, index) => {
+					if (item.uid) {
+						if (this.userInfo.uid == item.uid) {
+							this.tableHang.splice(index, 1);
+						}
+					} else {
+						if (this.userInfo.touristId == item.tourist_uid) {
+							this.tableHang.splice(index, 1);
+						}
+					}
+				});
+			},
+			changeModal(n) {
+				if (!n) {
+					this.cartCompute();
+				}
+			},
+			// 计算金额
+			cartCompute(cartId) {
+				let ids = [];
+				if (cartId) {
+					ids = [cartId];
+				} else {
+					if (!this.cartList.length) {
+						this.priceInfo = {};
+						return;
+					}
+					this.cartList.forEach((item) => {
+						item.cart.forEach((good) => {
+							ids.push(good.id);
+						});
+					});
+				}
+				this.createOrder.cart_id = ids;
+				let data = {
+					integral: this.integral,
+					coupon: this.coupon,
+					coupon_id: this.couponId,
+					cart_id: ids,
+				};
+				if (cartId) {
+					data.new = 1;
+				}
+				cashierCompute(this.userInfo.uid, data)
+					.then((res) => {
+						this.priceInfo = res.data;
+						this.unchangedPrice = this.priceInfo.payPrice || 0;
+						this.formItem.price = this.priceInfo.payPrice || 0;
+						this.tapPrice();
+						if (cartId) {
+							this.openSettle();
+						}
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+						this.coupon = false;
+					});
+			},
+			// 点击使用优惠券
+			couponTap() {
+				this.$refs.coupon.modals = true;
+				this.$refs.coupon.currentid = this.couponId || 0;
+				this.$refs.coupon.getList();
+			},
+			getCouponId(e) {
+				this.couponId = e.id;
+				this.coupon = true;
+				this.$refs.coupon.modals = false;
+				if (e.id) this.createOrder.is_price = 0;
+				this.cartCompute();
+			},
+			closeCoupon() {
+				this.coupon = false;
+				this.couponId = 0;
+				this.cartCompute();
+			},
+			// 是否使用积分
+			integralTap() {
+				if (!this.userInfo.uid) {
+					this.$Message.warning("请先选择用户再使用积分");
+					return;
+				}
+				this.integral = !this.integral;
+				if (this.integral) this.createOrder.is_price = 0;
+				this.cartCompute();
+			},
+			changePrice() {
+				this.modal2 = true;
+			},
+			remarks() {
+				// this.fapi.resetFields();
+				this.modal = true;
+			},
+			// 提交备注
+			onSubmit() {
+				this.modal = false;
+			},
+			onSubmit2() {
+				if (this.formItem.price >= 0 && this.formItem.price != null) {
+					this.priceInfo.payPrice = this.formItem.price;
+					this.$Message.success("改价成功");
+					this.createOrder.is_price = 1;
+					this.createOrder.change_price = this.formItem.price;
+					this.getSwithUser({
+						change_price: this.formItem.price
+					});
+					this.cancelPrice();
+					this.modal2 = false;
+				} else {
+					return this.$Message.error("价格不能为空");
+				}
+			},
+			// 删除
+			del(ids, type, index, num, name) {
+				this.$Modal.confirm({
+					title: "删除该购物车",
+					content: "<p>确定要删除该购物车吗?</p><p>删除该购物车后将无法恢复,请谨慎操作!</p>",
+					onOk: () => {
+						cashierCartDel(this.userInfo.uid, ids)
+							.then((res) => {
+								this.$Message.success("删除成功");
+								this.reloadList();
+								this.goodList(this.activityFrom.type);
+								if (type) {
+									this.clear();
+									this.invalidList = [];
+									this.hangDataList();
+								} else {
+									if (name == "inv" && num) {
+										this.invalidList.splice(index, 1);
+									} else {
+										this.cartList[index].cart.splice(num, 1);
+										if (this.cartList.length) {
+											this.getCartList();
+											// if (this.activityFrom.type) {
+											//   this.goodList(this.activityFrom.type);
+											// } else {
+											//   // this.goodList();
+											// }
+										} else {
+											this.hangDataList();
+											this.clear();
+										}
+									}
+									// this.cartSum = this.cartSum - 1;
+								}
+							})
+							.catch((err) => {
+								this.$Message.error(err.msg);
+							});
+					},
+					onCancel: () => {},
+				});
+			},
+			delAll() {
+				let ids = [];
+				if (!this.cartList.length && !this.invalidList.length)
+					return this.$Message.warning("购物车暂无商品");
+				this.cartList.forEach((item) => {
+					item.cart.forEach((good) => {
+						ids.push(good.id);
+					});
+				});
+
+				this.getSwithUser({
+					chang_cart_remove: 1
+				});
+
+				this.invalidList.forEach((item) => {
+					ids.push(item.id);
+				});
+				this.del({
+						ids: ids,
+					},
+					1
+				);
+			},
+			delCart(item, index, num, type) {
+				let ids = [];
+				ids.push(item.id);
+				this.del({
+						ids: ids,
+					},
+					0,
+					index,
+					num,
+					type
+				);
+			},
+			// 点击切换属性
+			cartAttr(item) {
+				this.disabled = false;
+				this.$refs.attrs.modals = true;
+				this.isCart = 1;
+				this.cartInfo.cart_id = item.id;
+				this.cartInfo.product_id = item.product_id;
+				this.goodsInfo(item.product_id);
+			},
+			// 加入购物车
+			joinCart(num) {
+				let that = this;
+				if (num) {
+					let productSelect = that.productValue[this.attrValue];
+					//如果有属性,没有选择,提示用户选择
+					if (that.attr.productAttr.length && productSelect === undefined) {
+						return this.$Message.warning("产品库存不足,请选择其它");
+					}
+				}
+				if (this.activeHangon == -1) this.activeHangon = 0;
+				// let uid = this.userInfo.uid;
+				let uid = this.hangData[this.activeHangon].uid || this.userInfo.uid || 0;
+				let data = {
+					productId: this.productId,
+					seckillId: this.seckillId,
+					cartNum: 1,
+					uniqueId: num ?
+						this.attr.productSelect !== undefined ?
+						this.attr.productSelect.unique :
+						"" :
+						"",
+					staff_id: this.storeInfos.id,
+					tourist_uid: this.userInfo.touristId,
+					new: Number(this.storeInfo.product_type === 4),
+				};
+				cashierCart(uid, data)
+					.then((res) => {
+						if (this.storeInfo.product_type === 4) {
+							this.$refs.skillAttrs.modals = false;
+							this.cartCompute(res.data.cartId);
+							return false;
+						}
+						this.$refs.attrs.modals = false;
+						this.$Message.success("添加购物车成功");
+						this.getCartList();
+						if (this.activityFrom.type) {
+							this.reloadList();
+							this.goodList(this.activityFrom.type);
+						} else {
+							//如果是扫码查询商品摒弃直接加入购物车的情况下,在加入购物车成功以后,清空输入框的内容,重新请求列表
+							this.goodFrom.store_name = "";
+							this.reloadList();
+							this.goodList();
+						}
+						this.hangDataList();
+						this.disabled = true;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			// 购物车加减
+			cartChange(item) {
+				let uid = item.uid;
+				let data = {
+					number: item.cart_num,
+					id: item.id,
+				};
+				cashierCartNum(uid, data)
+					.then((res) => {
+						this.cartCompute();
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			changeCart(e, item) {
+				let uid = item.uid;
+				let data = {
+					number: item.cart_num,
+					id: item.id,
+				};
+				cashierCartNum(uid, data)
+					.then((res) => {
+						this.getCartList();
+						this.cartCompute();
+						this.reloadList();
+						this.goodList(this.activityFrom.type);
+					})
+					.catch((err) => {
+						if (type === "reduce" && item.cart_num > 1) {
+							item.cart_num++;
+						} else if (type === "add" && item.cart_num < item.branch_stock) {
+							item.cart_num--;
+						}
+						this.$Message.error(err.msg);
+					});
+			},
+			calculate(item, type) {
+				if (this.cumping) return;
+				if (type === "reduce" && item.cart_num > 1) {
+					item.cart_num--;
+				} else if (type === "add" && item.cart_num < item.branch_stock) {
+					item.cart_num++;
+				} else {
+					return this.$Message.error(
+						item.cart_num === 1 ? "数量最小为1" : "库存不足"
+					);
+				}
+				let uid = item.uid;
+				let data = {
+					number: item.cart_num,
+					id: item.id,
+				};
+				this.cumping = true;
+				cashierCartNum(uid, data)
+					.then((res) => {
+						this.getCartList();
+						this.cartCompute();
+						this.reloadList();
+						this.goodList(this.activityFrom.type);
+					})
+					.catch((err) => {
+						if (type === "reduce" && item.cart_num > 1) {
+							item.cart_num++;
+						} else if (type === "add" && item.cart_num < item.branch_stock) {
+							item.cart_num--;
+						}
+						this.$Message.error(err.msg);
+					});
+			},
+			changeCartAttr() {
+				this.cartInfo.unique =
+					this.attr.productSelect !== undefined ?
+					this.attr.productSelect.unique :
+					"";
+
+				cashierchangeCart(this.cartInfo)
+					.then((res) => {
+						this.disabled = true;
+						this.$Message.success(res.msg);
+						this.$refs.attrs.modals = false;
+						this.getCartList();
+						// this.cartList.forEach(res => {
+						// 	if (res.id == this.cartInfo.cart_id) {
+						// 		res.productInfo.attrInfo.suk = this.attrValue;
+						// 		res.truePrice = this.attr.productSelect.price;
+						// 	}
+						// })
+						this.cartCompute();
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			goCat(e) {
+				if (e) {
+					this.changeCartAttr();
+				} else {
+					this.joinCart(1);
+				}
+			},
+			//秒杀购买
+			goPay() {
+				if (this.storeInfo.product_type === 4) {
+					this.joinCart(0);
+				} else {
+					this.joinSkillCart(0);
+				}
+			},
+			joinSkillCart(num) {
+				let that = this;
+				if (num) {
+					let productSelect = that.productValue[this.attrValue];
+					//如果有属性,没有选择,提示用户选择
+					if (that.attr.productAttr.length && productSelect === undefined) {
+						return this.$Message.warning("产品库存不足,请选择其它");
+					}
+				}
+				let uid = this.userInfo.uid;
+				let data = {
+					productId: this.productId,
+					secKillId: this.seckillId,
+					cartNum: 1,
+					uniqueId: this.attr.productSelect.unique,
+					staff_id: this.storeInfos.id,
+					tourist_uid: this.userInfo.touristId,
+					new: 1,
+				};
+				cashierCart(uid, data)
+					.then((res) => {
+						this.seckillOrderId = res.data.cartId;
+						this.$refs.skillAttrs.modals = false;
+						// this.payTypeModal = true;
+						this.cartComputeActivity(res.data.cartId);
+						this.disabled = true;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			// 获取用户详情
+			getUserDetail() {
+				if (this.userInfo.uid) {
+					this.$refs.userDetails.modals = true;
+					this.$refs.userDetails.activeName = "info";
+					this.$refs.userDetails.getDetails(this.userInfo.uid);
+				}
+			},
+			// 购物车列表
+			getCartList() {
+				let uid = this.userInfo.uid;
+				let staffId = this.storeInfos.id;
+				if (uid >= 0) {
+					let data = {
+						tourist_uid: this.userInfo.touristId
+					};
+					cashierCartList(uid, staffId, data)
+						.then((res) => {
+							this.cartList = res.data.valid;
+							this.invalidList = res.data.invalid;
+							this.cartSum = res.data.count;
+							// this.promotionsList = res.data.promotions;
+							// this.cartSum = res.data.valid.length;
+							if (res.data.valid.length) {
+								this.cartCompute();
+							} else {
+								this.clear();
+							}
+						})
+						.catch((err) => {
+							this.$Message.error(err.msg);
+						})
+						.finally((e) => {
+							this.cumping = false;
+						});
+				} else {
+					this.$Message.error("请添加或选择用户");
+				}
+			},
+			// 选择属性
+			attrTap(item) {
+				this.disabled = false;
+				if (this.userInfo && this.userInfo.uid >= 0) {
+					this.productId = item.product_id;
+					if (!item.stock) return this.$Message.error("暂无库存");
+
+					// if (this.activityFrom.type === "5") {
+					//   this.seckillId = item.id;
+					//   this.isCart = 0; //判断切换属性或是加入购物车:0加入购物车;1切换属性
+					//   this.$refs.skillAttrs.modals = true;
+					//   this.cashierGetAttr(item.id);
+					// } else if (item.spec_type) { 
+					//   this.isCart = 0; //判断切换属性或是加入购物车:0加入购物车;1切换属性
+					//   this.$refs.attrs.modals = true;
+					//   this.goodsInfo(item.product_id || item.id);
+					// } else if (item.product_type === 4) { 
+					//   // this.isCart = 0; //判断切换属性或是加入购物车:0加入购物车;1切换属性
+					//   // this.$refs.attrs.modals = true;
+					//   // this.goodsInfo(item.product_id || item.id);
+					// } else {
+					//   console.log(666)
+					//   // 0为单规格属性
+					//   this.joinCart(0);
+					// }
+
+					if (this.activityFrom.type === "5") {
+						this.seckillId = item.id;
+						this.isCart = 0; //判断切换属性或是加入购物车:0加入购物车;1切换属性
+						this.$refs.skillAttrs.modals = true;
+						this.cashierGetAttr(item.id);
+					} else if (item.spec_type) {
+						this.isCart = 0; //判断切换属性或是加入购物车:0加入购物车;1切换属性
+						this.$refs.attrs.modals = true;
+						this.goodsInfo(item.product_id || item.id);
+					} else {
+						// 0为单规格属性
+						if (item.product_type === 4) {
+							this.isCart = 0;
+							this.$refs.skillAttrs.modals = true;
+							this.goodsInfo(item.product_id || item.id);
+						} else {
+							this.joinCart(0);
+						}
+					}
+				} else {
+					this.$Message.error("请添加或选择用户");
+				}
+			},
+			// 商品详情
+			goodsInfo(id) {
+				cashierDetail(id, this.userInfo.uid)
+					.then((res) => {
+						let data = res.data;
+						this.storeInfo = data.storeInfo;
+						this.productValue = data.productValue;
+						this.$set(this.attr, "productAttr", data.productAttr);
+						this.DefaultSelect();
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			// 商品详情
+			cashierGetAttr(id) {
+				cashierGetAttr(id, this.userInfo.uid)
+					.then((res) => {
+						let data = res.data;
+						this.storeInfo = data.storeInfo;
+						this.productValue = data.productValue;
+						this.$set(this.attr, "productAttr", data.productAttr);
+						this.DefaultSelect();
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			/**
+			 * 默认选中属性
+			 *
+			 */
+			DefaultSelect: function() {
+				let productAttr = this.attr.productAttr;
+				let value = [];
+				for (var key in this.productValue) {
+					if (this.productValue[key].stock > 0) {
+						value = this.attr.productAttr.length ? key.split(",") : [];
+						break;
+					}
+				}
+				//isCart 1为触发购物车 0为商品
+				if (this.isCart) {
+					//购物车默认打开时,随着选中的属性改变
+					let attrValue = [];
+					// this.cartList.forEach((res) => {
+					//   if (res.id == this.cartInfo.cart_id) {
+					//     attrValue = res.productInfo.attrInfo.suk.split(",");
+					//   }
+					// });
+					this.cartList.forEach((item) => {
+						item.cart.forEach((res) => {
+							if (res.id == this.cartInfo.cart_id) {
+								attrValue = res.productInfo.attrInfo.suk.split(",");
+							}
+						});
+					});
+					for (let i = 0; i < productAttr.length; i++) {
+						this.$set(productAttr[i], "index", attrValue[i]);
+					}
+				} else {
+					for (let i = 0; i < productAttr.length; i++) {
+						this.$set(productAttr[i], "index", value[i]);
+					}
+				}
+				//sort();排序函数:数字-英文-汉字;
+				let productSelect = this.productValue[value.join(",")];
+				if (productSelect && productAttr.length) {
+					this.$set(
+						this.attr.productSelect,
+						"store_name",
+						this.storeInfo.store_name
+					);
+					this.$set(this.attr.productSelect, "image", productSelect.image);
+					this.$set(this.attr.productSelect, "price", productSelect.price);
+					this.$set(this.attr.productSelect, "stock", productSelect.stock);
+					this.$set(this.attr.productSelect, "unique", productSelect.unique);
+					this.$set(this.attr.productSelect, "cart_num", 1);
+					this.$set(this, "attrValue", value.join(","));
+				} else if (!productSelect && productAttr.length) {
+					this.$set(
+						this.attr.productSelect,
+						"store_name",
+						this.storeInfo.store_name
+					);
+					this.$set(this.attr.productSelect, "image", this.storeInfo.image);
+					this.$set(this.attr.productSelect, "price", this.storeInfo.price);
+					this.$set(this.attr.productSelect, "stock", 0);
+					this.$set(this.attr.productSelect, "unique", "");
+					this.$set(this.attr.productSelect, "cart_num", 0);
+					this.$set(this, "attrValue", "");
+				} else if (!productSelect && !productAttr.length) {
+					this.$set(
+						this.attr.productSelect,
+						"store_name",
+						this.storeInfo.store_name
+					);
+					this.$set(this.attr.productSelect, "image", this.storeInfo.image);
+					this.$set(this.attr.productSelect, "price", this.storeInfo.price);
+					this.$set(this.attr.productSelect, "stock", this.storeInfo.stock);
+					this.$set(
+						this.attr.productSelect,
+						"unique",
+						this.storeInfo.unique || ""
+					);
+					this.$set(this.attr.productSelect, "cart_num", 1);
+					this.$set(this, "attrValue", "");
+				}
+			},
+			/**
+			 * 属性变动赋值
+			 *
+			 */
+			ChangeAttr(res) {
+				let productSelect = this.productValue[res];
+				if (productSelect && productSelect.stock > 0) {
+					this.$set(this.attr.productSelect, "image", productSelect.image);
+					this.$set(this.attr.productSelect, "price", productSelect.price);
+					this.$set(this.attr.productSelect, "stock", productSelect.stock);
+					this.$set(this.attr.productSelect, "unique", productSelect.unique);
+					this.$set(this.attr.productSelect, "cart_num", 1);
+					this.$set(
+						this.attr.productSelect,
+						"vip_price",
+						productSelect.vip_price
+					);
+					this.$set(this, "attrValue", res);
+				} else {
+					this.$set(this.attr.productSelect, "image", this.storeInfo.image);
+					this.$set(this.attr.productSelect, "price", this.storeInfo.price);
+					this.$set(this.attr.productSelect, "stock", 0);
+					this.$set(this.attr.productSelect, "unique", "");
+					this.$set(this.attr.productSelect, "cart_num", 0);
+					this.$set(
+						this.attr.productSelect,
+						"vip_price",
+						this.storeInfo.vip_price
+					);
+					this.$set(this, "attrValue", "");
+				}
+			},
+			storeTap() {
+				this.$refs.store.modals = true;
+				this.$refs.store.cancel();
+			},
+			setUp(touristId, init) {
+				let timestamp = new Date().getTime();
+				let userInfo = {
+					avatar: require("@/assets/images/yonghu.png"),
+					nickname: "游客",
+					uid: 0,
+					touristId: touristId || timestamp,
+				};
+				if (!touristId) {
+					this.getSwithUser({
+						tourist_uid: timestamp
+					})
+				}
+				this.userInfo = userInfo;
+				let storage = window.localStorage;
+				storage.setItem("cashierUser", JSON.stringify(userInfo));
+				if (init) return;
+				this.getCartList();
+				this.reloadList();
+				this.goodList();
+			},
+			// 选择用户
+			changeMenu(name) {
+				if (name == 1) {
+					this.setUser();
+				} else {
+					this.activeHangon = -1;
+					this.clear();
+					this.setUp();
+				}
+			},
+			// 修改用户
+			setUser() {
+				this.modalUser = true;
+				// this.$refs.users.currentid = 0;
+				// this.$refs.users.modals = true
+				// this.$refs.users.cancel();
+			},
+			// 当前选中门店店员信息
+			getStoreId(e) {
+				this.clear();
+				this.storeList.forEach((i) => {
+					if (i.id == e.id) {
+						sessionStorage.setItem("staffInfo", JSON.stringify(e));
+						this.goodFrom.staff_id = e.id;
+						this.storeInfos = i;
+						this.getCartList();
+						this.reloadList();
+						this.goodList();
+						this.hangDataList();
+						// this.hangList();
+						this.getSwithUser({
+							cashier_id: e.id
+						});
+					}
+				});
+			},
+			// 门店店员信息以及门店店员列表
+			getUserInfo(e) {
+				this.storeInfos = e.users;
+				this.storeList = e.storeList;
+				this.goodFrom.staff_id = e.users.id;
+				sessionStorage.setItem("staffInfo", JSON.stringify(e.users));
+				if (this.userInfo) {
+					this.getCartList();
+				} else {
+					this.setUp();
+				}
+				this.reloadList();
+				this.goodList();
+				this.hangDataList();
+				// this.hangList();
+			},
+			// 收银台切换购物车用户
+			cashierSwitch(data) {
+				postCashierSwitch(data, this.storeInfos.id)
+					.then((res) => {})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			getUserId(e) {
+				this.clear();
+				this.modalUser = false;
+				let data = {
+					uid: e.uid,
+				};
+				let dataSwitch = {
+					uid: this.userInfo.touristId,
+					to_uid: e.uid,
+					is_tourist: 1,
+				};
+				this.cashierSwitch(dataSwitch);
+				this.userInfoData(data);
+				this.getSwithUser({
+					uid: e.uid
+				});
+			},
+			checkUser() {
+				this.userInfoShow = false;
+				this.goodFrom.store_name = "";
+				this.getUserId(this.modalUserInfo);
+			},
+			// 获取收银台用户信息
+			userInfoData(data, init) {
+				cashierUser(data)
+					.then((res) => {
+						this.userInfo = res.data;
+						let storage = window.localStorage;
+						storage.setItem("cashierUser", JSON.stringify(res.data));
+						if (init) return;
+						this.hangDataList();
+						this.getCartList();
+						this.reloadList();
+						this.goodList();
+						this.defaultSel(1);
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			//扫码枪扫码,针对带有字母的
+			inputSaoMa(e) {
+				// setTimeout定时器的作用是,等待扫码枪输入完,拿到完整的二维码信息,再调接口(扫码枪输入速度大概8~20毫秒,手动输速度大概是80毫秒),否则拿不到完整的二维信息。
+				let val = e;
+				if (val === "") return false;
+				clearTimeout(this.endTimeout);
+				this.endTimeout = null;
+				this.endTimeout = setTimeout(() => {
+					// if (this.payNum === val) {
+					// 	clearTimeout(this.endTimeout)
+					// 	if (val) {
+					// 		this.createOrder.userCode = val;
+					// 		this.createOrder.auth_code = val;
+					// 		this.confirm();
+					// 	}
+					// }
+					if (this.codeNum === val) {
+						clearTimeout(this.endTimeout);
+						if (val) {
+							this.codeInfo({
+								bar_code: val,
+							});
+						}
+					}
+				}, 500);
+			},
+			// 用户详情操作
+			operation(type) {
+				this.$refs.userDetails.modals = false;
+				if (type === 1) {
+					this.rechargeBnt();
+				} else {
+					this.setUser();
+				}
+			},
+			codeInfo(data) {
+				data.uid = this.userInfo ? this.userInfo.uid : 0;
+				data.staff_id = this.storeInfos.id;
+				data.tourist_uid = this.userInfo.touristId;
+				if (this.userInfo == null) {
+					this.codeNum = "";
+					return this.$Message.error("请添加或选择用户");
+				}
+				cashierCode(data)
+					.then((res) => {
+						this.codeNum = "";
+						let data = res.data;
+						if (data.hasOwnProperty("userInfo")) {
+							// 用户 Object.keys(this.userInfo).length
+							if (this.userInfo) {
+								this.$Modal.confirm({
+									title: "切换用户",
+									content: "<p>确定要切换用户吗?</p>",
+									onOk: () => {
+										this.userInfo = res.data.userInfo;
+										let storage = window.localStorage;
+										storage.setItem(
+											"cashierUser",
+											JSON.stringify(res.data.userInfo)
+										);
+										this.getCartList();
+									},
+									onCancel: () => {},
+								});
+							} else {
+								this.userInfo = res.data.userInfo;
+								let storage = window.localStorage;
+								storage.setItem("cashierUser", JSON.stringify(res.data.userInfo));
+							}
+						}
+						this.goodList();
+						this.getCartList();
+					})
+					.catch((err) => {
+						this.codeNum = "";
+						this.$Message.error(err.msg);
+					});
+			},
+			//点击分类
+			cateTap(item, index) {
+				this.currentCate = index;
+				this.goodFrom.cate_id = item.id;
+				this.goodFrom.promotions_id = 0;
+				this.activityFrom.type = 0;
+				this.activityFrom.page = 1;
+				this.goodFrom.page = 1;
+				this.goodFrom.store_name = "";
+				this.goodData = [];
+				this.activityTypeArr = [];
+				this.swiperClickedIndex = 0;
+				this.activityFrom.promotions_id = 0;
+				if (index !== 1) {
+					this.seckillId = 0;
+					this.goodList();
+				}
+			},
+			//员工列表
+			cateList() {
+				cashierCate()
+					.then((res) => {
+						let all = [{
+								cate_name: "全部商品",
+								id: "",
+							},
+							{
+								cate_name: "活动商品",
+								id: "99999",
+							},
+						];
+						let data = [...all, ...res.data];
+						this.cateData = data;
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+					});
+			},
+			//商品列表
+			goodList(type) {
+				if (this.activityFrom.type) {
+					this.activityFrom.uid = this.userInfo ? this.userInfo.uid : 0;
+					this.activityFrom.type = type;
+					this.activityFrom.staff_id = this.storeInfos.id;
+					if (!this.userInfo.uid)
+						this.activityFrom.tourist_uid = this.userInfo.touristId;
+					activityList(this.activityFrom).then((res) => {
+						let data = res.data;
+						this.total = data.count;
+						if (this.reloading) {
+							this.reloading = false;
+							this.activityFrom.limit = this.limitTemp;
+							this.goodData = data.list;
+						} else {
+							this.goodData = this.goodData.concat(data.list);
+						}
+					});
+				} else {
+					this.goodFrom.uid = this.userInfo ? this.userInfo.uid : 0;
+					if (!this.userInfo.uid)
+						this.goodFrom.tourist_uid = this.userInfo.touristId;
+					cashierProduct(this.goodFrom)
+						.then((res) => {
+							let data = res.data;
+							this.total = data.count;
+							if (this.reloading) {
+								this.reloading = false;
+								this.goodFrom.limit = this.limitTemp;
+								this.goodData = data.list;
+							} else {
+								this.goodData = this.goodData.concat(data.list);
+							}
+							if (data.attrValue) {
+								// 加入购物车
+								this.attr.productSelect.unique = data.attrValue.unique;
+								this.productId = data.attrValue.product_id;
+								this.joinCart(1);
+							}
+							if (data.userInfo) {
+								this.modalUserInfo = data.userInfo;
+								this.userInfoShow = true;
+							}
+						})
+						.catch((err) => {
+							this.$Message.error(err.msg);
+						});
+				}
+			},
+			// 活动商品列表
+			selectaActivity(type) {
+				this.goodData = [];
+				this.activityFrom.type = type;
+				if (this.activityFrom.type != 5) {
+					this.activityTypeList(type);
+				}
+				this.goodList(type);
+			},
+			cartComputeActivity(id) {
+				let data = {
+					integral: this.integral,
+					coupon: this.coupon,
+					coupon_id: this.couponId,
+					cart_id: [id],
+					new: 1,
+				};
+				cashierCompute(this.userInfo.uid, data)
+					.then((res) => {
+						this.priceInfo = res.data;
+						this.unchangedPrice = this.priceInfo.payPrice || 0;
+						this.formItem.price = this.priceInfo.payPrice || 0;
+						this.tapPrice();
+						this.openSettle();
+					})
+					.catch((err) => {
+						this.$Message.error(err.msg);
+						this.coupon = false;
+					});
+			},
+			// 去凑单
+			collectOrder(item) {
+				this.currentCate = 1;
+				this.activityFrom.promotions_id = item.id;
+				this.activityFrom.page = 1;
+				this.activityFrom.type = item.promotions_type;
+				this.reloadList();
+				this.goodList(item.promotions_type);
+			},
+			//搜索
+			orderSearch() {
+				this.goodFrom.page = 1;
+				this.goodData = [];
+				if (this.activityFrom.type) {
+					this.activityFrom.page = 1;
+					this.activityFrom.store_name = this.goodFrom.store_name;
+					this.goodList(this.activityFrom.type);
+				} else {
+					this.goodFrom.page = 1;
+					this.goodList();
+				}
+			},
+			pageChange(event) {
+				if (Math.abs(event.target.scrollHeight - event.target.clientHeight - event.target.scrollTop) < 1) {
+					if (this.activityFrom.type) {
+						this.activityFrom.page++;
+					} else {
+						this.goodFrom.page++;
+					}
+					this.goodList(this.activityFrom.type);
+				}
+			},
+			// 监听键盘函数
+			keyboard() {
+				let that = this;
+
+				function delNums(item) {
+					that.collectionArray.pop();
+					that.collection = that.collectionArray.length ?
+						that.collectionArray.join("") :
+						0;
+				}
+
+				function numTaps(item) {
+					if (that.defaultcalc === false) {
+						that.collection = "";
+						that.defaultcalc = true;
+					}
+					let x = String(that.collection).indexOf(".") + 1;
+					let y = String(that.collection).length - x;
+					console.log(x, y);
+					if (x === 0 || y < 2) {
+						if (that.collectionArray.join("") <= 9999999) {
+							that.collectionArray.push(item);
+						}
+						that.collection =
+							that.collectionArray.join("") > 99999999 ?
+							99999999 :
+							that.collectionArray.join("");
+					}
+				}
+
+				document.onkeydown = function(event) {
+					let e = event || window.event;
+					let key = e.keyCode;
+					if (that.modalCash) {
+						event.stopPropagation(); // 阻止事件冒泡传递
+						event.preventDefault(); //阻止默认事件原有功能
+					}
+					switch (key) {
+						case 96:
+						case 48:
+							numTaps(0);
+							break;
+						case 97:
+						case 49:
+							numTaps(1);
+							break;
+						case 98:
+						case 50:
+							numTaps(2);
+							break;
+						case 99:
+						case 51:
+							numTaps(3);
+							break;
+						case 100:
+						case 52:
+							numTaps(4);
+							break;
+						case 101:
+						case 53:
+							numTaps(5);
+							break;
+						case 102:
+						case 54:
+							numTaps(6);
+							break;
+						case 103:
+						case 55:
+							numTaps(7);
+							break;
+						case 104:
+						case 56:
+							numTaps(8);
+							break;
+						case 105:
+						case 57:
+							numTaps(9);
+							break;
+						case 110:
+							numTaps(".");
+							break;
+						case 190:
+							numTaps(".");
+							break;
+						case 8:
+							delNums();
+							break;
+					}
+				};
+			},
+			// 打开结算抽屉
+			openSettle() {
+				this.payList.forEach((value, index, arr) => {
+					value.status = true;
+					if (value.value === 'yue' && !this.userInfo.uid) {
+						value.status = false;
+					}
+					if (value.status && (!index || !arr[index - 1].status)) {
+						this.payType = value.value;
+					}
+				});
+				this.yueVerify = !!this.priceInfo.is_cashier_yue_pay_verify;
+				this.settleMoney = this.priceInfo.payPrice;
+				this.collection = this.priceInfo.payPrice;
+				this.settleVisible = true;
+			},
+			onRecharge(e) {
+				for (let i = 0; i < this.payList.length; i++) {
+					this.payList[i].status = this.payList[i].value !== 'yue';
+					if (!this.payList[i].status) {
+						continue;
+					}
+					if (!i || !this.payList[i - 1].status) {
+						this.payType = this.payList[i].value;
+					}
+				}
+				this.yueVerify = !!this.priceInfo.is_cashier_yue_pay_verify;
+				this.settleMoney = e.price;
+				this.collection = e.price;
+				this.rechargeData.rechar_id = e.rechar_id;
+				this.rechargeData.price = e.price;
+				this.zIndex = 1 + Number(this.$refs.recharge.$el.querySelector('.ivu-modal-mask').style.zIndex);
+				this.settleVisible = true;
+			},
+			activityTypeList(type) {
+				activityTypeList(type).then(res => {
+					this.activityTypeArr = [{
+							desc: '全部',
+							id: 0
+						},
+						...res.data
+					];
+				});
+			},
+			readySwiper(swiper) {
+				this.swiper = swiper;
+			},
+			clickSwiper() {
+				if (this.swiper.clickedIndex === undefined || this.swiper.clickedIndex === this.swiperClickedIndex) {
+					return false;
+				}
+				this.swiperClickedIndex = this.swiper.clickedIndex;
+				this.activityFrom.page = 1;
+				this.activityFrom.promotions_id = this.activityTypeArr[this.swiperClickedIndex].id;
+				this.goodData = [];
+				this.goodList(this.activityFrom.type);
+			},
+			// 充值余额
+			rechargeBalance(auth_code) {
+				this.rechargeData.uid = this.userInfo.uid;
+				this.rechargeData.pay_type = this.payType ? 4 : 3;
+				this.rechargeData.auth_code = auth_code || '';
+				userSaveApi(this.rechargeData).then((res) => {
+					let status = res.data.status;
+					switch (status) {
+						case 'SUCCESS':
+							this.$Message.success('充值成功');
+							this.settleVisible = false;
+							this.userInfoData({
+								uid: this.userInfo.uid
+							});
+							break;
+						case 'PAY_ING':
+							let msg = this.$Message.loading({
+								content: '等待支付中...',
+								duration: 0,
+							});
+							this.checkOrderTime(msg);
+							break;
+						default:
+							this.$Message.warning('支付失败');
+							break;
+					}
+				}).catch((err) => {
+					this.$Message.error(err.msg);
+				});
+			}
+		},
+	};
+</script>
+
+<style lang="stylus" scoped>
+	@media screen and (min-width: 2260px) {
+		// .goodsCon {
+		//   .item {
+		//     width: 19% !important;
+		//   }
+		//   .list:after{
+		//     content:'';
+		//     width: 20%;
+		//   }
+		// }
+	}
+
+	@media screen and (max-width: 1580px) {
+		// .goodsCon {
+		//   .item {
+		//     width: 32% !important;
+		//   }
+		//  .list:after{
+		//     content:'';
+		//     width: 33%;
+		//   }
+		// }
+
+	}
+
+	@media screen and (max-width: 1270px) {
+		// .goodsCon {
+		//   .item {
+		//     width: 49% !important;
+		//   }
+		// }
+	}
+
+	::-webkit-scrollbar-thumb {
+		-webkit-box-shadow: inset 0 0 6px #ccc;
+	}
+
+	::-webkit-scrollbar {
+		width: 2px !important;
+		/* 对垂直流动条有效 */
+	}
+
+	/deep/.change-price-modal {
+		.ivu-modal-content {
+			border-radius: 10px;
+		}
+
+		.ivu-modal-body {
+			padding: 30px 25px 50px;
+		}
+
+		.ivu-form-item:last-child {
+			margin-bottom: 0;
+		}
+
+		.ivu-form-item-content {
+			font-size: 14px !important;
+			color: #303133;
+		}
+
+		.input-suffix {
+			color: #909399;
+		}
+
+		.ivu-modal-footer {
+			padding: 17px 25px;
+			border-top: none;
+		}
+
+		.ivu-btn {
+			height: 46px;
+			border-radius: 23px;
+			background: #1890FF;
+			font-weight: 500;
+			font-size: 16px !important;
+		}
+	}
+
+	.input-number {
+		flex: 1;
+		position: relative;
+		display: flex;
+		align-items: center;
+		padding: 0 15px 0 0;
+		border: 1px solid #DDDDDD;
+		border-radius: 4px;
+
+		.ivu-input-number {
+			flex: 1;
+			height: 36px;
+			border: none;
+
+			&-focused {
+				box-shadow: none;
+			}
+		}
+
+		/deep/.ivu-input-number-handler-wrap {
+			display: none;
+		}
+
+		/deep/.ivu-input-number-input-wrap {
+			height: 36px;
+		}
+
+		/deep/.ivu-input-number-input {
+			height: 36px;
+			padding: 0 15px;
+		}
+
+		&.discount {
+			flex: none;
+			width: 167px;
+			margin-left: 12px;
+		}
+	}
+
+	.changePrice {
+		font-weight: 600;
+		font-size: 14px;
+		color: #F5222D;
+
+		.price {
+			font-size: 17px;
+			margin-left: 5px;
+		}
+	}
+
+	.tableList {
+		/deep/ .ivu-table-header table {
+			border-top: 0 !important;
+		}
+
+		/deep/ .ivu-table th,
+		/deep/ .ivu-table td {
+			border-bottom: 0 !important;
+			height: 34px !important;
+		}
+
+		/deep/ .ivu-table-cell {
+			padding: 0 !important;
+		}
+
+		/deep/ .ivu-table th {
+			color: #999999;
+		}
+	}
+
+	.left {
+		/deep/ .ivu-form-item {
+			margin-bottom: 12px !important;
+		}
+	}
+
+	.header .ivu-btn {
+		width: 56px;
+		height: 28px;
+		border-radius: 4px;
+		border: 1px solid #FFFFFF;
+		background-color: unset !important;
+		color: #fff;
+
+		&:hover {
+			border-color: #ccc;
+			color: #ccc;
+		}
+	}
+
+	.headerCard {
+		background: #1890FF;
+		border-radius: 0 !important;
+	}
+
+	.remark {
+		/deep/ .ivu-input-wrapper {
+			width: 91% !important;
+		}
+
+		/deep/ .ivu-input-number {
+			width: 91% !important;
+		}
+
+		/deep/ .ivu-form-item-content {
+			margin-left: 63px !important;
+		}
+
+		/deep/ .ivu-form-item-label {
+			width: 63px !important;
+		}
+	}
+
+	.noCart {
+		height: 100%;
+		display: flex;
+
+		.tip {
+			text-align: center;
+			color: #ccc;
+			font-size: 14px;
+		}
+
+		.picture {
+			width: 200px;
+			height: 140px;
+			margin: 20px 160px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+
+	.goodsCard {
+		flex: 1;
+		max-width: 100%;
+		min-width: 1100px;
+		height: calc(100vh - 155px);
+		display: flex;
+		flex-wrap: nowrap;
+		padding: 20px;
+		background-color: #F5F5F5;
+	}
+
+	.modalPay {
+		/deep/ .ivu-modal-body {
+			padding: 0;
+		}
+	}
+
+	.cash {
+		/deep/ .ivu-modal-body {
+			padding: 0 !important;
+		}
+	}
+
+	.discountCon {
+		.item {
+			font-size: 15px;
+			margin-bottom: 10px;
+		}
+	}
+
+	.content {
+		height: calc(100vh - 66px);
+		display: flex;
+		flex-direction: column;
+	}
+
+	.cashPage {
+		text-align: center;
+
+		.right {
+			width: 488px;
+			background: #F5F5F5;
+			padding: 16px 16px 16px 0;
+			border-radius: 0 6px 6px 0;
+
+			/deep/ .ivu-btn-primary {
+				width: 100px;
+			}
+
+			.rightCon {
+				width: 388px;
+				height: 506px;
+				margin: 35px auto 20px auto;
+				background-color: #fff;
+				border-radius: 14px;
+
+				.top {
+					height: 80px;
+					color: rgba(0, 0, 0, 0.65);
+					font-size: 13px;
+					padding: 0 20px;
+
+					.num {
+						font-size: 42px;
+						color: rgba(0, 0, 0, 0.85);
+					}
+				}
+
+				.center {
+					width: 100%;
+					height: 46px;
+					background-color: #1890FF;
+					font-size: 13px;
+					color: #fff;
+					padding: 0 20px;
+
+					.num {
+						font-size: 27px;
+					}
+				}
+
+				.bottom {
+					padding: 10px 0 0 8px;
+
+					.item {
+						width: 108px;
+						height: 62px;
+						background: #FAFAFA;
+						border-radius: 9px;
+						border: 1px solid rgba(0, 0, 0, 0.15);
+						color: #1890FF;
+						font-size: 32px;
+						margin-left: 12px;
+						margin-top: 12px;
+						cursor: pointer;
+
+						&.on {
+							background: #1890FF;
+							color: #FFFFFF;
+							font-size: 20px;
+						}
+
+						&.spot {
+							padding-bottom: 15px;
+						}
+					}
+				}
+			}
+		}
+
+		.left {
+			width: 282px;
+			padding: 16px 0 16px 16px;
+
+			.picture {
+				width: 110px;
+				height: 110px;
+				margin: 180px auto 0 auto;
+
+				img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.text {
+				color: rgba(0, 0, 0, 0.45);
+				font-size: 14px;
+				margin-top: 14px;
+			}
+
+			.money {
+				color: rgba(0, 0, 0, 0.85);
+				font-size: 18px;
+
+				.num {
+					font-size: 32px;
+					margin-left: 5px;
+				}
+			}
+		}
+	}
+
+	.payPage {
+		text-align: center;
+		padding: 16px;
+
+		/deep/ .ivu-input {
+			width: 394px !important;
+			text-align: center;
+		}
+
+		.header {
+			margin: 35px 0 3px 0;
+		}
+
+		.process {
+			width: 394px;
+			height: 158px;
+			border: 1px dashed #D8D8D8;
+			border-top: 1px dashed #fff;
+			margin: -1px auto 43px;
+
+			&.on {
+				border-top: 1px dashed #D8D8D8;
+				margin-top: 20px;
+
+				.list {
+					padding-left: 14px !important;
+				}
+			}
+
+			.list {
+				padding: 6px 10px 0 3px;
+
+				.item {
+					font-size: 12px;
+					color: #666;
+
+					.name {
+						color: #333;
+						font-size: 13px;
+						font-weight: bold;
+					}
+				}
+			}
+
+			.picture {
+				width: 362px;
+				height: 68px;
+				margin: 24px auto 0 auto;
+
+				img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+
+		.picture {
+			width: 18px;
+			height: 18px;
+
+			img {
+				width: 100%;
+				height: 100%;
+			}
+
+			margin-right: 7px;
+		}
+
+		.text {
+			color: rgba(0, 0, 0, 0.45);
+			font-size: 14px;
+		}
+
+		.money {
+			font-size: 18px;
+			color: rgba(0, 0, 0, 0.85);
+
+			.num {
+				font-size: 32px;
+				margin-left: 5px;
+			}
+		}
+
+		.tip {
+			width: 310px;
+			height: 26px;
+			background: rgba(255, 126, 0, 0.1);
+			border-radius: 13px;
+			font-size: 13px;
+			color: #FF7E00;
+			margin: 10px auto 0 auto;
+
+			.icon {
+				font-size: 16px;
+				margin-right: 5px;
+			}
+		}
+
+		.bnt {
+			width: 394px;
+			height: 38px;
+			margin: 28px 0 15px 0;
+		}
+	}
+
+	.goods {
+		flex: 1;
+		min-width: 0;
+		// width: calc(100% - 500px);
+		height: 100%;
+
+		/deep/ .ivu-card-body {
+			height: 100%;
+			padding: 10px 0 0px 0 !important;
+		}
+
+		.smCode {
+			padding: 0 16px;
+
+			/deep/ .ivu-input-large {
+				height: 350px !important;
+				text-align: center;
+				font-size: 20px !important;
+			}
+		}
+
+		.goodsCon {
+			flex: 1;
+			min-width: 0;
+			padding: 0 20px;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+
+			/deep/ .ivu-input-group {
+				.ivu-input {
+					height: 50px;
+					text-align: center;
+					border: 0;
+				}
+			}
+
+			.input {
+
+				// padding: 20px 10px 10px 0;
+				/deep/ .ivu-input-group-prepend,
+				.ivu-input-group-append {
+					border: 0;
+					border-radius: 10px;
+					background-color: #FFFFFF;
+				}
+
+				/deep/.ivu-input-search {
+					border-radius: 0 10px 10px 0;
+				}
+			}
+
+			.goods-top {
+				flex: 1;
+				min-height: 0;
+				display: flex;
+				flex-direction: column;
+				overflow: hidden;
+			}
+
+			.page {
+				margin-top: 0;
+				padding: 10px 16px 10px 0;
+			}
+
+			.noGood {
+				height: 100%;
+				border-radius: 20px;
+				background: #FFFFFF;
+
+				.picture {
+					width: 180px;
+					height: 140px;
+				}
+
+				img {
+					width: 100%;
+					height: 100%;
+				}
+
+				.tip {
+					margin-top: 30px;
+					font-size: 15px;
+					text-align: center;
+					color: #ccc;
+				}
+			}
+
+			.list-wrap {
+				flex: 1;
+				min-height: 0;
+				padding-top: 20px;
+				overflow-x: hidden;
+			}
+
+			.list-wrap::-webkit-scrollbar {
+				display: none;
+			}
+
+			.ivu-scroll-wrapper {
+				flex: 1;
+				min-height: 0;
+			}
+
+			/deep/.ivu-scroll-container {
+				height: 100%;
+			}
+
+			.list {
+				.item {
+					position: relative;
+					padding: 10px;
+					border-radius: 10px;
+					margin-bottom: 15px;
+					background: #FFFFFF;
+
+					&.on:hover {
+						background-color: #1890FF;
+						color: #fff !important;
+						box-shadow: 0px 0px 14px 0px rgba(0, 84, 161, 0.18);
+
+						.name {
+							color: #fff !important;
+							margin-bottom: 10px;
+						}
+
+						.stock {
+							color: #fff !important;
+
+							span {
+								border-color: #fff !important;
+							}
+						}
+
+						.money {
+							color: #fff !important;
+						}
+					}
+
+					.icon-cart-num {
+						position: absolute;
+						top: -8px;
+						right: 0;
+						padding: 5px 7px 3px;
+						border-radius: 11px;
+						background: #FF7700;
+						font-size: 14px;
+						line-height: 14px;
+						color: #FFFFFF;
+					}
+
+					.no-stock {
+						top: 0;
+						left: 0;
+						position: absolute;
+						width: 100%;
+						height: 100%;
+						background: rgba(0, 0, 0, 0.2);
+						border-radius: 10px;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+
+						.trip {
+							background: #4E4E4E;
+							width: 70px;
+							height: 70px;
+							border-radius: 50%;
+							display: flex;
+							align-items: center;
+							flex-direction: column;
+							justify-content: center;
+							color: #FFFFFF;
+							font-size: 14px;
+						}
+					}
+
+					.picture {
+						width: 100%;
+						height: 130px;
+
+						img {
+							width: 100%;
+							height: 100%;
+							border-radius: 8px;
+						}
+					}
+
+					.name {
+						font-size: 16px;
+						line-height: 16px;
+						color: rgba(0, 0, 0, 0.85);
+						margin-top: 10px;
+						margin-bottom: 14px;
+					}
+
+					.text {
+						display: flex;
+						justify-content: space-between;
+						max-height: 80px;
+
+						.text-left {
+							display: flex;
+							flex-direction: column;
+							justify-content: space-between;
+						}
+
+						.iconfont {
+							position: absolute;
+							color: #1890FF;
+							font-size: 20px;
+							right: 5px;
+							bottom: 5px;
+						}
+
+						.stock {
+							font-size: 13px;
+							color: #606266;
+							margin: 2px 0;
+
+							span {
+								border-radius: 3px;
+								border: 1px solid #606266;
+								padding: 3px 6px;
+								margin-right: 8px;
+								font-size: 12px;
+							}
+						}
+
+						.money {
+							font-weight: 500;
+							color: #F5222D;
+							font-size: 18px;
+							line-height: 18px;
+
+							.rmb {
+								font-size: 14px;
+							}
+						}
+					}
+				}
+
+				.item-shadow {
+					width: 150px;
+				}
+			}
+		}
+
+		.goodClass {
+			width: 140px;
+			overflow-y: auto;
+			border-radius: 20px;
+			padding: 20px 15px;
+			background-color: #FFFFFF;
+
+			.item {
+				cursor: pointer;
+				width: 110px;
+				height: 40px;
+				text-align: center;
+				line-height: 40px;
+				margin-bottom: 18px;
+				font-size: 16px;
+				color: rgba(0, 0, 0, 0.85);
+				border-radius: 20px;
+				transition: all 0.1s;
+
+				&.on {
+					background-color: #1890FF;
+					color: #fff;
+				}
+			}
+
+			.item:hover {
+				background-color: #1890FF;
+				color: #fff;
+			}
+		}
+	}
+
+	.conter {
+		height: 100%;
+		width: 595px;
+
+		/deep/ .ivu-card-body {
+			height: 100%;
+			padding: 0 !important;
+		}
+
+		.cart {
+			position: relative;
+			display: flex;
+			flex-direction: column;
+			height: 100%;
+			// max-width: 500px;
+
+			.title {
+				padding: 0 18px;
+				border: 2px solid #FF7700;
+			}
+
+			.left-top {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				border-radius: 20px;
+				background-color: #FFFFFF;
+				overflow: hidden;
+
+				.cart {
+					// height: calc(100% - 82px);
+					flex: 1;
+					min-width: 0;
+				}
+
+				.btn-group-vertical {
+					display: flex;
+					flex-direction: column;
+					padding: 27px 18px;
+					border-left: 1px solid #EEEEEE;
+					overflow-x: hidden;
+
+					.ivu-btn {
+						flex-shrink: 0;
+						width: 100px;
+						height: 40px;
+						border-color: #1890FF;
+						border-radius: 20px;
+						margin-bottom: 30px;
+						font-size: 16px !important;
+						color: #1890FF;
+					}
+
+					.ivu-btn[disabled] {
+						color: #c5c8ce;
+						border-color: #dcdee2;
+					}
+
+					.ivu-btn:not([disabled]):active {
+						background-color: #F1F1F1;
+					}
+
+					.ivu-btn.selected {
+						background-color: #F1F1F1;
+					}
+				}
+			}
+
+			.cart-left {
+				display: flex;
+				flex-direction: column;
+				width: 100%;
+				height: 100%;
+
+				.count {
+					padding: 0px 24px 20px;
+					border-bottom: 1px solid #EEEEEE;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+
+					.num {
+						color: #FF7700;
+						padding: 0 5px;
+					}
+
+					.cart-sel {
+						font-size: 14px;
+					}
+
+					.count-r {
+						display: flex;
+						align-items: center;
+
+						.coupon {
+							border-radius: 4px;
+							border: 1px solid #FF7700;
+							color: #FF7700;
+							padding: 3px 10px;
+							cursor: pointer;
+							font-size: 14px;
+						}
+
+						.clear {
+							display: flex;
+							align-items: center;
+							cursor: pointer;
+							font-size: 12px;
+
+							img {
+								width: 16px;
+								height: 16px;
+								margin: 0 6px 0 14px;
+							}
+						}
+					}
+				}
+			}
+
+			.tourist::-webkit-scrollbar {
+				height: 4px !important;
+			}
+
+			.tourist {
+				width: 100%;
+				padding-left: 13px;
+				padding-top: 15px;
+				display: flex;
+				overflow-x: auto;
+				overflow-y: hidden;
+				white-space: nowrap;
+				/* 解决ios手机页面滑动卡顿问题 */
+				-webkit-overflow-scrolling: touch;
+
+				.item-w1 {
+					min-width: 100px;
+				}
+
+				.item-w2 {
+					min-width: 140px;
+				}
+
+				.item {
+					height: 38px;
+					background: #F7F7F7;
+					border-radius: 50px;
+					font-size: 12px;
+					color: rgba(0, 0, 0, 0.85);
+					position: relative;
+					padding-left: 7px;
+					margin-bottom: 9px;
+					margin-right: 12px;
+					cursor: pointer;
+
+					.picture {
+						width: 24px;
+						height: 24px;
+						border-radius: 50%;
+						margin-right: 6px;
+
+						img {
+							width: 100%;
+							height: 100%;
+							border-radius: 50%;
+						}
+					}
+
+					.name {
+						width: 50px;
+					}
+
+					.guadan {
+						font-size: 10px;
+						border: 1px solid #FF7700;
+						color: #FF7700;
+						padding: 0 3px;
+						border-radius: 2px;
+						margin-right: 12px;
+					}
+
+					&:hover {
+						background: #FF7700;
+						color: #fff;
+
+						.guadan {
+							border: 1px solid #fff;
+							color: #fff;
+						}
+					}
+
+					&.on {
+						background: #FF7700;
+						color: #fff;
+
+						.guadan {
+							border: 1px solid #fff;
+							color: #fff;
+						}
+					}
+				}
+			}
+
+			.right {
+				width: 90px;
+
+				.navTabs {
+					position: absolute;
+					top: 15px;
+					cursor: pointer;
+
+					img {
+						display: block;
+						width: 40px;
+						height: 85px;
+					}
+
+					.label01 {
+						z-index: 5;
+						position: relative;
+					}
+
+					.label02 {
+						margin-top: -16px;
+					}
+				}
+
+				.item {
+					width: 72px;
+					background: #F2F3F5;
+					margin: 0 auto 13px auto;
+					text-align: center;
+					padding: 9px 0;
+					cursor: pointer;
+					position: relative;
+
+					.iconfont {
+						position: absolute;
+						font-size: 20px;
+						top: -9px;
+						right: -7px;
+						color: #bbb;
+					}
+
+					&:hover {
+						background-color: #1890FF;
+						color: #fff;
+					}
+
+					&.on {
+						background-color: #1890FF;
+						color: #fff;
+					}
+				}
+			}
+
+			.title {
+				// border-bottom: 1px solid #D8D8D8;
+				// width: 376px;
+				flex-shrink: 0;
+				height: 90px;
+				background: rgba(255, 119, 0, 0.05);
+				border-radius: 10px;
+				margin: 27px 24px 24px;
+				display: flex;
+				align-items: center;
+				flex-wrap: nowrap;
+				overflow: hidden;
+
+				.picture {
+					width: 50px;
+					height: 50px;
+					border-radius: 50%;
+					margin-right: 15px;
+
+					img {
+						width: 100%;
+						height: 100%;
+						border-radius: 50%;
+					}
+				}
+
+				.switchs {
+					color: #FF7700;
+					cursor: pointer;
+
+					// position: absolute;
+					// right: 19px;
+					// top: 10px;
+
+					a {
+						font-size: 14px;
+						color: #FF7700;
+					}
+				}
+
+				.text {
+					font-size: 13px;
+					font-weight: 400;
+					color: rgba(51, 51, 51, 0.85);
+					flex: 1;
+					min-width: 0;
+
+					.textCon {
+						margin-bottom: 6px;
+						display: flex;
+						align-items: center;
+
+						.name {
+							font-size: 18px;
+						}
+
+						.phone {
+							color: #999;
+						}
+					}
+
+					.text-wrap {
+						flex: 1;
+						min-width: 0;
+					}
+
+					.name-wrap {
+						display: inline-flex;
+						align-items: center;
+						max-width: 100%;
+					}
+
+					.user-msg {}
+
+					.balance {
+						margin-right: 12px;
+
+						.num {
+							font-weight: 600;
+							color: #303133;
+							font-size 17px;
+							line-height: 17px;
+							margin-left: 4px;
+						}
+					}
+
+					.recharge {
+						color: #1890FF;
+						padding: 2px 4px;
+						cursor: pointer;
+						border-radius: 3px;
+					}
+
+					.recharge:hover {
+						background-color: #1890FF;
+						color: #fff;
+					}
+
+					.name {
+						flex: 1;
+						min-width: 0;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						color: rgba(0, 0, 0, 0.85);
+						font-size: 14px;
+						font-weight: 600;
+						margin-right: 6px;
+					}
+				}
+			}
+
+			.listCon {
+				overflow-x: hidden;
+				// height: calc(100% - 168px);
+				flex: 1;
+
+				.promotions {
+					border-bottom: 1px dashed #EEEEEE;
+
+					.promotions-msg {
+						display: flex;
+						justify-content: space-between;
+						padding: 10px 0;
+						color: #333333;
+						font-size: 14px;
+						border-bottom: 1px solid #f2f2f2;
+
+						.card {
+							color: #FF7700;
+							padding: 1px 6px;
+							margin-right: 8px;
+							border-radius: 3px;
+							background-color: #Fcf0e2;
+							font-size: 12px;
+							white-space: nowrap;
+						}
+
+						.flex-1 {
+							flex: 1;
+							display: flex;
+							align-items: center;
+						}
+
+						.collect {
+							cursor: pointer;
+							width: 70px;
+							display: flex;
+							align-items: center;
+							flex-basis: max-content;
+
+							.iconjinru {
+								font-size: 12px;
+							}
+						}
+					}
+
+					.is_give {
+						height: 60px;
+
+						.picture {
+							width: 40px;
+							height: 40px;
+
+							img {
+								width: 100%;
+								height: 100%;
+								border-radius: 5px;
+							}
+						}
+
+						.give-name {
+							font-size: 12px;
+							color: #333;
+							max-width: 200px;
+						}
+
+						.give-info {
+							font-size: 12px;
+							color: #ccc;
+						}
+					}
+				}
+			}
+
+			.list::-webkit-scrollbar {
+				width: 0 !important;
+			}
+
+			.list {
+				-ms-overflow-style: none;
+			}
+
+			.list {
+				overflow: -moz-scrollbars-none;
+			}
+
+			.list {
+				overflow: hidden;
+				overflow-y: scroll;
+
+				.item {
+					padding: 20px 25px;
+					position: relative;
+					display: flex;
+					flex-wrap: nowrap;
+					height: 100%;
+					border-radius: 10px;
+
+					&:hover {
+						background: rgba(24, 144, 255, 0.05);
+					}
+
+					/deep/ .ivu-input-number-input {
+						text-align: center;
+					}
+
+					/deep/ .ivu-input-number-controls-outside {
+						width: 112px !important;
+					}
+
+					.picture {
+						width: 74px;
+						height: 74px;
+
+						img {
+							width: 100%;
+							height: 100%;
+							border-radius: 5px;
+						}
+					}
+
+					.del {
+						position: absolute;
+						font-size: 15px;
+						color: #1890FF;
+						right: 25px;
+						top: 20px;
+						cursor: pointer;
+						padding: 2px 7px;
+					}
+
+					.cartBnt {
+						position: absolute;
+						right: 25px;
+						height: 24px;
+						bottom: 20px;
+
+						.iconfont {
+							width: 24px;
+							height: 24px;
+							background-color: #F2F3F5;
+							text-align: center;
+							line-height: 24px;
+							color: rgba(0, 0, 0, 0.85);
+							border-radius: 50%;
+						}
+
+						.iconjia {
+							color: #fff;
+							background-color: #1890FF;
+							font-size: 12px;
+						}
+
+						.ivu-input-number {
+							outline: unset;
+							width: 60px;
+							margin: 0 2px;
+							text-align: center;
+							font-size: 16px;
+							font-family: PingFangSC-Semibold, PingFang SC;
+							font-weight: 600;
+							color: rgba(0, 0, 0, 0.85);
+							border: none;
+							background-color: rgba(255, 255, 255, 0);
+
+							/deep/ .ivu-input-number-handler-wrap {
+								display: none;
+							}
+						}
+					}
+
+					.text {
+						flex: 1;
+						color: #000;
+						font-size: 18px;
+						margin-left: 10px;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						height: 100%;
+						overflow: hidden;
+
+						.end {
+							color: #999;
+							font-size: 13px;
+						}
+
+						.name {
+							font-size: 15px;
+							margin-top: 5px;
+							width: 82%;
+						}
+
+						.info {
+							color: #999;
+							font-size: 12px;
+							cursor: pointer;
+							padding: 4px 0 7px 0;
+							display: flex;
+							align-items: center;
+
+							.iconfont {
+								font-size: 12px;
+								margin-left: 5px;
+							}
+
+							.suk {
+								max-width: 50%;
+							}
+						}
+
+						.sum_price {
+							font-size: 16px;
+							font-weight: 500;
+							color: rgba(0, 0, 0, 0.85);
+						}
+
+						&.invalid {
+							.info {
+								cursor: unset;
+								display: flex;
+								align-items: center;
+							}
+
+							.suk {
+								max-width: 50%;
+							}
+
+							.name {
+								color: #999;
+							}
+						}
+					}
+				}
+			}
+
+			.left {
+				width: 100%;
+				height: 70px;
+				display: flex;
+				align-items: center;
+				background-color: #fff;
+				padding: 0 30px 0 24px;
+			}
+
+			.conInfo {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				width: 100%;
+				color: #000;
+
+				.storeBnt-wrap {
+					flex: 1;
+				}
+
+				.storeBnt {
+					padding: 0 10px;
+					height: 40px;
+					border-radius: 6px;
+					//border: 1px solid #CCCCCC;
+					color: #333333;
+					font-size: 14px;
+					display: inline-flex;
+					align-items: center;
+					justify-content: center;
+					cursor: pointer;
+
+					.text {
+						max-width: 100px;
+					}
+				}
+
+				.right {
+					flex: 1;
+					display: flex;
+					width: max-content;
+					align-items: baseline;
+					font-size: 14px;
+					flex-wrap: nowrap;
+					white-space: nowrap;
+
+					div {
+						white-space: nowrap;
+					}
+
+					.rmb {
+						font-weight: 600;
+						font-size: 16px;
+						color: rgba(245, 34, 45, 1);
+					}
+
+					.discount {
+						font-size: 14px;
+						padding: 0 9px
+					}
+
+					.detailed {
+						color: #1890FF;
+						padding: 0 9px 0 3px;
+						cursor: pointer;
+					}
+
+					.num {
+						color: rgba(245, 34, 45, 1);
+						font-size: 24px;
+						line-height: 22px;
+						font-weight: 600;
+						white-space: nowrap;
+					}
+				}
+
+				.num {
+					font-size: 24px;
+				}
+			}
+
+			.footer {
+				box-shadow: 0 -1px 11px 0 rgba(0, 0, 0, 0.06);
+
+				.footer-bottom {
+					display: flex;
+					align-items: center;
+					height: 88px;
+					padding: 0 24px;
+					border-top: 1px solid #EEEEEE;
+
+					.ivu-btn {
+						flex: 1;
+						height: 50px;
+						border-color: #1890FF;
+						border-radius: 25px;
+						background-color: #1890FF;
+						font-weight: 500;
+						font-size: 18px !important;
+						color: #FFFFFF;
+					}
+				}
+			}
+		}
+
+		.title {
+			color: rgba(0, 0, 0, 0.85);
+
+			.text {
+				font-size: 16px;
+				font-weight: 500;
+			}
+
+			.picture {
+				width: 32px;
+				height: 32px;
+				border-radius: 50%;
+				cursor: pointer;
+
+				img {
+					width: 100%;
+					height: 100%;
+					border-radius: 50%;
+				}
+			}
+
+			.info {
+				font-size: 14px;
+				margin-left: 8px;
+				cursor: pointer;
+
+				.iconfont {
+					font-size: 12px;
+					margin-left: 5px;
+				}
+
+				&:hover {
+					color: #2d8cf0;
+				}
+			}
+		}
+	}
+
+	.header {
+		color: #fff;
+
+		.title {
+			font-size: 18px;
+			font-weight: 500;
+		}
+
+		.right {
+			.picture {
+				width: 32px;
+				height: 32px;
+				border-radius: 50%;
+
+				img {
+					width: 100%;
+					height: 100%;
+					border-radius: 50%;
+				}
+			}
+
+			.storeBnt {
+				width: 80px;
+				height: 32px;
+				background: #FFFFFF;
+				border-radius: 1px;
+				color: #1890FF;
+				font-size: 14px;
+				text-align: center;
+				line-height: 32px;
+				margin-left: 10px;
+				cursor: pointer;
+
+				&:hover {
+					background-color: rgba(255, 255, 255, 0.9);
+				}
+			}
+
+			.info {
+				font-size: 14px;
+				font-weight: 400;
+				color: #fff;
+
+				span {
+					padding: 0 8px;
+
+					&~span {
+						border-left: 1px solid #DDDDDD;
+					}
+				}
+			}
+
+			.bnt {
+				margin-left: 20px;
+			}
+		}
+	}
+
+	footer {
+		display: flex;
+		background-color: #fff;
+
+		.footer {
+			width: 500px;
+			padding: 13px 17px 13px 17px;
+
+			.pay {
+				.bnt {
+					border-radius: 6px;
+					width: 30%;
+					height: 0.32rem;
+					border: 1px solid #1890FF;
+					color: #1890FF;
+					font-size: 0.11rem;
+					text-align: center;
+					font-weight: 500;
+					cursor: pointer;
+
+					&.on {
+						background: #1890FF;
+						color: #fff;
+					}
+
+					&.bntUid {
+						background: #1890FF;
+						color: #fff;
+						cursor: unset;
+
+						&.on {
+							background: #ccc;
+							border: 1px solid #ccc;
+							color: #fff;
+						}
+					}
+				}
+
+				&.noCart {
+					.bnt {
+						border: 1px solid #ccc !important;
+						color: #ccc;
+						cursor: unset;
+
+						&.on {
+							border: 1px solid #1890FF;
+							background: #ccc;
+							color: #fff;
+						}
+					}
+				}
+			}
+		}
+
+		.right {
+			padding: 10px 17px 15px 17px;
+			border-radius: 0 6px 6px 0;
+			display: flex;
+			flex: 1;
+			box-shadow: 5px 0px 14px 0px rgba(0, 0, 0, 0.06);
+			background-color: #fff;
+
+			/deep/ .ivu-btn-primary {
+				width: 100px;
+			}
+
+			.rightCon {
+				display: flex;
+				align-items: center;
+
+				.top {
+					height: 80px;
+					color: rgba(0, 0, 0, 0.65);
+					font-size: 13px;
+					padding: 0 20px;
+
+					.num {
+						font-size: 42px;
+						color: rgba(0, 0, 0, 0.85);
+					}
+				}
+
+				.center {
+					width: 100%;
+					height: 46px;
+					background-color: #1890FF;
+					font-size: 13px;
+					color: #fff;
+					padding: 0 20px;
+
+					.num {
+						font-size: 27px;
+					}
+				}
+
+				.item {
+					width: 80px;
+					height: 46px;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					background: #F2F3F5;
+					color: #fff;
+					cursor: unset;
+					border-radius: 4px;
+					margin-right: 14px;
+					cursor: pointer;
+					color: #000000;
+					font-size: 17px;
+
+					&.on {
+						background: #E7F3FF;
+						color: #1890FF;
+						font-size: 17px;
+						font-weight: 400;
+					}
+
+					&.spot {
+						padding-bottom: 15px;
+					}
+				}
+
+				.bottom {
+					padding: 10px 0 0 8px;
+				}
+			}
+
+			.noCart {
+				display: flex;
+				align-items: center;
+
+				.item {
+					background: #ccc;
+					color: #fff;
+					cursor: unset;
+					width: 80px;
+					height: 46px;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					margin-right: 14px;
+					border-radius: 4px;
+					font-size: 16px;
+
+					&:nth-child(3) {
+						&:hover {
+							background-color: #ccc;
+						}
+					}
+
+					&:nth-child(4) {
+						&:hover {
+							background-color: #ccc;
+						}
+					}
+
+					&:nth-child(5) {
+						&:hover {
+							background-color: #ccc;
+						}
+					}
+
+					&.on {
+						background-color: #ccc;
+					}
+				}
+			}
+		}
+	}
+
+	/deep/ .ivu-page {
+		font-size: 15px;
+	}
+
+	.payModal {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding: 67px 52px;
+
+		.type {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			border: 1px solid #1890FF;
+			padding: 33px 37px;
+			border-radius: 6px;
+			margin: 0 15px;
+			cursor: pointer;
+
+			.img {
+				width: 66px;
+				height: 55px;
+				margin-bottom: 33px;
+
+				img {
+					width: 100%;
+				}
+			}
+
+			.text {
+				white-space: nowrap;
+			}
+		}
+
+		.type:hover {
+			background-color: #f2f2f2;
+		}
+	}
+
+	.goast {
+		background: rgba(24, 144, 255, 0.1) !important;
+		color: #1890FF !important;
+	}
+
+	.v-center {
+		margin-top: 100px;
+	}
+
+	.search_user_info {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+
+		.picture {
+			width: 110px;
+			height: 110px;
+			margin: 20px 0 20px;
+
+			img {
+				width: 100%;
+				height: 100%;
+				border-radius: 50%;
+			}
+		}
+
+		.user_name {
+			font-size: 18px;
+			font-weight: 600;
+			color: rgba(0, 0, 0, 0.85);
+			margin-bottom: 14px;
+		}
+
+		.user_id {
+			font-size: 12px;
+			font-weight: 400;
+			color: #999999;
+		}
+
+		.user_phone {
+			font-size: 14px;
+			font-weight: 400;
+			color: rgba(0, 0, 0, 0.85);
+			margin: 14px 0 40px;
+		}
+
+		.sure_btn {
+			width: 176px;
+			height: 46px;
+			line-height: 46px;
+			text-align: center;
+			color: #fff;
+			font-size: 16px;
+			background: #1890FF;
+			border-radius: 6px;
+			margin-bottom: 30px;
+		}
+	}
+
+	/deep/.remarks-modal {
+		.ivu-modal-content {
+			border-radius: 10px;
+		}
+
+		.ivu-modal-body {
+			padding: 20px 25px;
+		}
+
+		.ivu-input {
+			padding: 14px;
+			border: 1px solid #DDDDDD;
+			border-radius: 6px;
+
+			&:focus {
+				border-color: #1890FF;
+				box-shadow: none;
+			}
+		}
+
+		.ivu-input-word-count {
+			right: 14px;
+			bottom: 14px;
+		}
+
+		.ivu-modal-footer {
+			padding: 17px 25px;
+			border-top: none;
+		}
+
+		.ivu-btn {
+			height: 46px;
+			border-radius: 23px;
+			background: #1890FF;
+			font-weight: 500;
+			font-size: 16px !important;
+		}
+	}
+
+	/deep/.user-modal {
+		.ivu-modal-content {
+			border-radius: 10px;
+		}
+	}
+
+	.swiper-container {
+		width: 100%;
+		margin-top: 20px;
+	}
+
+	.swiper-slide {
+		width: auto;
+		height: 36px;
+		padding: 0 16px;
+		border: 1px solid #CCCCCC;
+		border-radius: 18px;
+		background: #F7FBFF;
+		font-size: 14px;
+		line-height: 36px;
+		color: #666666;
+		cursor: pointer;
+
+		&.active {
+			border: 1px solid #1890FF;
+			color: #1890FF;
+		}
+	}
+
+	.ivu-alert {
+		padding: 20px 18px;
+		border: 1px solid #1890FF;
+		border-radius: 10px;
+		margin-top: 20px;
+		background: #F7FBFF;
+		font-size: 14px;
+		line-height: 22px;
+		color: #1890FF;
+	}
+</style>

+ 9 - 0
src/router/modules/cashier.js

@@ -26,6 +26,15 @@ export default {
     meta,
     component: BasicLayout,
     children: [
+		{
+		    path: 'cashier/reservation',
+		    name: `${pre}reservation`,
+		    meta: {
+		        auth: ['cashier-cashier-reservation'],
+		        title: '预约'
+		    },
+		    component: () => import('@/pages/cashier/reservation')
+		},
         {
             path: 'cashier/index',
             name: `${pre}index`,