健康随访表单提交

This commit is contained in:
yangzhq68909 2025-06-25 09:07:54 +08:00
parent 5726688c2e
commit 3691d5d90f
12 changed files with 279 additions and 143 deletions

View File

@ -1,11 +0,0 @@
import { http } from '@/utils/http';
/*新增打卡记录*/
export function addApi(config : Object) {
return http({
url: '/cxc_rlzy.wbxm.wbdk/cxcRlzyWbdk/add',
method: 'POST',
data: config
})
}

View File

@ -113,3 +113,12 @@ export function cxcRyDatAstatisticsDetails(parm) { // 员工信息统计
data: parm
})
}
/*新增打卡记录*/
export function clockInApi(data : object) {
return http({
url: '/cxc_rlzy.wbxm.wbdk/cxcRlzyWbdk/add',
method: 'POST',
data
})
}

View File

@ -19,3 +19,20 @@ export function queryIf3rdGxyApi(ldhth : string) { // 根据username获取职位
}
})
}
//访
export function querySfwtApi() {
return http({
url: '/jksf.tbb/cxcGwjktbTbb/querySfwtByMonthLdhth',
method: 'GET'
})
}
// 访
export function editApi(data : object) {
return http({
url: '/jksf.tbb/cxcGwjktbTbb/editCxcGwjktbTbbZb',
method: 'PUT',
data
})
}

View File

@ -90,10 +90,34 @@ export function getDictItemsApi(dictCode : string) { // 字典标签专用
})
}
export function deleteFile(config : object){// by
export function deleteFile(config : object) {// by
return http({
url: `/sys/common/deleteFileAndCache`,
method: 'GET',
data: config
})
}
/*根据经纬度获取地理位置*/
export function getLocationApi(longitude : number, latitude : number) {
return http({
url: `/sys/common/getLocation`,
method: 'GET',
data: {
longitude,
latitude
}
})
}
/*根据经纬度或城市名称获取天气信息*/
export function getWeatherApi(longitude : number, latitude : number) {
return http({
url: `/sys/common/getWeather`,
method: 'GET',
data: {
longitude,
latitude
}
})
}

View File

@ -27,7 +27,7 @@
:rules="[{ required: true, message: '请选择结束时间' }]" :min-date="minEndtime" />
<wd-picker label="审批领导" prop="examineleader" v-model="model.examineleader" v-if="zwmc == '0'"
:columns="examineleaderData" :rules="[{ required: true, message: '请选择审批领导'}]" />
<wd-picker label="单位劳资员" prop="hr" v-model="model.hr" :columns="hrData" v-if="zwmc == '0'"/>
<wd-picker label="单位劳资员" prop="hr" v-model="model.hr" :columns="hrData" v-if="zwmc == '0'" />
<SelectUser label="班组长" v-model="model.teamleader" isRadioSelection v-if="zwmc == '0'"></SelectUser>
<wd-input label="出发地" prop="departure" v-model="model.departure"
:rules="[{ required: true, message: '请输入出发地' }]" />
@ -251,8 +251,8 @@
} else {
toast.warning(res.message)
setTimeout(() => {
handleClickLeft()
}, 1000)
uni.navigateBack()
}, 2000)
}
})
}
@ -333,6 +333,12 @@
roleId: '1554379432313397250',
orgCode: userStore.userInfo.orgCode
}).then(res => {
if (res.result.length == 0) {
toast.warning('请切换工作单位!')
setTimeout(() => {
uni.navigateBack()
}, 2000)
} else {
model.hr = res.result[0].username
hrData.value = res.result.map(item => {
return {
@ -340,6 +346,7 @@
value: item.username
}
})
}
})
}

View File

@ -0,0 +1,145 @@
<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationStyle: 'custom',
navigationBarTitleText: '健康随访',
},
}
</route>
<template>
<PageLayout navTitle="健康随访">
<wd-form ref="form" :model="model">
<wd-cell-group border>
<view v-for="(item, index) in list" :key="index" class="question-item">
<view class="question-text">{{ index + 1 }}. {{ item.tbnr }}</view>
<wd-radio-group v-model="answers[item.id]" class="radio-group">
<wd-radio value="是" class="radio-item"></wd-radio>
<wd-radio value="否" class="radio-item"></wd-radio>
</wd-radio-group>
</view>
</wd-cell-group>
<view class="footer" v-if="list.length">
<wd-button type="primary" size="large" block round @click="submitForm">提交问卷</wd-button>
</view>
</wd-form>
</PageLayout>
</template>
<script setup>
import {
useToast
} from 'wot-design-uni'
import {
querySfwtApi,
editApi
} from '@/api/politics/health'
const toast = useToast()
const model = ref({})
const list = ref([])
const answers = ref({}) //
const allAnswered = computed(() => {
return list.value.every(item => answers.value[item.id])
})
const getList = () => {
querySfwtApi().then(res => {
list.value = res.result
if (res.result.length > 0) {
//
if (res.result.every(item => item.sf)) {
toast.warning('本月问卷已提交!')
setTimeout(() => {
uni.navigateBack()
}, 2000)
}
//
answers.value = res.result.reduce((acc, item) => {
acc[item.id] = ''
return acc
}, {})
} else {
toast.warning('未查询到本月随访问题!')
setTimeout(() => {
uni.navigateBack()
}, 2000)
}
})
}
const submitForm = () => {
if (!allAnswered.value) {
toast.warning('请回答所有问题!')
return
}
editApi({
answers: answers.value
}).then(res => {
if (res.success) {
toast.success(res.message)
setTimeout(() => {
uni.navigateBack()
}, 2000)
}
})
}
onLoad(() => {
/*获取随访问题*/
getList()
})
</script>
<style lang="scss" scoped>
.question-item {
padding: 20rpx 24rpx;
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
}
.question-text {
font-size: 32rpx;
color: #333;
font-weight: 500;
margin-bottom: 24rpx;
}
.radio-group {
display: flex;
flex-wrap: wrap;
gap: 20rpx;
}
.radio-item {
flex: 1;
:deep(.wd-radio__label) {
font-size: 28rpx;
}
:deep(.wd-radio__button) {
border-radius: 12rpx;
padding: 16rpx 0;
text-align: center;
background: #f7f7f7;
border: none;
transition: all 0.3s;
&.is-checked {
background: #4b8df8;
color: #fff;
}
}
}
.footer {
padding: 12px;
}
</style>

View File

@ -479,6 +479,15 @@
"navigationStyle": "custom",
"navigationBarTitleText": "健康填报"
}
},
{
"path": "health/followup",
"type": "page",
"layout": "default",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "健康随访"
}
}
]
},

View File

@ -61,7 +61,7 @@
import { getEnvBaseUrl } from '@/utils/index'
import { queryPostByUserIdApi, editUserApi } from '@/api/system/user'
import { useAppStore } from '@/store'
import { addApi } from '@/api/humanResource/clockin'
import { clockInApi } from '@/api/humanResource/personnel'
const appStore = useAppStore();
const userStore = useUserStore()
@ -159,16 +159,27 @@
const clockin = () => {
if (loading.value) return
addApi({
weizhi: appStore.clockin
loading.value = true;
uni.getLocation({
type: 'wgs84',
success: function (position) {
clockInApi({
longitude: position.longitude,
latitude: position.latitude
}).then((res : any) => {
if(res.success){
if (res.success) {
toast.success(res.message)
}else{
} else {
toast.warning(res.message)
}
loading.value = true
loading.value = false
})
},
fail: function (err) {
toast.warning('请打开系统定位再打卡!')
loading.value = false
}
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -15,7 +15,6 @@ export const useAppStore = defineStore('app', {
isGray: 0 as 0 | 1, // 0=1=
position: null, //
location: null, //
clockin: null, //
temperature: null, //
weather: null //
}),
@ -29,9 +28,6 @@ export const useAppStore = defineStore('app', {
setLocation(value : string) {
this.location = value
},
setClockin(value : string) {
this.clockin = value
},
setTemperature(value : number) {
this.temperature = value
},

View File

@ -53,6 +53,7 @@ interface NavigateToOptions {
"/pages-humanResource/personnel/standingbook" |
"/pages-integrated/duty/index" |
"/pages-politics/health/add" |
"/pages-politics/health/followup" |
"/pages-process/approvalTabbar" |
"/pages-process/myApplyProcess" |
"/pages-process/taskHandle" |

View File

@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
import { pages, subPackages, tabBar } from '@/pages.json'
import { isMpWeixin } from './platform'
import { useAppStore } from '@/store'
import { upDateAppApi } from '@/api/system'
import { upDateAppApi, getLocationApi, getWeatherApi } from '@/api/system'
@ -232,11 +232,9 @@ export const useUpdateApp = defineStore('updateApp', () => {
try {
let path = ''
let webApp = import.meta.env.VITE_WEBAPP
console.log(webApp)
if(webApp){// upDateAppApi by min
if (webApp) {// upDateAppApi by min
path = webApp
}
console.log(path)
upDateAppApi(path).then(async (res : any) => {
let {
result
@ -389,108 +387,38 @@ export const getLocation = () => {
type: 'wgs84',
success: function (position) {
//
uni.request({
url: 'https://api.tianditu.gov.cn/geocoder',
method: 'GET',
data: {
postStr: JSON.stringify({
lon: position.longitude,
lat: position.latitude,
ver: 1
}),
type: 'geocode',
tk: '30fe0f0c1b2320e112bde797f3ddaff4'
},
success: function (res : any) {
let data = res.data;
if (data.status == 0) {
const obj = data.result.addressComponent
getLocationApi(position.longitude, position.latitude).then((res : any) => {
if (res) {
const obj = res.addressComponent
store.setPosition(obj.city ? obj.city : obj.province) //
store.setLocation(obj.city ? obj.province + obj.city + obj.county : obj.province + obj.county) //
store.setClockin(data.result.formatted_address)
getWeather(position.latitude, position.longitude)
getWeather(position.longitude, position.latitude)
} else {
handleDefaultLocation()
}
})
},
fail: function (err) {
// uni.showToast({
// title: '',
// icon: 'error'
// })
fail: function () {
handleDefaultLocation()
}
});
},
fail: function (err) {
//
// if (err.errCode === 2 || err.errCode === 12) {
// // 2: , 12:
// uni.showToast({
// title: '',
// icon: 'error'
// })
// } else {
// uni.showToast({
// title: '',
// icon: 'error'
// })
// }
handleDefaultLocation()
}
});
}
const getWeather = (lat : number, lon : number) => {
let params = {
lat: lat,
lon: lon
}
weatherRequest(params)
}
//
function handleDefaultLocation() {
useAppStore().setPosition('濮阳市')
weatherRequest({
q: '濮阳市'
})
getWeather(115.08784, 35.773116) // //油田总部经纬度
}
function weatherRequest(params : { lat ?: number; lon ?: number; q ?: string }) {
function getWeather(lon : number, lat : number) {
const store = useAppStore()
uni.request({
url: 'https://api.openweathermap.org/data/2.5/weather',
method: 'GET',
data: {
...params,
appid: '600a60694b0e453dfbaafa862f1d1482',
lang: 'zh_cn'
},
success: function (res : any) {
if (res.data && res.data.main && res.data.weather) {
store.setTemperature(
Math.round(res.data.main.temp - 273.15)
)
store.setWeather(
res.data.weather[0].icon
)
} else {
// uni.showToast({
// title: '',
// icon: 'error'
// })
getWeatherApi(lon, lat).then((res : any) => {
if (res) {
store.setTemperature(Math.round(res.main.temp - 273.15))
store.setWeather(res.weather[0].icon)
}
},
// fail: function () {
// uni.showToast({
// title: '',
// icon: 'error'
// })
// }
});
})
}
export const imgUrl = (url : string) => {