|
|
<template>
|
|
|
<div>
|
|
|
<xy-dialog
|
|
|
ref="dialog"
|
|
|
:is-show.sync="isShow"
|
|
|
type="form"
|
|
|
:title="type === 'add' ? '新增制度目录' : '编辑制度目录'"
|
|
|
:form="form"
|
|
|
:rules="rules"
|
|
|
@submit="submit"
|
|
|
>
|
|
|
<template v-slot:name>
|
|
|
<div class="xy-table-item">
|
|
|
<div class="xy-table-item-label">名称 :</div>
|
|
|
<div class="xy-table-item-content">
|
|
|
<el-input
|
|
|
v-model="form.name"
|
|
|
clearable
|
|
|
placeholder="请输入名称"
|
|
|
style="width: 300px"
|
|
|
></el-input>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<template v-slot:pid>
|
|
|
<div class="xy-table-item">
|
|
|
<div class="xy-table-item-label">上级 :</div>
|
|
|
<div class="xy-table-item-content">
|
|
|
<el-cascader
|
|
|
:key="cascaderId_pid"
|
|
|
clearable
|
|
|
style="width: 300px"
|
|
|
:show-all-levels="false"
|
|
|
v-model="form.pid"
|
|
|
:options="pidsRoot"
|
|
|
:props="{ value: 'id', label: 'name', checkStrictly: true }"
|
|
|
@change="pidCascaderHandler"
|
|
|
></el-cascader>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<template v-slot:type>
|
|
|
<div class="xy-table-item">
|
|
|
<div class="xy-table-item-label">类型 :</div>
|
|
|
<div class="xy-table-item-content">
|
|
|
<el-input
|
|
|
v-model="form.type"
|
|
|
clearable
|
|
|
placeholder="请输入类型"
|
|
|
style="width: 300px"
|
|
|
></el-input>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<template v-slot:remark>
|
|
|
<div class="xy-table-item">
|
|
|
<div class="xy-table-item-label">备注 :</div>
|
|
|
<div class="xy-table-item-content">
|
|
|
<el-input
|
|
|
type="textarea"
|
|
|
:autosize="{ minRows: 2 }"
|
|
|
v-model="form.remark"
|
|
|
clearable
|
|
|
placeholder="请输入备注"
|
|
|
style="width: 300px"
|
|
|
></el-input>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
</xy-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import { show, save, store } from "@/api/sysManage/menu";
|
|
|
export default {
|
|
|
props: {
|
|
|
pids: {
|
|
|
type: Array,
|
|
|
default: () => [],
|
|
|
},
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
isShow: false,
|
|
|
id: "",
|
|
|
type: "",
|
|
|
|
|
|
cascaderId_pid: "",
|
|
|
|
|
|
form: {
|
|
|
name: "",
|
|
|
pid: 0,
|
|
|
type: "",
|
|
|
remark: "",
|
|
|
},
|
|
|
rules: {},
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
|
show() {
|
|
|
this.isShow = true;
|
|
|
},
|
|
|
hidden() {
|
|
|
this.isShow = false;
|
|
|
},
|
|
|
init() {
|
|
|
for (let key in this.form) {
|
|
|
if (this.form[key] instanceof Array) {
|
|
|
this.form[key] = [];
|
|
|
} else {
|
|
|
this.form[key] = "";
|
|
|
}
|
|
|
}
|
|
|
this.$refs["dialog"].clearValidate();
|
|
|
},
|
|
|
setId(id) {
|
|
|
if (typeof id == "number") {
|
|
|
this.id = id;
|
|
|
} else {
|
|
|
console.error("error typeof id: " + typeof id);
|
|
|
}
|
|
|
},
|
|
|
getId() {
|
|
|
return this.id;
|
|
|
},
|
|
|
setType(type = "add") {
|
|
|
let types = ["add", "editor"];
|
|
|
if (types.includes(type)) {
|
|
|
this.type = type;
|
|
|
} else {
|
|
|
console.warn("Unknown type: " + type);
|
|
|
}
|
|
|
},
|
|
|
setForm(key = [], value = []) {
|
|
|
if (key instanceof Array) {
|
|
|
key.forEach((key, index) => {
|
|
|
this.form[key] = value[index] ?? "";
|
|
|
});
|
|
|
}
|
|
|
if (typeof key === "string") {
|
|
|
this.form[key] = value;
|
|
|
}
|
|
|
if (!key) {
|
|
|
this.init();
|
|
|
}
|
|
|
},
|
|
|
pidCascaderHandler(e) {
|
|
|
if (e.length > 0) {
|
|
|
this.form.pid = e.at(-1);
|
|
|
} else {
|
|
|
this.form.pid = "";
|
|
|
}
|
|
|
},
|
|
|
|
|
|
async getDetail() {
|
|
|
const res = await show({ id: this.id });
|
|
|
this.$integrateData(this.form, res);
|
|
|
},
|
|
|
|
|
|
submit() {
|
|
|
if (this.type === "add") {
|
|
|
if (this.form.hasOwnProperty("regulation_menu_id")) {
|
|
|
delete this.form.regulation_menu_id;
|
|
|
}
|
|
|
store(this.form).then((res) => {
|
|
|
this.$message({
|
|
|
type: "success",
|
|
|
message:
|
|
|
this.type === "add" ? "新增制度目录" : "编辑制度目录" + "成功",
|
|
|
});
|
|
|
this.isShow = false;
|
|
|
this.$emit("refresh");
|
|
|
});
|
|
|
}
|
|
|
if (this.type === "editor") {
|
|
|
Object.defineProperty(this.form, "regulation_menu_id", {
|
|
|
value: this.id,
|
|
|
enumerable: true,
|
|
|
configurable: true,
|
|
|
writable: true,
|
|
|
});
|
|
|
save(this.form).then((res) => {
|
|
|
this.$message({
|
|
|
type: "success",
|
|
|
message:
|
|
|
this.type === "add" ? "新增制度目录" : "编辑制度目录" + "成功",
|
|
|
});
|
|
|
this.isShow = false;
|
|
|
this.$emit("refresh");
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
},
|
|
|
computed: {
|
|
|
pidsRoot () {
|
|
|
return [{ id: 0, name: '根目录', children: this.pids }]
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
isShow(val) {
|
|
|
if (val) {
|
|
|
if (this.type === "editor") {
|
|
|
this.getDetail();
|
|
|
}
|
|
|
} else {
|
|
|
this.id = "";
|
|
|
this.type = "";
|
|
|
this.init();
|
|
|
this.$refs["dialog"].clearValidate();
|
|
|
delete this.form.regulation_menu_id;
|
|
|
}
|
|
|
},
|
|
|
pids() {
|
|
|
++this.cascaderId_pid;
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
::v-deep .el-input__inner {
|
|
|
text-align: left;
|
|
|
}
|
|
|
</style>
|