vue中封装组件,【选开工令】时单选多选

发布于:2022-12-03 ⋅ 阅读:(661) ⋅ 点赞:(0)

1,使用组件

<template>
	<div>

		<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
			<el-row>
				<el-col :span='8'>
					<el-form-item label="运输方案">
						<el-select v-model="tList" multiple size='mini' placeholder="请选择" style="width:100%">
							<el-option v-for="item in transportationPlanList" :key="item.dictValue"
								:label="item.dictLabel" :value="item.dictValue" />
						</el-select>
					</el-form-item>
				</el-col>
			</el-row>
			<el-row>
				<el-col :span='16'>
					<el-form-item label="开工令" prop="projects">
						<el-select v-model="projectIdList" ref='projectRef' style="width:100%;" size='mini' multiple
							placeholder="请选择" @focus="selectProjectClick" @remove-tag="removeProjectClick">
							<!-- 插入图标 color: #409eff;-->
							<template slot="prefix">
								<span style="padding: 5px;line-height: 40px;font-size: 16px; ">
									<i class="el-icon-circle-plus-outline"></i>
								</span>
							</template>
							<el-option v-for="item in form.projects" :key="item.projectId"
								:label="item.projectMachineNo" :value="item.projectId">
							</el-option>
						</el-select>
					</el-form-item>
				</el-col>
			</el-row>
			<el-row>
				<el-col :span='16'>
					<el-form-item label="开工令名称">
						<el-input v-model='projectNameStr' readonly placeholder="自动带出" style='width:100%;' size="mini">
						</el-input>
					</el-form-item>
				</el-col>
			</el-row>
		</el-form>
		<!-- 选单组件 -->
		<select-order-list :isCheckBox='true' :dialogStatus='projectStatus' @customDbRowClick='getSelectProjectData'
			@customCloseClick='projectStatus=false'>
		</select-order-list>
		<el-button type='primary' @click="submitFormClick">确定</el-button>
	</div>
</template>

<script>
	//引入
	import selectOrderList from './selectOrderList.vue';
	export default {
		//挂载
		components: {
			selectOrderList
		},
		data() {
			//校验数组
			const validatorProject = (rule, value, callback) => {
				if (value.length == 0) callback(new Error('开工令不能为空'));
				else callback();
			}
			return {
				tList: [],
				projectStatus: false,
				projectNameStr: null,
				projectIdList: [], //存id的数组
				form: {
					projects: [],
					transportWay:null
				},
				rules: {
					projects: [{
						required: true,
						validator: validatorProject,
						trigger: 'blur'
					}],
					
				},
				transportationPlanList: [{
						createBy: "admin",
						createTime: "2022-10-11 12:15:05",
						default: false,
						dictCode: "30010",
						dictLabel: "拼箱LCL",
						dictSort: 0,
						dictType: "transportation_plan",
						dictValue: "拼箱LCL",
						isDefault: "N",
						listClass: "default",
						status: "0"
					}, {
						createBy: "admin",
						createTime: "2022-10-11 12:15:22",
						default: false,
						dictCode: "30011",
						dictLabel: "20GP",
						dictSort: 0,
						dictType: "transportation_plan",
						dictValue: "20GP",
						isDefault: "N",
						listClass: "default",
						status: "0",
					},
					{
						createBy: "admin",
						createTime: "2022-10-11 12:15:36",
						default: false,
						dictCode: "30012",
						dictLabel: "40GP",
						dictSort: 0,
						dictType: "transportation_plan",
						dictValue: "40GP",
						isDefault: "N",
						listClass: "default",
						status: "0"
					},
					{
						createBy: "admin",
						createTime: "2022-10-11 12:15:54",
						default: false,
						dictCode: "30013",
						dictLabel: "20OT",
						dictSort: 0,
						dictType: "transportation_plan",
						dictValue: "20OT",
						isDefault: "N",
						listClass: "default",
						status: "0"
					}
				],
			}
		},
		methods: {
			submitFormClick() {
				this.$refs['formRef'].validate((valid) => {
					if (valid) {
						this.form.transportWay = this.tList? this.tList.join(','):null;
						 console.log('success', this.form)
					} else {
						console.log('err')
					}
				})
			},
			//得到选单数据
			getSelectProjectData(list) {
				list.map(item => {
					delete item.isDbClick;
					item.projectMachineNo = item.machineNo != '' ? item.projectNo + '(' + item.machineNo + '#)' : item.projectNo;
					if (!this.form.projects.includes(item)) this.form.projects.push(item);
				})
				this.handleData();
				this.projectStatus = false;
			},
			selectProjectClick() {
				this.$refs.projectRef.blur();
				this.projectStatus = true;
			},
			removeProjectClick(e) {
				this.form.projects = this.form.projects.filter(item => item.projectId != e);
				this.handleData();
			},

			//处理数据
			handleData() {
				let arr = [],projectNameNew = null;
				this.form.projects.map(item => {
					//是否有括号
					if (item.projectName.indexOf('(') == -1) projectNameNew = item.projectName;
					else projectNameNew = item.projectName.substr(0, (item.projectName).indexOf('('));

					//去重
					if (arr.indexOf(projectNameNew) == -1) arr.push(projectNameNew);
				})
				this.projectNameStr = arr.join(',');
				this.projectIdList = this.form.projects.map(item => item.projectId);
			},
		}
	}
</script>
<style scoped></style>

2,封装组件

<template>
	<el-dialog title="选单" :visible.sync="dialogStatus" :close-on-click-modal='false' :before-close='closeClick'>
		<el-button size='mini' type='primary' :disabled="selection.length == 0" v-if='isCheckBox' @click='submitClick'>
			选中</el-button>
		<el-table ref='tableRef' border :data="tableData" style="width: 800px;margin-top: 20px;" :row-style="isBlue"
			@selection-change="handleSelectionChange" @row-dblclick='dbRowClick'>
			<el-table-column type="selection" width="55" align="center" v-if='isCheckBox'></el-table-column>
			<el-table-column label="开工令" align="center" :show-overflow-tooltip="true">
				<template slot-scope="scope">
					<span>{{ scope.row.projectNo}}</span>
				</template>
			</el-table-column>
			<el-table-column label="项目名称" align="center" :show-overflow-tooltip="true">
				<template slot-scope="scope">
					<span>{{ scope.row.projectName}}</span>
				</template>
			</el-table-column>
			<el-table-column label="机台号" align="center" :show-overflow-tooltip="true">
				<template slot-scope="scope">
					<span>{{ scope.row.machineNo}}</span>
				</template>
			</el-table-column>
		</el-table>
	</el-dialog>

</template>

<script>
	export default {
		props: {
			dialogStatus: { //弹框显示隐藏
				type: Boolean
			},
			isCheckBox: { //是否多选,默认单选
				type: Boolean,
				default: false,
			}
		},
		data() {
			return {
				tableData: [{
						projectId: '112',
						projectNo: 'O260',
						projectName: '运输支架(#3)',
						machineNo: '3',
					},
					{
						projectId: '113',
						projectNo: 'O260',
						projectName: '运输支架(6#)',
						machineNo: '6',

					},
					{
						projectId: '114',
						projectNo: 'P286',
						projectName: '定子片(8#)',
						machineNo: '8',

					},
					{
						projectId: '115',
						projectNo: 'O303',
						projectName: '定子段(2#)',
						machineNo: '2',

					},
					{
						projectId: '116',
						projectNo: 'P286',
						projectName: '段子(3#)',
						machineNo: '3',

					},
					{
						projectId: '117',
						projectNo: 'P286',
						projectName: '定子片11',
						machineNo: '',
					
					},
				],
				selection: []
			}
		},
		created() {
			this.tableData.map(item => item.isDbClick = false)
		},
		methods: {
			isBlue({
				row
			}) {
				const checkIdList = this.selection.map((item) => item.projectId);
				if (checkIdList.includes(row.projectId)) {
					return {
						backgroundColor: "#e8f4ff",
						color: "#409EFF",
					};
				}
			},
			dbRowClick(row) {
				let list = [];
				list.push(row);
				if (this.isCheckBox) {
					row.isDbClick = !row.isDbClick;
					if (row.isDbClick) {
						if (!this.selection.includes(row)) this.selection.push(row);
					} else {
						this.selection.map((item, index) => {
							if (item == row) this.selection.splice(index, 1);
						})
					}
					//是否回显
					this.$refs.tableRef.toggleRowSelection(row, row.isDbClick);
				} else this.$emit('customDbRowClick', list);
			},
			handleSelectionChange(selection) {
				this.selection = selection;
			},
			submitClick() {
				this.$emit('customDbRowClick', this.selection);

				//选中数据后重置
				this.selection = [];
				this.$refs.tableRef.clearSelection();
			},
			closeClick() {
				this.$emit('customCloseClick');
			}
		}
	}
</script>

<style>
	.el-table--enable-row-hover .el-table__body tr:hover>td {
		background-color: #e8f4ff !important;
	}
</style>


网站公告

今日签到

点亮在社区的每一天
去签到