factory_web/src/views/sys/post.vue

287 lines
8.0 KiB
Vue

<template>
<el-container>
<el-aside style="width: 50%!important">
<el-container>
<el-header>
<div class="left-panel">
<div style="margin-right: 20px">岗位列表</div>
<el-button
type="primary"
icon="el-icon-plus"
@click="add"
v-auth="'post.create'"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
stripe
highlightCurrentRow
@row-click="rowClick"
:hidePagination="true"
>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="" type="index"></el-table-column>
<el-table-column
label="名称"
prop="name"
min-width="130"
></el-table-column>
<el-table-column
label="标识"
prop="code"
width="100"
></el-table-column>
<el-table-column
label="最短在岗(h)"
prop="min_hour"
width="100"
></el-table-column>
<el-table-column
label="最长在岗(h)"
prop="max_hour"
width="100"
></el-table-column>
<el-table-column
label="描述"
prop="description"
></el-table-column>
<el-table-column label="操作" fixed="right" align="right">
<template #default="scope">
<el-button
type="warning"
link
size="small"
@click.stop="table_edit(scope.row)"
v-auth="'post.update'"
>编辑
</el-button>
<el-button
type="danger"
link
size="small"
@click.stop="table_del(scope.row)"
v-auth="'post.delete'"
>删除
</el-button>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-aside>
<el-container>
<el-header>
<div class="left-panel">
<div style="margin-right: 20px">岗位权限</div>
<el-button
type="primary"
icon="el-icon-plus"
@click="addPostRole"
v-auth="'post.update'"
></el-button>
<!-- <el-button
type="danger"
plain
icon="el-icon-delete"
@click="delPostRole"
v-auth="'post.delete'"
></el-button> -->
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table2"
:apiObj="apiObj2"
row-key="id"
stripe
:hidePagination="true"
>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="" type="index"></el-table-column>
<el-table-column label="所属岗位" prop="post" min-width="80">
<template #default="scope">{{ scope.row.post_.name }}</template>
</el-table-column>
<el-table-column label="拥有角色" prop="role" min-width="80">
<template #default="scope">{{ scope.row.role_.name }}</template>
</el-table-column>
<el-table-column label="权限范围" prop="data_range" min-width="80">
<template #default="scope">{{
options[scope.row.data_range]
}}</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="right">
<template #default="scope">
<el-button
type="warning"
link
size="small"
@click="postRoleDel(scope.row)"
v-auth="'post.update'"
>删除
</el-button>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-container>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
<save-role-dialog
v-if="dialog.roleSave"
ref="saveRoleDialog"
@success="handleSaveRoleSuccess"
@closed="dialog.roleSave = false"
></save-role-dialog>
</template>
<script>
import saveDialog from "./post_form.vue";
import saveRoleDialog from "./post_role_form.vue";
export default {
name: "listSon",
components: {
saveDialog,
saveRoleDialog,
},
data() {
return {
apiObj: this.$API.system.post.list,
apiObj2: null,
query: {},
query2: {},
dialog: {
save: false,
roleSave: false,
},
selection: [],
postId: "",
options: {
10: "全部",
20: "自定义",
30: "同级及以下",
40: "本级及以下",
50: "本级",
60: "仅本人",
},
};
},
methods: {
rowClick(row) {
this.apiObj2 = this.$API.system.postrole.list;
this.postId = row.id;
this.$refs.table2.queryData({post: row.id });
},
//窗口新增
add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open();
});
},
//窗口编辑
table_edit(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("edit").setData(row);
});
},
table_del(row) {
this.$confirm(`确定删除选中的岗位吗?`, "提示", {
type: "warning",
}).then(() => {
this.$API.system.post.delete.req(row.id).then((res) => {
this.$refs.table.refresh()
this.$message.success("操作成功");
}).catch(() => {});
});
},
//批量删除
async batch_del() {
var confirmRes = await this.$confirm(
`确定删除选中的 ${this.selection.length} 项吗?`,
"提示",
{
type: "warning",
confirmButtonText: "删除",
confirmButtonClass: "el-button--danger",
}
).catch(() => {});
if (!confirmRes) {
return false;
}
var ids = this.selection.map((v) => v.id);
this.$refs.table.removeKeys(ids);
this.$message.success("操作成功");
},
//新增岗位后更新数据
handleSaveSuccess(data, mode) {
//为了减少网络请求,直接变更表格内存数据
// if (mode == "add") {
// this.$refs.table.unshiftRow(data);
// } else if (mode == "edit") {
// this.$refs.table.updateKey(data);
// }
//当然也可以暴力的直接刷新表格
this.$refs.table.refresh()
},
//新增岗位关系后更新数据
handleSaveRoleSuccess() {
this.$refs.table2.refresh();
},
addPostRole() {
this.dialog.roleSave = true;
this.$nextTick(() => {
this.$refs.saveRoleDialog.open("add").setData({ postId: this.postId });
});
},
postRoleEdit(row) {
this.dialog.roleSave = true;
this.$nextTick(() => {
this.$refs.saveRoleDialog.open("edit").setData(row);
});
},
delPostRole() {},
closed() {
this.dialog.save = false;
this.dialog.roleSave = false;
this.postId = "";
this.$refs.table2.refresh();
},
postRoleDel(row) {
this.$confirm(`确定删除选中的岗位关系吗?`, "提示", {
type: "warning",
})
.then(() => {
this.$API.system.postrole.delete.req(row.id).then((res) => {
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
const loading = this.$loading();
this.$refs.table2.refresh();
loading.close();
this.$message.success("操作成功");
}
});
})
.catch(() => {});
},
},
};
</script>
<style>
</style>