<template>
  <view>
    <Appbar :show="showAppbar" title="基地数据">
      <template #right>
        <view
          v-auth="['endpoint.agricultural_basic.create']"
          class="text-white mr-20px"
          @click="handleCreate"
          >新增</view
        >
      </template>
    </Appbar>
    <u-sticky>
      <view class="bg-white">
        <SearchForm
          :schemas="searchFormSchema"
          @submit="handleSubmit"
        ></SearchForm>
      </view>
    </u-sticky>
    <mescroll-body
      @init="mescrollInit"
      @up="upCallback"
      :up="upOption"
      :down="downOption"
    >
      <view>
        <u-swipe-action
          v-for="(item, i) in dataList"
          :show="item.show"
          :index="i"
          :key="item.id"
          class="my-20rpx mx-30rpx rounded-md overflow-hidden"
          :options="options"
          @click="handleClick"
          @content-click="handleContentClick"
        >
          <view>
            <view class="bg-white p-20rpx">
              <view>基地名称：{{ item.name }} </view>
              <view>农业类型：{{ item.industry_label }}</view>
              <view class="my-12rpx">
                <u-line></u-line>
              </view>

              <view class="grid grid-cols-3">
                <view class="text-center">基地面积</view>
                <view class="text-center">种养殖面积</view>
                <view class="text-center">就业人数</view>
              </view>
              <view class="grid grid-cols-3">
                <view class="text-center">{{ item.areas }}</view>
                <view class="text-center">{{ item.cultivated }}</view>
                <view class="text-center">{{ item.workforce }}</view>
              </view>
            </view>
          </view>
        </u-swipe-action>
      </view>
    </mescroll-body>

    <!-- 详情 -->
    <BaseTablePopup
      v-model="baseShow"
      :colums="baseTableColums"
      :data="currentData"
      @onEdit="handleEdit"
      @onDel="handleDel"
      :editAuth="['endpoint.agricultural_basic.edit']"
      :delAuth="['endpoint.agricultural_basic.destroy']"
    ></BaseTablePopup>
    <!-- 编辑 -->
    <cuPopup v-model="formShow" :title="currentData ? '编辑基地' : '新增基地'">
      <BasicsEdit
        @cancel="formShow = false"
        @confirm="handleEditConfirm"
        :data="currentData"
      ></BasicsEdit>
    </cuPopup>
  </view>
</template>
<script>
import Appbar from '@/components/Appbar'
import SearchForm from '@/components/search-form'
import { http } from '@/api/index.js'
import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js'
import cuPopup from '@/components/cu-popup/index.vue'
import BaseTablePopup from '@/components/base-table/popup.vue'
import BasicsEdit from './components/basics-edit.vue'
import checkPermission from '@/utils/permission.js'
const baseTableColums = [
  {
    title: '基地名称',
    dataIndex: 'name',
  },
  {
    title: '农业类型',
    dataIndex: 'industry_label',
  },
  {
    title: '是否外部链接',
    dataIndex: 'is_blank',
    format: (text) => {
      return text ? '是' : '否'
    },
  },
  {
    title: '排序',
    dataIndex: 'sort',
  },
  {
    title: '基地负责人',
    dataIndex: 'person',
  },
  {
    title: '基地农作物',
    dataIndex: 'crops',
    format: (arr) => {
      return arr?.map((e) => e.name).join(',') ?? ''
    },
  },
  {
    title: '基地经度',
    dataIndex: 'address_lng',
  },
  {
    title: '基地纬度',
    dataIndex: 'address_lat',
  },
  {
    title: '基地地址',
    dataIndex: 'address',
  },
  {
    title: '基地面积',
    dataIndex: 'areas',
  },
  {
    title: '种养殖面积',
    dataIndex: 'cultivated',
  },
  {
    title: '基地就业人数',
    dataIndex: 'workforce',
  },
  {
    title: '基地描述',
    dataIndex: 'description',
  },
]
export default {
  mixins: [MescrollMixin],
  components: {
    SearchForm,
    Appbar,
    cuPopup,
    BaseTablePopup,
    BasicsEdit,
  },
  data() {
    return {
      baseTableColums,
      currentData: null,
      filterParmas: {},
      downOption: {
        use: false,
      },
      upOption: {
        auto: false,
        page: {
          size: 20,
        },
      },
      dataList: [],

      formShow: false,
      baseShow: false,
      searchFormSchema: [
        {
          field: 'name',
          label: '名称',
          component: 'Input',
          componentProps: {
            placeholder: '请输入名称',
          },
        },
        {
          field: 'type',
          label: '农业类型',
          component: 'ApiSelect',
          componentProps: ({ formActionType }) => {
            return {
              api: async (e) => {
                const { data } = await http.get('/api/keywords-industry', {
                  params: e,
                })
                return data.data
              },
              labelField: 'name',
              valueField: 'id',
            }
          },
        },
      ],
    }
  },
  computed: {
    options() {
      return [
        {
          text: '编辑',
          opt: 'edit',
          permission: ['endpoint.agricultural_basic.edit'],
          style: {
            backgroundColor: '#007aff',
          },
        },
        {
          text: '删除',
          opt: 'delete',
          permission: ['endpoint.agricultural_basic.destroy'],
          style: {
            backgroundColor: '#dd524d',
          },
        },
      ].filter((e) =>
        checkPermission(e.permission)
      )
    },
  },
  methods: {
    handleSubmit(e) {
      this.filterParmas = e
      this.mescroll.resetUpScroll()
    },
    upCallback({ num, size }) {
      this.getData({
        ...this.filterParmas,
        page: num,
        per_page: size,
        type: 1,
      })
    },
    async getData(e) {
      try {
        const { data } = await http.get(`/api/agricultural-basic`, {
          params: e,
        })
        if (e.page == 1) this.dataList = []
        const { data: list, meta } = data
        this.dataList = this.dataList.concat(
          list.map((e) => Object.assign({ show: false }, e))
        )
        this.mescroll.endByPage(list.length, meta.total)
      } catch (error) {
        this.mescroll.endErr()
      }
    },
    handleClick(index1, index) {
      const { opt } = this.options[index]
      const item = this.dataList[index1]
      this.currentData = item
      if (opt == 'edit') {
        this.handleEdit(item)
      } else if (opt == 'delete') {
        this.handleDel(item)
      }
    },
    handleContentClick(e) {
      this.currentData = this.dataList[e]
      this.baseShow = true
    },
    handleEdit(item) {
      this.currentData = item
      this.formShow = true
      this.baseShow = false
    },
    async handleDel(item) {
      uni.showModal({
        title: '提示',
        content: '是否确定删除？',
        success: async (res) => {
          if (res.confirm) {
            try {
              await this.$http.delete(`/api/agricultural-basic/${item.id}`)
              this.mescroll.resetUpScroll()
              this.baseShow = false
            } catch ({ data }) {
              this.$u.toast(data.message)
            }
          }
        },
      })
    },
    async handleCreate() {
      this.currentData = null
      this.formShow = true
      this.baseShow = false
    },
    handleEditConfirm() {
      this.mescroll.resetUpScroll()
      this.formShow = false
    },
  },
}
</script>
