新增打卡页面

This commit is contained in:
jiangyinzhi
2024-07-23 18:28:49 +08:00
parent 92a8e9c5e7
commit 63e310ae04
7 changed files with 418 additions and 4 deletions
+18
View File
@@ -260,3 +260,21 @@ export function fileController(params) {
data: params
})
}
// 新增打卡
export function insertPositionData(params) {
return myAxios({
url: `${sx}/energy-effcicency-net-service/clock/insertPositionData`,
method: 'POST',
data: params
})
}
// 查询打卡
export function getPositionData(params) {
return myAxios({
url: `${sx}/energy-effcicency-net-service/clock/getPositionData`,
method: 'POST',
data: params
})
}
+24
View File
@@ -30,6 +30,30 @@ export default {
if (binding.modifiers.floatNo0) { // 数字+小数点>0
onlyFloat0(input)
}
// v-input.maxYearDay
if (binding.modifiers.maxYearDay) { // 正数加最大366天
if(String(Number(input.value))!='NaN'){
if(Number(input.value)>366){
input.value=366
}else if(Number(input.value)<0){
input.value=0
}else{
input.value=parseInt(input.value);
}
}
}
// v-input.maxDayHour
if (binding.modifiers.maxDayHour) { // 正数加最大24
if(String(Number(input.value))!='NaN'){
if(Number(input.value)>24){
input.value=24
}else if(Number(input.value)<0){
input.value=0
}else{
input.value=parseInt(input.value);
}
}
}
input.dispatchEvent(new Event('input'))
}
}
+10 -1
View File
@@ -546,6 +546,15 @@ export default [
keepAlive: false
},
component: () => import('@/views/industrialReport/components/utilize.vue')
}
},
{
path: '/clockIn',
name: 'clockIn',
meta: {
title: '打卡',
keepAlive: false
},
component: () => import('@/views/energyEfficiency/clockIn/index.vue')
},
]
+10 -1
View File
@@ -524,7 +524,7 @@ export default {
const data = {
taskId: JSON.parse(sessionStorage.getItem('tidCid')).taskId,
customerId: res.data.customerId,
item: res.data,
item: {...res.data, ...JSON.parse(sessionStorage.getItem('tidCid')).item},
buildId: this.buildId,
equipId: JSON.parse(sessionStorage.getItem('tidCid')).equipId,
}
@@ -625,6 +625,15 @@ export default {
},
//提交页面信息
saveAllInfo() {
let item = JSON.parse(sessionStorage.getItem('tidCid')).item
if(!item.isPosition){
this.$notify({
message: '请在完成打卡之后提交',
duration: 1000,
type: 'warning'
})
return
}
taskList({ consName: this.item.customerName }).then((res) => {
this.records = res.data.list[0]
if (!this.records.buildId) {
@@ -0,0 +1,339 @@
<template>
<div>
<van-form ref="form" @submit="save">
<div class="cont">
<div class="container">
<div class="part">
<div class="nengyuan">
<van-cell-group>
<van-field
v-model="formData.lgitude"
label="经度"
input-align="right"
placeholder="请输入"
required
/>
<van-field
v-model="formData.ltitude"
label="纬度"
input-align="right"
placeholder="请输入"
required
/>
<van-field
v-model="formData.addressName"
label="定位地址"
input-align="right"
placeholder="请输入"
required
/>
<van-field
v-model="formData.clockType"
label="打卡类型"
input-align="right"
placeholder="请输入"
required
/>
<van-field
v-model="formData.clockNum"
label="打卡人数"
input-align="right"
placeholder="请输入"
v-input.numNo0
type="number"
required
/>
<!-- <van-field
v-model="formData.clockTime"
label="打卡时间"
input-align="right"
placeholder="请输入"
readonly
/> -->
<van-field
v-model="formData.remark"
label="备注"
input-align="right"
placeholder="请输入"
/>
</van-cell-group>
</div>
</div>
</div>
<div class="container">
<div class="part part1">
<div class="title">
<div class="tit"></div>
<div class="titInfo">打卡照片</div>
</div>
</div>
<div class="pic">
<Uploader
type="text1"
:value="text1"
:maxCount="1"
:deletable="showSubmit"
@afterRead="afterRead"
@delImg="delImg"
@onUpload="onUpload"
/>
</div>
</div>
</div>
<div class="footer-btn" v-if="showSubmit">
<van-button native-type="submit">提交</van-button>
</div>
</van-form>
</div>
</template>
<script>
import { Notify } from 'vant'
import Uploader from '@/views/facilityManage/common-vue/uploader.vue'
import {
getLocationMessage,
getPosition,
// chooseAlbumAndTakePhoto,
} from '@/utils/dsbridge'
import { format } from '@/utils/timeUtil.js'
import { insertPositionData, getPositionData } from '@/api/api.js'
import { downloadUrl } from '@/settings'
export default {
components: {
Uploader,
},
computed:{
},
data() {
return {
text1: [],
formData: {
lgitude: '',
ltitude: '',
addressName: '',
clockType: '',
clockNum: '',
remark: '',
fileName: '',
fileId: ''
},
showSubmit: false,
taskId: '',
customerId: '',
animation: null
}
},
mounted() {
document.title = '打卡信息收集'
this.taskId = JSON.parse(sessionStorage.getItem('tidCid')).taskId
this.customerId = JSON.parse(sessionStorage.getItem('tidCid')).customerId
this.getHistory()
},
methods: {
// 查询打卡记录
getHistory(){
this.text1 = []
getPositionData({taskId: this.taskId}).then(res => {
console.log(res.code , res.data);
if(res.code == 0&&res.data){
for (const key in this.formData) {
if (Object.hasOwnProperty.call(this.formData, key)) {
this.formData[key] = res.data[key]
}
}
if (res.data.fileId) {
this.$set(this.text1,0, {
fileName: res.data.fileName,
fileId: res.data.fileId,
url: `${downloadUrl}${res.data.fileId}`
})
console.log(this.text1);
}
this.$forceUpdate()
this.showSubmit = false
}else{
this.showSubmit = true
this.getLocation()
}
})
},
// 获取当前位置
getLocation() {
if (process.env.NODE_ENV === 'development') {
this.formData.lgitude = 31.560001
this.formData.ltitude = 118.708980
this.formData.addressName = '江苏省南京市江宁区'
}
try {
// this.formData.clockTime = format(new Date().getTime())
} catch (error) {}
getPosition((data) => {
if (data) {
console.log(data, '位置信息')
this.formData.lgitude = data.longitude
this.formData.ltitude = data.latitude
} else {
Notify({ type: 'warning', message: '未获取到位置信息' })
}
})
getLocationMessage((data) => {
if (data) {
this.formData.addressName = data
} else {
Notify({ type: 'warning', message: '未获取到定位信息' })
}
})
this.animation = requestAnimationFrame(this.getLocation)
},
/**
* 图片方法
*/
//浏览器 ios 会走这个方法
afterRead(data, type) {
this[type].push({
fileName: data.original_name,
fileId: data.attach_id,
url: `${downloadUrl}${data.attach_id}`
})
this.formData.fileName = data.original_name
this.formData.fileId = data.attach_id
},
//安卓会调用的方法
onUpload(data, type) {
this[type].push(data[0])
this.formData.fileName = data[0].fileName
this.formData.fileId = data[0].fileId
},
delImg(file, detail, type) {
if(!this.showSubmit) return
if (type == 'text1') {
this.delIsObj(this.text1)
this.text1.splice(detail.index, 1)
this.formData.fileName = ''
this.formData.fileId = ''
}
},
//判断删除的list中是否为对象格式
delIsObj(delList) {
const list = delList.map((ele) => {
if (ele instanceof Object) {
return ele.url
}
return ele
})
return list
},
// 保存
save() {
let params = {
...this.formData,
// clockAbout: JSON.stringify(this.text1),
taskId: this.taskId,
customerId: this.customerId,
}
insertPositionData(params).then((res) => {
if (res.code == 0) {
this.$toast('打卡成功')
this.$router.push({
name: 'taskManage',
})
}
})
},
},
beforeDestroy(){
if(this.animation){
cancelAnimationFrame(this.animation)
this.animation = null
}
}
}
</script>
<style lang="less" scoped>
/deep/.van-field__label {
color: #333;
}
.cont {
height: calc(100vh - 50px);
overflow-y: auto;
}
.pic-style {
display: inline-block;
margin: 10px 0 10px 20px;
}
.part {
width: 100%;
padding: 15px;
box-sizing: border-box;
.nengyuan {
width: 100%;
border-radius: 10px;
background: #fff;
box-sizing: border-box;
overflow: hidden;
} // .faqi {
// background-color: #63cbb6;
// color: #fff;
// border-radius: 8px;
// margin-top: 20px;
// }
.title1 {
width: 100%;
height: 30px;
line-height: 30px;
display: flex;
border-bottom: 1px solid #eee;
.titInfo {
font-size: 14px;
color: #10968b;
margin-left: 10px;
}
.titInfo1 {
margin-left: 15px;
}
}
}
.part1 {
padding: 0 15px;
.title {
width: 100%;
height: 30px;
line-height: 30px;
display: flex;
.tit {
height: 15px;
width: 4px;
background: #2c827c;
margin-top: 7.5px;
border-radius: 5px;
}
.titInfo {
font-size: 14px;
color: #10968b;
margin-left: 10px;
}
.titInfo1 {
margin-left: 15px;
}
}
}
.part2 {
padding: 5px 15px;
}
.footer-btn {
height: 35px;
padding: 0 0.4rem;
/deep/ .van-button {
width: 100%;
background: #34baae;
border-radius: 10px;
line-height: 35px;
text-align: center;
color: #fff;
}
}
</style>
+14 -1
View File
@@ -187,6 +187,12 @@
<div class="list-bot">
<div>
<button
@click="goClockIn(item)"
style="margin-left: 10px;"
>
打卡
</button>
<button
@click="togenReport(item)"
style="margin-left: 10px;"
@@ -432,7 +438,8 @@ export default {
},
// 存储当前tid,cid,客户详情信息
setCurrentTidCidPersonInfo(item) {
const data = {taskId:item.id, taskType:item.taskType, customerId:item.customerId, buildId:item.buildId, equipId:item.equipId,enterpriseSystemId:item.enterpriseSystemId, item}
const data = {taskId:item.id, taskType:item.taskType, customerId:item.customerId, buildId:item.buildId, equipId:item.equipId,enterpriseSystemId:item.enterpriseSystemId,
item: JSON.parse(JSON.stringify(item))}
sessionStorage.setItem('tidCid', JSON.stringify(data))
sessionStorage.setItem('enterpriseSystemId', item.enterpriseSystemId)
sessionStorage.setItem('taskType', item.taskType)
@@ -518,6 +525,12 @@ export default {
this.page.pageNum = 1
this.allPage = 0
this.getTaskList()
},
goClockIn(item){
this.setCurrentTidCidPersonInfo(item)
this.$router.push({
name: 'clockIn',
})
}
}
}
@@ -72,6 +72,8 @@ export default {
const res = await uploadFile(params)
if (res.code == 0) {
this.fileList.push({
fileName: res.data.original_name,
fileId: res.data.attach_id,
url:`${downloadUrl}${res.data.attach_id}`
})
this.$emit('onUpload', this.fileList, this.type)