<template>
  <div class="app-container">
    <!-- 左侧销售渠道列表 -->
    <div class="channel-list">
      <div class="channel-title">销售渠道</div>
      <div 
        class="channel-item"
        :class="[selectedChannel === '' ? 'active' : '']"
        @click="handleChannelChange('')"
      >
        <span class="channel-index">1</span>
        <span class="channel-name">所有</span>
      </div>
      <div 
        v-for="(item, index) in channelTypeList" 
        :key="item.dictCode"
        :class="['channel-item', selectedChannel === item.value ? 'active' : '']"
        @click="handleChannelChange(item.value)"
      >
        <span class="channel-index">{{ index + 2 }}</span>
        <span class="channel-name">{{ item.label }}</span>
      </div>
    </div>

    <!-- 右侧内容区 -->
    <div class="content-container">
      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
        <el-form-item label="票务名称">
          <el-input
            v-model="queryParams.goodsName"
            placeholder="请输入票务名称"
            clearable
            style="width: 240px;"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
        </el-form-item>
      </el-form>

      <el-row :gutter="10" class="mb8">
        <el-col :span="1.5">
          <el-button
                type="primary"
                plain
                icon="el-icon-plus"
                size="mini"
                @click="handleAdd"
                v-hasPermi="['ticketMr:ticketMr:add']"
              >新增</el-button>
        </el-col>
        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
      </el-row>

      <el-table ref="tables" v-loading="loading" :data="dataList" border>
        <el-table-column label="序号" align="center" type="index" width="60"></el-table-column>
        <el-table-column label="票务名称" align="center" prop="goodsName" width="120" />
        <el-table-column label="票档" align="center" width="100">
          <template slot-scope="scope">
            <span>{{ getSeatTypeNames(scope.row.seatTypeList) }}</span>
          </template>
        </el-table-column>
        <!-- <el-table-column label="销售价" align="center">
          <template slot-scope="scope">
            <span>￥{{ scope.row.salePrice }}</span>
          </template>
        </el-table-column> -->
        <el-table-column label="是否限购" align="center">
          <template slot-scope="scope">
            <el-tag type="success" v-if="scope.row.goodsPerform.buyAstrict > -1">是</el-tag>
            <el-tag type="danger" v-if="scope.row.goodsPerform.buyAstrict == -1">否</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="是否可退" align="center">
          <template slot-scope="scope">
            <el-tag type="success" v-if="scope.row.goodsPerform.backStatus == 0">可退</el-tag>
            <el-tag type="danger" v-if="scope.row.goodsPerform.backStatus == 1">不可退</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="是否实名" align="center">
          <template slot-scope="scope">
            <el-tag type="danger" v-if="scope.row.isAuth == 1">需要</el-tag>
            <el-tag type="success" v-if="scope.row.isAuth == 2">不需要</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="是否允许改签" align="center">
          <template slot-scope="scope">
            <el-tag type="danger" v-if="scope.row.allowReSubmit == 0">不允许</el-tag>
            <el-tag type="success" v-if="scope.row.allowReSubmit == 1">允许</el-tag>
          </template>
        </el-table-column>
        <!-- <el-table-column label="销售渠道" align="center">
          <template slot-scope="scope">
            <span>{{ 
            (scope.row.goodsPerform.channelWx == 0 ? '小程序' : '') + 
            ' ' + 
            (scope.row.goodsPerform.channelWindow == 0 ? '窗口' : '') +
            ' ' + 
            (scope.row.goodsPerform.channelAutoSale == 0 ? '自助售/取票机' : '')
            + ' ' + 
            (scope.row.goodsPerform.channelPersonSale == 0 ? '小程序-分销' : '')
            }}</span>
          </template>
        </el-table-column> -->
        
        <!-- <el-table-column label="销售有效期" align="center">
          <template slot-scope="scope">
            <span>{{ 
              scope.row.goodsPerform && scope.row.goodsPerform.saleBeginTime && scope.row.goodsPerform.saleEndTime ? 
              scope.row.goodsPerform.saleBeginTime +'--'+ scope.row.goodsPerform.saleEndTime :
              '-'
            }}</span>
          </template>
        </el-table-column> -->
        <el-table-column label="状态" align="center">
          <template slot-scope="scope">
            <el-switch
              @change="ionlineApi(scope.row)"
              v-model="scope.row.switchValue"
              :active-value="0"
              active-color="#13ce66"
              inactive-color="#ff4949">
            </el-switch>
          </template>
        </el-table-column>
        <el-table-column label="创建人" align="center" prop="createBy" width="120" />
        <el-table-column label="添加时间" align="center" prop="createTime" width="160" >
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column label="票务说明" align="center">
          <template slot-scope="scope">
            <el-tooltip 
              class="item" 
              effect="dark" 
              :content="scope.row.goodsPerform.detail || '-'" 
              placement="top-start"
            >
              <span class="ellipsis">{{ scope.row.goodsPerform.detail || '-' }}</span>
            </el-tooltip>
          </template>
        </el-table-column>

        <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              @click="openDetails(scope.row)"
              v-hasPermi="['ticketMr:ticketMr:details']"
            >详情</el-button>
            <span v-hasPermi="['ticketMr:ticketMr:edit']" style="display: inline-block;">
              <el-button
                size="mini"
                type="text"
                style="margin-left: 10px;"
                @click="handleUpdate(scope.row)"
                v-if="scope.row.status != 0"
              >修改</el-button>
            </span>
            <span v-hasPermi="['ticketMr:ticketMr:delete']" style="display: inline-block;">
              <el-button
                size="mini"
                type="text"
                style="margin-left: 10px;"
                @click="handleDelete(scope.row,scope.index)"
              >删除</el-button>
            </span>
            <span v-hasPermi="['ticketMr:ticketMr:copy']" style="display: inline-block;">
              <el-button
                size="mini"
                type="text"
                style="margin-left: 10px;"
                @click="handleCopy(scope.row,scope.index)"
              >复制</el-button>
            </span>
          </template>
        </el-table-column>
      </el-table>

      <pagination
        v-show="total>0"
        :total="total"
        :page.sync="queryParams.pageNum"
        :limit.sync="queryParams.pageSize"
        @pagination="getList"
      />

      <!-- 新增/编辑弹框 -->
      <add-and-edit
        ref="addAndEdit"
        @getList="getList"
      />

      <!-- 详情 -->
      <details-dia ref="detailsDia"></details-dia>
    </div>
    <!--  选择渠道  -->
    <el-dialog
      title="复制"
      :visible.sync="dialogVisible"
      width="30%"
      :before-close="()=>dialogVisible = false">
      <el-form 
      :loading="loading" 
      :model="formCopy" 
      :rules="formCopyRules"
      ref="formCopy" 
      size="small" 
      :inline="true" 
      label-width="68px">
        <el-form-item label="销售渠道" label-width="100" prop="channelType">
          <el-select
            v-model="formCopy.channelType"
            placeholder="请选择销售渠道"
            clearable
            style="width: 100%"
          >
            <el-option 
            :label="item.label" 
            :value="item.value"
            v-for="(item, index) in channelTypeList" 
            :key="index"
             />
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button :loading="loading" @click="dialogVisible = false">取 消</el-button>
        <el-button :loading="loading" type="primary" @click="submitCopy()">提交</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>

import { pageList, deleteById, getSelectById, updateStatus,seatTypeList, saveAndEdit,} from '@/api/ticketMr/ticketMr'
import addAndEdit from "./dialog/addAndEdit";
import detailsDia from "./dialog/details.vue";

export default {
  name: "TicketMr",
  dicts: ['agreement_type'],
  components: { addAndEdit, detailsDia },
  data() {
    return {
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 用户表格数据
      dataList: null,
      // 弹出层标题
      title: "",

      // 是否显示弹出层
      open: false,
      // 日期范围
      dateRange: [],
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        type: undefined,
        goodsType: 2,
        classifyId: 1
      },
      statusList: [
        {id: 1, name: '未发布', value: 0},
        {id: 2, name: '发布', value: 1},
        {id: 3, name: '下架', value: 2},
      ],
      visibleStatus: false,
      newObj: {},
      visibleType: '',
      channelTypeList: [],
      selectedChannel: '', // 当前选中的销售渠道
      seatTypeListArr: [],

      formCopy: {},
      formCopyRules: {
        channelType: [{ required: true, message: "请选择渠道", trigger: ["change","blur"] }]
      },
      dialogVisible: false,
    };
  },
  created() {
    this.getList();
    this.getDicts("channel_type").then(response => {
      this.channelTypeList = response.data.map(item => {
        return {
          label: item.dictLabel,
          value: item.dictValue,
          dictCode: item.dictCode
        }
      });
      // 默认选中"所有"
      this.selectedChannel = '';
      this.queryParams.channelType = '';
      this.getList();
      this.getSeatTypeList();
    });
  },
  methods: {
    getSeatTypeList() {
      seatTypeList().then(response => {
        this.seatTypeListArr = Array.isArray(response.data.list) ? response.data.list : [];
      });
    },
    /** 查询列表 */
    getList() {
      this.loading = true;
      pageList(this.addDateRange(this.queryParams, this.dateRange))
      .then(response => {
          this.dataList = response.data.rows;
          this.dataList.forEach(item =>{
            item.switchValue = item.status;
          })
          this.total = response.data.total;
          this.loading = false;
        }
      );
    },
    // 取消按钮
    cancel() {
      this.open = false;
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.dateRange = [];
      this.$set(this.queryParams, 'goodsName', '');
      this.queryParams.pageNum = 1;
      this.handleQuery();
    },
    /** 新增按钮操作 */
    handleAdd() {
      if (!this.selectedChannel) {
        this.$message.warning("请先选择销售渠道!");
        return;
      }
      this.$refs["addAndEdit"].openDialog("新增数据", null, this.selectedChannel);
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.$refs["addAndEdit"].openDialog("修改数据", row);
    },
    /** 复制 */
    async handleCopy(row) {
      try {
        let res = await getSelectById(row.id)
        let goodsPerform = {
          ...res.data.goodsPerform,
          id: null
        }
        let performRefundRule = {
          ...res.data.performRefundRule,
          id: null
        }
        let seatTypeList = []
        res.data.seatTypeList.forEach((item,index)=>{
          seatTypeList.push({
            ...item,
            id: null
          })
        })
        this.formCopy = {
          ...res.data,
          id: null,
          channelType: null,
          seatTypeList,
          goodsPerform,
          performRefundRule
        }
        this.dialogVisible = true
        this.$nextTick(() => {
          this.$refs["formCopy"].clearValidate();
        });
      } catch (error) {
        console.error(error)
      }
    },
    /** 详情按钮操作 */
    openDetails(row) {
      this.$refs["detailsDia"].openDialog("详情", row);
    },
    /**     */
    submitCopy(){
      this.$refs["formCopy"].validate(async (valid,object) => {
        if (valid) {
          try {
            this.loading = true;
            const { code } = await saveAndEdit({ ...this.formCopy });
            if (code === 200) {
              this.$message.success("操作成功!");
              this.dialogVisible = false
              this.getList()
            }
          } catch (error) {
          } finally {
            this.loading = false;
          }
        }else{
          // console.log('error submit!!',valid,object);
          if(object&&JSON.stringify(object) != '{}'){
            let str = ''
            for(let key in object){
              if(object.hasOwnProperty(key)){
                str = str + `[${object[key][0].message}]}]`
              }
            }
            this.$message.error(str);
          }
        }
      });
    },
    /** 发布或者取消发布按钮操作 */
    ionlineApi(row) {
      try {
        updateStatus({ id: row.id, status: row.status == 0 ? 1 : 0 }).then((res) => {
          if (res.code == 200) {
            this.$message({
              type: 'success',
              message: '操作成功!'
            });
            this.getList();
          }
        });
      }catch (e) {
        this.getList();
      }
    },

    // 修改是否启用
    changeStatus(row) {
      console.log(row)
    },

    /** 删除按钮操作 */
    handleDelete(row) {
      this.$modal.confirm('是否确认删除数据票务名称为"' + row.goodsName + '"的数据项？').then(function() {
        return deleteById(row.id);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** 查看按钮操作 */
    seeCenter(obj, type) {
      this.visibleStatus = true
      this.visibleType = type;
      this.newObj = obj;
    },
    // 切换销售渠道
    handleChannelChange(channelValue) {
      console.log(channelValue,'channelValue');
      this.selectedChannel = channelValue;
      this.queryParams.channelType = channelValue;
      this.queryParams.pageNum = 1;
      this.getList();
    },
    // 获取票档名称
    getSeatTypeNames(seatTypeList) {
      if (!seatTypeList || !Array.isArray(seatTypeList)) {
        return '-';
      }
      return seatTypeList.map(item => item.seatTypeName).join('、') || '-';
    },
  }
};
</script>

<style lang="scss" scoped>
.app-container {
  display: flex;
  min-height: calc(100vh - 84px);
  
  .channel-list {
    width: 200px;
    // min-width: 200px;
    background: #fff;
    margin-right: 16px;
    padding: 16px 0;
    border-radius: 4px;
    
    .channel-title {
      font-size: 16px;
      font-weight: bold;
      padding: 0 16px 16px;
      border-bottom: 1px solid #eee;
    }
    
    .channel-item {
      padding: 12px 16px;
      cursor: pointer;
      display: flex;
      align-items: center;
      
      &:hover {
        background: #f5f7fa;
      }
      
      &.active {
        background: #ecf5ff;
        color: #409eff;
      }
      
      .channel-index {
        width: 24px;
        height: 24px;
        line-height: 24px;
        text-align: center;
        background: #f0f2f5;
        border-radius: 4px;
        margin-right: 8px;
        font-size: 12px;
      }
    }
  }
  
  .content-container {
    flex: 1;
    background: #fff;
    padding: 16px;
    border-radius: 4px;
  }

  .ellipsis {
    display: inline-block;
    width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
}
</style>
