133 lines
3.9 KiB
Vue
133 lines
3.9 KiB
Vue
<template>
|
|
<el-dialog
|
|
v-model="visible"
|
|
:title="formData.id ? '编辑' : '新增'"
|
|
width="35%"
|
|
:before-close="closeDialog"
|
|
>
|
|
<el-form
|
|
size="large"
|
|
label-position="top"
|
|
:model="formData"
|
|
label-width="150px"
|
|
:rules="rules"
|
|
ref="ruleFormRef"
|
|
>
|
|
<el-form-item label="通讯名称:" prop="name">
|
|
<el-input
|
|
v-model="formData.name"
|
|
placeholder="请输入通讯名称"
|
|
clearable
|
|
:disabled="type === 'I' ? false: true"
|
|
/>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="上报驱动:" prop="drive">
|
|
<el-select v-model="formData.drive" placeholder="请选择驱动">
|
|
<el-option
|
|
v-for="(item, index) of qudongOptions"
|
|
:key="index"
|
|
:label="item.name"
|
|
:value="item.name"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="主机地址:" prop="host">
|
|
<el-input
|
|
v-model="formData.host"
|
|
placeholder="请输入主机地址"
|
|
clearable
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="通讯描述:">
|
|
<el-input
|
|
v-model="formData.description"
|
|
placeholder="请输入通讯名称"
|
|
clearable
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="其他配置:" prop="config">
|
|
<el-input
|
|
v-model="formData.config"
|
|
placeholder="请输入其他配置"
|
|
clearable
|
|
/>
|
|
</el-form-item>
|
|
</el-form>
|
|
<template #footer>
|
|
<span class="dialog-footer">
|
|
<el-button size="large" @click="closeDialog">取消</el-button>
|
|
<el-button size="large" type="primary" @click="saveData"> 保存 </el-button>
|
|
</span>
|
|
</template>
|
|
</el-dialog>
|
|
</template>
|
|
<script>
|
|
import { onMounted, reactive, ref, toRefs, computed } from "vue";
|
|
import infoApi from "@/api/infoApi.js";
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
|
import { sb_list, sb_info, sb_drive_list, sb_add, response } from '../proto/data/pd'
|
|
export default {
|
|
props: ["formData", "dialogVisible", "type"],
|
|
emits: ["dialogClose", "dialogSuccess"],
|
|
setup(props, ctx) {
|
|
const ruleFormRef = ref(null);
|
|
const state = reactive({
|
|
rules: {
|
|
name: [{ required: true, message: "请输入通讯名称", trigger: "blur" }],
|
|
drive: [{ required: true, message: "请选择驱动", trigger: "blur" }],
|
|
host: [{ required: true, message: "请输入主机地址", trigger: "blur" }],
|
|
},
|
|
qudongOptions: [],
|
|
});
|
|
const visible = computed(() => {
|
|
return props.dialogVisible;
|
|
})
|
|
|
|
onMounted(() => {
|
|
getQuDong();
|
|
});
|
|
const getQuDong = async () => {
|
|
const res = await infoApi.getQuDong();
|
|
const ret = response.decode(new Uint8Array(res));
|
|
|
|
if (ret.code == 0) {
|
|
// 获取数据
|
|
const infodata = sb_drive_list.decode(ret.data).sbDrive;
|
|
state.qudongOptions = infodata;
|
|
}
|
|
}
|
|
const closeDialog = () => {
|
|
ctx.emit("dialogClose");
|
|
};
|
|
// 保存
|
|
const saveData = async () => {
|
|
await ruleFormRef.value.validate(async (valid) => {
|
|
if (valid) {
|
|
const req_databuf = sb_add.encode(props.formData).finish();
|
|
// 截取有效长度
|
|
const req_data = req_databuf.slice(0, req_databuf.length);
|
|
const res = props.type === 'I' ? await infoApi.saveTx(req_data) : await infoApi.updateTx(req_data);
|
|
const ret = response.decode(new Uint8Array(res));
|
|
if(ret.code == 0) {
|
|
ElMessage.success(res.data || res.message || '请求成功');
|
|
ctx.emit("dialogSuccess");
|
|
} else {
|
|
ElMessage.error(res.data || res.message || "请求失败");
|
|
}
|
|
} else {
|
|
}
|
|
});
|
|
};
|
|
return {
|
|
...toRefs(state),
|
|
ruleFormRef,
|
|
visible,
|
|
saveData,
|
|
closeDialog,
|
|
getQuDong
|
|
};
|
|
},
|
|
};
|
|
</script>
|