factory_web/src/views/opm/operation_form.vue

283 lines
9.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-drawer
:title="titleMap[mode]"
v-model="visible"
:size="1000"
destroy-on-close
@closed="$emit('closed')"
>
<el-container v-loading="loading">
<el-main style="padding: 0 20px 20px 20px">
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
:disabled="mode == 'show'"
label-width="100px"
>
<el-row>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="作业简介" prop="name">
<el-input v-model="form.name" type="text" clearable></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="开始时间" prop="start_time">
<el-date-picker
v-model="form.start_time"
type="datetime"
placeholder="选择开始时间"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="结束时间" prop="end_time">
<el-date-picker
v-model="form.end_time"
type="datetime"
placeholder="选择结束时间"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="生产状态" prop="state_work">
<el-select v-model="form.state_work" placeholder="选择生产状态">
<el-option
v-for="item in stateoptions"
:key="item.id"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="作业区域" prop="area">
<el-select v-model="form.area" placeholder="选择作业区域" @change="areaChange" clearable>
<el-option
v-for="item in areaoptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="具体地点" prop="place">
<el-input v-model="form.place" type="text" clearable></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="业务部门" prop="dept_bus">
<el-cascader
placeholder="选择业务部门"
getCheckedNodes="true"
:props="{
expandTrigger: 'hover', // 次级菜单的展开方式
label: 'label', //
value: 'value', //
emitPath: false, // 在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false则只返回该节点的值
checkStrictly: true
}"
v-model="form.dept_bus"
:options="deptoptions"
clearable
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="部门协调员" prop="coordinator">
<el-input
v-model="form.coordinator_name"
disabled
style="width:200px"
></el-input>
<ehsUserSelect :multiple="false" @submit="getUser"/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="属地部门" prop="dept_ter">
<el-cascader
placeholder="选择属地部门"
getCheckedNodes="true"
v-model="form.dept_ter"
:options="deptoptions"
:props="{
expandTrigger: 'hover', // 次级菜单的展开方式
label: 'label', //
value: 'value', //
emitPath: false, // 在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false则只返回该节点的值
checkStrictly: true
}"
clearable
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="监控摄像头" prop="vchannels">
<el-select
v-model="form.vchannels"
:multiple = "true"
filterable
>
<el-option
v-for="item in vchannelOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-container>
</el-drawer>
</template>
<script>
import { genTree } from "@/utils/verificate";
export default {
emits: ["success", "closed"],
data() {
return {
loading: false,
mode: "add",
titleMap: {
add: "新增",
edit: "编辑",
show: "查看",
},
form: {},
rules: {
name: [{ required: true, message: "请输入作业简介" }],
start_time: [{ required: true, message: "请输入" }],
end_time: [{ required: true, message: "请输入" }],
state_work: [{ required: true, message: "请输入" }],
area: [{ required: true, message: "请输入" }],
dept_ter: [{ required: true, message: "请输入" }],
dept_bus: [{ required: true, message: "请输入" }],
coordinator: [{ required: true, message: "请输入" }],
},
visible: false,
isSaveing: false,
selectionFilters: [],
setFiltersVisible: false,
stateoptions: [
{ id: 10, name: "运行" },
{ id: 20, name: "停机" },
{ id: 30, name: "检修" },
],
deptoptions: [],
areaoptions: [],
coordinatoroptions:[],
vchannelOptions: []
};
},
mounted() {
this.getDept();
this.getArea();
this.getVchannels();
},
methods: {
//所属部门,属地部门,业务部门
getDept() {
this.$API.system.dept.list.req({ page: 0 , type__in: 'dept'}).then((res) => {
this.deptoptions = genTree(res);
});
},
//作业区域
getArea() {
this.$API.am.area.list.req({ page: 0 }).then((res) => {
this.areaoptions = res;
});
},
areaChange(val) {
this.form.area = val
this.getVchannels()
},
// dept1Change(val) {
// // 业务部门变化
// this.$API.system.user.list.req({ page: 0, belong_dept: val }).then((res) => {
// this.coordinatoroptions = res;
// });
// },
getVchannels(){
this.$API.third.tdevice.list.req({ type: 60, page: 0, area: this.form.area }).then((res) => {
this.vchannelOptions = res;
});
},
getUser(data) {
// 子组件调用父组件的方法并传参
this.form.coordinator=data.id;
this.form.coordinator_name=data.name
},
//显示
open(mode = "add") {
this.mode = mode;
this.visible = true;
return this;
},
//表单提交方法
submit() {
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
try {
var res;
if (this.mode == "add") {
res = await this.$API.opm.operation.create.req(this.form);
this.form.id = res.id;
} else if (this.mode == "edit") {
res = await this.$API.opm.operation.update.req(
this.form.id,
this.form
);
}
this.isSaveing = false;
this.$emit("success", this.form, this.mode);
this.visible = false;
this.$message.success("操作成功");
return res;
} catch (err) {
//可以处理校验错误
this.isSaveing = false;
return err;
}
}
});
},
//表单注入数据
setData(data) {
Object.assign(this.form, data);
},
//设置过滤项
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
},
};
</script>
<style scoped>
.el-transfer {
--el-transfer-panel-width: 345px !important;
}
</style>