<template>
  <el-container>
    <el-main class="nopadding">
      <!-- <input class="input" id="inputsmq" ref="inputRef" type="password" /> -->
      <input class="input" id="inputsmq" ref="scannerInput" type="text" @input="handleScannerInput" @focus="onFocus" @blur="blurfun" />
      <div class="pos">
          <el-row>
            <el-col :span='9' class="pos_order" id="order_list">
              <el-tabs style="padding-left:10px;">
                  <el-tab-pane label="购物单">
                    <!-- <p v-if="scannedCode">{{ scannedCode }}</p> -->
                    <el-table :data="tableData" border style="width:100%;">
                      <el-table-column prop="title"  label="商品名称"> </el-table-column>
                      <el-table-column prop="count" label="数量">
                        <template slot-scope='scope' #default="scope">
                          <el-input-number :min="1" @change="(e)=>changenums(e, scope.$index)" size="small" v-model="scope.row.count"></el-input-number>
                        </template>
                      </el-table-column>
                      <el-table-column prop="price" width="80" label="金额"> </el-table-column>
                      <el-table-column label="操作" width="80" fixed='right'>
                        <template slot-scope='scope' #default="scope">
                            <!-- <el-button  size="small" @click="addOrderList(scope.row)">增加</el-button> -->
                            <!-- <el-button  size="small" @click="addOrderList(scope.row)">减少</el-button> -->
                            <el-button type="danger"  size="small" @click="delGoods(scope.row)">删除</el-button>
                        </template>
                      </el-table-column>
                    </el-table>
                    <div class="total">
                      <small>数量:</small>{{ totalCount }}<small>金额:</small>￥{{ totalMoney }}
                    </div>
                    <div class="pos_btn">
                      <el-button size="large" type="primary" @click="focusfun" >监听扫码枪识别</el-button>
                      <el-button size="large" type="danger" @click="delAllGoods()">清空购物单</el-button>
                      <el-button size="large" type="success" @click="checkOut()">结算</el-button>
                    </div>
                  </el-tab-pane> 
              </el-tabs>
            </el-col>
            <el-col :span="15">
                <el-header>
                  <div class="left-panel">
                    <el-input v-model="search.keyword" placeholder="关键词" style="width:150px; margin-right: 10px;" clearable />
                    <sc-select-tree v-model="search.category_id" :apiObj="$API.goods.category.list" :props="{label: 'title', value: 'id'}" style="width: 240px; margin-right: 10px;" />
                    <el-select v-model="search.status" placeholder="状态" clearable style="width: 100px;">
                      <el-option v-for="item in [{value: 0, title: '下架'}, {value: 1, title: '上架'}]" :key="item.value" :label="item.title" :value="item.value" />
                    </el-select>
                    <el-button-group style="margin-left: 10px;">
                      <el-button type="primary" icon="el-icon-search" @click="upsearch">搜索</el-button>
                    </el-button-group>
                  </div>
                </el-header>
                
                <scTable tableName="member" ref="table" :apiObj="list.apiObj" :column="list.column" row-key="id" @selection-change="selectionChange" border stripe>
                  <el-table-column type="selection" width="50"></el-table-column>
                  <template #cover="scope">
                    <img :src="scope.row.cover" width="40" height="40" v-if="scope.row.cover" />
                  </template>
                  <template #status="scope">
                    <el-tag :type="scope.row.status == 1 ? 'success' : 'danger'">{{scope.row.status == 1 ? '上架' : '下架'}}</el-tag>
                  </template>
                  <el-table-column label="操作" fixed="right" align="center" width="140">
                    <template #default="scope">
                      <el-button-group>
                        <el-button type="primary" @click="addOrderList(scope.row, scope.$index)">添加</el-button>
                        
                      </el-button-group>
                    </template>
                  </el-table-column>
                </scTable>

              </el-col>
          </el-row>
        </div>

    </el-main>
  </el-container>
</template>
<script >

import { ElLoading, ElMessage } from "element-plus";

export default {
  name: "ucenter.cashierhome",
  components: {},
  data() {
    return {
        dialog: {search: false, import: false, print: false},
        list: {
          apiObj: this.$API.goods.lists.list,
          column: [
            {prop: 'id', label: 'ID', width: 80},
            {prop: 'goods_sn', label: '商品编号'},
            {prop: 'title', label: '商品名称'},
            {prop: 'cover', label: '封面图', width: 120},
            {prop: 'price', label: '售价', width: 120},
            {prop: 'original_price', label: '原价', width: 120},
            // {prop: 'status', label: '状态', width: 80},
          ],
        },
        selection: [],
        search: {},

        tableData: [],
        totalMoney: 0,
        totalCount: 0,


        loading:null,
        scannedCode: '', // 存储扫码后的结果  结果
        isTyping: false, // 用户是否正在手动输入
        typingTimeout: null, // 用于判断输入间隔的定时器
      
    };
  },
  mounted(){
    var orderHeight = document.body.clientHeight;
    document.getElementById("order_list").style.height = orderHeight + "px";
  },
  created: function() {
    
  },
  methods: {
    focusfun(){
      // 自动聚焦到输入框，方便直接扫描
        this.loading = ElLoading.service({
          lock: true,
          text: "请开始扫码识别",
          background: "rgba(255, 255, 255, 0.7)",
        });
        this.$nextTick(() => {
          this.$refs.scannerInput.focus();
        });
        // this.loading.close();
    },
    handleScannerInput(event) {
      const input = event.target;
      clearTimeout(this.typingTimeout);

      // 如果用户手动输入，则设置一个短暂的延迟
      if (this.isTyping) {
        this.typingTimeout = setTimeout(() => {
          this.isTyping = false;


          // 扫描完成后的处理逻辑
          this.scannedCode = input.value;
          console.log('Scanned code:', this.scannedCode);

          console.log('input.value:', input.value );
          // 清空输入框以便下一次扫描
          input.value = '';
          // 处理扫码后的业务逻辑...

          this.blurfun();

        }, 500); // 假设用户不会连续输入超过500ms
      } else {
        clearTimeout(this.typingTimeout);
        // 扫描完成后的处理逻辑
        this.scannedCode = input.value;
        console.log('Scanned code:', this.scannedCode);

        console.log('input.value:', input.value );
        // 清空输入框以便下一次扫描
        input.value = '';
        this.blurfun();
        // 处理扫码后的业务逻辑...
      }
    },
    onFocus() {
      // 当输入框获得焦点时，认为用户可能开始手动输入
      this.isTyping = true;
    },
    //失去焦点
    blurfun(){
      this.isTyping = false;
      this.loading.close();
    },
    changenums(e,index){
      this.$nextTick(()=>{
        this.getAllMoney();
      })
    },
    // 添加和计算商品价格
    addOrderList(goods,index) {
      // 商品是否已经存在于订单列表中
      let isHave = false;
      for (let i = 0; i < this.tableData.length; i++) {
        if (this.tableData[i].id == goods.id) {
          isHave = true;
        }
      }
      if (isHave) {
        // 改变列表中商品数量
        let arr = this.tableData.filter(o => o.id == goods.id);
        arr[0].count++;
      } else {
        let newGoods = {
          id: goods.id,
          title: goods.title,
          price: goods.price,
          count: 1
        };
        this.tableData.push(newGoods);
      }
      this.getAllMoney();
    },
    // 删除单个商品
    delGoods(goods) {
      console.log(goods.id, "删除了" + goods.id);
      this.tableData = this.tableData.filter(o => o.id != goods.id);
      this.getAllMoney();
    },
    // 全部删除商品
    delAllGoods() {
      this.tableData = [];
      this.totalMoney = 0;
      this.totalCount = 0;
    },
    // 数量和价格的汇总计算
    getAllMoney() {
      this.totalMoney = 0;
      this.totalCount = 0;
      if (this.tableData) {
        let totalMoney = 0;
        console.info('tableData',this.tableData);
        this.tableData.forEach(element => {
          this.totalCount += element.count;
          console.info('element.price',element.price,element.count);
          totalMoney +=  element.price * element.count;
        });
        console.info(totalMoney,'totalMoney');
        this.totalMoney = parseFloat(totalMoney).toFixed(2);
      }
    },
    // 模拟结账
    checkOut() {
      if (this.totalCount != 0) {
        this.tableData = [];
        this.totalMoney = 0;
        this.totalCount = 0;
        this.$message({
          message: "结账成功,辛苦啦~",
          type: "success"
        });
      } else {
        this.$message.error("店员，没有东西，怎么结账呀~");
      }
    },
    upsearch(){
			this.$refs.table.reload(this.search);
		},
		moreUpsearch(search){
			this.search = search;
			this.upsearch();
		},
		moreSearch(){
			this.dialog.search = true
			this.$nextTick(() => {
				this.$refs.searchBox.open().setData(this.search)
			})
		},
		//表格选择后回调事件
		selectionChange(selection){
			this.selection = selection;
		},
  },
};
</script>
<style scoped>
@import url('./cashierhome.scss');
</style>