GzcxList.vue 4.19 KB
<template>
	<div class="related-list-container">
		<div class="NCC-common-head">
			<div>
				<el-button type="primary" icon="el-icon-plus" @click="addOrUpdateHandle()">新增</el-button>
			</div>
			<div class="NCC-common-head-right">
				<el-tooltip effect="dark" content="刷新" placement="top">
					<el-link icon="icon-ym icon-ym-Refresh NCC-common-head-icon" :underline="false" @click="initData()" />
				</el-tooltip>
			</div>
		</div>
		<div class="table-scroll-area">
			<NCC-table v-loading="listLoading" :data="list">
				<el-table-column prop="sbmc" label="设备名称" align="left" />
			<el-table-column label="关联产品" prop="sssb" align="left">
				<template slot-scope="scope">
					{{ getProductName(scope.row.sssb) }}
				</template>
			</el-table-column>
			<el-table-column prop="code" label="故障代码" align="left" />
			<el-table-column prop="zwbjwb" label="报警文本" align="left" />
			<el-table-column prop="fbsj" label="发布时间" align="left" :formatter="ncc.tableDateFormat" />
			<el-table-column label="操作" fixed="right" width="100">
				<template slot-scope="scope">
					<el-button type="text" @click="addOrUpdateHandle(scope.row.id)">编辑</el-button>
					<el-button type="text" @click="handleDel(scope.row.id)" class="NCC-table-delBtn">删除</el-button>
				</template>
			</el-table-column>
			</NCC-table>
			<pagination :total="total" :page.sync="listQuery.currentPage" :limit.sync="listQuery.pageSize" @pagination="initData" />
		</div>
		<NCC-Form v-if="formVisible" ref="NCCForm" @refresh="refresh" />
	</div>
</template>

<script>
import request from '@/utils/request'
import NCCForm from '@/views/gzcx/Form'

export default {
	name: 'GzcxList',
	components: { NCCForm },
	props: {
		productId: {
			type: String,
			default: ''
		}
	},
	data() {
		return {
			list: [],
			listLoading: false,
			total: 0,
			listQuery: {
				currentPage: 1,
				pageSize: 20,
				sort: "desc",
				sidx: "",
			},
			formVisible: false,
			cpglOptions: []
		}
	},
	watch: {
		productId: {
			immediate: true,
			handler() {
				if (this.productId) {
					this.initData()
				}
			}
		}
	},
	created() {
		this.getCpglOptions()
	},
	methods: {
		getCpglOptions() {
			request({
				url: '/api/Extend/Cpgl',
				method: 'GET',
				data: { currentPage: 1, pageSize: 1000 }
			}).then(res => {
				this.cpglOptions = res.data.list || []
			}).catch(() => {
				this.cpglOptions = []
			})
		},
		getProductName(productId) {
			if (!productId) return '--';
			const product = this.cpglOptions.find(item => item.id === productId);
			return product ? (product.cpmc || '--') : '--';
		},
		initData() {
			if (!this.productId) return
			this.listLoading = true
			let query = {
				...this.listQuery,
				sssb: this.productId // 自动筛选当前产品
			}
			request({
				url: `/api/Extend/Gzcx`,
				method: 'GET',
				data: query
			}).then(res => {
				this.list = res.data.list || []
				this.total = res.data.pagination ? res.data.pagination.total : 0
				this.listLoading = false
			}).catch(() => {
				this.list = []
				this.total = 0
				this.listLoading = false
			})
		},
		handleDel(id) {
			this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
				type: 'warning'
			}).then(() => {
				request({
					url: `/api/Extend/Gzcx/${id}`,
					method: 'DELETE'
				}).then(res => {
					this.$message({
						type: 'success',
						message: res.msg,
						onClose: () => {
							this.initData()
						}
					})
				})
			}).catch(() => {})
		},
		addOrUpdateHandle(id) {
			console.log('GzcxList addOrUpdateHandle called with id:', id);
			// 先关闭表单(如果已打开),确保组件重新创建
			this.formVisible = false;
			this.$nextTick(() => {
				this.formVisible = true;
				this.$nextTick(() => {
					if (this.$refs.NCCForm) {
						this.$refs.NCCForm.init(id, false);
					}
				});
			});
		},
		refresh(isrRefresh) {
			this.formVisible = false
			if (isrRefresh) {
				this.initData()
			}
		}
	}
}
</script>

<style lang="scss" scoped>
.related-list-container {
	height: 100%;
	min-height: 0;
	display: flex;
	flex-direction: column;
	
	.NCC-common-head {
		flex-shrink: 0;
		margin-bottom: 10px;
	}
	
	.table-scroll-area {
		flex: 1;
		min-height: 0;
		overflow: auto;
	}
}
</style>