fix: BUG修改

This commit is contained in:
kun 2023-06-01 19:36:04 +08:00
parent 215a6ac3d5
commit ad9957a2d0
7 changed files with 266 additions and 144 deletions

View File

@ -344,3 +344,25 @@ export const memberInfo = (params: any) => {
export const updateMember = (params: any) => { export const updateMember = (params: any) => {
return http.post(BASEURL + `/project/workerInfo/edit`, params); return http.post(BASEURL + `/project/workerInfo/edit`, params);
}; };
// 考勤设备管理分页列表
export const equipmentList = (params: any) => {
return http.post(BASEURL + `/project/attendanceDev/page`, params);
};
// 考勤设备管理新增
export const addEquipment = (params: any) => {
return http.post(BASEURL + `/project/attendanceDev/add`, params);
};
// 考勤设备管理编辑
export const updateEquipment = (params: any) => {
return http.post(BASEURL + `/project/attendanceDev/edit`, params);
};
// 考勤设备管理删除
export const deleteEquipment = (params: { id: string }) => {
return http.post(BASEURL + `/project/attendanceDev/delete`, params);
};
// 考勤统计分页列表
export const statisticsList = (params: any) => {
return http.post(BASEURL + `/project/workerInfo/attendStat`, params);
};

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="allEngList"> <div class="allEngList">
<el-icon><CaretBottom /> </el-icon> <el-icon><CaretLeft /> </el-icon>
<span></span> <span></span>
<span></span> <span></span>
<span></span> <span></span>

View File

@ -221,19 +221,22 @@
font-family: siyuan_Medium; font-family: siyuan_Medium;
} }
.allEngList { .allEngList {
width: 176px; width: 20px;
height: 20px; height: 176px;
position: fixed; position: fixed;
right: -78px; right: 0;
top: 50%; top: 50%;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
z-index: 224; z-index: 224;
// display: flex; // display: flex;
transform: rotate(90deg);
color: #fff; color: #fff;
background: rgba(0, 0, 0, 0.2); background: rgba(0, 0, 0, 0.2);
font-size: 12px; font-size: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
span { span {
margin: 0px 2px; margin: 0px 2px;
} }

View File

@ -2,7 +2,7 @@
<div class="table-box"> <div class="table-box">
<ProTable <ProTable
ref="proTable" ref="proTable"
title="参建单位列表" title="考勤设备列表"
:columns="columns" :columns="columns"
:requestApi="getTableList" :requestApi="getTableList"
:dataCallback="dataCallback" :dataCallback="dataCallback"
@ -10,16 +10,16 @@
:pagination="true" :pagination="true"
background background
:isShowSearch="false" :isShowSearch="false"
:initParam="initParam"
:onReset="true" :onReset="true"
> >
<template #formButton="scope"> <template #formButton="scope">
<el-button class="addButtonStyle" @click="handleAddItem(1)">新增</el-button> <el-button class="addButtonStyle" @click="handleAddItem(1)">新增</el-button>
</template> </template>
<template #position="{ row }">
<span>{{ "经度:" + row.longitude + "" + "维度:" + row.latitude }}</span>
</template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button type="primary" link @click="handleEditItem(row)">
<img src="@/assets/images/tableIcon/配置权限.png" alt="" class="configureIcon" />
<span>配置权限</span>
</el-button>
<el-button type="primary" link @click="handleAddItem(2, row)"> <el-button type="primary" link @click="handleAddItem(2, row)">
<img src="@/assets/images/tableIcon/updateIcon.png" alt="" class="configureIcon" /> <img src="@/assets/images/tableIcon/updateIcon.png" alt="" class="configureIcon" />
<span>编辑</span> <span>编辑</span>
@ -43,7 +43,12 @@
</div> </div>
</template> </template>
</el-drawer> </el-drawer>
<engineeringDrawer v-model="engVisable" ref="engDrawer" :request="getengineering">
<template #default="{ data }">
<span style="margin-left: 10px" @click="onUpdate(data)">{{ data.engineeringName }}</span>
</template>
</engineeringDrawer>
<allEngineering @click="engVisable = true" />
<DialogForm <DialogForm
:title="title" :title="title"
:formConfig="formConfig" :formConfig="formConfig"
@ -53,7 +58,13 @@
width="700px" width="700px"
@confirm="saveItem" @confirm="saveItem"
> >
<template #mapIcon>
<div class="diaMapIcon" @click="openMap">
<el-icon style="font-size: 19px"><Location /></el-icon>
</div>
</template>
</DialogForm> </DialogForm>
<AMap v-model="isOpen" @get-address="getAddress" :default-address="address" />
</div> </div>
</template> </template>
@ -64,20 +75,15 @@ import { useRouter } from "vue-router";
import { ColumnProps } from "@/components/ProTable/interface"; import { ColumnProps } from "@/components/ProTable/interface";
import { useHandleData } from "@/hooks/useHandleData"; import { useHandleData } from "@/hooks/useHandleData";
import ProTable from "@/components/ProTable/index.vue"; import ProTable from "@/components/ProTable/index.vue";
import { getRelevanceList } from "@/api/modules/common";
import { jxj_User } from "@/api/types"; import { jxj_User } from "@/api/types";
import engineeringDrawer from "@/components/engineeringDrawer/index.vue";
import allEngineering from "@/components/allEngineering/index.vue";
import TreeFilter from "@/components/TreeFilter/index.vue"; import TreeFilter from "@/components/TreeFilter/index.vue";
import { import AMap from "@/components/AMap/AMap.vue";
getRoleList, import { editRolePermissions, getTreemRoleList, getTreeByIdList } from "@/api/modules/goverment";
addRole,
editRole,
deleteRole,
editRolePermissions,
getSystemRole,
getTreemRoleList,
getTreeByIdList
} from "@/api/modules/goverment";
import DialogForm from "@/components/DialogForm/index.vue"; import DialogForm from "@/components/DialogForm/index.vue";
// import { getProjectRecordPage } from "@/api/modules/project"; import { addEquipment, equipmentList, updateEquipment, deleteEquipment } from "@/api/modules/project";
import { Delete } from "@element-plus/icons-vue"; import { Delete } from "@element-plus/icons-vue";
import { GlobalStore } from "@/stores"; import { GlobalStore } from "@/stores";
@ -95,11 +101,23 @@ const store = GlobalStore();
const visible = ref(false); const visible = ref(false);
const drawerVisible = ref(false); const drawerVisible = ref(false);
const title = ref(""); const title = ref("");
const engVisable = ref(false);
const initParam = reactive({
solveFlag: 1,
engineeringSn: ""
});
const isOpen = ref(false);
const formData = ref({ const formData = ref({
roleName: "", devName: "",
priority: 1, code: "",
state: 0, address: "",
roleDesc: "" longitude: "",
latitude: "",
position: ""
});
const address = ref({
lng: undefined,
lat: undefined
}); });
// ProTable 便 // ProTable 便
const proTable = ref(); const proTable = ref();
@ -110,36 +128,21 @@ const getId = ref<number | undefined>(undefined);
const columns: ColumnProps[] = [ const columns: ColumnProps[] = [
{ type: "index", label: "序号", width: 80 }, { type: "index", label: "序号", width: 80 },
{ {
prop: "roleName", prop: "devName",
label: "单位名称", label: "设备名称",
search: { el: "input" } search: { el: "input" }
}, },
// prop
{ prop: "priority", label: "显示顺序" },
{ prop: "state", label: "使用状态" },
{ {
prop: "state", prop: "code",
label: "状态", label: "设备编码"
search: { el: "select" },
isShow: false,
enum: [
{ label: "启用", value: 1 },
{ label: "禁用", value: 0 }
]
}, },
{ {
prop: "createTime", prop: "address",
label: "创建时间", label: "设备位置"
search: { },
el: "date-picker", {
prop: "position",
props: { label: "经纬度"
type: "daterange",
format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD"
// defaultTime: defaultTime2
}
}
}, },
{ prop: "operation", label: "操作", fixed: "right", width: 260 } { prop: "operation", label: "操作", fixed: "right", width: 260 }
]; ];
@ -148,50 +151,63 @@ const columns: ColumnProps[] = [
const formConfig = { const formConfig = {
formItemConfig: [ formItemConfig: [
{ {
label: "角色名称", label: "设备名称",
prop: "roleName", prop: "devName",
type: "input" type: "input"
}, },
{ {
label: "角色顺序", label: "设备编码",
prop: "priority", prop: "code",
type: "number" type: "input"
}, },
{ {
label: "状态", label: "设置位置",
prop: "state", prop: "address",
type: "radio",
data: [
{ label: "启用", value: 1 },
{ label: "禁用", value: 0 }
]
},
{
label: "备注",
prop: "roleDesc",
type: "input", type: "input",
mapIcon: true mapIcon: true
},
{
label: "设置经纬度",
prop: "position",
type: "input",
disabled: true
// dialog // dialog
} }
], ],
rules: { rules: {
roleName: [ devName: [
{ {
required: true, required: true,
message: "请输入角色名称", message: "请输入",
trigger: "blur" trigger: "blur"
} }
], ],
priority: [ code: [
{ {
required: true, required: true,
message: "请输入角色顺序", message: "请输入",
trigger: "blur" trigger: "blur"
} }
] ]
} }
}; };
//
const openMap = () => {
isOpen.value = true;
};
//
const getAddress = async (e: any) => {
formData.value.address = e.address;
formData.value.longitude = e.lng;
formData.value.latitude = e.lat;
formData.value.position = "经度:" + e.lng + "" + "维度:" + e.lat;
isOpen.value = false;
ElMessage.success("获取经纬度成功");
};
const getengineering = (params: any) => {
// let newParams = JSON.parse(JSON.stringify(params));
return getRelevanceList();
};
// dataCallback list && total && pageNum && pageSize // dataCallback list && total && pageNum && pageSize
// hooks/useTable.ts // hooks/useTable.ts
const dataCallback = (data: any) => { const dataCallback = (data: any) => {
@ -247,21 +263,22 @@ const getTableList = (params: any) => {
newParams.createTime_end = newParams.createTime[1]; newParams.createTime_end = newParams.createTime[1];
delete newParams.createTime; delete newParams.createTime;
} }
return getRoleList(newParams); return equipmentList(newParams);
}; };
const handleAddItem = (index: number, row: any) => { const handleAddItem = (index: number, row: any) => {
if (index === 1) { if (index === 1) {
title.value = "新增角色"; title.value = "新增设备";
formData.value = reactive({ formData.value = reactive({
roleName: "", devName: "",
priority: 1, code: "",
state: 1, address: "",
roleDesc: "" position: ""
}); });
} else { } else {
title.value = "编辑角色"; title.value = "编辑设备";
formData.value = reactive({ ...row }); formData.value = reactive({ ...row });
formData.value.position = "经度:" + row.longitude + "" + "维度:" + row.latitude;
} }
visible.value = true; visible.value = true;
}; };
@ -283,13 +300,14 @@ const handleEditItem = async (row: any) => {
}; };
const saveItem = async (form: any) => { const saveItem = async (form: any) => {
if (form.roleId) { form.engineeringSn = initParam.engineeringSn;
if (form.id) {
// console.log(form.dictCode); // console.log(form.dictCode);
const res = await editRole(form); const res = await updateEquipment(form);
proTable.value.getTableList(); proTable.value.getTableList();
ElMessage.success("编辑成功"); ElMessage.success("编辑成功");
} else { } else {
const res = await addRole(form); const res = await addEquipment(form);
ElMessage.success("新增成功"); ElMessage.success("新增成功");
proTable.value.getTableList(); proTable.value.getTableList();
} }
@ -298,10 +316,15 @@ const saveItem = async (form: any) => {
// //
const deleteAccount = async (params: jxj_User.ResUserList) => { const deleteAccount = async (params: jxj_User.ResUserList) => {
await useHandleData(deleteRole, { roleId: params.roleId }, `删除【${params.roleName}`); await useHandleData(deleteEquipment, { id: params.id }, `删除【${params.devName}`);
proTable.value.getTableList(); proTable.value.getTableList();
}; };
//
const onUpdate = async row => {
initParam.engineeringSn = row.engineeringSn;
ElMessage.success("页面已更新");
};
const changeTreeFilter = () => { const changeTreeFilter = () => {
console.log(11); console.log(11);
}; };

View File

@ -9,12 +9,7 @@
:tool-button="false" :tool-button="false"
:pagination="true" :pagination="true"
background background
:isShowSearch="false"
:onReset="true"
> >
<template #formButton="scope">
<el-button class="addButtonStyle" @click="handleAddItem(1)">新增</el-button>
</template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button type="primary" link @click="handleEditItem(row)"> <el-button type="primary" link @click="handleEditItem(row)">
<img src="@/assets/images/tableIcon/配置权限.png" alt="" class="configureIcon" /> <img src="@/assets/images/tableIcon/配置权限.png" alt="" class="configureIcon" />
@ -29,7 +24,23 @@
<template #state="{ row }"> <template #state="{ row }">
<span :class="row.state === 1 ? '' : 'redText'">{{ row.state == 1 ? "启用" : "禁用" }}</span> <span :class="row.state === 1 ? '' : 'redText'">{{ row.state == 1 ? "启用" : "禁用" }}</span>
</template> </template>
<template #day1="{ row }" v-for="index in 30" :key="index">
<span class="cirle" @click="showAttendance(row)"></span>
</template>
</ProTable> </ProTable>
<div class="table">
<h4>考勤明细</h4>
<el-table
:data="attendanceSingles"
border
max-height="340"
class="el-table"
:header-cell-style="{ backgroundColor: '#e1eeff', textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }"
>
<el-table-column prop="name" label="单体工程名称" />
</el-table>
</div>
<el-drawer v-model="drawerVisible" :destroy-on-close="true" :before-close="closeDrawer" size="450px" title="配置权限"> <el-drawer v-model="drawerVisible" :destroy-on-close="true" :before-close="closeDrawer" size="450px" title="配置权限">
<span class="title sle">所拥有的权限</span> <span class="title sle">所拥有的权限</span>
<el-scrollbar :style="{ height: title ? `calc(100% - 95px)` : `calc(100% - 56px)` }"> <el-scrollbar :style="{ height: title ? `calc(100% - 95px)` : `calc(100% - 56px)` }">
@ -58,7 +69,7 @@
</template> </template>
<script setup lang="tsx" name="ProjectSupervisionRecord"> <script setup lang="tsx" name="ProjectSupervisionRecord">
import { ref, reactive, nextTick } from "vue"; import { ref, reactive, nextTick, onBeforeMount } from "vue";
import { ElMessage, ElMessageBox, ElTree } from "element-plus"; import { ElMessage, ElMessageBox, ElTree } from "element-plus";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { ColumnProps } from "@/components/ProTable/interface"; import { ColumnProps } from "@/components/ProTable/interface";
@ -67,7 +78,6 @@ import ProTable from "@/components/ProTable/index.vue";
import { jxj_User } from "@/api/types"; import { jxj_User } from "@/api/types";
import TreeFilter from "@/components/TreeFilter/index.vue"; import TreeFilter from "@/components/TreeFilter/index.vue";
import { import {
getRoleList,
addRole, addRole,
editRole, editRole,
deleteRole, deleteRole,
@ -77,13 +87,12 @@ import {
getTreeByIdList getTreeByIdList
} from "@/api/modules/goverment"; } from "@/api/modules/goverment";
import DialogForm from "@/components/DialogForm/index.vue"; import DialogForm from "@/components/DialogForm/index.vue";
// import { getProjectRecordPage } from "@/api/modules/project"; import { statisticsList } from "@/api/modules/project";
import { Delete } from "@element-plus/icons-vue"; import { Delete } from "@element-plus/icons-vue";
import { GlobalStore } from "@/stores"; import { GlobalStore } from "@/stores";
const treeRef = ref(null); const treeRef = ref(null);
const datas = reactive([]); const datas = reactive([]);
const defaultProps = { const defaultProps = {
@ -95,6 +104,7 @@ const store = GlobalStore();
const visible = ref(false); const visible = ref(false);
const drawerVisible = ref(false); const drawerVisible = ref(false);
const title = ref(""); const title = ref("");
const attendanceSingles = ref([]);
const formData = ref({ const formData = ref({
roleName: "", roleName: "",
priority: 1, priority: 1,
@ -110,38 +120,42 @@ const getId = ref<number | undefined>(undefined);
const columns: ColumnProps[] = [ const columns: ColumnProps[] = [
{ type: "index", label: "序号", width: 80 }, { type: "index", label: "序号", width: 80 },
{ {
prop: "roleName", prop: "personName",
label: "单位名称", label: "姓名",
search: { el: "input" } search: { el: "input" }
}, },
// prop
{ prop: "priority", label: "显示顺序" },
{ prop: "state", label: "使用状态" },
{ {
prop: "state", prop: "teamName",
label: "状态", label: "班组",
search: { el: "select" }, search: { el: "input" }
isShow: false,
enum: [
{ label: "启用", value: 1 },
{ label: "禁用", value: 0 }
]
}, },
{ {
prop: "createTime", prop: "month",
label: "创建时间", label: "月份",
isShow: false,
search: { search: {
el: "date-picker", el: "date-picker",
props: { props: {
type: "daterange", type: "datetime",
format: "YYYY-MM-DD", format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD" valueFormat: "YYYY-MM-DD"
// defaultTime: defaultTime2 // defaultTime: defaultTime2
} }
} }
}, },
{ prop: "operation", label: "操作", fixed: "right", width: 260 } {
prop: "lateDay",
label: "迟到天数"
},
{
prop: "earlyDay",
label: "早退天数"
},
{
prop: "workerHour",
label: "总工时"
}
]; ];
// //
@ -213,7 +227,10 @@ const cacel = () => {
drawerVisible.value = false; drawerVisible.value = false;
datas.length = 0; datas.length = 0;
}; };
//
const showAttendance = row => {
console.log(row);
};
const transfrom = (arr: Array<any>) => { const transfrom = (arr: Array<any>) => {
const result = []; const result = [];
return arr return arr
@ -247,7 +264,7 @@ const getTableList = (params: any) => {
newParams.createTime_end = newParams.createTime[1]; newParams.createTime_end = newParams.createTime[1];
delete newParams.createTime; delete newParams.createTime;
} }
return getRoleList(newParams); return statisticsList(newParams);
}; };
const handleAddItem = (index: number, row: any) => { const handleAddItem = (index: number, row: any) => {
@ -305,4 +322,42 @@ const deleteAccount = async (params: jxj_User.ResUserList) => {
const changeTreeFilter = () => { const changeTreeFilter = () => {
console.log(11); console.log(11);
}; };
onBeforeMount(() => {
for (let i = 0; i < 31; i++) {
columns.push({
prop: "day" + (i + 1),
label: "" + (i + 1)
});
}
});
</script> </script>
<style lang="scss" scoped>
.table-box {
.cirle {
display: inline-block;
width: 11px;
height: 11px;
background: #008bff;
opacity: 1;
border-radius: 50%;
}
.table {
display: flex;
flex-direction: column;
padding: 20px;
background-color: #fff;
h4 {
position: relative;
padding-left: 6px;
font-size: 20px;
font-weight: 500;
color: #333333;
border-left: 3px solid #008bff;
}
.el-table {
width: calc(100% - 20px);
margin-left: 20px;
}
}
}
</style>

View File

@ -25,6 +25,7 @@
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
type="datetime" type="datetime"
:disabledDate="disabledDate"
placeholder="请选择时间" placeholder="请选择时间"
/> />
</el-form-item> </el-form-item>
@ -605,6 +606,11 @@ const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return; if (!formEl) return;
formEl.resetFields(); formEl.resetFields();
}; };
//
const disabledDate = time => {
let current = new Date().getTime();
return time > current;
};
// visibleel-dialog // visibleel-dialog
watch( watch(
() => props.newMemberDialog, () => props.newMemberDialog,

View File

@ -15,10 +15,10 @@
> >
<template #formButton="scope"> <template #formButton="scope">
<el-button class="addButtonStyle" @click="handleAddItem(1)">新增</el-button> <el-button class="addButtonStyle" @click="handleAddItem(1)">新增</el-button>
<el-button type="primary" :disabled="!scope.isSelected" @click="batchOperate(1, scope.selectedListIds)" <!-- <el-button type="primary" :disabled="!scope.isSelected" @click="batchOperate(1, scope.selectedListIds)"
>批量复职</el-button >批量复职</el-button
> >
<el-button type="primary" :disabled="!scope.isSelected" @click="batchOperate(2, scope)">批量离场</el-button> <el-button type="primary" :disabled="!scope.isSelected" @click="batchOperate(2, scope)">批量离场</el-button> -->
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button type="primary" link @click="handleAddItem(2, row)"> <el-button type="primary" link @click="handleAddItem(2, row)">
@ -29,7 +29,7 @@
<img src="@/assets/images/tableIcon/调动.png" alt="" class="configureIcon" /> <img src="@/assets/images/tableIcon/调动.png" alt="" class="configureIcon" />
<span>调动</span> <span>调动</span>
</el-button> </el-button>
<el-button type="primary" link @click="handleEditItem(2, row)"> <el-button type="primary" link @click="handleEditItem(2, row)" v-if="row.inServiceType == 1">
<img src="@/assets/images/tableIcon/离场.png" alt="" class="configureIcon" /> <img src="@/assets/images/tableIcon/离场.png" alt="" class="configureIcon" />
<span>离场</span> <span>离场</span>
</el-button> </el-button>
@ -160,7 +160,9 @@ const initParam = reactive({
// - // -
const moveFormData = ref({}); const moveFormData = ref({});
// - // -
const exitFormData = ref({}); const exitFormData = ref({
exitTime: ""
});
const formData = ref({ const formData = ref({
personName: "", personName: "",
sex: 1, sex: 1,
@ -226,23 +228,31 @@ const exitFormConfig = {
formItemConfig: [ formItemConfig: [
{ {
label: "离场人员", label: "离场人员",
prop: "ids", prop: "personName",
type: "input" type: "input",
disabled: true
}, },
// {
// label: "",
// prop: "exitType",
// type: "radio",
// data: [
// {
// label: "",
// value: 1
// },
// {
// label: "",
// value: 2
// }
// ]
// },
{ {
label: "离场时间", label: "离场日期",
prop: "ids", prop: "exitTime",
type: "radio", type: "date",
data: [ format: "YYYY-MM-DD",
{ valueFormat: "YYYY-MM-DD"
label: "立即离场",
value: 1
},
{
label: "延时离场",
value: 2
}
]
} }
], ],
rules: { rules: {
@ -445,30 +455,33 @@ const handleEditItem = async (index: number, row: any) => {
moveVisible.value = true; moveVisible.value = true;
} else if (index == 2) { } else if (index == 2) {
exitVisible.value = true; exitVisible.value = true;
exitFormData.value = { ...row };
} }
objRow.value = row; objRow.value = row;
}; };
// //
const saveMoveItem = async (form: any) => { const saveMoveItem = async (form: any) => {
const res = await updateMember(form); const requestData = {
id: objRow.value.id,
...form
};
const res = await updateMember(requestData);
proTable.value.getTableList(); proTable.value.getTableList();
ElMessage.success("编辑成功"); ElMessage.success("编辑成功");
newMemberDialog.value = false; moveVisible.value = false;
}; };
// TODO: // TODO:
const saveItem = async (form: any) => { const saveItem = async (form: any) => {
form.engineeringSn = initParam.engineeringSn; // form.engineeringSn = initParam.engineeringSn;
if (form.id) { console.log(form);
// console.log(form.dictCode); const requestData = {
const res = await updateClassGroup(form); id: form.id,
proTable.value.getTableList(); ...form
ElMessage.success("编辑成功"); };
} else { const res = await updateMember(requestData);
const res = await addMember(form); proTable.value.getTableList();
ElMessage.success("新增成功"); ElMessage.success("编辑成功");
proTable.value.getTableList(); exitVisible.value = false;
}
newMemberDialog.value = false;
}; };
// //
const onUpdate = async row => { const onUpdate = async row => {