<!--
 * @Author: zwq
 * @Date: 2021-11-18 14:16:25
 * @LastEditors: zwq
 * @LastEditTime: 2024-12-27 15:34:28
 * @Description:
-->
<template>
	<div
		class="status-timegraph-container"
		style="background: #f2f4f9; flex: 1; display: flex; flex-direction: column">
		<el-row
			v-show="workOrderButton.length !== 0"
			class=""
			style="margin-bottom: 4px; border-radius: 8px">
			<workOrderNav
				:id-list="workOrderButton"
				@getWorkOrderId="getId"></workOrderNav>
		</el-row>
		<el-row
			class=""
			style="
				height: 1px;
				flex: 0.3;
				margin-bottom: 12px;
				background: #fff;
				padding: 16px;
				border-radius: 8px;
				display: flex;
				flex-direction: column;
			">
			<div class="content">
				<div>
					<h1 class="orderTitle">工单编码：{{ dataForm.code }}</h1>
					<el-button
						type="primary"
						plain
						style="position: absolute; right: 16px; top: 5px"
						v-show="workOrderButton.length === 0"
						@click="goWorkOrderList()">
						<svg-icon icon-class="return" />
						返回
					</el-button>
				</div>
				<small-title style="margin: 16px 0" size="sm" :no-padding="true">
					基本信息
				</small-title>
				<div class="formContent">
					<el-row :gutter="20">
						<el-col :span="4">
							<p class="title">工单名称</p>
							<p class="text">{{ dataForm.name }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">工单来源</p>
							<p class="text">
								{{
									dataForm.triggerOrigin === 1
										? 'MES-手动'
										: dataForm.triggerOrigin === 2
										? 'MES-订单下发'
										: dataForm.triggerOrigin === 3
										? 'ERP'
										: ''
								}}
							</p>
						</el-col>
						<el-col :span="4">
							<p class="title">所属订单</p>
							<p
								class="text"
								style="
									overflow: hidden;
									white-space: nowrap;
									text-overflow: ellipsis;
								"
								:title="orderList.map((item) => item.orderName).join(', ')">
								{{ orderList.map((item) => item.orderName).join(', ') }}
							</p>
						</el-col>
						<el-col :span="4">
							<p class="title">产品名称</p>
							<p class="text">{{ dataForm.productName }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">规 格</p>
							<p class="text">{{ dataForm.specifications }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">计划生产数量</p>
							<p class="text">{{ dataForm.planQuantity }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">预计用时(小时)</p>
							<p class="text">{{ dataForm.remainingTime }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">计划投入数量</p>
							<p class="text">{{ dataForm.planAssignQuantity }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">优先级</p>
							<p class="text">{{ fitlerP(dataForm.priority) }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">负责人</p>
							<p class="text">{{ dataForm.workers }}</p>
						</el-col>
						<el-col :span="4">
							<p class="title">关联产线</p>
							<p class="text">
								<span
									v-for="(item, index) in dataForm.productLineIds"
									:key="index"
									style="margin-right: 10px">
									{{ item.lineName }}
								</span>
							</p>
						</el-col>
						<el-col :span="4">
							<p class="title">物料计算方式</p>
							<p class="text">
								{{
									dataForm.materialMethod === 1
										? '产品基础'
										: dataForm.materialMethod === 2
										? '工艺扩展'
										: ''
								}}
							</p>
						</el-col>

						<el-col :span="4">
							<p class="title">关联工艺</p>
							<p class="text">
								<span
									v-for="(item, index) in dataForm.productLineIds"
									:key="index"
									style="margin-right: 10px">
									{{ item.processFlowName }}
								</span>
							</p>
						</el-col>
					</el-row>
				</div>
			</div>
		</el-row>
		<el-row
			class=""
			style="
				height: 1px;
				flex: 1;
				margin-bottom: 12px;
				padding: 16px;
				background: #fff;
				border-radius: 8px;
				display: flex;
				flex-direction: column;
			">
			<el-tabs v-model="activeName" @tab-click="switchTab">
				<el-tab-pane label="生产信息" name="produce">
					<div class="formContent">
						<el-row :gutter="20">
							<el-col :span="4">
								<p class="title">工单创建时间</p>
								<p class="text">{{ parseTime(dataForm.createTime) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">计划开始时间</p>
								<p class="text">{{ parseTime(dataForm.planStartTime) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">计划完成时间</p>
								<p class="text">{{ parseTime(dataForm.planFinishTime) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">预计结束时间</p>
								<p class="text">{{ parseTime(dataForm.expectedFinishTime) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">实际开始时间</p>
								<p class="text">{{ parseTime(dataForm.startProduceTime) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">实际完成时间</p>
								<p class="text">{{ parseTime(dataForm.finishProduceTime) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">工单状态</p>
								<p class="text">{{ fitlerS(dataForm.status) }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">实际投入数量</p>
								<p class="text">{{ dataForm.assignQuantity }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">实际生产数量</p>
								<p class="text">{{ dataForm.actualQuantity }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">废片数量</p>
								<p class="text">{{ dataForm.nokQuantity }}</p>
							</el-col>
							<el-col :span="4">
								<p class="title">检测瑕疵数</p>
								<p class="text">{{ dataForm.unpassCheckNum }}</p>
							</el-col>
						</el-row>
					</div>
				</el-tab-pane>
				<el-tab-pane label="订单信息" name="order">
					<base-table
						:max-height="tableH"
						:table-props="tableProps"
						:page="listQuery.pageNo"
						:limit="listQuery.pageSize"
						:table-data="orderList">
						<method-btn
							v-if="!isdetail"
							slot="handleBtn"
							:width="120"
							label="操作"
							:method-list="tableBtn"
							@clickBtn="handleClick" />
					</base-table>
				</el-tab-pane>
				<el-tab-pane label="预计用料" name="material">
					<base-table
						:max-height="tableH"
						:table-props="tableProps1"
						:page="listQuery1.pageNo"
						:limit="listQuery1.pageSize"
						:table-data="materialList" />
				</el-tab-pane>
				<el-tab-pane label="质量信息" name="quality">
          <span style="font-size: 14px;">该工单未通过检测数合计:{{ allSumScrap }}</span>
					<base-table
						:max-height="tableH"
						:table-props="tablePropsQuality"
						:table-data="qualityList"
						:page="1"
						:limit="10" />
				</el-tab-pane>
				<el-tab-pane label="能源信息" name="energy">
					<div class="toggleTabBox">
						<div
							:class="{ active: activeModule === 'dataList' }"
							@click="toggleTab('dataList')">
							数据列表
						</div>
						<div
							:class="{ active: activeModule === 'barChart' }"
							@click="toggleTab('barChart')">
							柱状图
						</div>
					</div>
					<div>
						<div v-show="activeModule === 'dataList'">
							<!-- 表格 -->
							<base-table
								:max-height="tableH"
								:table-props="tablePropsEnergy"
								:page="listQueryEnergy.pageNo"
								:limit="listQueryEnergy.pageSize"
								:table-data="energyList" />
						</div>
						<!-- 图形 -->
						<div v-show="activeModule === 'barChart'">
							<bar-chart ref="orderEnergyChart" :chartData="chartData" />
						</div>
					</div>
				</el-tab-pane>
			</el-tabs>
		</el-row>

		<!-- 对话框(添加 / 修改) -->
		<!-- <base-dialog dialogTitle="添加设备" :dialogVisible="open" width="500px" @close="open = false" @cancel="open = false"
      @confirm="submitForm">
      <el-select v-if="open" style="width: 100%" filterable clearable v-model="queryParams.equipmentId"
        placeholder="请选择一个设备">
        <el-option v-for="eq in eqList" :key="eq.id" :value="eq.id" :label="eq.name"></el-option>
      </el-select>
    </base-dialog> -->
	</div>
</template>

<script>
// import basicAdd from '../../core/mixins/basic-add';
import {
	getCoreWO,
	getMaterialBomPage,
	getConOrderList,
	getCoreWOListById,
	getMaterialCostWorkOrder,
} from '@/api/base/coreWorkOrder';
import tableHeightMixin from '@/mixins/tableHeightMixin';
import { getOrderEnergyData } from '@/api/monitoring/orderEnergy';
// import { orderList } from "@/api/base/orderManage";
import { getStatisticalDataPage } from '@/api/monitoring/statisticalData';
import { getProcessFlowList } from '@/api/base/orderManage';
import SmallTitle from './SmallTitle';
import { publicFormatter } from '@/utils/dict';
import { parseTime } from '@/utils/ruoyi';
import workOrderNav from './workOrderNav.vue';
import BarChart from './barChart';
const tableBtn = [
	{
		type: 'edit',
		btnName: '编辑',
	},
	{
		type: 'delete',
		btnName: '删除',
	},
];
const tableProps = [
	{
		prop: 'orderName',
		label: '订单名称',
	},
	{
		prop: 'orderCode',
		label: '订单编码',
	},
	{
		prop: 'planAssignmentQuantity',
		label: '计划分配数量',
	},
	{
		prop: 'actualAssignmentQuantity',
		label: '实际分配数量',
	},
];

const tableProps1 = [
	{
		prop: 'materialName',
		label: '物料名称',
	},
	{
		prop: 'unit',
		label: '单位',
		filter: publicFormatter('unit_dict'),
	},
	{
		prop: 'remainingNum',
		label: '剩余生产预计消耗',
	},
];
const tablePropsEnergy = [
	{
		prop: 'objName',
		label: '对象名称',
	},
	{
		prop: 'objCode',
		label: '对象编码',
		// filter: publicFormatter('unit_dict')
	},
	{
		prop: 'energyType',
		label: '能源类型',
		// filter: publicFormatter('unit_dict')
	},
	{
		prop: 'startNum',
		label: '工单开始值',
		// filter: publicFormatter('unit_dict')
	},
	{
		prop: 'endNum',
		label: '工单结束值/当前值',
	},
	{
		prop: 'useNum',
		label: '使用量',
	},
];
export default {
	mixins: [tableHeightMixin],
	components: { SmallTitle, workOrderNav, BarChart },
	computed: {
		tablePropsQuality() {
			return [
				// {
				// 	// width: 128,
				// 	prop: 'workOrderName',
				// 	label: '工单名称',
				// },
				// {
				// 	// width: 128,
				// 	prop: 'productionName',
				// 	label: '产品',
				// },
				{
					// width: 160,
					prop: 'inspectionContent',
					label: '检测内容',
				},
				...this.dynamicProps,
				{
					// width: 128,
					prop: 'sumScrap',
          label: '未通过检测总数',
				},
				{
					// width: 128,
					prop: 'scrapRatio',
					label: '比例(%)',
					// subcomponent: {
					// 	name: 'TextOnly',
					// 	props: {
					// 		injectData: {
					// 			type: Object,
					// 			default: () => ({}),
					// 		},
					// 	},
					// 	data() {
					// 		return {
					// 			text: '比例',
					// 		};
					// 	},
					// 	methods: {
					// 		handleEmit(payload) {
					// 			console.log('handleEmit', payload);
					// 		},
					// 	},
					// 	render(h) {
					// 		return h('el-button', { props: { type: 'text' } }, this.text);
					// 	},
					// },
				},
			];
		},
	},
	data() {
		return {
			tableBtn,
			tableProps,
			heightNum: 236,
			tablePropsEnergy,
			tableProps1,
			activeModule: 'dataList',
			workOrderId: undefined,
			addOrUpdateVisible: false,
			urlOptions: {
				infoURL: getCoreWO,
			},
      allSumScrap: 0,
			listQuery: {
				pageSize: 10,
				pageNo: 1,
				total: 0,
			},
			listQueryEnergy: {
				pageSize: 10,
				pageNo: 1,
				total: 0,
			},
			activeName: 'produce',
			listQuery1: {
				pageSize: 10,
				pageNo: 1,
				total: 0,
			},
			dataForm: {},
			orderList: [],
			materialList: [],
			energyList: [],
			qualityList: [],
			chartData: [],
			dynamicProps: [],
			// orderArray: [],
			visible: false,
			isdetail: false,
			workOrderButton: [],
			processFlowList: [],
		};
	},
	watch: {
		workOrderId(newValue, oldValue) {
			this.activeName = 'produce';
			this.init(newValue);
			this.dataForm.id = newValue;
		},
	},
	created() {
		this.getDict();
	},
	mounted() {
		if (
			this.$route.query.woIdString &&
			this.$route.query.woIdString !== 'undefined'
		) {
			const idList = this.$route.query.woIdString.split(',');
			console.log(idList);

			getCoreWOListById(idList).then((res) => {
				this.workOrderButton = res.data.map((work) => {
					return {
						id: work.id,
						name: work.name,
					};
				});
				console.log('this.workOrderButton======', this.workOrderButton);
				this.init(this.workOrderButton[0].id, true);
			});
		} else {
			this.init(this.$route.query.id, true);
		}
	},
	methods: {
		goWorkOrderList() {
			this.$router.go(-1);
		},
		getId(val) {
			this.workOrderId = val;
		},
		async switchTab(val) {
			if (this.activeName === 'order') {
				getConOrderList({
					workOrderId: this.dataForm.id,
				}).then((response) => {
					this.orderList = response.data;
					// this.listQuery.total = response.data.total;
				});
			} else if (this.activeName === 'material') {
				getMaterialCostWorkOrder({
					id: this.dataForm.id,
				}).then((response) => {
					this.materialList = response.data;
					// this.listQuery.total = response.data.total;
				});
			} else if (this.activeName === 'energy') {
				getOrderEnergyData({
					workOrderId: this.dataForm.id,
				}).then((response) => {
					this.energyList = response.data;
					this.chartData = response.data;
					// this.listQuery.total = response.data.total;
				});
			} else if (this.activeName === 'quality') {
        this.allSumScrap = 0
				const {
					data: { data, otherList, otherMap, nameData },
				} = await getStatisticalDataPage({
          workOrderId:this.dataForm.id
				});
				// console.log(this.queryParams);
				this.dynamicProps = this.filterNameData(nameData);
				this.qualityList = this.filterData(data);
			}
		},
		getDict() {
			// 工艺
			getProcessFlowList().then((res) => {
				this.processFlowList = res.data || [];
			});
		},
		filterNameData(nameData) {
			const ndSet = new Set();
			nameData.forEach((nd) => {
				ndSet.add(nd.name);
			});
			return Array.from(ndSet.values())
				.sort()
				.map((name) => ({
					prop: name,
					label: name,
				}));
		},
		filterData(data) {
			return data.map((item) => {
				const { data: innerData } = item;
				const keyValuePairs = {};
				innerData.map((d) => {
					keyValuePairs[d.dynamicName] = d.dynamicValue;
				});
        this.allSumScrap +=item.sumScrap
				return {
					inspectionContent: item.inspectionContent,
					...keyValuePairs,
          sumScrap: item.sumScrap,
					productionName: item.productionName,
					workOrderId: item.workOrderId,
          workOrderName: item.workOrderName,
					scrapRatio: item.scrapRatio,
				};
			});
		},
		fitlerP(val) {
			if (val) {
				if (val === 1) {
					return '低';
				} else if (val === 2) {
					return '正常';
				} else {
					return '高';
				}
			}
		},
		fitlerS(val) {
			if (val) {
				if (val === 1) {
					return '等待';
				} else if (val === 2) {
					return '激活';
				} else if (val === 3) {
					return '暂停';
				} else if (val === 4) {
					return '完成';
				} else {
					return '作废';
				}
			}
		},
		initData() {
			this.orderList.splice(0);
			this.materialList.splice(0);
		},
		handleClick(raw) {
			if (raw.type === 'delete') {
				this.$confirm(
					`确定对${
						raw.data.attrName
							? '[名称=' + raw.data.attrName + ']'
							: '[序号=' + raw.data._pageIndex + ']'
					}进行删除操作?`,
					'提示',
					{
						confirmButtonText: '确定',
						cancelButtonText: '取消',
						type: 'warning',
					}
				)
					.then(() => {
						deleteCoreProductAttr(raw.data.id).then(({ data }) => {
							this.$message({
								message: '操作成功',
								type: 'success',
								duration: 1500,
								onClose: () => {
									this.getList();
								},
							});
						});
					})
					.catch(() => {});
			} else {
				this.addNew(raw.data.id);
			}
		},
		toggleTab(val) {
			this.activeModule = val;
			if (this.activeModule === 'barChart') {
				this.$nextTick((res) => {
					this.$refs.orderEnergyChart.getChart();
				});
			}
		},
		getList() {
			// 获取订单列表
			// 获取预使用原料列表
			// if (this.dataForm.planProductId) {
			// 	getMaterialBomPage({
			// 		productId: this.dataForm.planProductId,
			// 	}).then((response) => {
			// 		this.materialList = response.data;
			// 		// this.listQuery.total = response.data.length;
			// 	});
			// }
			// 获取订单相关信息
			getConOrderList({
				workOrderId: this.dataForm.id,
			}).then((response) => {
				this.orderList = response.data;
				// this.listQuery.total = response.data.total;
			});
		},
		init(id, isdetail) {
			this.initData();
			this.isdetail = isdetail || false;
			this.dataForm.id = id || undefined;
			this.visible = true;

			this.$nextTick(() => {
				if (this.dataForm.id) {
					// 获取工单详情
					this.urlOptions.infoURL(id).then((response) => {
						this.dataForm = response.data;
						// 工艺名称
						if (this.dataForm.productLineIds.length>0) {
              console.log(this.processFlowList)
              this.dataForm.productLineIds.forEach(item=>{
							this.processFlowList.filter(item1 => {
								if (item1.id === item.processId) {
									item.processFlowName = item1.name
								}
							});
            })
						}
						// 获取订单列表和用料列表
						this.getList();
					});
				} else {
					if (this.urlOptions.isGetCode) {
						this.getCode();
					}
				}
			});
		},
		goEdit() {
			this.isdetail = false;
		},
		// 新增 / 修改
		addNew(id) {
			this.addOrUpdateVisible = true;
			this.$nextTick(() => {
				this.$refs.addOrUpdate.init(id);
			});
		},
	},
};
</script>
<style lang="scss" scoped>
.orderTitle {
	font-size: 16px;
	font-weight: bold;
}
.formContent {
	font-size: 14px;
	.title {
		font-weight: 600;
		color: rgba(0, 0, 0, 0.85);
		margin: 0px;
	}
	.text {
		height: 20px;
		color: rgba(102, 102, 102, 0.75);
		margin: 10px 0px;
	}
}
.action_btn {
	float: right;
	margin: 5px 15px;
	font-size: 14px;
}
.add {
	color: #0b58ff;
}
.container {
	/* background-color: #fff; */
	border-radius: 8px;
	padding: 16px 16px 0 16px;
	margin: 8px 0 8px 0px;
}
.toggleTabBox {
	display: inline-block;

	div {
		display: inline-block;
		padding: 0 8px 4px;
		color: rgba(102, 102, 102, 0.5);
		border-bottom: 2px solid rgba(242, 244, 249, 1);
		cursor: pointer;
	}

	.active {
		color: rgba(0, 0, 0, 0.85);
		border-bottom-color: #0b58ff;
	}
}
</style>
