Files
shzg_projectManage/src/views/information/construction/index.vue
2026-01-20 16:56:01 +08:00

327 lines
9.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" >
<el-form-item label="施工队名称" prop="teamName">
<el-input
v-model="queryParams.teamName"
placeholder="请输入施工队名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['information:construction:add']"
>新增</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['information:construction:edit']"
>修改</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['information:construction:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<!-- v-hasPermi="['information:pcdedetail:import']" -->
<el-button type="primary" plain icon="Upload" @click="handleImport" >导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['information:construction:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="constructionList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键ID" align="center" prop="id" /> -->
<el-table-column label="施工队名称" align="center" prop="teamName" />
<!-- <el-table-column label="施工队编号" align="center" prop="teamCode" /> -->
<el-table-column label="创建时间" align="center" prop="createdAt" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['information:construction:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['information:construction:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改施工队信息对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="constructionRef" :model="form" :rules="rules" >
<el-form-item label="施工队名称" prop="teamName">
<el-input v-model="form.teamName" placeholder="请输入施工队名称" />
</el-form-item>
<!-- <el-form-item label="施工队编号" prop="teamCode">
<el-input v-model="form.teamCode" placeholder="请输入施工队编号" />
</el-form-item> -->
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
<el-upload
ref="uploadRef"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</template>
</el-upload>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Construction">
import { listConstruction, getConstruction, delConstruction, addConstruction, updateConstruction } from "@/api/information/construction";
import { getToken } from "@/utils/auth";
const { proxy } = getCurrentInstance();
const constructionList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
teamName: null,
teamCode: null,
createdBy: null,
createdAt: null,
updatedBy: null,
updatedAt: null,
isDelete: null
},
rules: {
teamName: [
{ required: true, message: "施工队名称不能为空", trigger: "blur" }
],
// teamCode: [
// { required: true, message: "施工队编号不能为空", trigger: "blur" }
// ],
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询施工队信息列表 */
function getList() {
loading.value = true;
listConstruction(queryParams.value).then(response => {
constructionList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
// 取消按钮
function cancel() {
open.value = false;
reset();
}
// 表单重置
function reset() {
form.value = {
id: null,
teamName: null,
// teamCode: null,
createdBy: null,
createdAt: null,
updatedBy: null,
updatedAt: null,
isDelete: null
};
proxy.resetForm("constructionRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加施工队信息";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const _id = row.id || ids.value
getConstruction(_id).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改施工队信息";
});
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["constructionRef"].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateConstruction(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addConstruction(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认删除施工队信息编号为"' + _ids + '"的数据项?').then(function() {
return delConstruction(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
const upload = reactive({
open: false,
title: "",
isUploading: false,
headers: { Authorization: "Bearer " + getToken() },
url: import.meta.env.VITE_APP_BASE_API + "/information/construction/importData"
});
function handleImport() {
upload.title = "施工队信息导入";
upload.open = true;
}
function handleFileUploadProgress(event, file, fileList) {
upload.isUploading = true;
}
function handleFileSuccess(response, file, fileList) {
upload.open = false;
upload.isUploading = false;
proxy.$refs["uploadRef"].handleRemove(file);
proxy.$alert(`<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>${response.msg}</div>`, "导入结果", { dangerouslyUseHTMLString: true });
getList();
}
function submitFileForm() {
proxy.$refs["uploadRef"].submit();
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('information/construction/export', {
...queryParams.value
}, `construction_${new Date().getTime()}.xlsx`)
}
getList();
</script>