<template>
  <div class="app-container">
    <el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px">
      <el-form-item :label="$t('礼品名称')">
        <el-input v-model.trim="queryParams.title" :placeholder="$t('请输入礼品名称')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" @keyup.enter.native="handleQuery" />
      </el-form-item>
      <el-form-item :label="$t('兑换积分')">
        <el-row :gutter="10">
          <el-col :span="8">
            <dict-selector v-model="queryParams.pointsRequireSymbol" clearable :type="DICT_TYPE.QUANTITATIVE_RELATION_SYMBOL" @change="handleQuery" />
          </el-col>
          <el-col :span="16">
            <el-input v-model.trim="queryParams.pointsRequire" :placeholder="$t('请输入数字')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" @keyup.enter.native="handleQuery" />
          </el-col>
        </el-row>
      </el-form-item>
      <el-form-item :label="$t('领取方式')" prop="level">
        <dict-selector v-model="queryParams.pickMethod" clearable :type="DICT_TYPE.WAY_OF_RECEIVING" @change="handleQuery" />
      </el-form-item>

      <el-form-item :label="$t('提货点')" prop="level">
        <el-select v-model="queryParams.nodeId" :placeholder="$t('请选择提货点')" clearable size="small" @change="handleQuery">
          <el-option v-for="nodeItem in nodeList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" />
        </el-select>
      </el-form-item>

      <el-form-item :label="$t('状态')" prop="level">
        <dict-selector v-model="queryParams.status" clearable :type="DICT_TYPE.GIFT_STATUS" @change="handleQuery" />
      </el-form-item>
      <el-form-item :label="$t('备注')" prop="level">
        <el-input v-model.trim="queryParams.remark" :placeholder="$t('请输入备注')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" @keyup.enter.native="handleQuery" />
      </el-form-item>
      <el-form-item :label="$t('剩余数量')">
        <el-row :gutter="10">
          <el-col :span="8">
            <dict-selector v-model="queryParams.quantityRemainSymbol" clearable :type="DICT_TYPE.QUANTITATIVE_RELATION_SYMBOL" @change="handleQuery" />
          </el-col>
          <el-col :span="16">
            <el-input v-model.trim="queryParams.quantityRemain" :placeholder="$t('请输入数字')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" @keyup.enter.native="handleQuery" />
          </el-col>
        </el-row>
      </el-form-item>
      <el-form-item :label="$t('创建时间')">
        <el-date-picker v-model="dateRangeCreateTime" type="datetimerange" clearable placement="bottom-start" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
        <el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
      </el-form-item>
    </el-form>
    <el-row class="mb8">
      <el-button v-hasPermi="['ecw:giftManagement:add']" type="success" size="mini" icon="el-icon-plus" @click="handleAddReward">{{ $t("添加礼品") }}</el-button>
      <right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
    </el-row>
    <!-- 礼品列表 -->
    <el-table ref="multipleTable" v-loading="loading" :data="list">
      <el-table-column width="140" :label="$t('礼品ID')" align="center" prop="code" />
      <el-table-column :label="$t('礼品名称')" align="center">
        <template slot-scope="scope">
          <el-button type="text" @click="handleView(scope.row)">{{ isChinese ? scope.row.titleZh : scope.row.titleEn }}</el-button>
        </template>
      </el-table-column>
      <el-table-column :label="$t('图片')">
        <template slot-scope="scope">
          <el-image :src="firstImg(isChinese ? scope.row.imgZh : scope.row.imgEn)" style="width: 50px; height: 50px">{{ $t("无") }}</el-image>
        </template>
      </el-table-column>
      <el-table-column width="100" :label="$t('开始日期')">
        <template #default="{ row }">
          {{ parseTime(row.startTime, "{y}-{m}-{d}") || "/" }}
        </template>
      </el-table-column>
      <el-table-column width="100" :label="$t('结束日期')">
        <template #default="{ row }">
          {{ parseTime(row.endTime, "{y}-{m}-{d}") || "/" }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('兑换积分')" prop="pointsRequire" />
      <el-table-column :label="$t('领取方式')" align="center" prop="pickMethod">
        <template #default="{ row }">
          {{ handlePickMethod(row.pickMethod) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('提货点')" align="center">
        <template #default="{ row }">
          {{ isChinese ? handleExchangeNodeId(row.nodeId).titleZh : handleExchangeNodeId(row.nodeId).titleEn }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('允许兑换次数')" align="center" prop="allowCount" />
      <el-table-column :label="$t('状态')">
        <template slot-scope="{ row }">
          {{ isChinese ? handleRewardsStatus(row.status).label : handleRewardsStatus(row.status).labelEn }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('备注')" align="center" width="200">
        <template slot-scope="{ row }">
          <el-tooltip popper-class="rewardstToolTip" :content="isChinese ? row.remarkZh : remarkEn" placement="top">
            <div style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap">
              {{ isChinese ? row.remarkZh : remarkEn }}
            </div>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column :label="$t('已兑换次数')" align="center">
        <template slot-scope="scope">
          <el-button
            type="text"
            @click="
              $router.push({
                path: '/member/giftManagement/exchangeRecord',
                query: { rewardCode: scope.row.code }
              })
            "
            >{{ scope.row.exchangeCount }}</el-button
          >
        </template>
      </el-table-column>
      <el-table-column :label="$t('剩余数量')" align="center" prop="quantityRemain" />
      <el-table-column width="220px" align="center" :label="$t('操作')" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button v-hasPermi="['ecw:giftManagement:check']" size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">{{ $t("查看") }}</el-button>
          <el-button v-hasPermi="['ecw:giftManagement:close']" size="mini" type="text" icon="el-icon-edit" :disabled="scope.row.status == '2' || scope.row.status == '3'" @click="handleCloseStatus(scope.row)">{{ $t("关闭") }}</el-button>
          <el-button v-hasPermi="['ecw:giftManagement:copy']" size="mini" type="text" icon="el-icon-edit" @click="copyRewards(scope.row)">{{ $t("复制") }}</el-button>
          <el-button v-hasPermi="['ecw:giftManagement:postpone']" size="mini" type="text" icon="el-icon-edit" :disabled="scope.row.status != '1'" @click="handlePostpone(scope.row)">{{ $t("延期") }}</el-button>
          <el-button v-hasPermi="['ecw:giftManagement:delete']" size="mini" type="text" icon="el-icon-delete" :disabled="scope.row.status != '2'" @click="handleDelete(scope.row)">{{ $t("删除") }}</el-button>
          <el-button v-has-permi="['ecw:giftManagement:edit']" size="mini" type="text" :disabled="scope.row.status != '2' && scope.row.status != '1'" icon="el-icon-collection" @click="editRewards(scope.row)">{{ $t("编辑") }}</el-button>
          <el-button v-has-permi="['ecw:giftManagement:enable']" size="mini" type="text" icon="el-icon-user" :disabled="scope.row.status == '1' || scope.row.status == '3' || scope.row.status == '4'" @click="handleLaunchRewards(scope.row)">{{ $t("启用") }}</el-button>
          <el-button v-has-permi="['ecw:giftManagement:exchange']" :disabled="scope.row.status == '3' || scope.row.status == '4'" size="mini" type="text" icon="el-icon-user" @click="handleExchange(scope.row)">{{ $t("兑换") }}</el-button>
        </template>
      </el-table-column>
    </el-table>

    <!-- //分页列表 -->
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows" @pagination="getList" />
    <!-- 查看 编辑 新增弹窗 -->
    <operating-gift ref="operatingGift" :title="operatingPagetitle" :rewards-details="rewardsItem" :show.sync="dialogVisible" :node-list="nodeList" />
    <el-dialog :title="$t('提示')" :visible.sync="dialogPostponeVisible" width="30%">
      <el-row class="mb8">{{ $t("请选择延期时间") }}</el-row>
      <el-date-picker v-model="postponeDatetime" type="datetime" clearable style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions" :placeholder="$t('请选择时间')" />
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogPostponeVisible = false">{{ $t("取 消") }}</el-button>
        <el-button type="primary" @click="confirmPostponeRewards">{{ $t("确 定") }}</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import { getGiftList, deleteRewards, copyRewardsAPI, changeRewardsStatus, delayRewards, getWarehouseList } from "@/api/ecw/giftManagement"
import { getDictDatas, DICT_TYPE } from "@/utils/dict"
import { parseTime } from "../../../utils/ruoyi"
import OperatingGift from "@/views/ecw/giftManagement/components/operatingGift.vue"
import { uploadFile } from "@/api/infra/file"
import ImageUpload from "@/components/ImageUpload"
export default {
  name: "EcwGiftmanagementIndex",
  components: {
    OperatingGift
  },
  data() {
    return {
      getDictDatas,
      env: process.env.NODE_ENV,
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 礼品列表
      list: [],
      // 弹出层标题
      operatingPagetitle: "",
      // 是否显示弹出层
      dialogVisible: false,
      rewardsItem: {},
      dateRangeCreateTime: [],
      postponeDatetime: "",
      postponeRewardsID: "",
      dialogPostponeVisible: false,
      // 查询参数
      queryParams: {
        page: 1,
        rows: 10,
        title: null,
        pointsRequire: null,
        pointsRequireSymbol: null,
        pickMethod: null,
        nodeId: null,
        status: "1",
        remark: null,
        quantityRemainSymbol: null,
        quantityRemain: null,
        beginCreateTime: null,
        endCreateTime: null
      },
      // 网点
      nodeList: [],
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() < Date.now() - 8.64e7
        }
      }
    }
  },
  computed: {
    isChinese() {
      return this.$i18n.locale === "zh_CN"
    }
  },
  created() {
    this.getList()
    this.getNodeList()
  },
  activated() {
    this.getList()
  },
  watch: {
    dialogVisible(val, old) {
      if (old && !val) {
        this.getList()
      }
    }
  },
  methods: {
    arraysEqual(arr1, arr2) {
      return arr1.filter((current) => {
        return !!arr2.find((item) => item == current.value.toString())
      })
    },
    handleRewardsStatus(status) {
      return this.getDictDatas(DICT_TYPE.GIFT_STATUS).filter((dicItem) => dicItem.value.toString() == status)[0]
    },
    firstImg(imgString) {
      if (!imgString || imgString == "") return imgString
      const imgs = imgString.split(",")
      return imgs.length ? imgs[0] : null
    },
    handlePickMethod(pickMethod) {
      const pickMethodLabel = []
      if (this.isChinese) {
        this.arraysEqual(this.getDictDatas(DICT_TYPE.WAY_OF_RECEIVING), pickMethod.split(",")).forEach((element) => {
          pickMethodLabel.push(element.label)
        })
      } else {
        this.arraysEqual(this.getDictDatas(DICT_TYPE.WAY_OF_RECEIVING), pickMethod.split(",")).forEach((element) => {
          pickMethodLabel.push(element.labelEn)
        })
      }
      return pickMethodLabel.join()
    },
    handleExchangeNodeId(nodeId) {
      return this.nodeList.filter((nodeItem) => nodeItem.id == nodeId)[0]
    },
    handleAddReward() {
      this.rewardsItem = {}
      this.dialogVisible = true
      this.operatingPagetitle = "3"
    },
    handleExchange(row) {
      this.$router.push({
        path: "/member/giftManagement/bulkExchange",
        query: { rewardsID: row.id }
      })
    },
    /** 延期按钮操作 */
    handlePostpone(row) {
      this.postponeRewardsID = row.id
      this.dialogPostponeVisible = true
    },
    confirmPostponeRewards() {
      this.dialogPostponeVisible = false
      delayRewards({
        id: this.postponeRewardsID,
        endTime: this.postponeDatetime
      }).then((res) => {
        this.getList()
        this.$message.success(this.$t("延期成功"))
      })
    },
    /** 关闭按钮操作 */
    handleCloseStatus(row) {
      this.$confirm(this.$t("是否关闭当前礼品？"), this.$t("提示"), {
        confirmButtonText: this.$t("确定"),
        cancelButtonText: this.$t("取消"),
        type: "warning"
      })
        .then((_) => {
          return changeRewardsStatus({ id: row.id, status: "3" })
        })
        .then((res) => {
          this.getList()
          this.$message.success(this.$t("关闭成功"))
        })
        .catch((_) => {
          // this.queryAllData();
        })
    },
    // 启用礼品状态
    handleLaunchRewards(row) {
      this.$confirm(this.$t("是否启用当前礼品？"), this.$t("提示"), {
        confirmButtonText: this.$t("确定"),
        cancelButtonText: this.$t("取消"),
        type: "warning"
      })
        .then(() => {
          changeRewardsStatus({ id: row.id, status: "1" }).then((r) => {
            this.$message.success(this.$t("启用成功"))
            this.getList()
          })
        })
        .catch(() => {})
    },
    getNodeList() {
      let params = { title: "" }
      getWarehouseList(params).then((res) => {
        this.nodeList = res.data
      })
    },
    getList() {
      this.loading = true
      // 处理查询参数
      const params = { ...this.queryParams }
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime", false)
      getGiftList(params).then((res) => {
        this.loading = false
        this.list = res.data.list
        this.total = res.data.total
      })
    },

    // 新增潜在客户
    handleAddPotential() {
      this.$refs.potentialCustom.dialogTableVisible = true
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      this.$modal
        .confirm(this.$t("是否确认删除此礼品"))
        .then(function () {
          return deleteRewards({ id: row.id })
        })
        .then(() => {
          this.getList()
          this.$modal.msgSuccess(this.$t("删除成功"))
        })
        .catch(() => {})
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.$nextTick(() => {
        this.queryParams.page = 1
        this.getList()
      })
    },
    /** 查看按钮操作 */
    handleView(row) {
      this.dialogVisible = true
      this.operatingPagetitle = "1"
      this.rewardsItem = row
    },
    /** 编辑按钮操作 */
    editRewards(row) {
      this.dialogVisible = true
      this.operatingPagetitle = "2"
      this.rewardsItem = row
    },

    /** 复制按钮操作 */
    copyRewards(row) {
      copyRewardsAPI(row.id).then((res) => {
        this.$modal.msgSuccess(this.$t("复制成功"))
        this.handleQuery()
      })
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.dateRangeCreateTime = []
      this.queryParams = {
        page: 1,
        rows: 10,
        number: null,
        name: null,
        level: null,
        source: null,
        customerService: null,
        status: "1",
        department: null,
        creditLevel: null,
        country: null,
        memberCode: null,
        memberName: null,
        memberMobile: null,
        memberAreaCode: null
      }
      this.handleQuery()
    }
  }
}
</script>
<style>
.rewardstToolTip {
  max-width: 90%;
}
</style>
