<template>
	<div class="mod-config">
		<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
			<el-form-item>
				<el-input v-model="dataForm.name" :placeholder="$t('report.name')" clearable></el-input>
			</el-form-item>
			<el-form-item>
				<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
				<!-- <el-button v-if="$hasPermission('')" type="primary" @click="addOrUpdateHandle()">新增(跳到设计)</el-button> -->
				<el-button v-if="$hasPermission('monitoring:reportsheet:save')" type="primary" @click="handleAdd()">{{ $t('add') }}</el-button>
			</el-form-item>
		</el-form>

		<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="500" @operate-event="handleOperations" @refreshDataList="getDataList" />

		<el-pagination
			@size-change="sizeChangeHandle"
			@current-change="currentChangeHandle"
			:current-page="pageIndex"
			:page-sizes="[10, 20, 50, 100]"
			:page-size="pageSize"
			:total="totalPage"
			layout="total, sizes, prev, pager, next, jumper"
		>
		</el-pagination>
		<!-- 弹窗, 新增 / 修改 -->
		<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="addOrUpdateVisible = false" />
	</div>
</template>

<script>
import { calcMaxHeight } from '@/utils'
import { timeFilter } from '@/utils/filters'
// import AddOrUpdate from './equipmentPlcConnect-add-or-update'
import AddOrUpdate from '@/components/base-dialog/addOrUpdate'
import i18n from '@/i18n'
import BaseTable from '@/components/base-table'
import TableOperateComponent from '@/components/base-table/components/operationComponent'
import axios from '@/utils/request'

const CategoryList = {
	name: 'CategoryList',
	props: {
		injectData: {
			type: Object,
			required: true,
			default: () => ({})
		}
	},
	data() {
		return { calcMaxHeight, pickedId: null }
	},
	mounted() {
		console.log(this.injectData)
		this.pickedId = this.injectData[this.injectData.head.prop]
	},
	methods: {
		handleChange(id) {
			this.pickedId = id
			this.$emit('emit-data', {
				type: 'change-category',
				data: { id: this.injectData.id, fileName: this.injectData.fileName, name: this.injectData.name, url: this.injectData.url, categoryId: id }
			})
		}
	},
	render: function(h) {
		const childOptions = []
		this.injectData.head.options?.forEach(item => {
			console.log('item', item.value)
			childOptions.push(h('el-option', { props: { label: item.label, value: item.value } }, null))
		})
		return h('el-select', { props: { value: this.pickedId }, on: { change: this.handleChange } }, childOptions)
	}
}

const addOrUpdateConfigs = {
	type: 'dialog',
	infoUrl: '/monitoring/reportSheet',
	fields: [{ name: 'fileName', label: i18n.t('report.name'), required: true, span: 24 }],
	operations: [
		{ name: 'cancel', url: true, showAlways: true },
		{ name: 'save', url: '/monitoring/reportSheet', permission: 'monitoring:reportsheet:save', showOnEdit: false },
		{ name: 'update', url: '/monitoring/reportSheet', permission: 'monitoring:reportsheet:update', showOnEdit: true }
	]
}

export default {
	data() {
		return {
			addOrUpdateConfigs,
			tableConfigs: [],
			dataForm: {
				name: ''
			},
			dataList: [],
			pageIndex: 1,
			pageSize: 10,
			totalPage: 0,
			dataListLoading: false,
			dataListSelections: [],
			addOrUpdateVisible: false
		}
	},
	components: {
		AddOrUpdate,
		BaseTable
	},
	activated() {
		this.dataList.splice(0)
		this.getAllCategories()
		this.getDataList()
	},
	computed: {},
	methods: {
		getAllCategories() {
			axios.get(axios.adornUrl('/monitoring/reportSheetCategory/page')).then(({ data: res }) => {
				if (res.data && res.data.list) {
					const categories = res.data.list.map(item => ({ label: item.name, value: item.id }))
					this.tableConfigs = [
						{ type: 'index', width: 100, name: i18n.t('index') },
						{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter, width: 200 },
						{ prop: 'fileName', name: i18n.t('report.name') },
						{ prop: 'category', name: i18n.t('report.type'), subcomponent: CategoryList, options: categories },
						{
							prop: 'operations',
							name: i18n.t('handle'),
							fixed: 'right',
							// width: 180,
							subcomponent: TableOperateComponent,
							options: [{ name: 'preview', emitField: 'fileName' }, { name: 'design', emitField: 'name' }, 'edit', 'delete']
						}
					]
				}
			})
		},
		handleOperations({ type, data }) {
			console.log('operation data: ', data)
			let id = data
			switch (type) {
				case 'change-category':
					return this.updateCategory(data)
				case 'edit':
					return this.addOrUpdateHandle(id)
				case 'delete':
					return this.deleteHandle(id)
				case 'design':
					return this.$router.push({
						name: 'monitoring-reportDesign',
						query: {
							// data 的数据是 emitField 的值
							name: data
						}
					})
				case 'preview':
					return this.$router.push({
						name: 'monitoring-reportPreview',
						query: {
							name: data
						}
					})
			}
		},
		updateCategory({ id, fileName, categoryId }) {
			this.$http({
				url: this.$http.adornUrl('/monitoring/reportSheet'),
				method: 'put',
				data: {
					id,
					fileName,
					category: categoryId
				}
			}).then(({ data: res }) => {
				this.$message.success(i18n.t('success'))
			})
		},
		// 获取数据列表
		getDataList() {
			this.dataListLoading = true

			const queries = {
				page: this.pageIndex,
				limit: this.pageSize,
				name: this.dataForm.name
			}
			if (this.$route.query.category) {
				queries['category'] = this.$route.query.category
			}
			this.$http({
				url: this.$http.adornUrl('/monitoring/reportSheet/page'),
				method: 'get',
				params: this.$http.adornParams(queries)
			}).then(({ data }) => {
				if (data && data.code === 0) {
					this.dataList = data.data.list
					this.totalPage = data.data.total
				} else {
					this.dataList = []
					this.totalPage = 0
				}
				this.dataListLoading = false
			})
		},
		// 每页数
		sizeChangeHandle(val) {
			this.pageSize = val
			this.pageIndex = 1
			this.getDataList()
		},
		// 当前页
		currentChangeHandle(val) {
			this.pageIndex = val
			this.getDataList()
		},
		// 多选
		selectionChangeHandle(val) {
			this.dataListSelections = val
		},
		// 新增 - 跳转到设计
		handleAdd() {
			this.$router.push({
				name: 'monitoring-reportDesign'
			})
		},
		addOrUpdateHandle(id) {
			console.log('edit:', id)
			this.addOrUpdateVisible = true
			this.$nextTick(() => {
				this.$refs.addOrUpdate.init(id)
			})
		},
		// 删除
		deleteHandle(id) {
			var ids = id
				? [id]
				: this.dataListSelections.map(item => {
						return item.id
				  })
			this.$confirm(`${ i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() }) }`, i18n.t('prompt.title'), {
				confirmButtonText: i18n.t('confirm'),
				cancelButtonText: i18n.t('cancel'),
				type: 'warning'
			}).then(() => {
				this.$http({
					url: this.$http.adornUrl('/monitoring/equipmentPlcConnect'),
					method: 'delete',
					data: this.$http.adornData(ids, false, 'raw')
				}).then(({ data }) => {
					if (data && data.code === 0) {
						this.$message({
							message: i18n.t('prompt.success'),
							type: 'success',
							duration: 1500,
							onClose: () => {
								this.getDataList()
							}
						})
					} else {
						this.$message.error(data.msg)
					}
				})
			})
		}
	}
}
</script>
