YZProjectCloud/yanzhu-ui-vue3/src/views/manage/proProjectInfoSubdeptsGroup/index.vue

439 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="项目名称" prop="projectName" v-if="!userStore.currentPrjId">
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="单位名称" prop="subDeptName">
<el-input v-model="queryParams.subDeptName" placeholder="请输入单位名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="单位类型" prop="subDeptType">
<el-select v-model="queryParams.subDeptType" placeholder="请选择单位类型" clearable>
<el-option v-for="dict in sub_dept_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="班组名称" prop="groupName">
<el-input v-model="queryParams.groupName" placeholder="请输入班组名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工种类型" prop="craftType">
<el-select v-model="queryParams.craftType" placeholder="请选择工种类型" clearable>
<el-option v-for="dict in pro_craft_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="工种岗位" prop="craftPost">
<el-select v-model="queryParams.craftPost" placeholder="请选择工种岗位" clearable>
<el-option v-for="dict in pro_craft_post" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</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="['manage:proProjectInfoSubdeptsGroup:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
v-hasPermi="['manage:proProjectInfoSubdeptsGroup:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['manage:proProjectInfoSubdeptsGroup:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['manage:proProjectInfoSubdeptsGroup:export']">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="proProjectInfoSubdeptsGroupList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="公司名称" align="center" prop="comName" />
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column label="单位名称" align="center" prop="subDeptName" />
<el-table-column label="单位类型" align="center" prop="subDeptType">
<template #default="scope">
<dict-tag :options="sub_dept_type" :value="scope.row.subDeptType" />
</template>
</el-table-column>
<el-table-column label="班组名称" align="center" prop="groupName" />
<el-table-column label="工种类型" align="center" prop="craftType">
<template #default="scope">
<dict-tag :options="pro_craft_type" :value="scope.row.craftType" />
</template>
</el-table-column>
<el-table-column label="工种岗位" align="center" prop="craftPost">
<template #default="scope">
<dict-tag :options="pro_craft_post" :value="scope.row.craftPost" />
</template>
</el-table-column>
<el-table-column label="班组长" align="center" prop="groupLeaderName" width="120">
<template #default="scope">
<el-button link v-if="scope.row.groupLeaderName" type="primary" icon="UserFilled"
@click="handleUpdateGroupLeader(scope.row)">{{scope.row.groupLeaderName}}</el-button>
<el-button link v-if="!scope.row.groupLeaderName" type="warning" icon="UserFilled"
@click="handleUpdateGroupLeader(scope.row)"> - </el-button>
</template>
</el-table-column>
<el-table-column label="进场状态" align="center" prop="useStatus" width="80">
<template #default="scope">
<dict-tag :options="sys_use_status" :value="scope.row.useStatus" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="120">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="审批状态" align="center" prop="approveStatus" width="100">
<template #default="scope">
<dict-tag :options="sys_approve_status" :value="scope.row.approveStatus" />
</template>
</el-table-column>
<el-table-column label="数据状态" align="center" prop="isDel" width="80" v-if="false">
<template #default="scope">
<dict-tag :options="sys_is_del" :value="scope.row.isDel" />
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="150" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-if="scope.row.craftType!=3"
v-hasPermi="['manage:proProjectInfoSubdeptsGroup:edit']">修改</el-button>
<el-button v-if="scope.row.useStatus == '1'" link type="primary" icon="Setting"
@click="handleUseStatus(scope.row)" v-hasPermi="['manage:proProjectInfoSubdeptsGroup:edit']">离场</el-button>
<el-button v-if="scope.row.useStatus == '2'" link type="primary" icon="Setting"
@click="handleUseStatus(scope.row)" v-hasPermi="['manage:proProjectInfoSubdeptsGroup:edit']">进场</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="680px" append-to-body modal-class="SubdeptsGroupDlg">
<el-form ref="proProjectInfoSubdeptsGroupRef" :model="form" :rules="rules" label-width="88px">
<el-form-item label="项目名称" v-if="form.projectId">
<el-tag effect="plain">{{ form.projectName }}</el-tag>
</el-form-item>
<el-form-item label="所属单位" prop="subDeptId">
<el-select v-model="form.subDeptId" placeholder="请选择所属单位" style="width:100%">
<el-option v-for="dept in subDeptOptions" :key="dept.id" :label="dept.subDeptName"
:value="dept.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="工种类型" prop="craftType">
<el-select v-model="form.craftType" placeholder="请选择工种类型" style="width:100%">
<el-option v-for="dict in pro_craft_type" v-show="dict.value != '3'" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="工种岗位" prop="craftPost" v-if="form.craftType">
<el-select v-model="form.craftPost" placeholder="请选择工种岗位" style="width:100%">
<el-option v-for="dict in pro_craft_post" v-show="dict.elTagClass == form.craftType" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="班组名称" prop="groupName">
<el-input v-model="form.groupName" placeholder="请输入班组名称" maxlength="32" show-word-limit />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="open = false">取 消</el-button>
</div>
</template>
</el-dialog>
<!-- 添加或修改单位班组对话框 -->
<el-dialog :title="leaderTitle" v-model="leaderOpen" width="680px" append-to-body modal-class="SubdeptsGroupDlg">
<el-form ref="proProjectInfoSubdeptsGroupRef" :model="leaderForm" :rules="leaderRules" label-width="88px">
<el-form-item label="项目名称">
<el-tag effect="plain">{{ leaderForm.projectName }}</el-tag>
</el-form-item>
<el-form-item label="参建单位">
{{leaderForm.subDeptName}}
</el-form-item>
<el-form-item label="班组类型">
<span v-if="leaderForm.craftType!=3">{{leaderForm.craftType=='1'?'特殊':'普通'}} {{leaderForm.craftPostName}} 班组</span>
<span v-if="leaderForm.craftType==3">管理班组</span>
</el-form-item>
<el-form-item label="班组名称">
{{leaderForm.groupName}}
</el-form-item>
<el-alert title="只能选择当前工种下的人员" type="warning" show-icon style="margin-bottom:20px;"/>
<el-form-item label="班组组长" prop="groupLeaderPhone">
<el-select v-model="leaderForm.groupLeaderPhone" placeholder="请选择班组组长" style="width:100%">
<el-option v-for="option in groupLeaderOptions" :key="option.userPhone" :label="option.userName"
:value="option.userPhone"></el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitLeaderForm">确 定</el-button>
<el-button @click="leaderOpen = false">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="ProProjectInfoSubdeptsGroup">
import auth from '@/plugins/auth'
import { findAllProjectInfoSubdepts } from "@/api/manage/proProjectInfoSubdepts";
import { findAllProSubDeptsUser } from "@/api/manage/proProjectInfoSubdeptsUsers";
import { listProProjectInfoSubdeptsGroup, getProProjectInfoSubdeptsGroup, delProProjectInfoSubdeptsGroup, addProProjectInfoSubdeptsGroup, updateProProjectInfoSubdeptsGroup, editUseStatus, updateGroupLeader } from "@/api/manage/proProjectInfoSubdeptsGroup";
import useUserStore from '@/store/modules/user'
const { proxy } = getCurrentInstance();
const { sys_approve_status, sub_dept_type, pro_craft_type, sys_is_del, pro_craft_post, sys_use_status } = proxy.useDict('sys_approve_status', 'sub_dept_type', 'pro_craft_type', 'sys_is_del', 'pro_craft_post', 'sys_use_status');
const userStore = useUserStore()
const proProjectInfoSubdeptsGroupList = ref([]);
const open = ref(false);
const leaderOpen = 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 leaderTitle = ref("");
const activeTabs = ref("base");
const subDeptOptions = ref([]);
const groupLeaderOptions = ref([]);
const data = reactive({
form: {},
leaderForm: {},
queryParams: {
pageNum: 1,
pageSize: 10,
projectName: null,
subDeptType: null,
subDeptName: null,
groupName: null,
craftType: null,
craftPost: null,
approveStatus: null,
activeTags: "finished"
},
rules: {
subDeptId: [{ required: true, message: "", trigger: "change" }],
craftType: [{ required: true, message: "", trigger: "change" }],
craftPost: [{ required: true, message: "", trigger: "change" }],
groupName: [{ required: true, message: "", trigger: "blur" }],
},
leaderRules: {
groupLeaderPhone: [{ required: true, message: "", trigger: "change" }]
}
});
const { queryParams, form, rules, leaderForm, leaderRules } = toRefs(data);
/** */
function getList() {
loading.value = true;
listProProjectInfoSubdeptsGroup(queryParams.value).then(response => {
proProjectInfoSubdeptsGroupList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
// 取消按钮
function cancel() {
open.value = false;
reset();
}
// 表单重置
function reset() {
form.value = {
id: null,
comId: null,
projectId: null,
subDeptId: null,
subDeptType: null,
subDeptName: null,
subDeptCode: null,
groupName: null,
groupCode: null,
craftType: null,
craftPost: null,
groupLeaderName: null,
groupLeaderCode: null,
groupLeaderPhone: null,
useStatus: null,
approveStatus: null,
qrCode: null,
isDel: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null
};
proxy.resetForm("proProjectInfoSubdeptsGroupRef");
}
/** 搜索按钮操作 */
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() {
if (!userStore.currentPrjId) {
proxy.$modal.msgWarning("请切换到项目数据!!!");
return false;
}
reset();
form.value.projectId = userStore.currentPrjId;
form.value.projectName = userStore.currentProName;
initSubDeptOptions(userStore.currentPrjId);
activeTabs.value = "base";
open.value = true;
title.value = "添加单位班组";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
initSubDeptOptions(row.projectId);
const _id = row.id || ids.value
getProProjectInfoSubdeptsGroup(_id).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改单位班组";
});
}
/** 修改班组长按钮操作 */
function handleUpdateGroupLeader(row) {
let param = {
projectId: row.projectId,
subDeptId: row.subDeptId,
craftPost: row.craftPost,
activeTags: 'finished'
}
if(auth.hasPermi('manage:proProjectInfoSubdeptsGroup:edit')){
leaderForm.value = row;
findAllProSubDeptsUser(param).then(res => {
leaderOpen.value = true;
leaderTitle.value = "修改单位班组长";
groupLeaderOptions.value = res.data;
});
}
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["proProjectInfoSubdeptsGroupRef"].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateProProjectInfoSubdeptsGroup(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
form.value.approveStatus = 101;
addProProjectInfoSubdeptsGroup(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 变更按钮 */
function submitLeaderForm() {
proxy.$refs["proProjectInfoSubdeptsGroupRef"].validate(valid => {
if (valid) {
updateGroupLeader(leaderForm.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
leaderOpen.value = false;
getList();
});
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认删除单位班组编号为"' + _ids + '"的数据项?').then(function () {
return delProProjectInfoSubdeptsGroup(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => { });
}
/** 进场/退场操作 */
function handleUseStatus(row) {
let state = row.useStatus == '1' ? "2" : "1"
let stateMsg = row.useStatus == '1' ? "离场" : "进场";
proxy.$modal.confirm('是否确认修改班组状态为"' + stateMsg + '"').then(function () {
return editUseStatus(row.id,state);
}).then(() => {
getList();
proxy.$modal.msgSuccess("修改成功");
}).catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download('manage/proProjectInfoSubdeptsGroup/export', {
...queryParams.value
}, `proProjectInfoSubdeptsGroup_${new Date().getTime()}.xlsx`)
}
/** 初始化 */
function initSubDeptOptions(value) {
findAllProjectInfoSubdepts({ 'projectId': value }).then(res => {
subDeptOptions.value = (res.data||[]).filter(d=>["4","5"].includes( d.subDeptType));
})
}
getList();
</script>
<style lang="scss" scope>
.el-divider__text {
color: #409eff;
font-weight: 800;
}
.SubdeptsDlg {
.el-dialog__body {
margin-top: -25px;
overflow: auto;
max-height: 680px;
}
}
</style>