<template>
  <view>
    <u-popup :show="show" @close="cancel">
      <view class="title">{{ popupTitle }}</view>
      <view style="padding: 20rpx">
        <u-search
          v-if="showSearch"
          @custom="search"
          @search="search"
          :placeholder="placeholder"
          v-model="keyword"
        ></u-search>
        <u-gap v-if="showSearch" height="15"></u-gap>
        <scroll-view
          :scroll-top="scrollTop"
          scroll-y="true"
          class="scroll-Y"
          @scrolltolower="$emit('lower')"
        >
          <!--单选-->
          <u-radio-group
            v-if="type == 'radio'"
            :borderBottom="true"
            iconPlacement="right"
            placement="column"
            @change="groupChange"
            v-model="radioValue"
          >
            <u-radio
              :customStyle="{ marginBottom: '12px' }"
              v-for="(item, index) in dataLists"
              :key="index"
              :label="item[name]"
              :name="index"
            >
            </u-radio>
          </u-radio-group>

          <!--多选-->
          <u-checkbox-group
            v-if="type == 'checkbox'"
            :borderBottom="true"
            placement="column"
            iconPlacement="right"
            @change="checkboxChange"
            v-model="checkboxValue"
          >
            <u-checkbox
              :customStyle="{ marginBottom: '12px', paddingBottom: '12px' }"
              v-for="(item, index) in dataLists"
              :key="index"
              :label="item[name]"
              :name="index"
            >
            </u-checkbox>
          </u-checkbox-group>
        </scroll-view>
        <u-gap height="45"></u-gap>
        <view class="bottons">
          <u-row>
            <u-col customStyle="padding:0 10rpx 20rpx 20rpx" span="6">
              <u-button @click="cancel">取消</u-button>
            </u-col>
            <u-col customStyle="padding:0 20rpx 20rpx 10rpx" span="6">
              <u-button
                @click="submit"
                type="primary"
                throttleTime="1000"
                :disabled="
                  JSON.stringify(radioData) === '{}' &&
                  checkboxData.length === 0
                "
                >确认</u-button
              >
            </u-col>
          </u-row>
        </view>
      </view>
    </u-popup>
  </view>
</template>

<script>
/**
	 * 公共选择下拉框,基于uview。支持下拉加载、列表搜索、单选|多选
	 * @author qianziyu
	 * @description 弹出层选择器,基于uview中u-popup实现
	 * @property {Array}			dataLists			数据列表
	 * @property {String}			name				列表显示的字段名
	 * @property {Boolean}			show				是否展示弹窗 (默认 false )
	 * @property {String}			type				选择类型 单选|多选 (默认 单选 )
	 * @property {Boolean}			showSearch			是否显示搜索框 (默认 true )
	 * @property {String}	        popupTitle			列表标题
	 * @property {String}			placeholder			搜索框placeholder
	 * @event {Function} search 搜索事件,返回keyword
	 * @event {Function} lower 滑动到底部触发,用于下拉加载新数据
	 * @event {Function} cancel 组件关闭事件
	 * @event {Function} submit 提交按钮,返回选中的列表数据
	 * @example <common-select :show="show" :popupTitle="popupTitle" @cancel="show=false" @search="selectSearch" name="cworkStationName" @submit="onsubmit"
			:dataLists="dataLists" placeholder="输入工站名称搜索"></common-select>
	 */
export default {
  name: "qianziyu-select",
  props: {
    dataLists: {
      default: {},
      type: Array,
    },
    name: {
      default: "name",
    },
    show: {
      default: false,
      type: Boolean,
    },
    type: {
      default: "radio",
      type: String,
    },
    showSearch: {
      default: true,
      type: Boolean,
    },
    popupTitle: {
      default: "列表选择",
      type: String,
    },
    placeholder: {
      default: "请输入搜索内容",
    },
  },
  data() {
    return {
      keyword: "",
      scrollTop: 0,
      checkboxData: [],
      checkboxValue: [],
      radioData: {},
      radioValue: "",
    };
  },
  methods: {
    checkboxChange(n) {
      this.checkboxData = [];
      n.forEach((key) => {
        this.checkboxData.push(this.dataLists[key]);
      });
    },
    //选择列表项触发
    groupChange(n) {
      this.radioData = this.dataLists[n];
    },
    //点击搜索触发
    search() {
      this.$emit("search", this.keyword);
    },
    // 触底刷新事件
    onReachBottom() {
			this.$emit("onReachBottom")
    },
    //点击取消按钮触发
    cancel() {
      this.$emit("cancel");
    },
    //提交触发
    submit() {
      if (this.type == "radio") {
        if (JSON.stringify(this.radioData) == "{}") {
          uni.$u.toast("请选择数据");
          return;
        }
        this.$emit("submit", this.radioData);
      } else if (this.type == "checkbox") {
        if (this.checkboxData.length == 0) {
          uni.$u.toast("请选择数据");
          return;
        }
        this.$emit("submit", this.checkboxData);
      }
    },
  },
};
</script>

<style lang="scss" scoped>
.u-popup {
  .title {
    border-bottom: 1px solid #f7f7f7;
    padding: 20rpx;
    text-align: center;
    font-weight: bold;
  }
}

.scroll-Y {
  height: 650rpx;
}

.bottons {
  background-color: white;
  position: fixed;
  left: 0;
  bottom: 0;
  right: 0;
  bottom: constant(safe-area-inset-bottom);
  bottom: env(safe-area-inset-bottom);
}
</style>