<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :rules="rules" class="integral-rule-operate" :disabled="showViewTime" label-width="120px">
      <el-form-item :label="$t('指标类型')" prop="type">
        <dict-selector clearable :type="DICT_TYPE.SCORE_RULE_TYPE" @change="changeIntegraltype" v-model="queryParams.type"> </dict-selector>
      </el-form-item>
      <el-row :gutter="10">
        <el-col :span="12">
          <el-form-item :label="$t('中文标题')" prop="titleZh">
            <el-input style="width: 300px" v-model="queryParams.titleZh" :placeholder="$t('请输入查找')" clearable v-trim />
            <el-button size="mini" type="text" style="margin-left: 10px" v-if="queryParams.type == '4' && !showViewTime" @click="handleSelectBannerDialog()">{{ $t("选择") }}</el-button>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('英文标题')" prop="titleEn"> <el-input style="width: 300px" v-model="queryParams.titleEn" :placeholder="$t('请输入查找')" clearable v-trim /> </el-form-item
        ></el-col>
        <el-col :span="12">
          <el-form-item :label="$t('法文标题')" prop="titleFr"> <el-input style="width: 300px" v-model="queryParams.titleFr" :placeholder="$t('请输入查找')" clearable v-trim /> </el-form-item
          ></el-col>
      </el-row>
      <el-row :gutter="10">
        <el-col :span="12">
          <el-form-item :label="$t('中文封面图')" prop="coverImageZh">
            <image-upload v-model="queryParams.coverImageZh" :fileType="['png', 'jpg', 'jpeg']" :isShowEditButton="!showViewTime" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('英文封面图')" prop="coverImageEn">
            <image-upload v-model="queryParams.coverImageEn" :isShowEditButton="!showViewTime" :fileType="['png', 'jpg', 'jpeg']" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('法文封面图')" prop="coverImageFr">
            <image-upload v-model="queryParams.coverImageFr" :isShowEditButton="!showViewTime" :fileType="['png', 'jpg', 'jpeg']" />
          </el-form-item>
        </el-col>
      </el-row>
      <!--分享活动内容 -->
      <el-form-item :label="$t('中文活动内容')" prop="extraShare.activityDescZh" v-if="queryParams.type == '4'">
        <el-col :span="18">
          <editor :readOnly="showViewTime" :class="{ readOnlyEditor: showViewTime }" v-model="queryParams.extraShare.activityDescZh" :min-height="150" />
        </el-col>
        <el-col :span="1"></el-col>
        <el-button type="text" @click="viewActivityDesc('Zh')">{{ $t("预览") }}</el-button>
      </el-form-item>
      <el-form-item :label="$t('英文活动内容')" prop="extraShare.activityDescEn" v-if="queryParams.type == '4'">
        <el-col :span="18">
          <editor :class="{ readOnlyEditor: showViewTime }" :readOnly="showViewTime" v-model="queryParams.extraShare.activityDescEn" :min-height="150" />
        </el-col>
        <el-col :span="1"></el-col>
        <el-button type="text" @click="viewActivityDesc('En')">{{ $t("预览") }}</el-button>
      </el-form-item>

      <!-- 链接 -->
      <el-form-item :label="$t('活动链接')" v-if="queryParams.type == '4'">
        <el-input v-model="queryParams.extraShare.activityUrl" :placeholder="$t('请输入活动链接')" clearable :disabled="true" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
      </el-form-item>
      <!-- 推荐分享文案 -->

      <el-row :gutter="10" v-if="queryParams.type == '3'">
        <el-col :span="12">
          <el-form-item :label="$t('中文分享文案 ')" prop="extraRecommend.shareContentZh"> <el-input type="textarea" style="width: 300px" v-model="queryParams.extraRecommend.shareContentZh" :placeholder="$t('请输入分享文案')" clearable v-trim /> </el-form-item
        ></el-col>
        <el-col :span="12">
          <el-form-item :label="$t('英文分享文案')" prop="extraRecommend.shareContentEn"> <el-input type="textarea" style="width: 300px" v-model="queryParams.extraRecommend.shareContentEn" :placeholder="$t('请输入分享文案')" clearable v-trim /> </el-form-item
        ></el-col>
      </el-row>
      <!-- 注册链接 -->
      <el-form-item :label="$t('注册链接')" v-if="queryParams.type == '3'">
        <el-input v-model="queryParams.registerUrl" :placeholder="$t('请输入注册链接')" clearable :disabled="true" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
      </el-form-item>
      <el-form-item v-if="queryParams.type == '1'" :label="$t('客户方')" prop="extraOrderV.customerSide">
        <dict-selector v-model="queryParams.extraOrderV.customerSide" :type="DICT_TYPE.CUSTOMER_SIDE" form-type="checkbox" multiple>
        </dict-selector>
      </el-form-item>
      <el-form-item v-if="queryParams.type == '1'" :label="$t('首单')" prop="extraOrderV.firstOrder">
        <el-radio-group v-model="queryParams.extraOrderV.firstOrder">
          <el-radio v-for="dict in getDictDatas(DICT_TYPE.YES_OR_NO_OR_ALL)" :key="dict.value" :label="dict.value">{{ $l(dict, "label") }}</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item :label="$t('运输方式')" v-if="queryParams.type == '1'" prop="extraOrderV.transportType">
        <dict-selector clearable :type="DICT_TYPE.TRANSPORT_TYPE" v-model="queryParams.extraOrderV.transportType"> </dict-selector>
      </el-form-item>
      <el-form-item :label="$t('提货点')" v-if="queryParams.type == '1'" prop="extraOrderV.receiveAddrList">
        <el-cascader v-if="cascaderState" style="width: 400px" :options="regionTreeList" @change="selectHandle" @expand-change="selectExpand" collapse-tags v-model="queryParams.extraOrderV.receiveAddrList" :props="cascaderProps" clearable></el-cascader>
      </el-form-item>
      <el-form-item :label="$t('渠道')" v-if="queryParams.type == '1' && queryParams.extraOrderV.transportType == '3'">
        <el-select v-model="queryParams.extraOrderV.channel" multiple placeholder="请选择">
          <el-option v-for="item in channelList" :key="item.channelId" :label="isChinese ? item.nameZh : item.nameEn" :value="item.channelId"> </el-option>
        </el-select>
      </el-form-item>
      <el-row :gutter="10">
        <!-- v值积分 -->
        <el-col :span="18">
          <el-form-item :label="$t('积分')" v-if="queryParams.type == '1'" required>
            <el-row v-for="(item, index) in queryParams.extraOrderV.orderVRule">
              <el-col :span="4">
                <el-form-item :prop="'extraOrderV.orderVRule.' + index + '.low'" :rules="rules.extraOrderV.orderVRule.low"> <el-input style="width: 120px" v-model.number="item.low"></el-input></el-form-item>
              </el-col>
              <el-col :span="2">
                {{ queryParams.extraOrderV.transportType == "3" ? "kg" : "m³" }}
                {{ $t("至") }}
              </el-col>
              <el-col :span="4">
                <el-form-item :prop="'extraOrderV.orderVRule.' + index + '.high'" :rules="rules.extraOrderV.orderVRule.high"> <el-input style="width: 120px" v-model.number="item.high"></el-input> </el-form-item
              ></el-col>
              <el-col :span="2"> {{ queryParams.extraOrderV.transportType == "3" ? "kg" : "m³" }} = </el-col>
              <el-col :span="4">
                <el-form-item :prop="'extraOrderV.orderVRule.' + index + '.score'" :rules="rules.extraOrderV.orderVRule.score"><el-input style="width: 120px" v-model.number="item.score"></el-input></el-form-item>
              </el-col>
              <el-col :span="2">
                {{ $t("积分") }}
              </el-col>
              <el-col :span="1">
                <el-button type="primary" :icon="index == '0' ? 'el-icon-plus' : 'el-icon-minus'" @click="handleOrderVRule(item, index)"></el-button>
              </el-col>
            </el-row>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="10">
        <!-- 除v值之外的积分规则 -->
        <el-form-item v-if="queryParams.type != '1'" :label="$t('积分')" prop="getScoreOnce">
          <el-input style="width: 300px" v-model.number="queryParams.getScoreOnce" :placeholder="$t('请输入数字')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
        </el-form-item>
      </el-row>
      <el-row>
        <el-form-item v-if="queryParams.type != '2'" :label="$t('累计最高积分')">
          <el-input style="width: 300px" v-model.number="queryParams.maxScoreTotal" :placeholder="$t('请输入累计最高积分')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
        </el-form-item>
      </el-row>
      <el-row>
        <el-form-item v-if="queryParams.type == '1'" :label="$t('订单入口')" prop="extraOrderV.orderEntry">
          <dict-selector clearable :multiple="true" :type="DICT_TYPE.PLATFORM_TYPE" v-model="queryParams.extraOrderV.orderEntry"> </dict-selector>
        </el-form-item>
      </el-row>
      <el-row>
        <div>
          <el-form-item :label="$t('活动有效期')" prop="dateRangeCreateTime">
            <el-date-picker type="daterange" clearable placement="bottom-start" v-model="queryParams.dateRangeCreateTime" style="width: 300px" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
          </el-form-item>
        </div>
      </el-row>
      <el-row :gutter="10">
        <el-col :span="12">
          <el-form-item :label="$t('积分有效期')" prop="scorePeriod">
            <el-input v-model.number="queryParams.scorePeriod" :placeholder="$t('请输入积分有效期天数')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-form-item :label="$t('排序')" prop="orderNum">
          <el-input v-model.number="queryParams.orderNum" :placeholder="$t('请输入排序')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
        </el-form-item>
      </el-row>
      <el-row :gutter="10">
        <el-col :span="12">
          <div>
            <el-form-item :label="$t('中文规则说明')" prop="descZh">
              <el-input type="textarea" v-model="queryParams.descZh"></el-input>
            </el-form-item>
            <span class="del-btn">{{ $t("注：此说明用于展示给会员查看积分原因，请规范填写") }}</span>
          </div>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('英文规则说明')" prop="descEn">
            <el-input type="textarea" v-model="queryParams.descEn"></el-input>
          </el-form-item>
          <span class="del-btn">{{ $t("注：此说明用于展示给会员查看积分原因，请规范填写") }}</span>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('法文规则说明')" prop="descFr">
            <el-input type="textarea" v-model="queryParams.descFr"></el-input>
          </el-form-item>
          <span class="del-btn">{{ $t("注：此说明用于展示给会员查看积分原因，请规范填写") }}</span>
        </el-col>
      </el-row>
      <el-form-item :label="$t('是否推送')" prop="pushActivity">
        <el-radio-group v-model="queryParams.pushActivity">
          <el-radio v-for="dict in getDictDatas(DICT_TYPE.YES_OR_NO)" :key="dict.value" :label="dict.value">{{ $l(dict, "label") }}</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item :label="$t('展示平台')">
        <dict-selector clearable formType="checkbox" :multiple="true" :type="DICT_TYPE.PLATFORM_TYPE" v-model="queryParams.showPlatform"> </dict-selector>
      </el-form-item>
      <el-form-item v-if="queryParams.type == '2'" :label="$t('注册平台')" prop="extraRegister.registerPlatform">
        <dict-selector clearable :multiple="true" :type="DICT_TYPE.CLIENT_PLATFORM" v-model="queryParams.extraRegister.registerPlatform"> </dict-selector>
      </el-form-item>
      <el-form-item :label="$t('是否分享')" prop="extraRecommend.shareStatus" v-if="queryParams.type == '3'">
        <el-radio-group v-model="queryParams.extraRecommend.shareStatus">
          <el-radio v-for="dict in getDictDatas(DICT_TYPE.YES_OR_NO)" :key="dict.value" :label="dict.value">{{ $l(dict, "label") }}</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item :label="$t('是否分享')" prop="extraShare.shareStatus" v-if="queryParams.type == '4'">
        <el-radio-group v-model="queryParams.extraShare.shareStatus">
          <el-radio v-for="dict in getDictDatas(DICT_TYPE.YES_OR_NO)" :key="dict.value" :label="dict.value">{{ $l(dict, "label") }}</el-radio>
        </el-radio-group>
      </el-form-item>

      <!-- 编辑相关内容 -->
      <div v-if="showViewTime">
        <el-form-item :label="$t('创建人')">
          <el-input v-model.number="queryParams.creator" :placeholder="$t('请输入创建人')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
        </el-form-item>
        <el-form-item :label="$t('创建时间')">
          <el-date-picker type="datetime" :placeholder="$t('选择创建时间')" v-model="queryParams.createTime" value-format="yyyy-MM-dd HH:mm:ss" placement="bottom-start"></el-date-picker>
        </el-form-item>
        <el-form-item :label="$t('最后更新人')">
          <el-input v-model.number="queryParams.updater" :placeholder="$t('请输入最后更新人')" clearable onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
        </el-form-item>
        <el-form-item :label="$t('最后更新时间')">
          <el-date-picker type="datetime" :placeholder="$t('选择最后更新时间')" v-model="queryParams.updateTime" value-format="yyyy-MM-dd HH:mm:ss" placement="bottom-start"></el-date-picker>
        </el-form-item>
      </div>
    </el-form>
    <el-row justify="end" :gutter="20" type="flex">
      <el-col :span="3" v-if="$route.query.pageStatus == 'new'">
        <el-button type="primary" @click="handleSaveIntegralRule" style="width: 100%">{{ $t("保存") }}</el-button>
      </el-col>
      <el-col :span="3" v-if="$route.query.pageStatus == 'new'">
        <el-button type="primary" style="width: 100%" @click="handleEnableIntegralRule">{{ $t("保存并启用") }}</el-button>
      </el-col>
      <el-col :span="3" v-if="$route.query.pageStatus == 'edit'">
        <el-button type="primary" style="width: 100%" @click="handleUpdatedIntegralRule">{{ $t("更新") }}</el-button>
      </el-col>
      <el-col :span="3">
        <el-button v-if="$route.query.pageStatus != 'view'" type="primary" style="width: 100%" @click="handleResetIntegralRule">{{ $t("重置") }}</el-button>
      </el-col>

      <el-col :span="3">
        <el-button style="width: 100%" type="primary" @click="handleGoBack">{{ $t("返回") }}</el-button>
      </el-col>
    </el-row>

    <!-- 选择广告弹窗 -->
    <el-dialog :title="$t('选择广告')" :visible.sync="dialogVisible" width="50%">
      <el-table v-loading="loading" :data="list">
        <el-table-column label="" align="center" prop="id" />
        <el-table-column :label="$t('标题')" align="center" prop="titleZh" />
        <el-table-column :label="$t('WEB端图片')" align="center" prop="bannerUrlWeb">
          <template slot-scope="scope">
            <el-image :src="scope.row.bannerUrlWeb"></el-image>
          </template>
        </el-table-column>
        <el-table-column :label="$t('APP端图片')" align="center" prop="bannerUrlApp">
          <template slot-scope="scope">
            <el-image :src="scope.row.bannerUrlApp"></el-image>
          </template>
        </el-table-column>
        <el-table-column :label="$t('状态')" align="center" prop="status">
          <template slot-scope="scope">
            <span>{{ statusName(scope.row.status) }}</span>
          </template>
        </el-table-column>
        <el-table-column :label="$t('创建时间')" align="center" prop="createTime" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
          <template slot-scope="scope">
            <el-button size="mini" type="text" @click="handleSelectAdvertising(scope.row)">{{ $t("选择") }}</el-button>
          </template>
        </el-table-column>
      </el-table>
      <!-- 分页组件 -->
      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList" />
    </el-dialog>

    <!-- 预览弹窗 -->
    <el-dialog :title="$t('预览')" :visible.sync="viewActivityDialog" width="400px">
      <div class="container">
        <div class="phoneBox">
          <div class="title">
            {{ reviewDedtails.title }}
          </div>
          <img :src="reviewDedtails.img" alt="" class="coverImg" />
          <div class="detail" v-html="reviewDedtails.detail"></div>
        </div>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { CommonStatusEnum } from "@/utils/constants"
import { getBannerPage } from "@/api/ecw/banner"
import Editor from "@/components/Editor"
import { getDictDatas, DICT_TYPE } from "@/utils/dict"
import { getRegionTreeList, getChannelList, createIntegralRule, integralRuleDetails, integralRuleUpdated } from "@/api/ecw/memberManagement"
import { deepClone } from "@/utils/index"
import ImageUpload from "@/components/ImageUpload"
import { parseTime } from "@/utils/ruoyi"
import { isNumber } from "min-dash"
import { mergeWith } from "lodash"
export default {
  name: "addIntegrationRuleOperation",
  components: {
    ImageUpload,
    Editor
  },
  data() {
    const validatePass2 = (rule, value, callback) => {
      const index = Number(rule.field.split(".")[2])

      if (index == "0") {
        if (this.queryParams.extraOrderV.orderVRule[index].low >= this.queryParams.extraOrderV.orderVRule[index].high && this.queryParams.extraOrderV.orderVRule[index].high) {
          callback(this.$t("开始积分应小于本次最终积分"))
        } else {
          callback()
        }
      } else if (index > "0") {
        if (this.queryParams.extraOrderV.orderVRule[index].low >= this.queryParams.extraOrderV.orderVRule[index].high && this.queryParams.extraOrderV.orderVRule[index].high) {
          callback(this.$t("开始积分应小于本次最终积分"))
        } else if (this.queryParams.extraOrderV.orderVRule[index].low <= this.queryParams.extraOrderV.orderVRule[index - 1].high) {
          callback(this.$t("开始积分应大于上一次最终积分"))
        } else {
          callback()
        }
      } else {
        callback()
      }
    }
    const validatehigh = (rule, value, callback) => {
      const index = Number(rule.field.split(".")[2])
      console.log("osdpoopd", index)
      if (index == "0") {
        if (this.queryParams.extraOrderV.orderVRule[index].low && this.queryParams.extraOrderV.orderVRule[index].low >= this.queryParams.extraOrderV.orderVRule[index].high) {
          callback(this.$t("最终积分应大于本次开始积分"))
        } else if (this.queryParams.extraOrderV.orderVRule[index + 1] && this.queryParams.extraOrderV.orderVRule[index + 1].low && this.queryParams.extraOrderV.orderVRule[index + 1].low <= this.queryParams.extraOrderV.orderVRule[index].high) {
          callback(this.$t("最终积分应小于下次开始积分"))
        } else {
          callback()
        }
      } else if (index > 0) {
        if (this.queryParams.extraOrderV.orderVRule[index].low && this.queryParams.extraOrderV.orderVRule[index].low >= this.queryParams.extraOrderV.orderVRule[index].high) {
          callback(this.$t("最终积分应大于本次开始积分"))
        } else if (this.queryParams.extraOrderV.orderVRule[index + 1]?.low && this.queryParams.extraOrderV.orderVRule[index + 1].low <= this.queryParams.extraOrderV.orderVRule[index].high) {
          callback(this.$t("最终积分应小于下次开始积分"))
        } else {
          callback()
        }
      } else {
        callback()
      }
    }
    return {
      viewActivityDialog: false,
      //查看显示时间详情
      showViewTime: false,
      CommonStatusEnum: CommonStatusEnum,
      statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
      loading: true,
      total: 0,
      // 广告设置列表
      list: [],
      queryadvertisingParams: {
        pageNo: 1,
        pageSize: 10,
        titleZh: null,
        titleEn: null,
        titleFr: null,
        contentZh: null,
        contentEn: null,
        bannerUrlWeb: null,
        bannerUrlApp: null,
        status: null
      },
      cascaderState: true,
      channelList: [],
      regionTreeList: [],
      dialogVisible: false,
      rules: {
        pushActivity: [
          {
            required: true,
            message: this.$t("请选择是否推送"),
            trigger: "change"
          }
        ],
        getScoreOnce: [
          {
            required: true,
            message: this.$t("请输入积分"),
            trigger: "blur"
          },
          {
            type: "number",
            message: this.$t("请输入整数"),
            trigger: "blur"
          }
        ],
        descEn: [
          {
            required: true,
            message: this.$t("请输入英文规则说明"),
            trigger: "blur"
          }
        ],
        descFr: [
          {
            required: true,
            message: this.$t("请输入法文规则说明"),
            trigger: "blur"
          }
        ],
        descZh: [
          {
            required: true,
            message: this.$t("请输入中文规则说明"),
            trigger: "blur"
          }
        ],
        titleZh: [
          {
            required: true,
            message: this.$t("请输入中文标题"),
            trigger: "blur"
          }
        ],
        titleEn: [
          {
            required: true,
            message: this.$t("请输入英文标题"),
            trigger: "blur"
          }
        ],
        titleFr: [
          {
            required: true,
            message: this.$t("请输入法文标题"),
            trigger: "blur"
          }
        ],
        orderNum: [
          {
            required: true,
            message: this.$t("请输入排序"),
            trigger: "blur"
          },
          {
            type: "number",
            message: this.$t("请输入整数"),
            trigger: "blur"
          }
        ],
        scorePeriod: [
          {
            type: "number",
            message: this.$t("请输入整数"),
            trigger: "blur"
          },
          {
            required: true,
            message: this.$t("请输入积分有效天数"),
            trigger: "blur"
          }
        ],
        type: [
          {
            required: true,
            message: this.$t("请选择指标类型"),
            trigger: "change"
          }
        ],
        dateRangeCreateTime: [
          {
            required: true,
            message: this.$t("请选择活动有效期"),
            trigger: ["change", "blur"]
          }
        ],
        //推荐
        extraRecommend: {
          shareContentEn: [
            {
              required: true,
              message: this.$t("请输入分享文案"),
              trigger: "blur"
            }
          ],
          shareContentZh: [
            {
              required: true,
              message: this.$t("请输入分享文案"),
              trigger: "blur"
            }
          ],
          shareStatus: [
            {
              required: true,
              message: this.$t("请选择是否分享"),
              trigger: "change"
            }
          ]
        },
        //v值
        extraOrderV: {
          orderEntry: [{ required: true, message: "请选择订单入口", trigger: "change" }],
          transportType: [{ required: true, message: "请选择运输方式", trigger: "change" }],
          firstOrder: [{ required: true, message: "请选择是否首单", trigger: "change" }],
          customerSide: [{ required: true, message: "请选择客户方", trigger: "change" }],
          receiveAddrList: [{ required: true, message: "请选择提货点", trigger: "change" }],
          orderVRule: {
            low: [
              {
                required: true,
                message: this.$t("不能为空"),
                trigger: "blur"
              },
              {
                type: "number",
                message: this.$t("请输入整数"),
                trigger: "blur"
              },
              { validator: validatePass2, trigger: "blur" }
            ],
            score: [
              {
                required: true,
                message: this.$t("不能为空"),
                trigger: "blur"
              },
              {
                type: "number",
                message: this.$t("请输入整数"),
                trigger: "blur"
              }
            ],
            high: [
              {
                required: true,
                message: this.$t("不能为空"),
                trigger: "blur"
              },
              {
                type: "number",
                message: this.$t("请输入整数"),
                trigger: "blur"
              },
              { validator: validatehigh, trigger: "blur" }
            ]
          }
        },
        //注册
        extraRegister: {
          registerPlatform: [
            {
              required: true,
              message: this.$t("请选择注册平台"),
              trigger: "change"
            }
          ]
        },
        //分享
        extraShare: {
          activityDescEn: [
            {
              required: true,
              message: this.$t("中文活动内容不能为空"),
              trigger: "blur"
            }
          ],
          activityDescZh: [
            {
              required: true,
              message: this.$t("英文活动内容不能为空"),
              trigger: "blur"
            }
          ],
          shareStatus: [
            {
              required: true,
              message: this.$t("请选择是否分享"),
              trigger: "change"
            }
          ]
        }
      },
      lastSelectedList: [], //上一次选中数据
      oneDimensionalList: [],
      reviewDedtails: {},
      queryParams: {
        dateRangeCreateTime: [], //活动有效期
        type: "", //指标类型
        titleZh: "",
        titleEn: "",
        titleFr: "",
        coverImageZh: "",
        coverImageEn: "",
        coverImageFr: "",
        maxScoreTotal: "",
        endTime: "",
        startTime: "", //活动开始时间
        scorePeriod: "", //积分有效期
        orderNum: "", //排序
        descZh: "",
        pushActivity: "0", //是否推送（0是，1否）默认是
        descEn: "",
        descFr: "",
        getScoreOnce: "", //除v值之外的积分规则
        showPlatform: "1,2,3", //展示平台
        registerUrl: "", //注册链接
        extraRecommend: {
          //推荐
          shareContentEn: "",
          shareContentZh: "",
          shareStatus: "0" //是否分享（0是，1否）默认是
        },
        extraRegister: {
          //	注册扩展字段
          registerPlatform: null
        },
        extraOrderV: {
          //订单V值扩展字段
          channel: [],
          firstOrder: "1",
          customerSide:null,
          orderEntry: null,
          transportType: "", //运输方式
          receiveAddrList: [],
          orderVRule: [{ low: "", high: "", score: "" }]
        },
        extraShare: {
          //	分享扩展字段
          activityDescEn: null,
          activityDescZh: null,
          activityUrl: "",
          shareStatus: "0"
        }
      }
    }
  },
  computed: {
    statusName() {
      return (value) => {
        for (let index in this.statusDictDatas) {
          let dictItem = this.statusDictDatas[index]
          if (dictItem.value == value) {
            return dictItem.value == CommonStatusEnum.ENABLE + "" ? this.$t("正常") : this.$t("禁用")
          }
        }
      }
    },
    isChinese() {
      return this.$i18n.locale === "zh_CN"
    },
    cascaderProps() {
      const label = this.isChinese ? "labelZh" : "labelEn"
      return { multiple: true, value: "id", label }
    }
  },
  watch: {
    "queryParams.dateRangeCreateTime": {
      handler: function (newVal, oldVal) {
        this.$nextTick(() => {
          if (newVal.length) {
            this.queryParams.startTime = newVal[0]
            this.queryParams.endTime = newVal[1]
          } else {
            this.queryParams.startTime = ""
            this.queryParams.endTime = ""
          }
        })
      },
      immediate: true
    },
    isChinese: {
      handler: function (newVal, oldVal) {
        this.cascaderState = false
        this.$nextTick(() => {
          this.cascaderState = true
        })
      },
      immediate: true
    }
  },
  created() {
    this.handleGetChannelList()
    this.queryParams.registerUrl = process.env.VUE_APP_BASE_API + "/#/pages/register/shareRegister"
    this.getList()
    if (this.$route.query.pageStatus == "edit") {
      this.handleIntegralRuleDetails()
    } else if (this.$route.query.pageStatus == "view") {
      this.showViewTime = true
      this.handleIntegralRuleDetails()
    } else {
      this.handleGetRegionTreeList()
    }
    this.queryParams.extraShare.activityUrl = "/pages/activityShare/index"
  },
  activated() {},
  methods: {
    //process.env.NODE_ENV
    changeIntegraltype(e) {
      this.$refs["queryForm"].clearValidate()
    },
    //预览活动详情
    viewActivityDesc(val) {
      this.viewActivityDialog = true
      this.reviewDedtails.title = this.queryParams[`title${val}`]
      this.reviewDedtails.img = this.queryParams[`coverImage${val}`]
      this.reviewDedtails.detail = this.queryParams.extraShare[`activityDesc${val}`]
    },
    //编辑更新积分规则
    handleUpdatedIntegralRule() {
      this.$refs["queryForm"].validate((valid) => {
        if (valid) {
          let params = deepClone(this.queryParams)
          params.showPlatform = this.queryParams.showPlatform?.join()
          params.extraOrderV.orderEntry = this.queryParams.extraOrderV?.orderEntry?.join()
          params.extraOrderV.customerSide = this.queryParams.extraOrderV?.customerSide?.join()
          params.extraRegister.registerPlatform = this.queryParams.extraRegister.registerPlatform?.join()
          if (this.queryParams.type == 1 && this.queryParams.extraOrderV.receiveAddrList?.[0]?.[0] == "000") {
            // params.extraOrderV.receiveAddrList[0] = [0, 0, 0];
            params.extraOrderV.receiveAddrList = [[0, 0, 0]]
          }
          integralRuleUpdated(params).then((res) => {
            this.$message.success(this.$t("更新成功"))
            this.$router.go(-1)
          })
        } else {
          console.log("error submit!!")
          return false
        }
      })
    },
    //获取积分规则详情
    handleIntegralRuleDetails() {
      this.queryParams.showPlatform = []
      integralRuleDetails({ id: this.$route.query.id }).then((res) => {
        const params = mergeWith(deepClone(this.queryParams), res.data, (a, b) => {
          return b === null ? a : undefined
        })

        params.createTime = parseTime(res.data.createTime, "{y}-{m}-{d} {h}:{i}:{s}")
        params.updateTime = parseTime(res.data.updateTime, "{y}-{m}-{d} {h}:{i}:{s}")

        if (isNumber(res.data.extraOrderV?.firstOrder)) {
          params.extraOrderV.firstOrder = res.data.extraOrderV?.firstOrder.toString()
        }
        if (isNumber(res.data.pushActivity)) {
          params.pushActivity = res.data.pushActivity.toString()
        }
        if (isNumber(res.data.extraShare?.shareStatus)) {
          params.extraShare.shareStatus = params.extraShare.shareStatus.toString()
        }
        if (isNumber(res.data.extraRecommend?.shareStatus)) {
          params.extraRecommend.shareStatus = res.data.extraRecommend?.shareStatus.toString()
        }
        params.dateRangeCreateTime = [parseTime(res.data.startTime), parseTime(res.data.endTime)]

        if (params.type == 1 && params.extraOrderV.receiveAddrList[0].toString() == "0,0,0") {
          params.extraOrderV.receiveAddrList = [["000"]]
        }
        this.queryParams = { ...params }
        this.handleGetRegionTreeList()
      })
    },
    handleSelectBannerDialog() {
      this.dialogVisible = true
    },
    handleSelectAdvertising(row) {
      this.dialogVisible = false
      this.queryParams.titleZh = row.titleZh
      this.queryParams.titleEn = row.titleEn
      this.queryParams.titleFr = row.titleFr
      this.queryParams.coverImageZh = row.bannerUrlApp
      this.queryParams.coverImageEn = row.bannerUrlApp
      this.queryParams.coverImageFr = row.bannerUrlApp
      this.queryParams.extraShare.activityDescZh = row.contentEn
      this.queryParams.extraShare.activityDescEn = row.contentZh
    },
    /** 查询列表 */
    getList() {
      this.loading = true
      // 处理查询参数
      let params = { ...this.queryadvertisingParams }
      getBannerPage(params).then((response) => {
        this.list = response.data.list
        this.total = response.data.total
        this.loading = false
      })
    },
    //重置按钮操作
    handleResetIntegralRule() {
      this.$modal
        .confirm(this.$t("是否确认重置此礼品规则表单"), this.$t("提示"))
        .then(() => {
          this.$refs["queryForm"].resetFields()
          this.$modal.msgSuccess(this.$t("操作成功"))
        })
        .catch(() => {})
    },
    //返回按钮操作
    handleGoBack() {
      this.$modal
        .confirm(this.$t("确认返回吗?"), this.$t("提示"))
        .then(() => {
          // this.$router.go(-1);
          this.$store.dispatch("tagsView/delCurrentView")
          this.$modal.msgSuccess(this.$t("成功"))
        })
        .catch(() => {})
    },
    //保存
    handleSaveIntegralRule() {
      this.$refs["queryForm"].validate((valid) => {
        if (valid) {
          let params = deepClone(this.queryParams)
          params.showPlatform = this.queryParams.showPlatform?.join()
          params.extraOrderV.orderEntry = this.queryParams.extraOrderV?.orderEntry?.join()
          params.extraOrderV.customerSide = this.queryParams.extraOrderV?.customerSide?.join()
          params.extraRegister.registerPlatform = this.queryParams.extraRegister.registerPlatform?.join()
          params.status = this.queryParams.status || "2"
          if (this.queryParams.type == 1 && this.queryParams.extraOrderV.receiveAddrList[0][0] == "000") {
            params.extraOrderV.receiveAddrList = [[0, 0, 0]]
          }
          createIntegralRule(params).then((res) => {
            this.$message.success(this.$t("成功"))
            this.$router.go(-1)
          })
        } else {
          console.log("error submit!!")
          return false
        }
      })
    },
    //保存并启用
    handleEnableIntegralRule() {
      this.$refs["queryForm"].validate((valid) => {
        if (valid) {
          let params = deepClone(this.queryParams)
          params.showPlatform = this.queryParams.showPlatform?.join()
          params.extraOrderV.orderEntry = this.queryParams.extraOrderV.orderEntry?.join()
          params.extraOrderV.customerSide = this.queryParams.extraOrderV.customerSide?.join()
          params.extraRegister.registerPlatform = this.queryParams.extraRegister.registerPlatform?.join()
          params.status = this.queryParams.status || "1"
          if (this.queryParams.type == 1 && this.queryParams.extraOrderV.receiveAddrList[0][0] == "000") {
            params.extraOrderV.receiveAddrList = [[0, 0, 0]]
          }
          createIntegralRule(params).then((res) => {
            this.$message.success(this.$t("成功"))
            this.$router.go(-1)
          })
        } else {
          console.log("error submit!!")
          return false
        }
      })
    },
    handleOrderVRule(item, index) {
      if (index == "0") {
        this.queryParams.extraOrderV.orderVRule.push({
          low: "",
          high: "",
          score: ""
        })
      } else {
        this.queryParams.extraOrderV.orderVRule.splice(index, 1)
      }
    },
    //获取渠道列表
    handleGetChannelList() {
      getChannelList().then((res) => {
        this.channelList = res.data
      })
    },
    selectExpand(val) {},
    selectHandle(val, defaultStatus = false) {
      this.queryParams.extraOrderV.receiveAddrList = []
      let current = [] // 获取当前选中的哪个数据
      if (val.length >= this.lastSelectedList.length) {
        let keys = this.lastSelectedList.map((item) => JSON.stringify(item))
        current = val.filter((item) => !keys.includes(JSON.stringify(item)))
      } else {
        // 取消选中
        let keys = val.map((item) => JSON.stringify(item))
        current = this.lastSelectedList.filter((item) => !keys.includes(JSON.stringify(item)))
      }

      const currentValue = current.length > 0 ? current[0][0] || "" : ""
      if (currentValue == "000") {
        if (this.judgetAllSelected(val)) {
          this.traverseTree(this.regionTreeList) //获取全选时回显的数据
        } else {
          this.queryParams.extraOrderV.receiveAddrList = [] //不选
        }
      } else {
        this.queryParams.extraOrderV.receiveAddrList = val //半选
      }
      if (!defaultStatus) {
        this.checkIsAddAllSelected()
      }

      // this.$nextTick(() => {
      //
      this.lastSelectedList = this.queryParams.extraOrderV.receiveAddrList
      // });
    },
    checkIsAddAllSelected() {
      //这里你要判断好你的dom是否正确
      let label1 = document.querySelectorAll(".el-cascader-panel")[0].querySelector(".el-cascader-menu__wrap").querySelectorAll("li")[0].querySelectorAll("label")[0]
      let span1 = document.querySelectorAll(".el-cascader-panel")[0].querySelector(".el-cascader-menu__wrap").querySelectorAll("li")[0].querySelectorAll("label")[0].querySelectorAll("span")[0]
      // 获取所有的数据
      let list = this.regionTreeList // 原始数据列表
      if (this.oneDimensionalList.length === 0) {
        this.getTreeList(list) // 把所有的父子级平铺成一个一级列表
      }

      let origin = [...this.oneDimensionalList].filter((item) => !item.children) //获取所有的叶子节点
      let nowList = [...this.queryParams.extraOrderV.receiveAddrList].filter((item) => item[0] !== "000")

      // 半选时, 如果有之前选过全选,要把全选过滤掉
      if (origin.length > nowList.length && nowList.length != 0) {
        this.queryParams.extraOrderV.receiveAddrList = deepClone(this.queryParams.extraOrderV.receiveAddrList.filter((item) => item[0] !== "000"))
        //设置半选样式，setTimeout可以解决样式渲染不上的问题
        setTimeout(function () {
          label1.className = "el-checkbox"
          span1.className = "el-checkbox__input is-indeterminate"
        }, 1)
      } else if (nowList.length == 0) {
        //不选时, 如果有之前选过全选,要把全选过滤掉
        this.queryParams.extraOrderV.receiveAddrList = deepClone(this.queryParams.extraOrderV.receiveAddrList.filter((item) => item[0] !== "000"))
        label1.className = "el-checkbox"
        span1.className = "el-checkbox__input"
      } else {
        // 当所有的数据都选择时, 要自动把全选勾选上  最后这种是：origin.length == nowList.length
        if (this.queryParams.extraOrderV.receiveAddrList[0] && this.queryParams.extraOrderV.receiveAddrList[0][0] !== "000") {
          this.queryParams.extraOrderV.receiveAddrList = [["000"], ...this.queryParams.extraOrderV.receiveAddrList]
          label1.className = "el-checkbox"
          span1.className = "el-checkbox__input is-checked"
        }
      }
    },
    getTreeList(list) {
      let _this = this
      for (let i = 0; i < list.length; i++) {
        let a = list[i]
        if (a.id !== "000") {
          this.oneDimensionalList.push(list[i])
        }
        if (a.children && a.children.length > 0) {
          let res = _this.getTreeList(a.children)
          if (res) {
            return res
          }
        }
      }
    },
    judgetAllSelected(node) {
      // 判断是否是全选,也就是看已选择的选中中包不包含"全选"
      let isAllSelected = false
      for (let i = 0; i < node.length; i++) {
        if (node[i][0] == "000") {
          isAllSelected = true
          break
        }
      }
      return isAllSelected
    },
    traverseTree(list, parentNode = []) {
      list.length > 0 &&
        list.forEach((e) => {
          let pNode = deepClone(parentNode)
          if (e.children && e.children.length > 0) {
            pNode.push(e.id) // 1 11
            this.traverseTree(e.children, pNode)
          } else {
            if (parentNode.length > 0) {
              this.queryParams.extraOrderV.receiveAddrList.push([...parentNode, e.id])
            } else {
              this.queryParams.extraOrderV.receiveAddrList.push([e.id])
            }
          }
        })
    },
    //获取目的仓列表
    handleGetRegionTreeList() {
      getRegionTreeList().then((res) => {
        this.regionTreeList = res.data
        this.regionTreeList.unshift({
          id: "000",
          labelZh: "全选",
          labelEn: "select ALL"
        })
        this.$nextTick(() => {
          this.selectHandle(this.queryParams.extraOrderV.receiveAddrList, true)
        })
      })
    },

    //积分来源
    handleSourceType(id) {
      return this.getDictDatas(DICT_TYPE.SCORE_RULE_TYPE).filter((item) => item.value == id)[0]
    }
  }
}
</script>
<style lang="scss" scoped>
::v-deep .integral-rule-operate .el-input {
  width: 300px;
}
.del-btn {
  color: red;
  padding-left: 120px;
}
.readOnlyEditor {
  background-color: #f5f7fa;
  cursor: not-allowed;
}
.phoneBox {
  width: 375px;
  border-radius: 4px;
  border: 1px solid #ebeef5;
  background-color: #fff;
  overflow: hidden;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.container {
  display: flex;
  justify-items: center;
}
.coverImg {
  height: auto;
  width: 100%;
}
</style>
