You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
4.0 KiB
Vue

1 month ago
<template>
<ClientOnly>
<el-container class="container">
<div class="content">
<div class="oper">
<el-button type="primary" size="default" :icon="Plus" @click="showAddDialog"></el-button>
<!-- <el-button type="danger" size="default" :icon="DeleteFilled">删除</el-button> -->
</div>
<el-table :data="areaData" class="data-table" stripe border>
<el-table-column prop="AreaName" label="工区名称" width="200" />
<el-table-column prop="CreateDate" label="创建时间" width="200" />
<el-table-column prop="UpdateTime" label="更新时间" width="*" />
<!-- <el-table-column label="操作" width="*">
<template #default="scope">
<el-button type="primary" size="small" @click="handleEdit(scope.row)"
>编辑</el-button
>
<el-button type="danger" size="small" @click="handleDelete(scope.row)"
>删除</el-button
>
</template>
</el-table-column> -->
</el-table>
<el-dialog v-model="showAdd" title="添加工区" style="width: 300px; height: 180px; z-index: 9999"
@close="handleClose" :close-on-click-modal="false">
<el-form class="area-form">
<el-form-item label="工区名称:">
<el-input v-model="areaName" placeholder="请输入名称"></el-input>
</el-form-item>
</el-form>
<el-button type="primary" @click="handleAdd" class="btn-confirm">确定</el-button>
</el-dialog>
</div>
<LoadingDialog v-model="loading" ref="loadingRef" :timeout="3000" message="正在加载数据……" @timeout="onTimeout" />
</el-container>
</ClientOnly>
</template>
<script setup>
definePageMeta({
requiresAuth: true
});
import { ref, onMounted } from "vue";
import { getWorkArea, addWorkArea, setWorkArea } from "~/services/workAreaService";
import { Plus, DeleteFilled } from "@element-plus/icons-vue";
import { ElMessageBox } from "element-plus";
import { emitter } from "~/utils/eventBus";
import { EMIT_COMMAND } from '~/utils/commandTypes'
// 消息提示(自动隐藏)
const { $toastMessage } = useNuxtApp();
const loading = ref(false);
const loadingRef = ref(null);
const areaData = ref(null);
const areaName = ref('');
const showAdd = ref(false);
const showAddDialog = () => {
showAdd.value = true;
}
onMounted(async () => {
await nextTick();
await getData();
});
const handleAdd = async () => {
if (!areaName.value) {
$toastMessage.warning("请输入'工区名称'")
return;
}
const response = await addWorkArea(areaName.value);
if (response.Code === 1) {
emitter.emit(EMIT_COMMAND.ADD_WORK_AREA);
await getData();
handleClose();
} else {
$toastMessage.error(`添加失败,错误:${response.Msg}`);
return;
}
};
const getData = async () => {
try {
loading.value = true;
const response = await getWorkArea();
if (response.Count > 0) {
areaData.value = response.Data;
}
} finally {
if (loadingRef.value) {
loadingRef.value.close();
}
}
};
const handleEdit = async (data) => {
};
const handleDelete = async (data) => {
ElMessageBox.confirm(`确认删除工区 ${data.AreaName} 吗?`, "删除确认", {
confirmButtonText: "确认删除",
cancelButtonText: "取消",
type: "warning",
draggable: true,
})
.then(() => {
deleteWorkArea(data.AreaID);
})
.catch(() => {
});
};
const handleClose = () => {
showAdd.value = false;
};
const onTimeout = () => {
$toastMessage.error("加载数据失败!");
}
</script>
<style scoped>
.content {
width: 100%;
height: 100%;
}
.data-table {
width: 100%;
}
.oper {
width: 100%;
height: 50px;
display: flex;
gap: 12px;
/* 按钮间距 */
align-items: center;
margin-left: 15px;
}
.area-form {
border: 1px solid rgba(255, 255, 255, 0.1);
/* box-shadow: 0 10px 35px rgba(0, 0, 0, 0.4); */
padding: 10px;
}
.btn-confirm {
display: flex;
margin-left: auto;
margin-top: 10px;
}
</style>