<template>
  <template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
    :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
    :operation="operation" :exportList="exportList">
    <el-dialog title="" width="500px" custom-class="diy-dialog" append-to-body :modal="true" :visible.sync="formDialog"
      :show-close="true" :close-on-click-modal="false" :modal-append-to-body="false" :before-close="formCancel">
      <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
        <zj-form-module :title="formDialogTitles[formDialogType]" label-width="100px" :showPackUp="false"
          :form-data="formData" :form-items="formItems">
        </zj-form-module>
      </zj-form-container>
      <div slot="footer" class="dialog-footer">
        <el-button size="mini" @click="formCancel">取 消</el-button>
        <el-button size="mini" @click="formConfirm" type="primary">确 定</el-button>
      </div>
    </el-dialog>
  </template-page>
</template>

<script>
import TemplatePage from '@/components/template/template-page-1.vue'
import import_mixin from '@/components/template/import_mixin.js'
import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
import { carouselMapListPageV2, carouselMapPageExport, changeBannerStatus, addBanner, editBanner, getBannerDetail, deleteBanner, getGoodsList, batchDeleteBanner } from '@/api/setting'
import ImageUpload from '@/components/file-upload'
export default {
  components: { TemplatePage, ImageUpload },
  mixins: [import_mixin],
  data() {
    return {
      // 事件组合
      optionsEvensGroup: [
        [
          [
            {
              name: '新增轮播图',
              isRole: true,
              click: this.addData
            }
          ],
        ],
        [
          [
            {
              name: '批量删除',
              isRole: true,
              click: this.batchDelete
            }
          ],
        ],
      ],
      // 表格属性
      tableAttributes: {
        // 启用勾选列
        selectColumn: false
      },
      // 表格事件
      tableEvents: {
        'selection-change': this.selectionChange
      },
      // 勾选选中行
      recordSelected: [],
      /** 表单变量 */
      formDialogType: 0,
      formDialogTitles: ["新增", "编辑"],
      formDialog: false,
      formData: {
        carouselName: "",
        imgSrc: [],
        state: true,
        sortNum: "",
        type: "",
        goodsId: "",
        appId: "",
        linkUrl: "",
      },
      goodsList: []
    }
  },
  computed: {
    // 更多参数
    moreParameters() {
      return []
    },
    formItems() {
      return [{
        md: 24,
        isShow: true,
        name: 'el-input',
        attributes: { placeholder: '请输入' },
        formItemAttributes: {
          label: '轮播图名称',
          prop: 'carouselName',
          rules: [...required]
        }
      }, {
        md: 24,
        isShow: true,
        name: 'slot-component',
        formItemAttributes: {
          label: '封面图片',
          prop: 'imgSrc',
          rules: [...required]
        },
        render: (h, { props, onInput }) => {
          var { value } = props
          return (
            <ImageUpload fileList={this.formData.imgSrc} uid="imgSrc_materials_drawing_images" limit={1} />
          )
        }
      }, {
        md: 24,
        isShow: true,
        name: 'el-input',
        attributes: { placeholder: '请输入' },
        formItemAttributes: {
          label: '排序',
          prop: 'sortNum',
          rules: []
        }
      }, {
        md: 24,
        isShow: true,
        name: 'el-radio',
        options: [{ label: "商品链接", value: 1 }, { label: "凡科活动链接", value: 2 }, { label: "专区活动链接", value: 3 }],
        attributes: { filterable: true, placeholder: '请选择' },
        formItemAttributes: {
          label: '链接类型',
          prop: 'type',
          rules: []
        }
      },
      ...(() => {
        if (this.formData.type == 1) {
          this.formData.appid = ""
          this.formData.linkUrl = ""
          // this.formData.goodsId = ""
          return [{
            md: 24,
            isShow: true,
            name: 'el-select',
            options: this.goodsList,
            attributes: { filterable: true, placeholder: '请选择' },
            formItemAttributes: {
              label: '选择活动',
              prop: 'goodsId',
              rules: []
            }
          }]
        } else if (this.formData.type == 2) {
          this.formData.goodsId = ""
          return [{
            md: 24,
            isShow: true,
            name: 'el-input',
            attributes: { placeholder: '请输入' },
            formItemAttributes: {
              label: '活动APPID',
              prop: 'appid',
              rules: []
            }
          }, {
            md: 24,
            isShow: true,
            name: 'el-input',
            attributes: { placeholder: '请输入' },
            formItemAttributes: {
              label: '活动路径',
              prop: 'linkUrl',
              rules: []
            }
          }]
        } else if (this.formData.type == 3) {
          this.formData.appid = ""
          this.formData.linkUrl = ""
          // this.formData.goodsId = ""
          return [{
            md: 24,
            isShow: true,
            name: 'el-select',
            options: [
              { value: 2, label: '首页弹窗' },
              { value: 3, label: '胶囊图' },
              { value: 4, label: '活动专区2-左侧专区' },
              { value: 5, label: '活动专区2-右侧专区' },
              { value: 6, label: '专场专区-01' },
              { value: 7, label: '专场专区-02' },
              { value: 8, label: '专场专区-03' },
              { value: 9, label: '专场专区-04' },
              { value: 10, label: '专题精选-01' },
              { value: 11, label: '专题精选-02' },
              { value: 12, label: '专题精选-03' },
              { value: 13, label: '底部广告图' },
            ],
            attributes: { filterable: true, placeholder: '请选择' },
            formItemAttributes: {
              label: '选择活动',
              prop: 'goodsId',
              rules: []
            }
          }]
        }
        return []
      })()
      ]
    }
  },
  methods: {
    // 列表请求函数
    getList: carouselMapListPageV2,
    // 列表导出函数
    exportList: carouselMapPageExport,
    // 表格列解析渲染数据更改
    columnParsing(item, defaultData) {
      return defaultData
    },
    // 监听勾选变化
    selectionChange(data) {
      this.recordSelected = data
    },
    // 表格操作列
    operation(h, { row, index, column }) {
      return (
        <div class='operation-btns'>
          <el-button type="text" onClick={() => {
            getBannerDetail({ id: row.id }).then(res => {
              Object.assign(this.formData, res.data, {
                imgSrc: res.data.imgSrc ? [{ url: res.data.imgSrc }] : [],
              })
              this.formDialogType = 1
              this.openForm()
            })
          }}>编辑</el-button>
          <el-popconfirm
            title="确定删除吗？"
            onConfirm={() => {
              deleteBanner({ carouselMapId: row.id }).then(() => {
                this.$message({ type: 'success', message: '删除成功!' })
                this.$refs.pageRef.refreshList()
              })
            }}
          >
            <el-button type="text" slot="reference">删除</el-button>
          </el-popconfirm>
          <el-popconfirm
            title={`确定${row.state ? '隐藏' : '显示'}吗？`}
            onConfirm={() => {
              changeBannerStatus({ carouselMapId: row.id, state: !row.state }).then(() => {
                this.$message({ type: 'success', message: `${row.state ? '隐藏' : '显示'}成功!` })
                this.$refs.pageRef.refreshList()
              })
            }}
          >
            <el-button type="text" slot="reference">{row.state ? '隐藏' : '显示'}</el-button>
          </el-popconfirm>
        </div>
      )
    },
    addData() {
      this.formDialogType = 0
      this.openForm()
    },
    openForm() {
      getGoodsList({
        pageNum: 1,
        pageSize: -1
      }).then(res => {
        this.goodsList = res.data.records.map(item => ({
          value: item.goodsId,
          label: item.goodsName
        }));
        this.formDialog = true;
      })
    },
    formCancel() {
      this.$refs.formRef.$refs.inlineForm.clearValidate()
      this.$data.formData = this.$options.data().formData
      this.formDialog = false
    },
    formConfirm() {
      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
        if (valid) {
          ([addBanner, editBanner][this.formDialogType])({
            ...this.formData,
            imgSrc: this.formData.imgSrc.map(item => item.url).join(","),
          }).then(res => {
            this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
            this.formCancel()
            this.$refs.pageRef.refreshList()
          })
        }
      })
    },
    batchDelete() {
      if (this.recordSelected && this.recordSelected.length > 0) {
        this.$confirm('此操作将删除选中轮播图, 是否继续?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          let ids = []
          this.recordSelected.forEach(value => {
            ids.push(value.id)
          })
          batchDeleteBanner(ids).then(() => {
            this.$message({ type: 'success', message: '删除成功!' })
            this.$refs.pageRef.refreshList()
          })
        }).catch(() => { });
      } else {
        this.$errorMsg('请选择要删除的轮播图')
      }
    },
  }
}
</script>

<style lang="scss" scoped></style>
