<template>
  <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
    <template slot-scope="{ activeKey, data }">
      <template-page
        v-if="activeKey == 'list'"
        ref="pageRef"
        :get-list="getList"
        :table-attributes="tableAttributes"
        :table-events="tableEvents"
        :options-evens-group="optionsEvensGroup"
        :moreParameters="moreParameters"
        :column-parsing="columnParsing"
        :operation="operation()"
        :exportList="exportList"
      >
      </template-page>
      <div v-if="~['add', 'edit'].indexOf(activeKey)">
        <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
          <zj-form-module
            title=""
            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="data.removeTab()">取 消</el-button>
          <el-button size="mini" @click="formConfirm(data.removeTab)" type="primary">确 定</el-button>
        </div>
      </div>
      <el-dialog width="50%" title="商品列表" :visible.sync="innerVisible" append-to-body>
        <el-input v-model="search" placeholder="输入名称搜索">
          <el-button slot="append" icon="el-icon-search" @click="searchGoods()"></el-button>
        </el-input>
        <div class="table" style="margin-top: 10px">
          <el-table :data="goodsList" height="400px" style="width: 100%">
            <el-table-column align="center">
              <template slot="header"></template>
              <template slot-scope="scope">
                <el-button type="primary" size="small" @click="selGoods(scope.row)" :disabled="scope.row.promotionGroup"
                  >选择</el-button
                >
              </template>
            </el-table-column>
            <el-table-column label="商品名称" prop="goodsName"></el-table-column>
            <el-table-column label="商品图片" prop="imgUrl" align="center">
              <template slot-scope="scope">
                <div class="demo-image__preview">
                  <el-image
                    style="width: 40px; height: 40px"
                    :src="$showImgUrl(scope.row.imgUrl)"
                    :preview-src-list="[$showImgUrl(scope.row.imgUrl)]"
                  >
                    <div slot="error" class="image-slot">
                      <i class="el-icon-picture-outline"></i>
                    </div>
                  </el-image>
                </div>
              </template>
            </el-table-column>
          </el-table>
        </div>
        <div class="pagination clearfix">
          <div class="fr">
            <el-pagination
              @size-change="innerHandleSizeChange"
              @current-change="innerHandleCurrentChange"
              :current-page="innerCurrentPage"
              :page-sizes="[10, 20, 30, 50]"
              :page-size="10"
              layout="total, sizes, prev, pager, next, jumper"
              :total="innerListTotal"
            >
            </el-pagination>
          </div>
        </div>
        <div slot="footer" class="dialog-footer">
          <el-button @click="innerVisible = false">取 消</el-button>
        </div>
      </el-dialog>
    </template>
  </zj-tab-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,
  getUsedGoodsList,
  batchDeleteBanner
} from '@/api/setting'
import ImageUpload from '@/components/file-upload'
import operation_mixin from '@/components/template/operation_mixin.js'
export default {
  components: { TemplatePage, ImageUpload },
  mixins: [import_mixin, operation_mixin],
  data() {
    return {
      // 表格属性
      tableAttributes: {
        // 启用勾选列
        selectColumn: true
      },
      // 表格事件
      tableEvents: {
        'selection-change': this.selectionChange
      },
      // 勾选选中行
      recordSelected: [],
      /** 表单变量 */
      formDialogType: 0,
      formDialogTitles: ['新增', '编辑'],
      formDialog: false,
      formData: {
        carouselName: '',
        imgSrc: [],
        state: true,
        sortNum: '',
        port: 'SHOP',
        type: '',
        goodsId: '',
        appId: '',
        linkUrl: '',
        selGoodsName: '',
        goodsId: ''
      },
      goodsList: [],
      formType: 'add',
      formVisible: false,
      innerCurrentPage: 1, // 内联当前页码
      innerPageSize: 10, // 内联每页数量
      innerListTotal: 0, // 内联列表总数
      innerVisible: false,
      goodsList: [],
      search: ''
    }
  },
  computed: {
    // 事件组合
    optionsEvensGroup() {
      return [
        [
          [
            this.optionsEvensAuth('add', {
              click: () => {
                this.openForm('add')
              }
            })
          ]
        ],
        [
          [
            this.optionsEvensAuth('del', {
              name: '批量删除',
              click: () => {
                this.batchDelete()
              }
            })
          ]
        ]
      ]
    },
    // 更多参数
    moreParameters() {
      return []
    },
    formItems() {
      return [
        {
          md: 6,
          isShow: true,
          name: 'el-input',
          attributes: { placeholder: '请输入' },
          formItemAttributes: {
            label: '轮播图名称',
            prop: 'carouselName',
            rules: [...required]
          }
        },
        {
          md: 6,
          isShow: true,
          name: 'el-input',
          attributes: { placeholder: '请输入' },
          formItemAttributes: {
            label: '排序',
            prop: 'sortNum',
            rules: []
          }
        },
        {
          md: 8,
          isShow: true,
          name: 'el-radio',
          options: [
            { label: '轮播图', value: 'SHOP' },
            { label: '以旧换新入口', value: 'YJHX' },
            { label: '二手商城', value: 'ESHOP' }
          ],
          attributes: { filterable: true, placeholder: '请选择' },
          formItemAttributes: {
            label: '类型',
            prop: 'port',
            rules: []
          },
          events: {
            change: e => {
              this.clearGoodsId()
              if (e == 'YJHX') {
                this.formData.type = 4
              } else {
                this.formData.type = 1
              }
            }
          }
        },
        {
          md: 6,
          isShow: true,
          name: 'slot-component',
          //     options: [
          // { label: '分类列表', value: 1 },
          //       { label: '商品链接', value: 1 },
          //       // { label: '凡科活动链接', value: 2 },
          //       { label: '专区活动链接', value: 3 }
          //     ],
          formItemAttributes: {
            label: '链接类型',
            prop: 'type',
            rules: []
          },
          render: (h, { props, onInput }) => {
            var { value } = props
            return (
              <el-radio-group v-model={this.formData.type}>
                {this.formData.port == 'YJHX' ? <el-radio label={4}>分类列表</el-radio> : null}
                <el-radio label={3}>专区活动</el-radio>
                <el-radio label={1}>商品链接</el-radio>
              </el-radio-group>
            )
          }
        },
        ...(() => {
          if (this.formData.type == 1) {
            this.formData.appid = ''
            this.formData.linkUrl = ''
            // this.formData.goodsId = ""
            return [
              {
                md: 6,
                isShow: true,
                name: 'slot-component',
                options: this.goodsList,
                attributes: {},
                formItemAttributes: {
                  label: '链接商品',
                  prop: 'goodsId',
                  rules: []
                },
                render: (h, { props, onInput }) => {
                  var { value } = props
                  return (
                    <div>
                      <el-button
                        type="primary"
                        onClick={() => {
                          console.log(11)
                          this.showGoods()
                        }}
                        size="small"
                      >
                        查找商品
                      </el-button>
                      <el-button
                        onClick={() => {
                          this.clearGoodsId()
                        }}
                        size="small"
                      >
                        清除
                      </el-button>
                    </div>
                  )
                }
              },
              {
                md: 6,
                isShow: true,
                name: 'el-input',
                attributes: { placeholder: '请输入', disabled: true },
                formItemAttributes: {
                  label: '链接商品名称',
                  prop: 'goodsName',
                  rules: []
                }
              }
            ]
          } else if (this.formData.type == 2) {
            this.formData.goodsId = ''
            return [
              {
                md: 6,
                isShow: true,
                name: 'el-input',
                attributes: { placeholder: '请输入' },
                formItemAttributes: {
                  label: '活动APPID',
                  prop: 'appid',
                  rules: []
                }
              },
              {
                md: 6,
                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: 6,
                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 []
        })(),
        {
          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} />
          }
        }
      ]
    }
  },
  methods: {
    // 列表请求函数
    getList: carouselMapListPageV2,
    // 列表导出函数
    exportList: carouselMapPageExport,
    // 表格列解析渲染数据更改
    columnParsing(item, defaultData) {
      return defaultData
    },
    // 监听勾选变化
    selectionChange(data) {
      this.recordSelected = data
    },
    // 表格操作列
    operation() {
      return this.operationBtn({
        edit: {
          btnType: 'text',
          click: ({ row, index, column }) => {
            this.openForm('edit', row.id)
          }
        },
        del: {
          btnType: 'text',
          prompt: '确定删除吗？',
          click: ({ row, index, column }) => {
            deleteBanner({ carouselMapId: row.id }).then(() => {
              this.$message({ type: 'success', message: '删除成功!' })
              this.$refs.pageRef.refreshList()
            })
          }
        },
        status: {
          btnType: 'text',
          name: ({ row, index, column }) => {
            return row.state ? '隐藏' : '显示'
          },
          prompt: ({ row, index, column }) => {
            return `确定${row.state ? '隐藏' : '显示'}吗？`
          },
          click: ({ row, index, column }) => {
            changeBannerStatus({ carouselMapId: row.id, state: !row.state }).then(() => {
              this.$message({ type: 'success', message: `${row.state ? '隐藏' : '显示'}成功!` })
              this.$refs.pageRef.refreshList()
            })
          }
        }
      })
    },
    // 取消 新增编辑
    formCancel() {
      this.formVisible = false
      this.$refs?.formRef?.resetFields()
      this.$data.formData = this.$options.data().formData
    },
    // 打开 新增编辑 网点表单
    openForm(type, id) {
      this.$refs.tabPage.addTab({
        // 对应显示的模块
        activeKey: type,
        // 唯一标识
        key: type,
        // 页签名称
        label: { edit: '编辑', add: '新增' }[type],
        // 打开时事件
        triggerEvent: () => {
          this.formCancel()
          this.$nextTick(() => {
            this.formType = type
            this.formVisible = true
            if (type == 'add') {
              this.formDialogType = 0
            } else {
              this.formDialogType = 1
              getBannerDetail({ id }).then(res => {
                Object.assign(this.formData, res.data, {
                  imgSrc: res.data.imgSrc ? [{ url: res.data.imgSrc }] : []
                })
                if (res.data.port == 'ESHOP') {
                  getUsedGoodsList({
                    pageNum: 1,
                    pageSize: -1,
                    params: [{ param: 'a.id', compare: '=', value: res.data.goodsId }]
                  }).then(ress => {
                    this.formData.goodsId = ress.data.records[0].goodsId
                    this.formData.goodsName = ress.data.records[0].goodsName
                  })
                } else {
                  getGoodsList({
                    pageNum: 1,
                    pageSize: -1,
                    goodsId: res.data.goodsId
                  }).then(ress => {
                    this.formData.goodsId = ress.data.records[0].goodsId
                    this.formData.goodsName = ress.data.records[0].goodsName
                  })
                }
              })
            }
          })
        },
        // 关闭时事件
        closeEvent: () => {
          this.formCancel()
        }
      })
    },
    formConfirm(cancel) {
      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: `${{ edit: '编辑', add: '新增' }[this.formType]}成功!` })
              cancel('list')
              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('请选择要删除的轮播图')
      }
    },
    showGoods() {
      this.search = ''
      this.innerVisible = true
      this.showGoodsList()
    },
    clearGoodsId() {
      this.formData.goodsId = ''
      this.formData.goodsName = ''
    },
    searchGoods() {
      this.innerCurrentPage = 1
      this.showGoodsList()
    },
    selGoods(row) {
      this.innerVisible = false
      this.search = ''
      this.formData.goodsId = this.formData.port == 'ESHOP' ? row.id : row.goodsId
      this.formData.goodsName = row.goodsName
    },
    showGoodsList() {
      let params = {
        goodsName: this.search,
        pageNum: this.innerCurrentPage,
        pageSize: this.innerPageSize
      }
      if (this.formData.port == 'ESHOP') {
        getUsedGoodsList({
          pageNum: this.innerCurrentPage,
          pageSize: this.innerPageSize,
          params: [
            { param: 'a.goods_name', compare: 'like', value: this.search },
            { param: 'a.status', compare: '=', value: 'ON' }
          ]
        }).then(res => {
          this.goodsList = res.data.records
          this.innerListTotal = res.data.total
        })
      } else {
        getGoodsList(params).then(res => {
          this.goodsList = res.data.records
          this.innerListTotal = res.data.total
        })
      }
    },
    // 更改内嵌每页数量
    innerHandleSizeChange(val) {
      this.innerPageSize = val
      this.innerCurrentPage = 1
      this.showGoodsList()
    },

    // 更改内嵌当前页
    innerHandleCurrentChange(val) {
      this.innerCurrentPage = val
      this.showGoodsList()
    }
  }
}
</script>

<style lang="scss" scoped></style>
<style>
.dialog-footer {
  padding: 0 30px;
  display: flex;
  justify-content: flex-end;
}
</style>
