471 lines
12 KiB
Vue
471 lines
12 KiB
Vue
<template>
|
|
<div class="dictionary">
|
|
<div class="demo-formName">
|
|
<my-form
|
|
:formNewList="formList"
|
|
:fromItem="formItem"
|
|
@headdenForm="headdenForm"
|
|
searchFive
|
|
ref="myForm"
|
|
>
|
|
</my-form>
|
|
</div>
|
|
<div class="count">
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-search"
|
|
@click="headdenForm({ page: 1, pageSize: 10 }, 'search')"
|
|
>
|
|
查询
|
|
</el-button>
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-plus"
|
|
@click="headdenForm({}, 'add')"
|
|
>
|
|
新增
|
|
</el-button>
|
|
</div>
|
|
<div class="table-container">
|
|
<my-table
|
|
:tableData="tableData"
|
|
:coloumData="coloumData"
|
|
isShowPagination
|
|
:paginationParam="paginationParam"
|
|
@changeSize="handleSizeChange"
|
|
@changePage="handlePageChange"
|
|
@selectionChange="handleSelectionChange"
|
|
>
|
|
<template #whitTime="{ data }">
|
|
{{ data.createTime }} - {{ data.endTime }}
|
|
</template>
|
|
<template #operate="{ data }">
|
|
<el-link
|
|
type="primary"
|
|
:underline="false"
|
|
@click="handleClick(data, 'edit')"
|
|
>
|
|
修改
|
|
</el-link>
|
|
<el-link
|
|
type="danger"
|
|
:underline="false"
|
|
@click="handleClick(data, 'delete')"
|
|
>
|
|
删除
|
|
</el-link>
|
|
</template>
|
|
</my-table>
|
|
</div>
|
|
<el-drawer
|
|
:title="title"
|
|
:visible.sync="drawer"
|
|
append-to-body
|
|
direction="rtl"
|
|
:wrapperClosable="false"
|
|
:close-on-press-escape="false"
|
|
>
|
|
<div class="demo-drawer__content">
|
|
<my-form
|
|
:formNewList="formDrawerList"
|
|
:fromItem="fromItem"
|
|
dialogImageUrl
|
|
@determine="determine"
|
|
@handleClose="handleClose"
|
|
@changeSelect="changeSelect"
|
|
labelWidth="120px"
|
|
:disabled="isEditFlag"
|
|
>
|
|
</my-form>
|
|
</div>
|
|
</el-drawer>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
"use script";
|
|
import {
|
|
whitListList,
|
|
whitListAdd,
|
|
whitListUpdate,
|
|
whitListDelete
|
|
} from "@/api/whitList.js";
|
|
import { devPositionList } from "@/api/position.js";
|
|
export default {
|
|
name: "whitListDialog",
|
|
data() {
|
|
return {
|
|
formList: [
|
|
{
|
|
label: "sn",
|
|
type: "input",
|
|
model: "key"
|
|
}
|
|
],
|
|
tableData: [],
|
|
coloumData: [
|
|
{
|
|
type: "text",
|
|
label: "sn",
|
|
prop: "sn"
|
|
},
|
|
{
|
|
type: "text",
|
|
label: "是否全天",
|
|
prop: "allDay"
|
|
},
|
|
{
|
|
slot: "whitTime",
|
|
label: "白名单生效的起止日期"
|
|
},
|
|
{
|
|
type: "text",
|
|
label: "状态",
|
|
prop: "status"
|
|
},
|
|
{
|
|
slot: "operate",
|
|
label: "操作",
|
|
width: 250,
|
|
fixed: "right"
|
|
}
|
|
],
|
|
paginationParam: {
|
|
currentPage: 1,
|
|
size: 10,
|
|
total: 0
|
|
},
|
|
formItem: {},
|
|
formDrawerList: [
|
|
{
|
|
label: "sn",
|
|
type: "input",
|
|
model: "sn",
|
|
rules: [{ required: true, message: "请输入sn" }]
|
|
},
|
|
{
|
|
label: "机型",
|
|
type: "input",
|
|
model: "model",
|
|
rules: [{ required: true, message: "请输入机型" }]
|
|
},
|
|
{
|
|
label: "是否全天",
|
|
type: "select",
|
|
model: "allDay",
|
|
options: [
|
|
{ label: "是", key: "0" },
|
|
{ label: "否", key: "1" }
|
|
],
|
|
rules: [
|
|
{ required: true, message: "请选择是否全天", trigger: "change" }
|
|
]
|
|
},
|
|
{
|
|
label: "关联防区",
|
|
type: "select",
|
|
model: "positionId",
|
|
options: [],
|
|
disabled: false,
|
|
multiple: true,
|
|
rules: [
|
|
{ required: true, message: "请选择关联防区", trigger: "change" }
|
|
]
|
|
},
|
|
{
|
|
label: "所属单位",
|
|
type: "input",
|
|
model: "company"
|
|
},
|
|
{
|
|
label: "备注",
|
|
type: "textarea",
|
|
maxLenght: 100,
|
|
rowsHeight: 15,
|
|
placeholder: "请输入内容",
|
|
model: "mark"
|
|
},
|
|
{
|
|
label: "时间日期",
|
|
type: "datetimerange",
|
|
model: "date",
|
|
format: "yyyy-MM-dd HH:mm:ss"
|
|
}
|
|
],
|
|
drawer: false,
|
|
title: "",
|
|
fromItem: {},
|
|
isType: "",
|
|
isEditFlag: false,
|
|
PositionList: []
|
|
};
|
|
},
|
|
components: {},
|
|
mounted() {
|
|
this.headdenForm({}, "search");
|
|
this.search();
|
|
},
|
|
methods: {
|
|
changeSelect(value) {
|
|
const lastItem = this.formDrawerList[this.formDrawerList.length - 1];
|
|
const dateTimeItem = {
|
|
label: "时间日期",
|
|
type: "datetimerange",
|
|
model: "date",
|
|
format: "yyyy-MM-dd HH:mm:ss"
|
|
};
|
|
|
|
if (value === "0") {
|
|
if (lastItem.label === "时间日期") {
|
|
this.formDrawerList.pop();
|
|
// this.$set(this.fromItem, "date", null); // 清除 date 数据
|
|
}
|
|
} else if (value === "1") {
|
|
if (lastItem.label !== "时间日期") {
|
|
this.formDrawerList.push(dateTimeItem);
|
|
// this.$set(this.fromItem, "date", []); // 初始化 date 数据
|
|
}
|
|
}
|
|
},
|
|
initPosition() {
|
|
devPositionList().then((res) => {
|
|
if (res.code === 0) {
|
|
this.PositionList = res.data.items;
|
|
this.formDrawerList.forEach((item) => {
|
|
if (item.label === "关联防区") {
|
|
item.options = res.data.items.map((item) => {
|
|
item.label = item.name;
|
|
item.key = item.id;
|
|
return item;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
search() {
|
|
this.headdenForm({}, "search");
|
|
},
|
|
// 搜索
|
|
headdenForm(value, type) {
|
|
let params = {};
|
|
if (type === "search") {
|
|
params = JSON.parse(JSON.stringify(this.$refs.myForm.ruleForm));
|
|
if (params.dateRange) {
|
|
params.startTime = params.dateRange[0];
|
|
params.endTime = params.dateRange[1];
|
|
}
|
|
if (value.page !== undefined) {
|
|
this.paginationParam.currentPage = value.page;
|
|
this.paginationParam.size = value.pageSize;
|
|
}
|
|
params.pageNum = this.paginationParam.currentPage;
|
|
params.pageSize = this.paginationParam.size;
|
|
this.$delete(params, "dateRange");
|
|
whitListList(params).then((res) => {
|
|
if (res.code === 0) {
|
|
this.tableData = res.data.items.map((item) => {
|
|
let status = "未启用";
|
|
if (item.allDay) {
|
|
status = "启用中";
|
|
} else {
|
|
const now = new Date();
|
|
const endTime = new Date(item.endTime);
|
|
status = endTime > now ? "启用中" : "未启用";
|
|
}
|
|
return {
|
|
...item,
|
|
allDay: item.allDay ? "是" : "否",
|
|
status
|
|
};
|
|
});
|
|
|
|
this.paginationParam.total = res.data.total;
|
|
}
|
|
});
|
|
} else if (type === "add") {
|
|
this.isType = "add";
|
|
this.title = "新增白名单";
|
|
this.initPosition();
|
|
this.fromItem = {};
|
|
this.formDrawerList = this.getDefaultFormDrawerList();
|
|
this.isEditFlag = false;
|
|
this.drawer = true;
|
|
}
|
|
},
|
|
// 确定按钮
|
|
determine(value) {
|
|
const params = { ...value };
|
|
console.log(params, "params");
|
|
|
|
// 设置 positionName
|
|
// const position = this.PositionList.find(
|
|
// (item) => item.id === params.positionId
|
|
// );
|
|
// params.positionName = position ? position.name : "";
|
|
|
|
// 处理 allDay 和时间
|
|
if (params.allDay === "0") {
|
|
params.allDay = true;
|
|
params.startTime = "";
|
|
params.endTime = "";
|
|
} else {
|
|
params.allDay = false;
|
|
if (Array.isArray(params.date) && params.date.length === 2) {
|
|
params.startTime = params.date[0];
|
|
params.endTime = params.date[1];
|
|
} else {
|
|
params.startTime = "";
|
|
params.endTime = "";
|
|
}
|
|
}
|
|
delete params.date; // 移除 date 字段
|
|
const apiCall = this.isType === "add" ? whitListAdd : whitListUpdate;
|
|
apiCall(params)
|
|
.then((res) => {
|
|
if (res.code === 0) {
|
|
this.$message.success(
|
|
`${this.isType === "add" ? "新增" : "编辑"}成功`
|
|
);
|
|
this.search();
|
|
} else {
|
|
this.$message.error(
|
|
`${this.isType === "add" ? "新增" : "编辑"}失败`
|
|
);
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
console.error(`${this.isType === "add" ? "新增" : "编辑"}错误:`, err);
|
|
this.$message.error(
|
|
`${this.isType === "add" ? "新增" : "编辑"}时发生错误`
|
|
);
|
|
});
|
|
this.drawer = false;
|
|
},
|
|
// 编辑 删除
|
|
handleClick(value, type) {
|
|
if (type === "edit") {
|
|
this.isType = "edit";
|
|
this.title = "编辑白名单";
|
|
this.isEditFlag = false;
|
|
this.fromItem = JSON.parse(JSON.stringify(value));
|
|
this.fromItem.positionId = this.fromItem.positionIds;
|
|
this.formDrawerList = this.getDefaultFormDrawerList();
|
|
this.fromItem.allDay = this.fromItem.allDay ? "0" : "1";
|
|
this.changeSelect(this.fromItem.allDay); // 根据 allDay 调整时间日期字段
|
|
this.initPosition();
|
|
this.drawer = true;
|
|
} else if (type === "delete") {
|
|
console.log(value);
|
|
let params = {
|
|
id: value.id
|
|
};
|
|
this.$confirm("此操作将永久删除该白名单, 是否继续?", "提示", {
|
|
confirmButtonText: "确定",
|
|
cancelButtonText: "取消",
|
|
type: "warning"
|
|
})
|
|
.then(() => {
|
|
whitListDelete(params).then((res) => {
|
|
if (res.code === 0) {
|
|
this.$message.success("删除成功");
|
|
this.headdenForm({}, "search");
|
|
}
|
|
});
|
|
})
|
|
.catch(() => {
|
|
this.$message({
|
|
type: "info",
|
|
message: "已取消删除"
|
|
});
|
|
});
|
|
}
|
|
},
|
|
// 关闭抽屉
|
|
handleClose() {
|
|
this.drawer = false;
|
|
},
|
|
//分页
|
|
handleSizeChange(value) {
|
|
console.log(value);
|
|
this.paginationParam.size = value;
|
|
this.headdenForm({}, "search");
|
|
},
|
|
handlePageChange(value) {
|
|
console.log(value);
|
|
this.paginationParam.currentPage = value;
|
|
this.headdenForm({}, "search");
|
|
},
|
|
handleSelectionChange(value) {
|
|
console.log(value);
|
|
}, // 初始化 formDrawerList 的公共方法
|
|
getDefaultFormDrawerList() {
|
|
return [
|
|
{
|
|
label: "sn",
|
|
type: "input",
|
|
model: "sn",
|
|
rules: [{ required: true, message: "请输入sn" }]
|
|
},
|
|
{
|
|
label: "机型",
|
|
type: "input",
|
|
model: "model",
|
|
rules: [{ required: true, message: "请输入机型" }]
|
|
},
|
|
{
|
|
label: "是否全天",
|
|
type: "select",
|
|
model: "allDay",
|
|
options: [
|
|
{ label: "是", key: "0" },
|
|
{ label: "否", key: "1" }
|
|
],
|
|
rules: [
|
|
{ required: true, message: "请选择是否全天", trigger: "change" }
|
|
]
|
|
},
|
|
{
|
|
label: "关联防区",
|
|
type: "select",
|
|
model: "positionId",
|
|
options: [],
|
|
disabled: false,
|
|
multiple: true,
|
|
rules: [
|
|
{ required: true, message: "请选择关联防区", trigger: "change" }
|
|
]
|
|
},
|
|
{
|
|
label: "所属单位",
|
|
type: "input",
|
|
model: "company"
|
|
},
|
|
{
|
|
label: "备注",
|
|
type: "textarea",
|
|
maxLenght: 100,
|
|
rowsHeight: 15,
|
|
placeholder: "请输入内容",
|
|
model: "mark"
|
|
},
|
|
{
|
|
label: "时间日期",
|
|
type: "datetimerange",
|
|
model: "date",
|
|
format: "yyyy-MM-dd HH:mm:ss"
|
|
}
|
|
];
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
<style scoped lang="scss">
|
|
.dictionary {
|
|
width: 95%;
|
|
height: 100%;
|
|
padding: 20px;
|
|
position: relative;
|
|
}
|
|
</style>
|