<template>
	<div class="app-container">
		<!-- 搜索工作栏 -->
		<SearchBar
			:formConfigs="searchBarFormConfig"
			ref="search-bar"
			@headBtnClick="handleSearchBarBtnClick" />

		<!-- 列表 -->
		<base-table
			:table-props="tableProps"
			:page="queryParams.pageNo"
			:limit="queryParams.pageSize"
			:table-data="list"
			@emitFun="handleEmitFun">
			<method-btn
				v-if="tableBtn.length"
				slot="handleBtn"
				label="操作"
				:width="120"
				:method-list="tableBtn"
				@clickBtn="handleTableBtnClick" />
		</base-table>

		<!-- 分页组件 -->
		<pagination
			v-show="total > 0"
			:total="total"
			:page.sync="queryParams.pageNo"
			:limit.sync="queryParams.pageSize"
			@pagination="getList" />

		<!-- 对话框(添加 / 修改) -->
		<base-dialog
			:dialogTitle="title"
			:dialogVisible="open"
			width="736px"
			@close="cancel"
			@cancel="cancel"
			@confirm="submitForm">
			<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
		</base-dialog>
	</div>
</template>

<script>
import {
	createEquipmentGroupAlarm,
	updateEquipmentGroupAlarm,
	deleteEquipmentGroupAlarm,
	getEquipmentGroupAlarm,
	getEquipmentGroupAlarmPage,
	exportEquipmentGroupAlarmExcel,
} from '@/api/base/equipmentGroupAlarm';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import moment from 'moment';
import { publicFormatter } from '@/utils/dict';
import DialogForm from './dialogForm.vue';

export default {
	name: 'EquipmentGroupAlarm',
	components: { DialogForm },
	mixins: [basicPageMixin],
	data() {
		return {
			searchBarKeys: [''],
			tableBtn: [
				this.$auth.hasPermi('base:equipment-group-alarm:update')
					? {
							type: 'edit',
							btnName: '修改',
					  }
					: undefined,
				this.$auth.hasPermi('base:equipment-group-alarm:delete')
					? {
							type: 'delete',
							btnName: '删除',
					  }
					: undefined,
			].filter((v) => v),
			tableProps: [
				{
					prop: 'createTime',
					label: '添加时间',
					fixed: true,
					width: 180,
					filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
				},
				{  width: 240, prop: 'code', label: '报警编码' },
				{
					prop: 'type',
					label: '报警类型',
					filter: (val) =>
						val != null ? ['-', '字符型', '布尔型', '-'][val] : '-',
				},
				{
					prop: 'grade',
					label: '报警级别',
					filter: publicFormatter(this.DICT_TYPE.EQU_ALARM_LEVEL),
				},
				{ prop: 'alarmCode', label: '设备报警编码' },
				{ prop: 'plcParamName', label: '参数列名' },
				{ prop: 'alarmContent', label: '报警内容' },
			],
			searchBarFormConfig: [
				{
					type: 'input',
					label: '设备分组编码',
					width: '220',
					placeholder: '/',
					param: 'equipmentGroupCode',
					defaultSelect: null,
					disabled: true,
				},
				{
					type: 'input',
					label: '设备分组名称',
					placeholder: '/',
					param: 'equipmentGroupName',
					defaultSelect: null,
					disabled: true,
				},
				{
					type: this.$auth.hasPermi('base:equipment-group-alarm:create')
						? 'button'
						: '',
					btnName: '新增',
					name: 'add',
					plain: true,
					color: 'success',
				},
			],
			rows: [
				[
					{
						input: true,
						label: '报警编码', // 自动生成
						prop: 'code',
						url: '/base/equipment-group-alarm/getCode',
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
					},
					{
						select: true,
						label: '报警类型', // 固定选项
						prop: 'type',
						options: [
							{ label: '布尔型', value: 2 },
							{ label: '字符型', value: 1 },
						],
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
					},
				],
				[
					{
						select: true,
						label: '报警级别', // 字典
						prop: 'grade',
						options: this.getDictDatas(this.DICT_TYPE.EQU_ALARM_LEVEL),
					},
					{
						input: true,
						label: '设备报警编码', // 对应到设备实际的报警编码
						prop: 'alarmCode',
					},
				],
				[
					{
						input: true,
						label: '参数列名', // 在实时数据库的列名
						prop: 'plcParamName',
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
					},
					{
						input: true,
						label: '报警内容',
						prop: 'alarmContent',
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
					},
				],
			],
			// 是否显示弹出层
			open: false,
			// 查询参数
			queryParams: {
				pageNo: 1,
				pageSize: 10,
				equipmentGroupId: null,
			},
			// 表单参数
			form: {
				id: null,
				equipmentGroupId: null,
				code: null,
				type: null,
				grade: null,
				alarmCode: null,
				alarmContent: null,
				plcParamName: null,
			},
			// // 表单校验
			// rules: {
			//   equipmentGroupId: [{ required: true, message: "设备分组ID,关联base_equipment_group不能为空", trigger: "blur" }],
			//   type: [{ required: true, message: "报警类型:1.字符型,2.布尔型不能为空", trigger: "change" }],
			//   alarmContent: [{ required: true, message: "报警内容 该条报警具体的解释不能为空", trigger: "blur" }],
			//   plcParamName: [{ required: true, message: "关联编码,对应到plc_param_name的编码,用于链接数采不能为空", trigger: "blur" }],
			// }
		};
	},
	// watch: {
	//   $route(value) {
	//     console.log('new route info', value)
	//   }
	// },
	// created() {
	// 	this.getList();
	// },
	activated() {
		// 设置顶部搜索栏信息
		const { equipmentGroupName, equipmentGroupCode, equipmentGroupId } =
			this.$route.params;
		this.setSearchBarFormValue('equipmentGroupName', equipmentGroupName);
		this.setSearchBarFormValue('equipmentGroupCode', equipmentGroupCode);
		this.queryParams.equipmentGroupId = equipmentGroupId;
		// if (!equipmentGroupId) this.getList(); // 拦截
		this.getList();
	},
	deactivated() {
		this.setSearchBarFormValue('equipmentGroupName', null);
		this.setSearchBarFormValue('equipmentGroupCode', null);
		this.queryParams.equipmentGroupId = null;
	},
	methods: {
		/** 设置 searchBarForm 的默认值 - 用得比较少 */
		setSearchBarFormValue(param, value) {
			this.searchBarFormConfig.forEach((config) => {
				if (config.param == param) {
					config.defaultSelect = value;
				}
			});
		},
		/** 查询列表 */
		getList() {
			this.loading = true;
			// 执行查询
			getEquipmentGroupAlarmPage(this.queryParams).then((response) => {
				this.list = response.data.list;
				this.total = response.data.total;
				this.loading = false;
			});
		},
		/** 取消按钮 */
		cancel() {
			this.open = false;
			this.reset();
		},
		/** 表单重置 */
		reset() {
			this.form = {
				id: null,
				equipmentGroupId: null,
				code: null,
				type: null,
				grade: null,
				alarmCode: null,
				alarmContent: null,
				plcParamName: null,
			};
			this.resetForm('form');
		},
		/** 搜索按钮操作 */
		handleQuery() {
			this.queryParams.pageNo = 1;
			this.getList();
		},
		/** 重置按钮操作 */
		resetQuery() {
			this.resetForm('queryForm');
			this.handleQuery();
		},
		/** 新增按钮操作 */
		handleAdd() {
			if (this.queryParams.equipmentGroupId == null)
				return this.$message.warning('没有检测到设备分组信息');
			this.reset();
			this.open = true;
			this.title = '添加设备分组报警明细';
		},
		/** 修改按钮操作 */
		handleUpdate(row) {
			this.reset();
			const id = row.id;
			getEquipmentGroupAlarm(id).then((response) => {
				this.form = response.data;
				this.open = true;
				this.title = '修改设备分组报警明细';
			});
		},
		/** 提交按钮 */
		submitForm() {
			this.$refs['form'].validate((valid) => {
				if (!valid) {
					return;
				}
				// 修改的提交
				if (this.form.id != null) {
					updateEquipmentGroupAlarm({
						...this.form,
						equipmentGroupId: this.queryParams.equipmentGroupId,
					}).then((response) => {
						this.$modal.msgSuccess('修改成功');
						this.open = false;
						this.getList();
					});
					return;
				}
				// 添加的提交
				createEquipmentGroupAlarm({
					...this.form,
					equipmentGroupId: this.queryParams.equipmentGroupId,
				}).then((response) => {
					this.$modal.msgSuccess('新增成功');
					this.open = false;
					this.getList();
				});
			});
		},
		/** 删除按钮操作 */
		handleDelete(row) {
			const id = row.id;
			this.$modal
				.confirm('是否确认删除该报警?')
				.then(function () {
					return deleteEquipmentGroupAlarm(id);
				})
				.then(() => {
					this.getList();
					this.$modal.msgSuccess('删除成功');
				})
				.catch(() => {});
		},
		/** 导出按钮操作 */
		handleExport() {
			// 处理查询参数
			let params = { ...this.queryParams };
			params.pageNo = undefined;
			params.pageSize = undefined;
			this.$modal
				.confirm('是否确认导出所有设备分组报警明细数据项?')
				.then(() => {
					this.exportLoading = true;
					return exportEquipmentGroupAlarmExcel(params);
				})
				.then((response) => {
					this.$download.excel(response, '设备分组报警明细.xls');
					this.exportLoading = false;
				})
				.catch(() => {});
		},
	},
};
</script>