<template>
	<div class="app-container">
		<!-- 搜索工作栏 -->
		<search-bar
			:formConfigs="formConfig"
			ref="searchBarForm"
			@headBtnClick="buttonClick" />
		<!-- 列表 -->
		<base-table
			:page="queryParams.pageNo"
			:limit="queryParams.pageSize"
			:table-props="tableProps"
			:table-data="list"
			:max-height="tableH">
			<method-btn
				v-if="tableBtn.length"
				slot="handleBtn"
				:width="290"
				label="操作"
				:method-list="tableBtn"
				@clickBtn="handleClick" />
		</base-table>
		<pagination
			:page.sync="queryParams.pageNo"
			:limit.sync="queryParams.pageSize"
			:total="total"
			@pagination="getList" />
		<!-- 新增&编辑 -->
		<base-dialog
			:dialogTitle="addOrEditTitle"
			:dialogVisible="centervisible"
			@cancel="handleCancel"
			@confirm="handleConfirm"
			:before-close="handleCancel"
			width="60%">
			<order-add
				ref="orderAdd"
				@successSubmit="successSubmit" />
		</base-dialog>
		<!-- 查看详情 -->
		<!-- 新增工单 -->
		<base-dialog
			:dialogTitle="workIssueTitle"
			:dialogVisible="addWorkOrdervisible"
			@cancel="addWorkOrderCancel"
			@confirm="addWorkOrderConfirm"
			:before-close="addWorkOrderCancel"
			width="70%">
			<add-work-order
				ref="addWorkOrder"
				@addWorkOrderSubmit="addWorkOrderSubmit" />
		</base-dialog>
	</div>
</template>
<script>
import { parseTime } from '@/utils/ruoyi';
import {
	getOrderPage,
	orderStatusSet,
	customerList,
	orderFinish,
} from '@/api/base/orderManage';
import OrderAdd from './components/orderAdd';
import AddWorkOrder from './components/addWorkOrder';
import { publicFormatter } from '@/utils/dict';
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
const tableProps = [
	{
		prop: 'createTime',
		label: '添加时间',
		filter: parseTime,
		minWidth: 160,
	},
	{
		prop: 'name',
		label: '订单名称',
		minWidth: 140,
		showOverflowtooltip: true,
	},
	{
		prop: 'code',
		label: '订单编码',
		minWidth: 150,
		showOverflowtooltip: true,
	},
	{
		prop: 'triggerOrigin',
		label: '来源',
		filter: publicFormatter('order_Origin'),
	},
	{
		prop: 'priority',
		label: '优先级',
		filter: publicFormatter('order_priority'),
	},
	{
		prop: 'status',
		label: '订单状态',
		filter: publicFormatter('order_status'),
	},
	{
		prop: 'planQuantity',
		label: '计划加工量',
		width: 100,
	},
	{
		prop: 'actualQuantity',
		label: '实际加工量',
		width: 100,
	},
	{
		prop: 'productName',
		label: '产品',
		width: 200,
		showOverflowtooltip: true,
	},
	{
		prop: 'unit',
		label: '单位',
		filter: publicFormatter('unit_dict'),
	},
	{
		prop: 'price',
		label: '单价(元)',
		align: 'right',
	},
	{
		prop: 'workOrderNum',
		label: '工单数量',
	},
];
export default {
	name: 'OrderManage',
	mixins: [tableHeightMixin],
	data() {
		return {
			formConfig: [
				{
					type: 'input',
					label: '订单名称',
					placeholder: '订单名称',
					param: 'name',
				},
				{
					type: 'select',
					label: '状态',
					selectOptions: this.getDictDatas(this.DICT_TYPE.ORDER_STATUS),
					labelField: 'label',
					valueField: 'value',
					param: 'status',
				},
				{
					type: 'datePicker',
					label: '时间段',
					dateType: 'daterange',
					format: 'yyyy-MM-dd',
					valueFormat: 'yyyy-MM-dd',
					rangeSeparator: '-',
					startPlaceholder: '开始时间',
					endPlaceholder: '结束时间',
					param: 'timeVal',
					defaultSelect: [],
					width: 250,
				},
				{
					type: 'button',
					btnName: '查询',
					name: 'search',
					color: 'primary',
				},
				{
					type: this.$auth.hasPermi('base:order-manage:create')
						? 'separate'
						: '',
				},
				{
					type: this.$auth.hasPermi('base:order-manage:create') ? 'button' : '',
					btnName: '新增',
					name: 'add',
					color: 'success',
					plain: true,
				},
			],
			// 查询参数
			queryParams: {
				pageNo: 1,
				pageSize: 20,
				name: null,
				status: null,
				lastIssuedTime: [],
			},
			total: 0,
			tableProps,
			list: [],
			tableBtn: [
				this.$auth.hasPermi('base:order-manage:addWorkOrder')
					? {
							type: 'add',
							btnName: '新增',
							showTip: '新增工单',
							showParam: {
								type: '&',
								data: [
									{
										type: 'less',
										name: 'status',
										value: 3,
									},
								],
							},
					  }
					: undefined,
				this.$auth.hasPermi('base:order-manage:bindWorkOrder')
					? {
							type: 'bind',
							btnName: '绑定',
							showTip: '绑定工单',
							showParam: {
								type: '&',
								data: [
									{
										type: 'less',
										name: 'status',
										value: 3,
									},
								],
							},
					  }
					: undefined,
				this.$auth.hasPermi('base:order-manage:complete')
					? {
							type: 'complete',
							btnName: '完成',
							showTip: '完成订单',
							showParam: {
								type: '&',
								data: [
									{
										type: 'equal',
										name: 'status',
										value: 3,
									},
								],
							},
					  }
					: undefined,
				this.$auth.hasPermi('base:order-manage:termination')
					? {
							type: 'termination',
							btnName: '终止',
							showTip: '终止',
							showParam: {
								type: '&',
								data: [
									{
										type: 'equal',
										name: 'status',
										value: 3,
									},
								],
							},
					  }
					: undefined,
				this.$auth.hasPermi('base:order-manage:cancel')
					? {
							type: 'cancel',
							btnName: '作废',
							showTip: '作废',
							showParam: {
								type: '&',
								data: [
									{
										type: 'less',
										name: 'status',
										value: 2,
									},
								],
							},
					  }
					: undefined,
				this.$auth.hasPermi('base:order-manage:detail')
					? {
							type: 'detail',
							btnName: '详情',
					  }
					: undefined,
				this.$auth.hasPermi('base:order-manage:edit')
					? {
							type: 'edit',
							btnName: '编辑',
							showParam: {
								type: '&',
								data: [
									{
										type: 'less',
										name: 'status',
										value: 2,
									},
								],
							},
					  }
					: undefined,
			].filter((v) => v),
			addOrEditTitle: '',
			centervisible: false,
			priorityList: this.getDictDatas(this.DICT_TYPE.ORDER_PRIORITY),
			workIssueTitle: '',
			addWorkOrdervisible: false,
			orderDetailVisible: false,
		};
	},
	components: { OrderAdd, AddWorkOrder },
	created() {
		this.getList();
	},
	methods: {
		getList() {
			getOrderPage({ ...this.queryParams }).then((res) => {
				let arr = res.data.records || [];
				this.total = res.data.total || 0;
				if (arr.length > 0) {
					customerList().then((result) => {
						let tempData = result.data || [];
						if (tempData.length > 0) {
							arr.map((item) => {
								for (let i of tempData) {
									if (item.customerId === i.id) {
										item.customerId = i.name;
									}
								}
								item.price = item.price ? item.price.toFixed(2) : '0.00';
							});
							this.list = arr;
						}
					});
				} else {
					this.list = arr;
				}
			});
		},
		buttonClick(val) {
			console.log(val);
			if (val.btnName === 'search') {
				this.queryParams.name = val.name;
				this.queryParams.status = val.status;
				if (val.timeVal && val.timeVal.length > 0) {
					this.queryParams.lastIssuedTime[0] = val.timeVal[0] + ' 00:00:00';
					this.queryParams.lastIssuedTime[1] = val.timeVal[1] + ' 23:59:59';
				} else {
					this.queryParams.lastIssuedTime = [];
				}
				this.getList();
			} else {
				this.addOrEditTitle = '新增';
				this.centervisible = true;
				this.$nextTick(() => {
					this.$refs.orderAdd.init();
				});
			}
		},
		handleClick(val) {
			console.log(val);
			switch (val.type) {
				case 'edit':
					this.addOrEditTitle = '编辑';
					this.centervisible = true;
					this.$nextTick(() => {
						this.$refs.orderAdd.init(val.data.id);
					});
					break;
				case 'cancel':
					this.handleEditStatus(val.data, '作废', '6');
					break;
				case 'termination':
					this.handleEditStatus(val.data, '终止', '5');
					break;
				case 'detail':
					this.$router.push({
						path:
							'/order/base/order-manage/order-detail-data?orderId=' +
							val.data.id,
					});
					break;
				case 'add':
					this.workIssueTitle = '新增工单';
					this.addWorkOrdervisible = true;
					this.$nextTick(() => {
						this.$refs.addWorkOrder.init(val.data, 'add');
					});
					break;
				case 'bind':
					this.workIssueTitle = '绑定工单';
					this.addWorkOrdervisible = true;
					this.$nextTick(() => {
						this.$refs.addWorkOrder.init(val.data, 'bind');
					});
					break;
				case 'complete':
					this.handleEditStatus(val.data, '完成', '4');
					break;
				default:
			}
		},
		// 完成,终止,作废
		handleEditStatus(val, tip, status) {
			let _this = this;
			if (val.workOrderNum > 0) {
				//有下级工单
				_this
					.$confirm('是否将"' + tip + '"操作同步至下级工单?', '确认信息', {
						type: 'warning',
						distinguishCancelAndClose: true,
						confirmButtonText: '同步',
						cancelButtonText: '不同步',
					})
					.then(function () {
						console.log('同步');
						orderStatusSet({ id: val.id, status: status, isSync: true }).then(
							() => {
								_this.getList();
								_this.$modal.msgSuccess('操作成功');
							}
						);
					})
					.catch((action) => {
						if (action === 'cancel') {
							console.log('不同步');
							orderStatusSet({
								id: val.id,
								status: status,
								isSync: false,
							}).then(() => {
								_this.getList();
								_this.$modal.msgSuccess('操作成功');
							});
						} else {
							return console.log('关闭');
						}
					});
			} else {
				// 无下级工单
				_this.$modal
					.confirm(
						'是否确认"' + tip + '"厂务订单名称为"' + val.name + '"的数据项?'
					)
					.then(function () {
						return orderStatusSet({ id: val.id, status: status });
					})
					.then(() => {
						_this.getList();
						_this.$modal.msgSuccess('操作成功');
					})
					.catch(() => {});
			}
		},
		// 新增
		handleCancel() {
			this.$refs.orderAdd.formClear();
			this.centervisible = false;
			this.addOrEditTitle = '';
		},
		handleConfirm() {
			this.$refs.orderAdd.submitForm();
		},
		successSubmit() {
			this.handleCancel();
			this.getList();
		},
		// 下发新增
		addWorkOrderCancel() {
			this.$refs.addWorkOrder.formClear();
			this.addWorkOrdervisible = false;
		},
		addWorkOrderConfirm() {
			this.$refs.addWorkOrder.addWorkOrderSubmit();
		},
		addWorkOrderSubmit() {
			this.addWorkOrderCancel();
			this.getList();
		},
		// bindWorkOrderCancel() {
		//   this.$refs.bindWorkOrder.formClear()
		//   this.bindWorkOrdervisible = false
		// },
		// bindWorkOrderConfirm() {
		//   this.$refs.bindWorkOrder.bindWorkOrderSubmit()
		// },
		// bindWorkOrderSubmit() {
		//   this.bindWorkOrderCancel()
		//   this.getList()
		// }
	},
};
</script>