<template>
    <view class="scanInventory">
        <view class="scanInven-form-item">
            <view class="box row verCenter operate">
                <text @click="exportChange()">导出</text>
                <text @click="getBoxSnAndNumAll()">箱列表</text>
            </view>
            <view class="box row verCenter">
                <view class="label">箱号</view>
                <input v-model="box_sn" @input="inputChange" placeholder-style="font-size:24rpx;" class="uni-input" placeholder="请输入箱号" />
            </view>
            <view class="box row verCenter">
                <view class="label">扫描</view>
                <input v-model="code_str" @input="scanChange" placeholder-style="font-size:24rpx;" class="uni-input" placeholder="扫描焦点" style="width: 261rpx;" />
                <view class="scan-view row rowCenter verCenter" @click="scodeChange()"><text class="iconfont icon-juxing6"></text></view>
                <view class="uni-list-cell-db">
                    <text class="iconfont icon-sanjiaoxing1"></text>
                    <picker @change="bindPickerChange" :value="index" :range="array">
                        <view class="uni-input" style="text-align: center;">{{ array[index] || '请选择扫描类型' }}</view>
                    </picker>
                </view>
            </view>
        </view>
        <view class="addRow row rowCenter verCenter" @click="addRowChange()">新增行</view>
        <view class="uni-table-box">
            <uni-table type="selection" ref="table" border stripe emptyText="暂无更多数据" @selection-change="selectionChange">
                <uni-tr>
                    <uni-th align="center">序号</uni-th>
                    <uni-th align="center">型号</uni-th>
                    <uni-th align="center">数量</uni-th>
                    <uni-th align="center">扫描时间</uni-th>
                </uni-tr>
                <uni-tr v-for="(item, index) in list" :key="index">
                    <uni-td align="center">{{ index + 1 }}</uni-td>
                    <uni-td align="center"><input class="uni-input" v-model="list[index].goods_sn" /></uni-td>
                    <uni-td align="center"><input class="uni-input" v-model="list[index].goods_num" /></uni-td>
                    <uni-td align="center">{{ item.scan_time_cn }}</uni-td>
                </uni-tr>
            </uni-table>
        </view>
        <view class="save row rowCenter verCenter" @click="submit()">关箱保存</view>
        <view class="fix-box row bothSide verCenter">
            <view>
                <text class="t1">已选择:</text>
                <text class="t2">{{ selectedIndexs.length }}</text>
            </view>
            <view class="btn row rowCenter verCenter" @click="deleteChange">删除</view>
        </view>
        <uni-popup ref="popup" type="center" background-color="#fff">
            <view class="uni-table-box pop-list" style="width: 550rpx;">
                <uni-table border stripe emptyText="暂无更多数据">
                    <uni-tr>
                        <uni-th align="center">箱号</uni-th>
                        <uni-th align="center">货品数</uni-th>
                        <uni-th align="center">保存时间</uni-th>
                    </uni-tr>
                    <uni-tr v-for="(item, index) in listPop" :key="index">
                        <uni-td align="center">{{ item.box_sn }}</uni-td>
                        <uni-td align="center">{{ item.box_sn_goods_num }}</uni-td>
                        <uni-td align="center">{{ item.scan_time_cn }}</uni-td>
                    </uni-tr>
                </uni-table>
            </view>
        </uni-popup>
    </view>
</template>

<script>
import { API } from '@/util/api.js';
import { debounce } from '@/util/util.js';

export default {
    data() {
        return {
            timer: null, // 延时器的名字
            box_sn: '',
            code_str: '',
            code_type: 'digikey',
            list: [],
            listPop: [],
            selectedIndexs: [],
            index: 0,
            array: ['扫描digikey', '扫描Rochester', '扫描TME', '扫描Chip1stop'],
            arrar_val: ['digikey', 'Rochester', 'TME', 'Chip1stop']
        };
    },
    methods: {
        scodeChange() {
            this.code_str = '';
            uni.scanCode({
                success: res => {
                    console.log(res);
                    if (res.errMsg == 'scanCode:ok') {
                        this.code_str = res.result;
                        if (res.result) {
                            this.identifyQrCodeNumAndSn();
                        }
                    }
                },
                fail: function(res) {
                    console.log(res);
                    uni.showToast({
                        title: '扫码失败',
                        icon: 'error'
                    });
                }
            });
        },
        getBoxSnAndNumAll() {
            this.request(API.getBoxSnAndNum, 'POST', { box_sn: '' }, true).then(res => {
                if (res.err_code === 0) {
                    this.listPop = res.data;
                    this.$refs.popup.open('center');
                } else {
                    uni.showModal({
                        title: '提示',
                        content: res.err_msg,
                        showCancel: false
                    });
                }
            });
        },
        getBoxSnAndNum() {
            this.request(API.getBoxSnAndNum, 'POST', { box_sn: this.box_sn }, true).then(res => {
                if (res.err_code === 0) {
                    this.list = res.data;
                } else {
                    uni.showModal({
                        title: '提示',
                        content: res.err_msg,
                        showCancel: false
                    });
                }
            });
        },
        identifyQrCodeNumAndSn() {
            this.request(API.identifyQrCodeNumAndSn, 'POST', { code_str: this.code_str, code_type: this.code_type }, true).then(res => {
                if (res.err_code === 0) {
                    this.list.unshift({
                        goods_num: res.data.num || '',
                        goods_sn: res.data.sn || '',
                        scan_time_cn: '',
                        wsbxnmsn_id: ''
                    });
                } else {
                    uni.showModal({
                        title: '提示',
                        content: res.err_msg,
                        showCancel: false
                    });
                }
            });
        },
        bindPickerChange: function(e) {
            console.log('picker发送选择改变,携带值为', e.target.value);
            this.index = e.target.value;
            this.code_type = this.arrar_val[e.target.value];
            if (this.code_str) {
                this.identifyQrCodeNumAndSn();
            }
        },
        selectionChange(e) {
            this.selectedIndexs = e.detail.index;
            this.selectedIndexs.sort();
        },
        scanChange(event) {
            clearTimeout(this.timer);
            this.timer = setTimeout(() => {
                var val = event.target.value;
                if (val) {
                    this.identifyQrCodeNumAndSn();
                }
            }, 800);
        },
        inputChange(event) {
            clearTimeout(this.timer);
            this.timer = setTimeout(() => {
                var val = event.target.value;
                if (val) {
                    this.getBoxSnAndNum();
                }
            }, 800);
        },
        deleteChange() {
            if (this.selectedIndexs.length <= 0) {
                uni.showModal({
                    title: '提示',
                    content: '请选择要删除的数据',
                    showCancel: false
                });
                return false;
            }
            for (let i = 0; i < this.selectedIndexs.length; i++) {
                console.log(this.selectedIndexs[i]);
                this.list.splice(this.selectedIndexs[i], 1);
            }

            this.$forceUpdate();
            this.$refs.table.clearSelection();
        },
        exportChange() {
            if (!this.box_sn) {
                uni.showModal({
                    title: '提示',
                    content: '请输入箱号',
                    showCancel: false
                });
                return false;
            }
            this.request(API.getBoxSnAndNum, 'POST', { box_sn: this.box_sn, export: 1 }, true).then(res => {
                if (res.err_code === 0) {
                    uni.downloadFile({
                        url: res.data,
                        success: function(res) {
                            const filePath = res.tempFilePath;
                            uni.openDocument({
                                filePath: filePath,
                                showMenu: true,
                                success: function(res) {
                                    console.log('打开文档成功');
                                },
                                fail: function() {
                                    uni.showModal({
                                        title: '提示',
                                        content: '暂不支持该文件类型预览',
                                        showCancel: false
                                    });
                                    console.log('打开文档失败');
                                }
                            });
                        }
                    });
                } else {
                    uni.showModal({
                        title: '提示',
                        content: res.err_msg,
                        showCancel: false
                    });
                }
            });
        },
        addRowChange() {
            this.list.unshift({
                goods_num: '',
                goods_sn: '',
                scan_time_cn: '',
                wsbxnmsn_id: ''
            });
        },
        submit() {
            var self = this;
            let params = {};
            let arr = [];
            if (this.list.length <= 0) {
                uni.showModal({
                    title: '提示',
                    content: '请扫描或者添加行数据',
                    showCancel: false
                });
                return false;
            }
            if (!this.box_sn) {
                uni.showModal({
                    title: '提示',
                    content: '请输入箱号',
                    showCancel: false
                });
                return false;
            }
            for (let i = 0; i < this.list.length; i++) {
                arr.push({
                    goods_sn: this.list[i].goods_sn,
                    goods_num: this.list[i].goods_num,
                    wsbxnmsn_id: this.list[i].wsbxnmsn_id
                });
            }
            params.list = JSON.stringify(arr);
            params.box_sn = this.box_sn;
            this.request(API.submitBoxSnAndNum, 'POST', params, true).then(res => {
                if (res.err_code === 0) {
                    uni.showModal({
                        title: '提示',
                        content: '保存成功',
                        showCancel: false,
                        success: function(res) {
                            if (res.confirm) {
                                self.list = [];
                                self.box_sn = '';
                                self.code_str = '';
                            }
                        }
                    });
                } else {
                    uni.showModal({
                        title: '提示',
                        content: res.err_msg,
                        showCancel: false
                    });
                }
            });
        }
    }
};
</script>

<style lang="scss">
@import '../../assets/css/scanInventory/index.scss';
</style>