<template>
    <div>
        <el-card class="!border-none mb-4" shadow="never">
            <el-form
                class="mb-[-16px]"
                :model="queryParams"
                inline
            >
            <el-form-item label="用户ID" prop="user_id">
    <el-input class="w-[280px]" v-model="queryParams.user_id" clearable placeholder="请输入用户ID" />
</el-form-item>
                <el-form-item label="种植ID" prop="plant_id">
    <el-input class="w-[280px]" v-model="queryParams.plant_id" clearable placeholder="请输入种植ID" />
</el-form-item>
                <el-form-item label="操作类型" prop="type">
    <el-select class="w-[280px]" v-model="queryParams.type" clearable placeholder="请选择操作类型">
        <el-option label="全部" value=""></el-option>
        <el-option 
            v-for="(item, index) in dictData.land_plant_action"
            :key="index" 
            :label="item.name"
            :value="item.value"
        />
    </el-select>
</el-form-item>
<el-form-item label="种植操作时间" prop="create_time">
    <daterange-picker
        v-model:startTime="queryParams.start_time"
        v-model:endTime="queryParams.end_time"
    />
</el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="resetPage">查询</el-button>
                    <el-button @click="resetParams">重置</el-button>
                </el-form-item>
            </el-form>
        </el-card>
        <el-card class="!border-none" v-loading="pager.loading" shadow="never">
            <div class="mt-4">
                <el-table :data="pager.lists" @selection-change="handleSelectionChange" style="width: 100%">
                    <el-table-column type="selection" width="55" />
                    <el-table-column label="ID" prop="id" width="80" show-overflow-tooltip />
                    <!-- <el-table-column label="用户信息" width="200">
                        <template #default="{ row }">
                            <el-tag class="mr-2" type="info">ID: {{ row.user_id }}</el-tag>
                            <el-tag class="mr-2" type="info">账户: {{ row.account }}</el-tag>
                        </template>
                    </el-table-column> -->
                    <el-table-column label="所属土地种植" width="200">
                        <template #default="{ row }">
                            <el-tag class="mr-2" type="info">ID: {{ row.plant_id }}</el-tag>
                            <el-tag class="mr-2" type="info">类型: {{ row.kind }} 品牌: {{ row.breed }}</el-tag>
                        </template>
                    </el-table-column>
                    <el-table-column label="种植操作类型" align="center" prop="type">
    <template #default="{ row }">
        <dict-value :options="dictData.land_plant_action" :value="row.type" />
    </template>
</el-table-column>
                    <el-table-column label="种植操作" prop="type_text" show-overflow-tooltip />
                    <el-table-column label="种植操作时间" width="180" align="center" prop="plant_date">
    <template #default="{ row }">
      <span>{{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
    </template>
</el-table-column>
                    <el-table-column label="操作" width="260" align="center" fixed="right">
                        <template #default="{ row }">
                             <el-button
                                v-perms="['land.land_plant_action/edit']"
                                type="primary"
                                link
                                @click="handleEdit(row)"
                            >
                                编辑
                            </el-button>
                            <el-button type="primary" link @click="handleDetail(row)"
                            >
                                操作详情
                            </el-button>
                            <el-button type="primary" link @click="handlePicDetail(row)">
                                操作图片
                            </el-button>
                            <el-button
                                v-perms="['land.land_plant_action/delete']"
                                type="danger"
                                link
                                @click="handleDelete(row.id)"
                            >
                                删除
                            </el-button>
                        </template>
                    </el-table-column>
                </el-table>
            </div>
            <div class="flex mt-4 justify-end">
                <pagination v-model="pager" @change="getLists" />
            </div>
        </el-card>
        <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
    </div>

    <el-dialog v-model="dialogTableVisible" title="种植操作详情">
        <el-table :data="detailData.gridData">
            <el-table-column property="item" label="操作项" width="150" />
            <el-table-column property="value" label="操作内容" />
        </el-table>
    </el-dialog>

    <el-dialog v-model="dialogPicVisible" title="种植操作图片" center>
        <div style="display: inline-block; margin: 12px" v-for="img in detailData.picData" :key="img">
            <el-image
                style="width: 200px; height: 200px"
                :src="img"
                :zoom-rate="1.2"
                :max-scale="5"
                :min-scale="0.2"
                :preview-src-list="detailData.picData"
                :initial-index="4"
                fit="cover"
                center
            />
        </div>
    </el-dialog>
</template>

<script lang="ts" setup name="landPlantActionLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiLandPlantActionLists, apiLandPlantActionDelete } from '@/api/land_plant_action'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

const { query } = useRoute()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
// 是否显示编辑框
const showEdit = ref(false)

let plant_id = query.plant_id
if (typeof plant_id == 'undefined') {
    plant_id = ''
}

// 查询条件
const queryParams = reactive({
    user_id: '',
    plant_id: plant_id,
    type: '',
    start_time: '',
    end_time: '',
})

interface actionData {
    [key: string]: any
}
const actionMap = reactive<actionData>({
    '1': {
        kind: '肥料种类',
        breed: '肥料品牌',
        dosage: '肥料用量',
        start_date: '开始日期',
        end_date: '结束日期',
        area: '施肥面积',
        user: '参与人',
        pic: '施肥图片',
        remark: '备注信息'
    },
    '2': {
        kind: '除草剂种类',
        breed: '除草剂品牌',
        dosage: '除草剂用量',
        start_date: '开始日期',
        end_date: '结束日期',
        area: '作业面积',
        user: '参与人',
        pic: '除草图片',
        remark: '备注信息'
    },
    '3': {
        type: '灌溉类型',
        start_date: '开始日期',
        end_date: '结束日期',
        area: '灌溉面积',
        user: '参与人',
        pic: '灌溉图片',
        remark: '备注信息'
    },
    '4': {
        kind: '杀虫剂种类',
        breed: '杀虫剂品牌',
        dosage: '杀虫剂用量',
        start_date: '开始日期',
        end_date: '结束日期',
        area: '作业面积',
        user: '参与人',
        pic: '杀虫图片',
        remark: '备注信息'
    },
    '5': {
        user: '参与人',
        pic: '收获图片',
        remark: '备注信息'
    }
})

const irrigateMap = reactive<actionData>({
    '1': '喷灌',
    '2': '滴灌',
    '3': '沟灌'
})
// 选中数据
const selectData = ref<any[]>([])

// 表格选择后回调事件
const handleSelectionChange = (val: any[]) => {
    selectData.value = val.map(({ id }) => id)
}

// 获取字典数据
const { dictData } = useDictData('land_plant_action')

// 分页相关
const { pager, getLists, resetParams, resetPage } = usePaging({
    fetchFun: apiLandPlantActionLists,
    params: queryParams
})

const dialogPicVisible = ref(false)
const dialogTableVisible = ref(false)
const detailData = reactive({
    gridData: [{}],
    picData: [] as any[]
})

// 详情
const handleDetail = (data: any) => {
    const action = JSON.parse(data.detail)
    detailData.gridData = [{}]
    for (const key in actionMap[data.type]) {
        const item = actionMap[data.type][key] ?? '-'
        if (data.type == 3 && key == 'type') {
            action[key] = irrigateMap[action[key]]
        }
        detailData.gridData.push({
            item: item,
            value: action[key] ?? '-'
        })
    }
    detailData.gridData.splice(0, 1)
    dialogTableVisible.value = true
}

const handlePicDetail = (data: any) => {
    detailData.picData = []
    const picList = JSON.parse(data.detail)
    for (const key in picList.pic) {
        detailData.picData.unshift(picList.pic[key])
    }
    dialogPicVisible.value = true
}

// 添加
const handleAdd = async () => {
    showEdit.value = true
    await nextTick()
    editRef.value?.open('add')
}

// 编辑
const handleEdit = async (data: any) => {
    showEdit.value = true
    await nextTick()
    editRef.value?.open('edit')
    editRef.value?.setFormData(data)
}

// 删除
const handleDelete = async (id: number | any[]) => {
    await feedback.confirm('确定要删除？')
    await apiLandPlantActionDelete({ id })
    getLists()
}

getLists()
</script>

