<template>
  <div>
    <transition appear enter-active-class="animated fadeIn">
      <q-table
        class="my-sticky-header-column-table shadow-24"
        :data="table_list"
        row-key="id"
        :separator="separator"
        :loading="loading"
        :columns="columns"
        hide-bottom
        :pagination.sync="pagination"
        no-data-label="No data"
        no-results-label="No data you want"
        :table-style="{ height: height }"
        flat
        bordered
      >
        <template v-slot:top>
          <q-btn-group push>
            <q-btn
              :label="$t('new')"
              icon="add"
              @click="
                newForm = true;
                newFormData.creater = login_name;
              "
            >
              <q-tooltip
                content-class="bg-amber text-black shadow-4"
                :offset="[10, 10]"
                content-style="font-size: 12px"
                >{{ $t("newtip") }}</q-tooltip
              >
            </q-btn>
            <q-btn :label="$t('refresh')" icon="refresh" @click="reFresh()">
              <q-tooltip
                content-class="bg-amber text-black shadow-4"
                :offset="[10, 10]"
                content-style="font-size: 12px"
                >{{ $t("refreshtip") }}</q-tooltip
              >
            </q-btn>
          </q-btn-group>
          <q-space />
          <div class="flex items-center">
            <q-input
              outlined
              rounded
              dense
              debounce="200"
              color="primary"
              v-model="filter"
              :placeholder="'输入名称搜索'"
              @input="getSearchList()"
              @keyup.enter="getSearchList()"
            >
              <template v-slot:append>
                <q-icon name="search" />
              </template>
            </q-input>
          </div>
        </template>
        <template v-slot:body="props">
          <q-tr :props="props">
            <template v-if="props.row.id === editid">
              <q-td key="detail" :props="props">
                <q-btn
                  round
                  flat
                  push
                  color="black"
                  icon="description"
                  @click="detailData(props.row)"
                >
                  <q-tooltip
                    content-class="bg-amber text-black shadow-4"
                    :offset="[10, 10]"
                    content-style="font-size: 12px"
                    >{{ "查看批次详情" }}</q-tooltip
                  >
                </q-btn>
              </q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="detail" :props="props">
                <q-btn
                  round
                  flat
                  push
                  color="black"
                  icon="description"
                  @click="detailData(props.row)"
                >
                  <q-tooltip
                    content-class="bg-amber text-black shadow-4"
                    :offset="[10, 10]"
                    content-style="font-size: 12px"
                    >{{ "查看批次详情" }}</q-tooltip
                  >
                </q-btn>
              </q-td>
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_date" :props="props">{{
                props.row.bound_date
              }}</q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_date" :props="props">{{
                props.row.bound_date
              }}</q-td>
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_code" :props="props">{{
                props.row.bound_code
              }}</q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_code" :props="props">{{
                props.row.bound_code
              }}</q-td>
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_code_type" :props="props">
                <q-select
                  dense
                  outlined
                  square
                  v-model="editFormData.bound_code_type"
                  :label="'单据类型'"
                  autofocus
                  :options="bound_code_type_list"
                  option-label="label"
                  option-value="value"
                  emit-value
                  map-options
                  transition-show="scale"
                  transition-hide="scale"
                  :rules="[(val) => (val && val.length > 0) || error1]"
                />
              </q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_code_type" :props="props">
                {{
                  bound_code_type_map[props.row.bound_code_type] ||
                  props.row.bound_code_type
                }}</q-td
              >
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_bs_type" :props="props">
                <q-select
                  dense
                  outlined
                  square
                  v-model="editFormData.bound_bs_type"
                  :label="'单据类型'"
                  :options="bound_bs_type_list"
                  option-label="label"
                  option-value="value"
                  emit-value
                  map-options
                  transition-show="scale"
                  transition-hide="scale"
                  :rules="[(val) => (val && val.length > 0) || error1]"
                />
              </q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_bs_type" :props="props">
                {{
                  bound_bs_type_map[props.row.bound_bs_type] ||
                  props.row.bound_bs_type
                }}</q-td
              >
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_desc" :props="props">
                <q-select
                  dense
                  outlined
                  square
                  v-model="editFormData.bound_desc"
                  :label="'出入库类别'"
                  :options="bound_desc_list"
                  option-label="label"
                  option-value="value"
                  emit-value
                  map-options
                  transition-show="scale"
                  transition-hide="scale"
                  :rules="[(val) => (val && val.length > 0) || error1]"
                />
              </q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_desc" :props="props">
                {{
                  bound_desc_map[props.row.bound_desc] || props.row.bound_desc
                }}</q-td
              >
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_department" :props="props">
                <q-select
                  dense
                  outlined
                  square
                  v-model="editFormData.bound_department"
                  :label="'部门'"
                  :options="bound_department_list"
                  option-label="label"
                  option-value="value"
                  emit-value
                  map-options
                  transition-show="scale"
                  transition-hide="scale"
                  :rules="[(val) => (val && val.length > 0) || error1]"
                />
              </q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_department" :props="props">
                {{
                  bound_department_map[props.row.bound_department] ||
                  props.row.bound_department
                }}</q-td
              >
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="creater" :props="props">
                <q-input
                  dense
                  outlined
                  square
                  v-model.number="editFormData.creater"
                  :label="'经办人'"
                  :rules="[(val) => (val && val > 0) || error1]"
                />
              </q-td>
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="creater" :props="props">{{ props.row.creater }}</q-td>
            </template>

            <template v-if="props.row.id === editid">
              <q-td key="bound_status" :props="props">
                {{
                  bound_status_map[props.row.bound_status] ||
                  props.row.bound_status
                }}</q-td
              >
            </template>
            <template v-else-if="props.row.id !== editid">
              <q-td key="bound_status" :props="props">
                {{
                  bound_status_map[props.row.bound_status] ||
                  props.row.bound_status
                }}</q-td
              >
            </template>

            <template v-if="!editMode">
              <q-td key="action" :props="props" style="width: 100px">
                <q-btn
                  round
                  flat
                  push
                  color="dark"
                  icon="trolley"
                  @click="change_status(props.row)"
                >
                  <q-tooltip
                    content-class="bg-amber text-black shadow-4"
                    :offset="[10, 10]"
                    content-style="font-size: 12px"
                    >一键分拣</q-tooltip
                  >
                </q-btn>
                                <q-btn
                  round
                  flat
                  push
                  color="dark"
                  icon="delete"
                  @click="deleteData(props.row.id)"
                >
                  <q-tooltip
                    content-class="bg-amber text-black shadow-4"
                    :offset="[10, 10]"
                    content-style="font-size: 12px"
                    >{{ $t("delete") }}</q-tooltip
                  >
                </q-btn>
              </q-td>
            </template>
            <template v-else-if="editMode">
              <template v-if="props.row.id === editid">
                <q-td key="action" :props="props" style="width: 100px">
                  <q-btn
                    round
                    flat
                    push
                    color="secondary"
                    icon="check"
                    @click="editDataSubmit()"
                  >
                    <q-tooltip
                      content-class="bg-amber text-black shadow-4"
                      :offset="[10, 10]"
                      content-style="font-size: 12px"
                      >{{ $t("confirmedit") }}</q-tooltip
                    >
                  </q-btn>
                  <q-btn
                    round
                    flat
                    push
                    color="red"
                    icon="close"
                    @click="editDataCancel()"
                  >
                    <q-tooltip
                      content-class="bg-amber text-black shadow-4"
                      :offset="[10, 10]"
                      content-style="font-size: 12px"
                      >{{ $t("canceledit") }}</q-tooltip
                    >
                  </q-btn>
                </q-td>
              </template>
              <template v-else-if="props.row.id !== editid"></template>
            </template>
          </q-tr>
        </template>
      </q-table>
    </transition>
    <template>
      <div v-show="max !== 0" class="q-pa-lg flex flex-center">
        <div>{{ total }}</div>
        <q-pagination
          v-model="current"
          color="black"
          :max="max"
          :max-pages="6"
          boundary-links
          @click="
            getSearchList(current);
            paginationIpt = current;
          "
        />
        <div>
          <input
            v-model="paginationIpt"
            @blur="changePageEnter"
            @keyup.enter="changePageEnter"
            style="width: 60px; text-align: center"
          />
        </div>
      </div>
      <div v-show="max === 0" class="q-pa-lg flex flex-center">
        <q-btn flat push color="dark" :label="$t('no_data')"></q-btn>
      </div>
    </template>
    <q-dialog v-model="newForm">
      <q-card class="shadow-24">
        <q-bar
          class="bg-light-blue-10 text-white rounded-borders"
          style="height: 50px"
        >
          <div>{{ $t("newtip") }}</div>
          <q-space />
          <q-btn dense flat icon="close" v-close-popup>
            <q-tooltip content-class="bg-amber text-black shadow-4">{{
              $t("index.close")
            }}</q-tooltip>
          </q-btn>
        </q-bar>
        <q-card-section style="max-height: 325px; width: 400px" class="scroll">
          <q-select
            dense
            outlined
            square
            v-model="newFormData.bound_code_type"
            :label="'单据类型'"
            autofocus
            :options="bound_code_type_list"
            option-label="label"
            option-value="value"
            emit-value
            map-options
            transition-show="scale"
            transition-hide="scale"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />
          <q-select
            dense
            outlined
            square
            v-model="newFormData.bound_bs_type"
            :label="'业务类型'"
            :options="bound_bs_type_list"
            option-label="label"
            option-value="value"
            emit-value
            map-options
            transition-show="scale"
            transition-hide="scale"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />
          <q-select
            dense
            outlined
            square
            v-model="newFormData.bound_desc"
            :label="'出入库类别'"
            :options="bound_desc_list"
            option-label="label"
            option-value="value"
            emit-value
            map-options
            transition-show="scale"
            transition-hide="scale"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />
          <q-select
            dense
            outlined
            square
            v-model="newFormData.bound_department"
            :label="'部门'"
            :options="bound_department_list"
            option-label="label"
            option-value="value"
            emit-value
            map-options
            transition-show="scale"
            transition-hide="scale"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />
          <q-input
            dense
            outlined
            square
            v-model="newFormData.creater"
            :label="'经办人'"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />
        </q-card-section>

        <div style="float: right; padding: 15px 15px 15px 0">
          <q-btn
            color="white"
            text-color="black"
            style="margin-right: 25px"
            @click="newDataCancel()"
            >{{ $t("cancel") }}</q-btn
          >
          <q-btn color="primary" @click="newDataSubmit()">{{
            $t("submit")
          }}</q-btn>
        </div>
      </q-card>
    </q-dialog>
    <q-dialog v-model="deleteForm">
      <q-card class="shadow-24">
        <q-bar
          class="bg-light-blue-10 text-white rounded-borders"
          style="height: 50px"
        >
          <div>{{ $t("delete") }}</div>
          <q-space />
          <q-btn dense flat icon="close" v-close-popup>
            <q-tooltip>{{ $t("index.close") }}</q-tooltip>
          </q-btn>
        </q-bar>
        <q-card-section
          style="max-height: 325px; width: 400px"
          class="scroll"
          >{{ $t("deletetip") }}</q-card-section
        >
        <div style="float: right; padding: 15px 15px 15px 0">
          <q-btn
            color="white"
            text-color="black"
            style="margin-right: 25px"
            @click="deleteDataCancel()"
            >{{ $t("cancel") }}</q-btn
          >
          <q-btn color="primary" @click="deleteDataSubmit()">{{
            $t("submit")
          }}</q-btn>
        </div>
      </q-card>
    </q-dialog>
    <q-dialog v-model="newBatchForm">
      <q-card class="shadow-24">
        <q-bar
          class="bg-light-blue-10 text-white rounded-borders"
          style="height: 50px"
        >
          <div>{{ "新建批次" }}</div>
          <q-space />
          <q-btn dense flat icon="close" v-close-popup>
            <q-tooltip content-class="bg-amber text-black shadow-4">{{
              $t("index.close")
            }}</q-tooltip>
          </q-btn>
        </q-bar>
        <q-card-section style="min-height: 325px; width: 500px" class="scroll">
          <div class="text-h6 q-mb-md">{{ "批次信息" }}</div>
          <div class="row q-gutter-x-md">
            <div class="col column q-gutter-y-md">
              <q-select
                dense
                outlined
                square
                v-model="newBatchFormData.goods_code"
                :label="'物料编码'"
                :options="product_list"
                option-label="value"
                option-value="value"
                emit-value
                map-options
                transition-show="scale"
                transition-hide="scale"
                :rules="[(val) => (val && val.length > 0) || error1]"
                :onClick="assignGoodsCode()"
              />
            </div>
            <div class="col column q-gutter-y-md">
              <q-input
                outlined
                dense
                color="primary"
                v-model="product_filter"
                :placeholder="'搜索名称'"
                autofocus
                @input="getProductSearchList()"
                @keyup.enter="getProductSearchList()"
              >
                <template v-slot:append>
                  <q-icon name="search" />
                </template>
              </q-input>
            </div>
          </div>
          <q-select
            dense
            outlined
            square
            v-model="newBatchFormData.goods_code"
            :label="'物料'"
            :options="product_list"
            option-label="label"
            option-value="value"
            emit-value
            map-options
            :readonly="false"
            transition-show="scale"
            transition-hide="scale"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />

          <q-input
            dense
            outlined
            square
            v-model="newBatchFormData.goods_desc"
            :label="'名称'"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />

          <div class="row q-gutter-x-md">
            <div class="col column q-gutter-y-md">
              <!-- <q-input
                dense
                outlined
                square
                v-model.number="newBatchFormData.goods_weight"
                :label="'单重'"
                type="number"
                :rules="[(val) => (val && val > 0) || error1]"
              /> -->
              <q-input
                dense
                outlined
                square
                v-model.number="newBatchFormData.goods_qty"
                :label="'数量'"
                type="number"
                :rules="[(val) => (val && val > 0) || error1]"
              />
              <q-input
                dense
                outlined
                square
                v-model="newBatchFormData.goods_package"
                :label="'包装'"
                :rules="[(val) => (val && val.length > 0) || error1]"
              />
              <q-toggle
                v-model="isorder"
                :label="isorder ? '自动编码' : '手动编码(建议)'"
              />
            </div>
            <div class="col column q-gutter-y-md">
              <q-input
                dense
                outlined
                square
                v-model="newBatchFormData.goods_unit"
                :label="'单位'"
                :rules="[(val) => (val && val.length > 0) || error1]"
              />
              <q-input
                dense
                outlined
                square
                v-model="newBatchFormData.goods_std"
                :label="'规格/备注'"
                :rules="[(val) => (val && val.length > 0) || error1]"
              />
            </div>
          </div>
          <div class="row q-gutter-x-md" v-show="!isorder">
            <div class="col column q-gutter-y-md">
              <q-input
                dense
                outlined
                square
                v-model="batch_number_year"
                type="number"
                :label="'年'"
                :rules="[(val) => (val && val > 0) || error1]"
              />
            </div>
            <div class="col column q-gutter-y-md">
              <q-input
                dense
                outlined
                square
                v-model="batch_number_month"
                :label="'月'"
                type="number"
                :rules="[(val) => (val && val > 0) || error1]"
              />
            </div>
            <div class="col column q-gutter-y-md">
              <q-input
                dense
                outlined
                v-model="batch_number_batch"
                type="number"
                :label="'批'"
                :rules="[(val) => (val && val > 0) || '请输入正确的批号']"
              />
            </div>
          </div>
          <q-input
            v-show="!isorder"
            dense
            outlined
            square
            v-model.number="newBatchFormData.bound_batch_order"
            :label="'批号——年月第几批(202504009)'"
            class="centered-input"
            type="number"
            :rules="[(val) => (val && val > 0) || error1]"
          />

          <q-input
            dense
            outlined
            square
            v-model="newBatchFormData.creater"
            :label="'经办人'"
            :rules="[(val) => (val && val.length > 0) || error1]"
          />
        </q-card-section>

        <div style="float: right; padding: 15px 15px 15px 0">
          <q-btn
            color="white"
            text-color="black"
            style="margin-right: 25px"
            @click="newBatchCancel()"
            >{{ $t("cancel") }}</q-btn
          >
          <q-btn color="primary" @click="newBatchSubmit()">{{
            $t("submit")
          }}</q-btn>
        </div>
      </q-card>
    </q-dialog>
    <q-dialog
      v-model="detailForm"
      transition-show="jump-down"
      transition-hide="jump-up"
    >
      <q-card style="min-width: 1150px">
        <q-bar
          class="bg-light-blue-10 text-white rounded-borders"
          style="height: 50px"
        >
          <div>
            {{ "批次信息" }}
          </div>
          <q-space></q-space>
          <q-btn dense flat icon="close" v-close-popup>
            <q-tooltip
              content-class="bg-amber text-black shadow-4"
              :offset="[20, 20]"
              content-style="font-size: 12px"
            >
              {{ $t("index.close") }}</q-tooltip
            >
          </q-btn>
        </q-bar>
        <q-card-section class="q-pt-md">
          <q-tabs v-model="activeTab">
            <q-tab name="tab1" label="入库信息" />
            <!-- <q-tab name="tab2" label="货物信息" /> -->
          </q-tabs>
        </q-card-section>
        <!-- 选项卡内容 -->
        <q-tab-panels v-model="activeTab" animated>
          <q-tab-panel name="tab1" style="height: 70px">
            <div class="row q-gutter-x-md">
              <div class="col column q-gutter-y-md">
                <q-input
                  dense
                  outlined
                  square
                  v-model="table_detail.bound_date"
                  :label="'单据时间'"
                  :readonly="true"
                />
              </div>
              <div class="col column q-gutter-y-md">
                <q-input
                  dense
                  outlined
                  square
                  v-model="table_detail.bound_code"
                  :label="'单据编码'"
                  :readonly="true"
                />
              </div>
            </div>
          </q-tab-panel>
        </q-tab-panels>

        <div
          style="float: right; padding: 15px 15px 50px 15px; min-width: 100%"
          flow="row wrap"
        >
          <q-card class="q-mb-md" bordered>
            <q-card-actions
              class="q-px-none"
              style="position: absolute; right: 20px; top: 10px; z-index: 100"
            >
              <q-btn
                icon="add"
                flat
                dense
                color="primary"
                @click="addbatch(table_detail.id)"
                :label="$t('stock.add')"
              />
            </q-card-actions>
            <q-card-section>
              <template>
                <div class="text-h6 q-mb-md">{{ "批次信息" }}</div>
                <q-table
                  v-if="batch_detail.length > 0"
                  :data="batch_detail"
                  :columns="columns_batch"
                  row-key="id"
                  flat
                  bordered
                  hide-pagination
                  class="my-sticky-table scrollable-table"
                  :style="{ 'max-height': '400px' }"
                  :container-style="{ height: 'auto' }"
                   :pagination="{ rowsPerPage: 0 }"
                >
                  <template v-slot:body-cell-actions="props">
                    <q-td :props="props">
                      <q-btn
                        icon="print"
                        flat
                        v-print="getPrintConfig(props.row)"
                        @click="setCurrentBatch(props.row)"
                      >
                        <q-tooltip>打印条码</q-tooltip>
                      </q-btn>
                    </q-td>
                  </template>
                </q-table>
              </template>
            </q-card-section>
          </q-card>
        </div>
      </q-card>
    </q-dialog>
    <div id="printBarcode" class="print-area">
      <div class="q-pa-md text-center" style="flex: none">
        <div class="row no-wrap">
          <div class="col text-left">
            <p style="font-weight: 500">{{ currentgoods.goods_desc }}</p>
          </div>
          <div class="col text-right">
            <p>
              数量: {{ currentgoods.goods_qty }}{{ currentgoods.goods_unit }}
            </p>
          </div>
        </div>
        <svg ref="barcodeElement" style="width: 100%; height: auto"></svg>
      </div>
    </div>
  </div>
</template>

<router-view />

<script>
import { getauth, postauth, putauth, deleteauth } from 'boot/axios_request'

import JsBarcode from 'jsbarcode'
import { date, exportFile, LocalStorage, QToggle } from 'quasar'
export default {
  components: {
    QToggle
  },
  name: 'Pageasnlist',
  data () {
    return {
      createDate1: '',
      createDate2: '',
      date_range: '',
      proxyDate: '',
      date: '',
      goods_code: '',
      goods_desc: '',
      openid: '',
      login_name: '',
      authin: '0',
      warehouse_code: '',
      warehouse_name: '',

      searchUrl: '',
      pathname: 'bound/list/',
      pathfilename: 'bound/file/',

      pathname_previous: '',
      pathname_next: '',
      separator: 'cell',
      loading: false,
      height: '',

      printObj: {
        id: 'printMe',
        popTitle: this.$t('inbound.asn')
      },
      table_list: [],
      table_detail: {},
      batch_detail: [],
      bound_code_type_list: [],
      bound_code_type_map: [],
      bound_bs_type_list: [],
      bound_bs_type_map: [],
      bound_desc_list: [],
      bound_desc_map: [],
      bound_department_list: [],
      bound_department_map: [],
      bound_status_list: [],
      bound_status_map: [],
      product_list: [],
      product_map: [],
      batch_number_year: '',
      batch_number_month: '',
      batch_number_batch: '',

      columns: [
        { name: 'detail', label: '详情', field: 'detail', align: 'center' },
        {
          name: 'bound_date',
          label: '单据日期',
          field: 'bound_date',
          align: 'center'
        },
        {
          name: 'bound_code',
          label: '单据编号',
          field: 'bound_code',
          align: 'center'
        },
        {
          name: 'bound_code_type',
          label: '单据类型',
          field: 'bound_code_type',
          align: 'center'
        },
        {
          name: 'bound_bs_type',
          label: '业务类型',
          field: 'bound_bs_type',
          align: 'center'
        },
        {
          name: 'bound_desc',
          label: '出入库类别',
          field: 'bound_desc',
          align: 'center'
        },
        {
          name: 'bound_department',
          label: '部门',
          field: 'bound_department',
          align: 'center'
        },
        { name: 'creater', label: '经办人', field: 'creater', align: 'center' },
        {
          name: 'bound_status',
          label: '状态',
          field: 'bound_status',
          align: 'center'
        },
        { name: 'action', label: '操作', align: 'center' }
      ],
      // 列定义
      columns_batch: [
        {
          name: 'actions',
          label: '操作',
          align: 'center',
          style: 'width: 80px'
        },
        {
          name: 'bound_batch_order',
          label: '批次',
          field: (row) => row.bound_batch.bound_batch_order,
          align: 'center'
        },
        {
          name: 'goods_desc',
          label: '货物',
          field: (row) => row.bound_batch.goods_desc,
          align: 'center'
        },
        {
          name: 'plan_weight',
          label: '计划入库重量',
          field: (row) => row.bound_batch.goods_qty, // 确保字段路径正确
          align: 'center',
          style: 'width: 150px'
        },
        {
          name: 'actual_weight',
          label: '实际入库重量',
          field: (row) => row.bound_batch.goods_in_qty, // 根据实际字段调整
          align: 'center',
          style: 'width: 150px'
        },
        {
          name: 'unit',
          label: '单位',
          field: (row) => row.bound_batch.goods_unit,
          align: 'center',
          style: 'width: 10px'
        },
        {
          name: 'package',
          label: '包装',
          field: (row) => row.bound_batch.goods_package,
          align: 'center',
          style: 'width: 10px'
        }
      ],
      filter: '',
      product_filter: '',
      pagination: {
        page: 1,
        rowsPerPage: 11
      },
      newForm: false,
      newBatchForm: false,
      newFormData: {},
      newBatchFormData: {},
      newDetailFormData: {},
      editid: 0,
      editFormData: {},
      editMode: false,
      deleteForm: false,
      detailForm: false,
      deleteid: 0,
      detailid: 0,
      bar_code: '',
      error1: this.$t('goods.view_goodslist.error1'),

      max: 0,
      total: 0,
      paginationIpt: 1,
      current: 1,
      onlyread: true,
      bound_batch_list: [],

      activeTab: 'tab1',
      isorder: false,
      order: 'false',

      printConfig: {
        id: 'printBarcode'
      },
      currentBarcode: null,

      currentgoods: {}
    }
  },
  computed: {
    interval () {
      return (
        this.$t('download_center.start') +
        ' - ' +
        this.$t('download_center.end')
      )
    }
  },
  methods: {
    assignGoodsCode () {
      console.log('data', this.newBatchFormData.goods_code)
      console.log(
        'product_map',
        this.product_map[this.newBatchFormData.goods_code]
      )
      if (this.product_map[this.newBatchFormData.goods_code]) {
        this.newBatchFormData.goods_desc =
          this.product_map[this.newBatchFormData.goods_code].product_name
        this.newBatchFormData.goods_std =
          this.product_map[this.newBatchFormData.goods_code].product_std
        this.newBatchFormData.goods_unit =
          this.product_map[this.newBatchFormData.goods_code].product_unit
        this.newBatchFormData.goods_package =
          this.product_map[this.newBatchFormData.goods_code].product_package
        this.newBatchFormData.goods_weight = 1
      }
      // this.newBatchFormData.goods_code = this.product_map[this.newBatchFormData.goods_code].product_code
      // this.newBatchFormData.goods_std = this.product_map[this.newBatchFormData.goods_code].goods_std
      // this.newBatchFormData.goods_package = this.product_map[this.newBatchFormData.goods_code].goods_package
    },
    setCurrentBatch (item) {
      this.currentBarcode = item.bound_batch?.bound_number || ''
      this.currentgoods = item.bound_batch
    },
    getPrintConfig () {
      this.generateBarcode()
      return {
        id: 'printBarcode'
      }
    },
    generateBarcode () {
      this.$refs.barcodeElement.innerHTML = ''

      try {
        JsBarcode(this.$refs.barcodeElement, this.currentBarcode, {
          format: 'CODE128',
          displayValue: true,
          fontSize: 16,
          height: 60,
          margin: 10
        })
      } catch (error) {
        console.error('条码生成失败:', error)
      }
    },
    getList (params = {}) {
      var _this = this
      _this.loading = true
      // 合并基础参数
      const baseParams = {
        page: _this.current,
        base_type: '0',
        page_size: _this.pagination.rowsPerPage
      }

      // 创建URLSearchParams处理参数
      const queryParams = new URLSearchParams({
        ...baseParams,
        ...params
      })
      console.log(queryParams)
      // 过滤空值参数
      Array.from(queryParams.entries()).forEach(([key, value]) => {
        if (value === '' || value === null || value === undefined) {
          queryParams.delete(key)
        }
      })

      getauth(`${_this.pathname}?${queryParams}`)
        .then((res) => {
          _this.table_list = res.results

          _this.total = res.count
          _this.max = Math.ceil(res.count / _this.pagination.rowsPerPage) || 0
          _this.pathname_previous = res.previous
          _this.pathname_next = res.next
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
        .finally(() => {
          _this.loading = false
        })
    },
    changePageEnter () {
      if (Number(this.paginationIpt) < 1) {
        this.current = 1
        this.paginationIpt = 1
      } else if (Number(this.paginationIpt) > this.max) {
        this.current = this.max
        this.paginationIpt = this.max
      } else {
        this.current = Number(this.paginationIpt)
      }
      this.getSearchList(this.current)
    },

    getProductSearchList () {
      var _this = this
      _this.loading = true
      const params = {
        product_name__icontains: _this.product_filter,
        max_page: 1000
      }
      const queryParams = new URLSearchParams({
        ...params
      })
      console.log(queryParams)
      // 过滤空值参数
      Array.from(queryParams.entries()).forEach(([key, value]) => {
        if (value === '' || value === null || value === undefined) {
          queryParams.delete(key)
        }
      })
      console.log(`warehouse/product/?${queryParams}`)
      getauth(`warehouse/product/?${queryParams}`)
        .then((res) => {
          _this.product_list = res.results.map((item) => ({
            label: item.product_name,
            value: item.product_code
          }))
          _this.product_map = res.results.reduce((acc, item) => {
            acc[item.product_code] = item
            return acc
          }, {})
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
        .finally(() => {
          _this.loading = false
        })
    },

    // 带搜索条件加载
    getSearchList (page = 1) {
      this.current = page
      this.paginationIpt = page
      this.getList({
        goods_desc__icontains: this.filter,
        document_date__range: this.date_range
      })
    },
    downloadlistData () {
      this.getfileList()
    },
    getfileList () {
      var _this = this
      _this.loading = true
      const params = {
        goods_desc__icontains: _this.filter,
        document_date__range: _this.date_range
      }
      const queryParams = new URLSearchParams({
        ...params
      })
      console.log(queryParams)
      // 过滤空值参数
      Array.from(queryParams.entries()).forEach(([key, value]) => {
        if (value === '' || value === null || value === undefined) {
          queryParams.delete(key)
        }
      })
      console.log(`${_this.pathfilename}?${queryParams}`)
      getauth(`${_this.pathfilename}?${queryParams}`)
        .then((res) => {
          var timeStamp = Date.now()
          var formattedString = date.formatDate(timeStamp, 'YYYYMMDDHHmmss')
          const status = exportFile(
            _this.pathfilename + 'list' + formattedString + '.csv',
            '\uFEFF' + res,
            'text/csv'
          )
          if (status !== true) {
            _this.$q.notify({
              message: 'Browser denied file download...',
              color: 'negative',
              icon: 'warning'
            })
          }
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
        .finally(() => {
          _this.loading = false
        })
    },

    getListPrevious () {
      var _this = this
      if (LocalStorage.has('auth')) {
        getauth(_this.pathname_previous, {})
          .then((res) => {
            _this.table_list = res.results
            _this.pathname_previous = res.previous
            _this.pathname_next = res.next
          })
          .catch((err) => {
            _this.$q.notify({
              message: err.detail,
              icon: 'close',
              color: 'negative'
            })
          })
      } else {
      }
    },
    getListNext () {
      var _this = this
      if (LocalStorage.has('auth')) {
        getauth(_this.pathname_next, {})
          .then((res) => {
            _this.table_list = res.results

            _this.pathname_previous = res.previous
            _this.pathname_next = res.next
          })
          .catch((err) => {
            _this.$q.notify({
              message: err.detail,
              icon: 'close',
              color: 'negative'
            })
          })
      }
    },
    reFresh () {
      var _this = this
      _this.getSearchList()
    },

    newDataSubmit () {
      var _this = this

      _this.newFormData.bound_type = 'in'
      _this.newFormData.openid = _this.openid

      postauth(_this.pathname, _this.newFormData)
        .then((res) => {
          _this.getSearchList()
          _this.newDataCancel()
          if (res.status_code !== 500) {
            _this.$q.notify({
              message: '成功新增数据',
              icon: 'check',
              color: 'green'
            })
          }
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
    },
    newBatchSubmit () {
      var _this = this

      _this.newBatchFormData.openid = _this.openid
      _this.newBatchFormData.warehouse_code = _this.warehouse_code
      _this.newBatchFormData.warehouse_name = _this.warehouse_name
      _this.newBatchFormData.order = _this.order
      console.log('当前的order是', _this.newBatchFormData.order)
      postauth('bound/batch/', _this.newBatchFormData)
        .then((res) => {
          if (res.status_code !== 500) {
            _this.newDetailFormData.bound_batch = res.id
            _this.newDetailFormData.creater = _this.login_name

            postauth('bound/detail/', _this.newDetailFormData).then(
              (res) => {
                if (res.status_code !== 500) {
                  _this.detailData(_this.newDetailFormData)

                  _this.$q.notify({
                    message: '成功新增数据',
                    icon: 'check',
                    color: 'green'
                  })
                }
              },
              (err) => {
                _this.$q.notify({
                  message: err.detail,
                  icon: 'close',
                  color: 'negative'
                })
              }
            )
          }
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
    },
    newDataCancel () {
      var _this = this
      _this.newForm = false
      _this.newFormData = {
        bound_code_type: '',
        bound_bs_type: '',
        bound_desc: '',
        bound_department: '',
        creater: ''
      }
    },
    addbatch (bound_number) {
      var _this = this
      _this.newBatchForm = true
      _this.batch_number_year = _this.date.slice(0, 4)
      _this.batch_number_month = _this.date.slice(5, 7)
      _this.newBatchFormData.creater = _this.login_name
      _this.newDetailFormData = {
        id: bound_number,
        bound_list: bound_number
      }
    },
    editData (e) {
      var _this = this
      _this.editMode = true
      _this.editid = e.id
      _this.editFormData = {
        bound_date: e.bound_date,
        bound_code: e.bound_code,
        bound_code_type: e.bound_code_type,
        bound_bs_type: e.bound_bs_type,
        bound_desc: e.bound_desc,

        bound_department: e.bound_department,
        creater: _this.login_name
      }
    },

    change_status (e) {
      var _this = this

      var status_FormData = {
        bound_date: e.bound_date,
        bound_code: e.bound_code,
        bound_code_type: e.bound_code_type,
        bound_bs_type: e.bound_bs_type,
        bound_desc: e.bound_desc,

        bound_department: e.bound_department,
        creater: _this.login_name,
        bound_type: 'in',
        bound_status: '101'
      }

      putauth(_this.pathname + e.id + '/', status_FormData)
        .then((res) => {
          _this.editDataCancel()
          _this.getSearchList()
          if (res.status_code !== 500) {
            _this.$q.notify({
              message: '开始入库',
              icon: 'check',
              color: 'green'
            })
          }
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
    },
    editDataSubmit () {
      var _this = this
      _this.editFormData.bound_type = 'in'

      putauth(_this.pathname + _this.editid + '/', _this.editFormData)
        .then((res) => {
          _this.editDataCancel()
          _this.getSearchList()
          if (res.status_code !== 500) {
            _this.$q.notify({
              message: '成功编辑数据',
              icon: 'check',
              color: 'green'
            })
          }
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
    },
    editDataCancel () {
      var _this = this
      _this.editMode = false
      _this.editid = 0
      _this.editFormData = {
        bound_date: '',
        bound_code: '',
        bound_code_type: '',
        bound_bs_type: '',
        bound_desc: '',

        bound_department: '',
        creater: ''
      }
    },
    deleteData (e) {
      var _this = this
      _this.deleteForm = true
      _this.deleteid = e
    },
    detailData (e) {
      var _this = this
      _this.detailForm = true
      _this.detailid = e.id
      console.log('detail查询的id是:', _this.detailid)
      getauth(_this.pathname + _this.detailid + '/')
        .then((res) => {
          _this.table_detail = res
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
      console.log('detail查询的结果是:', _this.table_detail)

      getauth('bound/detail/?max_page=1000&bound_list=' + _this.detailid)
        .then((res) => {
          _this.batch_detail = res.results
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
      console.log('batch查询的结果是:', _this.batch_detail)
      console.log('batch长度查询的结果是:', _this.batch_detail.length)
    },
    deleteDataSubmit () {
      var _this = this
      deleteauth(_this.pathname + _this.deleteid + '/')
        .then((res) => {
          _this.deleteDataCancel()
          _this.getSearchList()
          _this.$q.notify({
            message: '成功删除数据',
            icon: 'check',
            color: 'green'
          })
        })
        .catch((err) => {
          _this.$q.notify({
            message: err.detail,
            icon: 'close',
            color: 'negative'
          })
        })
    },
    deleteDataCancel () {
      var _this = this
      _this.deleteForm = false
      _this.deleteid = 0
    },

    updateProxy () {
      var _this = this
      _this.proxyDate = _this.date
    }
  },
  created () {
    var _this = this
    if (LocalStorage.has('openid')) {
      _this.openid = LocalStorage.getItem('openid')
    } else {
      _this.openid = ''
      LocalStorage.set('openid', '')
    }
    if (LocalStorage.has('warehouse_code')) {
      _this.warehouse_code = LocalStorage.getItem('warehouse_code')
    }
    if (LocalStorage.has('warehouse_name')) {
      _this.warehouse_name = LocalStorage.getItem('warehouse_name')
    }
    if (LocalStorage.has('login_name')) {
      _this.login_name = LocalStorage.getItem('login_name')
    } else {
      _this.login_name = ''
      LocalStorage.set('login_name', '')
    }
    if (LocalStorage.has('auth')) {
      const timeStamp = Date.now()
      const formattedString = date.formatDate(timeStamp, 'YYYY/MM/DD')
      _this.date = formattedString
      console.log(_this.date)
      _this.authin = '1'
      _this.getList()
    } else {
      _this.authin = '0'
    }
    getauth('warehouse/boundcodetype/', {})
      .then((res) => {
        _this.bound_code_type_list = res.results.map((item) => ({
          label: item.bound_code_type_name,
          value: item.bound_code_type_code
        }))
        // 编码 → 名称的映射(普通对象,确保响应式)
        _this.bound_code_type_map = res.results.reduce((acc, item) => {
          acc[item.bound_code_type_code] = item.bound_code_type_name
          return acc
        }, {})
      })
      .catch((err) => {
        _this.$q.notify({
          message: err.detail,
          icon: 'close',
          color: 'negative'
        })
      })

    getauth('warehouse/boundtype/', {})
      .then((res) => {
        _this.bound_desc_list = res.results.map((item) => ({
          label: item.bound_type_name,
          value: item.bound_type_code
        }))
        // 编码 → 名称的映射(普通对象,确保响应式)
        _this.bound_desc_map = res.results.reduce((acc, item) => {
          acc[item.bound_type_code] = item.bound_type_name
          return acc
        }, {})
      })
      .catch((err) => {
        _this.$q.notify({
          message: err.detail,
          icon: 'close',
          color: 'negative'
        })
      })

    getauth('warehouse/department/?max_page=1000', {})
      .then((res) => {
        _this.bound_department_list = res.results.map((item) => ({
          label: item.department_name,
          value: item.department_code
        }))
        _this.bound_department_map = res.results.reduce((acc, item) => {
          acc[item.department_code] = item.department_name
          return acc
        }, {})
      })
      .catch((err) => {
        _this.$q.notify({
          message: err.detail,
          icon: 'close',
          color: 'negative'
        })
      })

    getauth('warehouse/boundbusiness/', {})
      .then((res) => {
        _this.bound_bs_type_list = res.results.map((item) => ({
          label: item.bound_bs_name,
          value: item.bound_bs_code
        }))
        // 编码 → 名称的映射(普通对象,确保响应式)
        _this.bound_bs_type_map = res.results.reduce((acc, item) => {
          acc[item.bound_bs_code] = item.bound_bs_name
          return acc
        }, {})
      })
      .catch((err) => {
        _this.$q.notify({
          message: err.detail,
          icon: 'close',
          color: 'negative'
        })
      })

    getauth('warehouse/status/', {})
      .then((res) => {
        _this.bound_status_list = res.results.map((item) => ({
          label: item.bound_status_name,
          value: item.bound_status_code
        }))
        _this.bound_status_map = res.results.reduce((acc, item) => {
          acc[item.bound_status_code] = item.bound_status_name
          return acc
        }, {})
      })
      .catch((err) => {
        _this.$q.notify({
          message: err.detail,
          icon: 'close',
          color: 'negative'
        })
      })
  },

  mounted () {
    var _this = this
    if (_this.$q.platform.is.electron) {
      _this.height = String(_this.$q.screen.height - 290) + 'px'
    } else {
      _this.height = _this.$q.screen.height - 290 + '' + 'px'
    }
    _this.newFormData.creater = _this.login_name
  },
  updated () {},
  destroyed () {},

  watch: {
    isorder: function (val) {
      console.log(val)
      if (val) {
        this.order = 'true'
      } else {
        this.order = 'false'
      }
    },
    batch_number_batch: function (val) {
      console.log(val)
      this.newBatchFormData.bound_batch_order =
        this.batch_number_year * 100000 + this.batch_number_month * 1000 + Number(val)
    },
    createDate1 (val) {
      if (val) {
        if (val.to) {
          this.createDate2 = `${val.from} - ${val.to}`
          this.date_range = `${val.from},${val.to} `

          // this.downloadhUrl = this.pathname + 'filelist/?' + 'document_date__range=' + this.date_range
        } else {
          this.createDate2 = `${val}`
          this.dateArray = val.split('/')
          this.searchUrl =
            this.pathname +
            '?' +
            'document_date__year=' +
            this.dateArray[0] +
            '&' +
            'document_date__month=' +
            this.dateArray[1] +
            '&' +
            'document_date__day=' +
            this.dateArray[2]
          // this.downloadhUrl = this.pathname + 'filelist/?' + 'document_date__year=' + this.dateArray[0] + '&' + 'document_date__month=' + this.dateArray[1] + '&' + 'document_date__day=' + this.dateArray[2]
        }
        this.date_range = this.date_range.replace(/\//g, '-')

        this.getSearchList()
        this.$refs.qDateProxy.hide()
      } else {
        this.createDate2 = ''
        this.date_range = ''
        this.getSearchList()
      }
    }
  }
}
</script>
<style scoped>
/* 添加在 <style> 中 */
.q-date__calendar-item--selected {
  transition: all 0.3s ease;
  background-color: #1976d2 !important;
}

.q-date__range {
  background-color: rgba(25, 118, 210, 0.1);
}

:deep(.q-field__label) {
  margin-top: 8px;
  align-self: center;
}

:deep(.q-field__control-container) {
  padding-left: 50px;
  margin-top: -5px;
}

/* 修改打印样式 */
#printBarcode {
  width: 80mm; /* 标准标签纸宽度 */
  max-width: 50mm;
  padding: 2mm;
  box-sizing: border-box;
}

/* 打印时强制缩放 */
@media print {
  body {
    margin: 0 !important;
    visibility: hidden;
  }

  #printBarcode,
  #printBarcode * {
    visibility: visible;
    width: 100% !important;
    max-width: 100% !important;
  }

  /* 强制单页布局 */
  .print-area {
    page-break-inside: avoid;
    break-inside: avoid;
    display: flex;
    flex-direction: column;
    gap: 2mm;
  }

  /* 条码缩放 */
  svg {
    transform: scale(0.9);
    transform-origin: center top;
    max-height: 30mm !important;
  }

  /* 文本适配 */
  p {
    font-size: 9pt !important;
    margin: 0;
    line-height: 1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* 网格布局优化 */
  .row {
    display: grid !important;
    grid-template-columns: 1fr 1fr;
    gap: 1mm;
  }
}

/* 在样式文件中添加 */
.centered-input ::v-deep .q-field__control {
  justify-content: center;
}

.centered-input ::v-deep input {
  text-align: center;
  -moz-appearance: textfield; /* 隐藏Firefox的数字箭头 */
}

/* 隐藏Chrome/Safari的数字箭头 */

.centered-input ::v-deep input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* 修改滚动样式 */
.scrollable-table {
  flex: 1; /* 允许表格填充剩余空间 */
  display: flex;
  flex-direction: column;
}

.scrollable-table .q-table__container {
  flex: 1;
  overflow: auto;
}

.scrollable-table .q-table__top {
  position: sticky;
  top: 0;
  background: white;
  z-index: 1;
}

.my-sticky-table .q-table__middle {
  overflow-y: auto !important;
}
</style>