@@ -27,7 +27,6 @@ declare module 'vue' { | |||
ElCol: typeof import('element-plus/es')['ElCol'] | |||
ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] | |||
ElContainer: typeof import('element-plus/es')['ElContainer'] | |||
ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] | |||
ElDialog: typeof import('element-plus/es')['ElDialog'] | |||
ElDivider: typeof import('element-plus/es')['ElDivider'] | |||
ElDrawer: typeof import('element-plus/es')['ElDrawer'] | |||
@@ -40,7 +39,6 @@ declare module 'vue' { | |||
ElFormItem: typeof import('element-plus/es')['ElFormItem'] | |||
ElHeader: typeof import('element-plus/es')['ElHeader'] | |||
ElIcon: typeof import('element-plus/es')['ElIcon'] | |||
ElImage: typeof import('element-plus/es')['ElImage'] | |||
ElInput: typeof import('element-plus/es')['ElInput'] | |||
ElLink: typeof import('element-plus/es')['ElLink'] | |||
ElMain: typeof import('element-plus/es')['ElMain'] | |||
@@ -49,12 +47,9 @@ declare module 'vue' { | |||
ElOption: typeof import('element-plus/es')['ElOption'] | |||
ElPagination: typeof import('element-plus/es')['ElPagination'] | |||
ElRadio: typeof import('element-plus/es')['ElRadio'] | |||
ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] | |||
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] | |||
ElRow: typeof import('element-plus/es')['ElRow'] | |||
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] | |||
ElSelect: typeof import('element-plus/es')['ElSelect'] | |||
ElSlider: typeof import('element-plus/es')['ElSlider'] | |||
ElSpace: typeof import('element-plus/es')['ElSpace'] | |||
ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] | |||
ElSwitch: typeof import('element-plus/es')['ElSwitch'] | |||
@@ -63,11 +58,8 @@ declare module 'vue' { | |||
ElTabPane: typeof import('element-plus/es')['ElTabPane'] | |||
ElTabs: typeof import('element-plus/es')['ElTabs'] | |||
ElTag: typeof import('element-plus/es')['ElTag'] | |||
ElText: typeof import('element-plus/es')['ElText'] | |||
ElTimePicker: typeof import('element-plus/es')['ElTimePicker'] | |||
ElTooltip: typeof import('element-plus/es')['ElTooltip'] | |||
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] | |||
ElUpload: typeof import('element-plus/es')['ElUpload'] | |||
ESign: typeof import('./src/components/ESign/index.vue')['default'] | |||
FormContainer: typeof import('./src/components/Form/FormContainer/index.vue')['default'] | |||
Grid: typeof import('./src/components/Grid/index.vue')['default'] | |||
@@ -48,6 +48,10 @@ const attendanceRoolcallApi = { | |||
/** 修改点名任务 */ | |||
update(params: any) { | |||
return http.put("update", params); | |||
}, | |||
/** 手动点名 */ | |||
manualRoll(params: any) { | |||
return http.post("manualRoll", params); | |||
} | |||
}; | |||
@@ -39,6 +39,22 @@ const portraitSummaryApi = { | |||
/** 获取学生属性标签 */ | |||
getStudentDetail(params: any) { | |||
return http.get("getStudentDetail", params); | |||
}, | |||
/* 学生-出勤情况 */ | |||
getStudentAttendance(params: any) { | |||
return http.post("attendance", params); | |||
}, | |||
/* 学生-出校 */ | |||
getStudentOutSchool(params: any) { | |||
return http.post("outsideSchool", params); | |||
}, | |||
/* 学生-图书馆 */ | |||
getStudentLibrary(params: any) { | |||
return http.post("library", params); | |||
}, | |||
/* 学生-食堂 */ | |||
getStudentCanteen(params: any) { | |||
return http.post("canteen", params); | |||
} | |||
}; | |||
@@ -187,6 +187,8 @@ const detialRef = ref<InstanceType<typeof TraceShow> | null>(null); | |||
onMounted(async () => { | |||
// 获取系部下拉数据 | |||
departmentOptions.value = await getDepartmentList() | |||
// 获取班级 | |||
classOptions.value = await getClassList('') | |||
}); | |||
</script> | |||
<style scoped lang="scss"> | |||
@@ -101,9 +101,9 @@ const rules = reactive({ | |||
similarity: [required("请选择相似度")], | |||
cameraId: [required("请选择摄像头")], | |||
continueTime: [required("请选择持续时间")], | |||
personSetId: [required("请选择所属班级")], | |||
depId: [required("请选择系部")], | |||
majorId: [required("请选择专业")] | |||
personSetId: [required("请选择所属班级")] | |||
// depId: [required("请选择系部")], | |||
// majorId: [required("请选择专业")] | |||
}); | |||
/** | |||
@@ -112,6 +112,8 @@ const rules = reactive({ | |||
*/ | |||
async function onOpen(props: FormProps.Base<any>) { | |||
departmentOptions.value = await getDepartmentList(); | |||
// 获取班级 | |||
classOptions.value = await getClassList(""); | |||
Object.assign(sysUserProps, props); //合并参数 | |||
visible.value = true; //显示表单 | |||
/* 监听系部、专业 */ | |||
@@ -20,7 +20,7 @@ | |||
<el-row :gutter="20"> | |||
<el-col :span="24" | |||
><el-row class="rowbg"> | |||
<el-col :xl="4" :lg="4" :md="6" :sm="8" :xs="12" v-for="(item, index) in listData" :key="index" | |||
<el-col :xl="3" :lg="4" :md="6" :sm="8" :xs="12" v-for="(item, index) in listData" :key="index" | |||
><div class="grid-content"> | |||
<div class="imgBox" :class="{ active: item.status === 1 ? true : false }"> | |||
<el-image | |||
@@ -42,6 +42,9 @@ | |||
{{ item.personSetName }} | |||
</div> | |||
</div> | |||
<div v-if="item.status !== 1" class="btn btns" style="justify-content: center; border-top: none"> | |||
<el-button size="small" type="primary" @click="checkOut(item, index)">签到</el-button> | |||
</div> | |||
</div></el-col | |||
> | |||
</el-row></el-col | |||
@@ -151,6 +154,19 @@ const assignFn = (item: any) => { | |||
const checkOut = (item: any, index: number) => { | |||
checkIndex.value = index; | |||
checkData.value = JSON.parse(JSON.stringify(item)); | |||
attendanceRoolcallApi.manualRoll([{ personId: item.personId, personSetId: item.personSetId, taskId: route.query.taskId }]).then(() => { | |||
ElMessage({ | |||
message: "点名成功", | |||
type: "success" | |||
}); | |||
UnrecognizedD.value = UnrecognizedD.value.filter((item1: any) => item1.id !== item.id); | |||
listData.value.map((item2: any) => { | |||
if (item2.personId === item.personId) { | |||
item2.status = 1; | |||
} | |||
}); | |||
}); | |||
}; | |||
const submitFn = () => { | |||
if (!checkIndex.value && checkIndex.value !== 0) { | |||
@@ -162,7 +178,7 @@ const submitFn = () => { | |||
} | |||
visible.value = false; | |||
attendanceRoolcallApi.update({ id: assignId.value, personId: checkData.value.personId, personSetId: checkData.value.personSetId }).then(() => { | |||
attendanceRoolcallApi.update({ taskId: assignId.value, personId: checkData.value.personId, personSetId: checkData.value.personSetId }).then(() => { | |||
ElMessage({ | |||
message: "指派成功", | |||
type: "success" | |||
@@ -209,11 +225,26 @@ onMounted(() => { | |||
height: 190px; | |||
margin-bottom: 20px; | |||
.grid-content { | |||
position: relative; | |||
box-sizing: border-box; | |||
height: 100%; | |||
// height: 100%; | |||
padding: 15px; | |||
margin: 10px; | |||
background: #ffffff; | |||
.btns { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
width: 100%; | |||
background: rgb(0 0 0 / 80%); | |||
opacity: 0; | |||
} | |||
&:hover { | |||
.btns { | |||
opacity: 1; | |||
} | |||
} | |||
.imgBox { | |||
display: flex; | |||
align-items: center; | |||
@@ -233,7 +264,6 @@ onMounted(() => { | |||
} | |||
} | |||
.info { | |||
height: 80px; | |||
.label { | |||
margin-right: 8px; | |||
font-size: 14px; | |||
@@ -181,7 +181,9 @@ const RefreshTable = () => { | |||
} | |||
onMounted(async () => { | |||
// 获取系部下拉数据 | |||
departmentOptions.value = await getDepartmentList() | |||
departmentOptions.value = await getDepartmentList(); | |||
// 获取班级 | |||
classOptions.value = await getClassList('') | |||
}); | |||
</script> | |||
<style scoped lang="scss"> | |||
@@ -156,6 +156,8 @@ const genderOptions = ref([ | |||
]); | |||
onMounted(async () => { | |||
departmentOptions.value = await getDepartmentList(); | |||
// 获取班级 | |||
classOptions.value = await getClassList(""); | |||
// 初始化 | |||
userInfo.value.gender = userInfo.value.gender ? userInfo.value.gender : genderOptions.value[0].value; | |||
if (userInfo.value.personId) { | |||
@@ -49,8 +49,8 @@ const rules = reactive({ | |||
gender: [required("请选择性别")], | |||
faces: [required("请上传人脸图片")], | |||
phone: [required("请输入手机号")], | |||
depId: [required("请选择系部")], | |||
majorId: [required("请选择专业")], | |||
// depId: [required("请选择系部")], | |||
// majorId: [required("请选择专业")], | |||
personSetId: [required("请选择班级")] | |||
}); | |||
@@ -281,6 +281,8 @@ const handleAvatarSuccess: UploadProps["onSuccess"] = (response) => { | |||
onMounted(async () => { | |||
// 获取系部下拉数据 | |||
departmentOptions.value = await getDepartmentList() | |||
// 获取班级 | |||
classOptions.value = await getClassList(""); | |||
}); | |||
</script> | |||
<style scoped lang="scss"> | |||
@@ -98,7 +98,7 @@ | |||
</view> | |||
<view class="tableBox"> | |||
<u-empty marginTop="100rpx" :show="false" mode="warnList" text="暂无数据"></u-empty> | |||
<u-empty marginTop="100rpx" :show="false" mode="list" text="暂无数据"></u-empty> | |||
<u-list @scrolltolower="scrolltolower" style="height: calc(100% - 0rpx);"> | |||
<u-list-item v-for="(item, index) in warnList" :key="index"> | |||
<view class="liBox"> | |||
@@ -184,6 +184,11 @@ | |||
<script> | |||
import selectRadio from "@/components/selectRadio.vue" | |||
import selectSearch from "@/components/selectSearch.vue" | |||
import { | |||
page, //获取列表 | |||
detail, //详情 | |||
warnType, //获取预警类型 | |||
} from '@/api/warn/index.js' | |||
export default { | |||
components: { | |||
selectRadio, | |||
@@ -361,17 +366,21 @@ | |||
loadmore() { | |||
if (this.status != 'loadmore') return | |||
this.status = 'loading' | |||
setTimeout(() => { | |||
for (let i = 0; i < 1; i++) { | |||
this.warnList.push({}, {}) | |||
} | |||
page(this.searchForm).then(res=>{ | |||
console.log(res) | |||
// 获取到的总条数>=接口总条数 | |||
if (this.warnList.length >= 14) { | |||
this.status = 'nomore' | |||
} else { | |||
this.status = 'loadmore' | |||
} | |||
}, 2000) | |||
}) | |||
// setTimeout(() => { | |||
// for (let i = 0; i < 1; i++) { | |||
// this.warnList.push({}, {}) | |||
// } | |||
// }, 2000) | |||
} | |||
} | |||
} | |||
@@ -9,9 +9,8 @@ | |||
</view> | |||
</view> | |||
<view class="searchBox"> | |||
<view class="searchLine" @click="showTree"> | |||
<view class="searchLabels"> | |||
<view class="searchLine"> | |||
<view class="searchLabels" @click="showTree"> | |||
<image v-show="isShowSearch==false" src="@/static/image/earlyWarning/group.png" mode=""> | |||
</image> | |||
<image v-show="isShowSearch" src="@/static/image/earlyWarning/group2.png" mode=""> | |||
@@ -26,9 +25,46 @@ | |||
<image v-show="isShowSearch" src="@/static/image/earlyWarning/arrow2.png" mode=""></image> | |||
</view> | |||
</view> | |||
<view @click="isShowSearch=false" class="searchDialog" v-if="isShowSearch"> | |||
<view class="content" @click.stop="isSelect"> | |||
<u-row justify="space-between" gutter="10"> | |||
<u-col span="7"> | |||
<view class="demo-layout"> | |||
<view class="left-layout"> | |||
<text>{{'警告类型'}}</text> | |||
</view> | |||
<view class="right-layout"> | |||
<image style="width: 30rpx;height:30rpx;" | |||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||
</view> | |||
</view> | |||
</u-col> | |||
<u-col span="5"> | |||
<view class="demo-layout" @click="toOpenSelect"> | |||
<view class="left-layout"> | |||
<text>{{'处理状态'}}</text> | |||
</view> | |||
<view class="right-layout"> | |||
<image style="width: 30rpx;height:30rpx;" | |||
src="@/static/image/earlyWarning/arrowRight.png" mode=""></image> | |||
</view> | |||
</view> | |||
</u-col> | |||
</u-row> | |||
<view class="btnBox"> | |||
<view class="leftBtn" @click="clearform"> | |||
重置 | |||
</view> | |||
<view class="rightBtn" @click="onsubmit"> | |||
确认 | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<view class="tableBox"> | |||
<u-empty marginTop="100rpx" :show="false" mode="warnList" text="暂无数据"></u-empty> | |||
<u-empty marginTop="100rpx" :show="false" mode="list" text="暂无数据"></u-empty> | |||
<u-list @scrolltolower="scrolltolower" style="height: calc(100% - 0rpx);"> | |||
<u-list-item v-for="(item, index) in warnList" :key="index"> | |||
<view class="liBox"> | |||