Merge remote-tracking branch 'remotes/origin/master' into minJeecg

# Conflicts:
#	manifest.config.ts
#	src/manifest.json
This commit is contained in:
lagos 2025-06-27 08:36:52 +08:00
commit e852e1e997
39 changed files with 1622 additions and 234 deletions

4
env/.env vendored
View File

@ -1,9 +1,9 @@
VITE_APP_TITLE = '数智产销测试' VITE_APP_TITLE = '数智产销测试'
VITE_APP_PORT = 9000 VITE_APP_PORT = 9000
#VITE_UNI_APPID = '__UNI__9F097F0' VITE_UNI_APPID = '__UNI__9F097F0'
#测试APPID #测试APPID
VITE_UNI_APPID = '__UNI__1B02D50' #VITE_UNI_APPID = '__UNI__1B02D50'
VITE_WX_APPID = 'wx8e287639924edb51' VITE_WX_APPID = 'wx8e287639924edb51'
#发布版本号 #发布版本号

View File

@ -7,8 +7,11 @@ VITE_SHOW_SOURCEMAP = true
# 是否启用读取配置文件 min # 是否启用读取配置文件 min
#VITE_WEBAPP = 'D://opt//AppUpdateTest' #VITE_WEBAPP = 'D://opt//AppUpdateTest'
VITE_WEBAPP = '' VITE_WEBAPP = ''
#VITE_SERVER_BASEURL = 'http://10.75.15.247:8080/jeecg-boot' VITE_SERVER_BASEURL = 'http://10.75.15.249:8080/jeecg-boot'
#VITE_SERVER_BASEURL = 'https://36.112.48.190/jeecg-boot' #VITE_SERVER_BASEURL = 'https://36.112.48.190/jeecg-boot'
VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/jeecg-boot' #VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/jeecg-boot'
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/wwapi' #VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/wwapi'
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/yjapi' #VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/yjapi'

5
env/.env.production vendored
View File

@ -8,6 +8,9 @@ VITE_SHOW_SOURCEMAP = false
#VITE_WEBAPP = 'D://opt//AppUpdateTest' #VITE_WEBAPP = 'D://opt//AppUpdateTest'
VITE_WEBAPP = '' VITE_WEBAPP = ''
VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/jeecg-boot' VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/jeecg-boot'
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/wwapi' #VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/wwapi'
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/yjapi' #VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/yjapi'
#VITE_SERVER_BASEURL = 'http://10.75.15.247:8080/jeecg-boot'

View File

@ -17,8 +17,8 @@ export default defineManifestConfig({
name: VITE_APP_TITLE, name: VITE_APP_TITLE,
appid: VITE_UNI_APPID, appid: VITE_UNI_APPID,
description: '', description: '',
versionName: '2.0.2', versionName: '2.1.0',
versionCode: '20250617', versionCode: '20250627',
transformPx: false, transformPx: false,
locale: VITE_FALLBACK_LOCALE, // 'zh-Hans' locale: VITE_FALLBACK_LOCALE, // 'zh-Hans'
/* 5+App特有相关 */ /* 5+App特有相关 */

View File

@ -80,18 +80,24 @@
"@tanstack/query-core": "^5.76.0", "@tanstack/query-core": "^5.76.0",
"@tanstack/vue-query": "^5.62.16", "@tanstack/vue-query": "^5.62.16",
"@vant/area-data": "^2.0.0", "@vant/area-data": "^2.0.0",
"@vue/devtools-api": "^7.7.6",
"@vue/devtools-kit": "^7.7.6",
"@vue/devtools-shared": "^7.7.6",
"abortcontroller-polyfill": "^1.7.8", "abortcontroller-polyfill": "^1.7.8",
"base-64": "^1.0.0", "base-64": "^1.0.0",
"birpc": "^2.3.0",
"charenc": "^0.0.2", "charenc": "^0.0.2",
"crypt": "^0.0.2", "crypt": "^0.0.2",
"dayjs": "1.11.10", "dayjs": "1.11.10",
"echarts": "^5.6.0", "echarts": "^5.6.0",
"fs-extra": "^11.3.0", "fs-extra": "^11.3.0",
"hookable": "^5.5.3",
"is-buffer": "^2.0.5", "is-buffer": "^2.0.5",
"js-base64": "^3.6.1", "js-base64": "^3.6.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"md5": "^2.3.0", "md5": "^2.3.0",
"perfect-debounce": "^1.0.0",
"pinia": "2.0.36", "pinia": "2.0.36",
"pinia-plugin-persistedstate": "3.2.1", "pinia-plugin-persistedstate": "3.2.1",
"qs": "6.5.3", "qs": "6.5.3",

View File

@ -68,12 +68,24 @@ importers:
'@vant/area-data': '@vant/area-data':
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.0.0 version: 2.0.0
'@vue/devtools-api':
specifier: ^7.7.6
version: 7.7.6
'@vue/devtools-kit':
specifier: ^7.7.6
version: 7.7.6
'@vue/devtools-shared':
specifier: ^7.7.6
version: 7.7.6
abortcontroller-polyfill: abortcontroller-polyfill:
specifier: ^1.7.8 specifier: ^1.7.8
version: 1.7.8 version: 1.7.8
base-64: base-64:
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0 version: 1.0.0
birpc:
specifier: ^2.3.0
version: 2.3.0
charenc: charenc:
specifier: ^0.0.2 specifier: ^0.0.2
version: 0.0.2 version: 0.0.2
@ -89,6 +101,9 @@ importers:
fs-extra: fs-extra:
specifier: ^11.3.0 specifier: ^11.3.0
version: 11.3.0 version: 11.3.0
hookable:
specifier: ^5.5.3
version: 5.5.3
is-buffer: is-buffer:
specifier: ^2.0.5 specifier: ^2.0.5
version: 2.0.5 version: 2.0.5
@ -104,6 +119,9 @@ importers:
md5: md5:
specifier: ^2.3.0 specifier: ^2.3.0
version: 2.3.0 version: 2.3.0
perfect-debounce:
specifier: ^1.0.0
version: 1.0.0
pinia: pinia:
specifier: 2.0.36 specifier: 2.0.36
version: 2.0.36(typescript@5.7.2)(vue@3.4.21(typescript@5.7.2)) version: 2.0.36(typescript@5.7.2)(vue@3.4.21(typescript@5.7.2))

View File

@ -0,0 +1,11 @@
import { http } from '@/utils/http';
/*通过id查询请假数据*/
export function queryByIdApi(id : string) {
return http({
url: '/cxcbgjjwxsq/cxcBgjjwxsq/queryByIdForApp',//queryById
method: 'GET',
data: { id }
})
}

View File

@ -0,0 +1,11 @@
import { http } from '@/utils/http';
/*通过id查询数据*/
export function queryByIdApi(id : string) {
return http({
url: '/cxcjyglsjzdgl/cxcJyglSjzdgl/queryByIdForAPP',//queryById
method: 'GET',
data: { id }
})
}

View File

@ -29,11 +29,11 @@ export function queryZbkhZbByIdApi(id : string) {
} }
/*通过id查询指标考核子表数据*/ /*通过id查询指标考核子表数据*/
export function queryZbkhFbByIdApi(mainId : string) { export function queryZbkhFbByIdApi(data : object) {
return http({ return http({
url: '/jxkh.zbkh/cxcJxkhZbkhZb/listCxcJxkhZbkhDwkhByMainId', url: '/jxkh.zbkh/cxcJxkhZbkhZb/listCxcJxkhZbkhDwkhByMainId',
method: 'GET', method: 'GET',
data: { mainId } data
}) })
} }
@ -46,3 +46,47 @@ export function queryZbkhBtByIdApi(mainId : string) {
}) })
} }
/*通过id查询考核实施主表数据*/
export function queryKhssZbByIdApi(id : string) {
return http({
url: '/jxkh.khss/cxcJxkhXhss/getAllById',
method: 'GET',
data: { id }
})
}
/*通过id查询考核实施主表自定义表头*/
export function queryKhssZbBtByIdApi(mainId : string) {
return http({
url: '/jxkh.jxkh/cxcJxkhKhssKhjxZb/getByMainId',
method: 'GET',
data: { mainId }
})
}
/*通过id查询考核实施子表数据*/
export function queryKhssFbByIdApi(data : object) {
return http({
url: '/jxkh.khss/cxcJxkhXhss/selectAllByMainId',
method: 'GET',
data
})
}
/*通过id查询总金额*/
export function queryKhssAllSumByIdApi(mainId : string) {
return http({
url: '/jxkh.khss/cxcJxkhXhss/getAllSum',
method: 'GET',
data: { mainId }
})
}
/*通过id查询考核实子表自定义表头*/
export function queryKhssFbBtByIdApi(mainId : string) {
return http({
url: '/jxkh.jxfp.bt/cxcJxkhJxfbBtZb/listByMainId',
method: 'GET',
data: { mainId }
})
}

View File

@ -0,0 +1,44 @@
import { http } from '@/utils/http';
export function followpersonList(config : object) { // 访
return http({
url: '/Hmcappselect/appselect/Hmcapplist',
method: 'GET',
data: config
})
}
//
export function addhealthList(config : object) { // 访
return http({
url: '/tbbApp/Tbbapp/applist',
method: 'GET',
data: config
})
}
//
export function addByCld(config : object) { //
return http({
url: '/jksf.tbb/cxcGwjktbTbb/addByCld',
method: 'GET',
data: config
})
}
/*通过id查询数据*/
//
export function queryByIdApi(id : string) {
return http({
url: '/tbbApp/Tbbapp/queryById',
method: 'GET',
data: { id }
})
}

View File

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

View File

@ -0,0 +1,11 @@
import { http } from '@/utils/http';
/*通过id查询请假数据*/
export function queryByIdApi(id : string) {
return http({
url: '/cxcoaflgf/cxcOaFlgf/queryByIdForApp',//queryById
method: 'GET',
data: { id }
})
}

View File

@ -1,18 +1,17 @@
import { http } from '@/utils/http'; import { http } from '@/utils/http';
export function getListApi(orgCode : string) { export function getListApi() {
return http({ return http({
url: '/sjgl.scnr/cxcSjSc/queryTreeData', url: '/sjgl.scnr/cxcSjSc/queryTreeData',
method: 'GET', method: 'GET'
data: { orgCode }
}) })
} }
export function getJobDesIdByDepAndName(config : Object) { export function getJobDesIdByDepAndName(jobname : string) {
return http({ return http({
url: '/sjgl.tynr/cxcSjJobdescription/queryByNameDep', url: '/sjgl.tynr/cxcSjJobdescription/queryByNameDep',
method: 'GET', method: 'GET',
data: config data: { jobname }
}) })
} }

View File

@ -18,4 +18,21 @@ export function queryIf3rdGxyApi(ldhth : string) { // 根据username获取职位
ldhth ldhth
} }
}) })
}
//访
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({ return http({
url: `/sys/common/deleteFileAndCache`, url: `/sys/common/deleteFileAndCache`,
method: 'GET', method: 'GET',
data: config 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

@ -1,9 +1,9 @@
{ {
"name": "数智产销测试", "name": "数智产销",
"appid": "__UNI__1B02D50", "appid": "__UNI__9F097F0",
"description": "", "description": "",
"versionName": "2.0.2", "versionName": "2.1.0",
"versionCode": "20250617", "versionCode": "20250627",
"transformPx": false, "transformPx": false,
"app-plus": { "app-plus": {
"usingComponents": true, "usingComponents": true,

View File

@ -0,0 +1,49 @@
<template>
<wd-cell-group title="申请信息">
<wd-cell title="申请人" :value="info.name" />
<wd-cell title="申请时间" :value="info.sqtime" />
<wd-cell title="申请单位" :value="info.sqdw_dictText" />
<wd-cell title="设备类型" :value="info.sblx" />
<wd-cell title="设备型号" :value="info.sbxh" />
<wd-cell title="数量" :value="info.sbsl" />
<wd-cell title="维修类型" :value="info.wxlx" />
<wd-cell title="故障现象" />
<wd-textarea title="" v-model="info.gzxx" readonly/>
<wd-cell title="维修内容" />
<wd-textarea title="维修内容" v-model="info.wxnr" readonly/>
</wd-cell-group>
</template>
<script setup>
import {
queryByIdApi
} from '@/api/OfficeEquipmentMaintenanceApplication/bpmApi'
const info = ref({})
const image = ref([])
const gzxxvalue = ref('')//
const wxnrvalue = ref('')//
const props = defineProps({
formData: {
type: Object,
default: () => {},
}
})
//
const QueryById = () => {
queryByIdApi(props.formData.dataId).then((res) => {
console.log("res----------------",res)
if (res.success) {
info.value = res.result.records[0]
// gzxxvalue= res.result.gzxx
// wxnrvalue= res.result.wxnr
}
})
}
onMounted(() => {
QueryById()
})
</script>

View File

@ -0,0 +1,56 @@
<template>
<wd-cell-group title="申请信息">
<!-- <wd-cell title="制度名称" :value="info.zdmc" /> -->
<wd-cell title="制度名称" :value="info.sszd">
<view style="color: blue;"
@click="onlinePreview(`/pages/onlinePreview/detail?data=${info.sszd}`)">
{{info.zdmc}}
</view>
</wd-cell>
<wd-cell title="制度类型" :value="info.ssywlx_dictText" />
<wd-cell title="制定部门" :value="info.sbbm_dictText" />
<wd-cell title="发文字号" :value="info.wh" />
<wd-cell title="发文时间" :value="info.fatime" />
</wd-cell-group>
</template>
<script setup>
import {
queryByIdApi
} from '@/api/SuperiorSystem/bpmApi'
const info = ref({})
const image = ref([])
const gzxxvalue = ref('')//
const wxnrvalue = ref('')//
const props = defineProps({
formData: {
type: Object,
default: () => {},
}
})
const onlinePreview = (url) => {
uni.navigateTo({
url
})
}
//
const QueryById = () => {
queryByIdApi(props.formData.dataId).then((res) => {
console.log("res----------------",res)
if (res.success) {
info.value = res.result.records[0]
// gzxxvalue= res.result.gzxx
// wxnrvalue= res.result.wxnr
}
})
}
onMounted(() => {
QueryById()
})
</script>

View File

@ -0,0 +1,230 @@
<template>
<!-- 可滚动内容区域 -->
<scroll-view class="content-scroll" :style="{ height: scrollViewHeight }" scroll-y :scroll-top="scrollTop">
<!-- 主表内容 -->
<wd-cell-group border v-if="tabbar == '0'">
<wd-cell size="large" title="年月" :value="zbInfo.assessmentDate" />
<wd-cell size="large" title="单位" :value="zbInfo.templetName_dictText" />
<wd-cell size="large" title="当月人数" :value="zbInfo.monthNumber" />
<wd-cell size="large" title="本次兑现合计" :value="zbInfo.redemptionTotal" />
<wd-collapse v-model="collapse">
<wd-collapse-item title="考核绩效" name="item01">
<wd-cell v-for="(item, index) in zbBtInfo" :key="index" :title="item.name"
:value="getKhjxValue(item.id)" />
</wd-collapse-item>
</wd-collapse>
<wd-cell size="large">
<template #title>
<view style="display: inline-block">考核公报</view>
</template>
<view style="color: blue;" @click="onlinePreview(zbInfo.bmKhgb)">
{{getFilename(zbInfo.bmKhgb)}}
</view>
</wd-cell>
</wd-cell-group>
<!-- 子表内容 -->
<wd-collapse v-model="fbCollapse" v-if="tabbar == '1'">
<div style="display: flex;justify-content: space-between;padding: 10px 15px;font-weight: bold;">
<span>已分配金额: {{ sumJx }}</span>
<span>待分配金额: {{ (allJx - 0) - (sumJx - 0) }}</span>
</div>
<wd-collapse-item v-for="(fbItem, fbIndex) in fbInfo" :key="fbIndex" :title="fbItem.userName"
:name="'item' + (fbIndex + 1)">
<wd-cell-group border>
<wd-cell size="large" title="单位/部门" :value="fbItem.depart_dictText" />
<wd-cell size="large" title="劳动合同号" :value="fbItem.ldhth" />
<wd-cell size="large" title="岗位/职务" :value="fbItem.gw" />
<wd-cell size="large" title="绩效工资合计" :value="fbItem.jxgz" />
<wd-collapse v-model="fbCollapse2">
<wd-collapse-item title="绩效详情" :name="'item0' + (fbIndex + 1)">
<wd-cell v-for="(item, index) in fbBtInfo" :key="index" :title="item.name"
:value="getJxDetailValue(fbItem.id, item.id)" />
</wd-collapse-item>
</wd-collapse>
<wd-cell size="large" title="备注" :value="fbItem.bz" />
</wd-cell-group>
</wd-collapse-item>
</wd-collapse>
<wd-pagination v-if="tabbar == '1'" v-model="page" :total="total" @change="handleChange" />
<!-- 底部占位视图 -->
<view class="bottom-spacer" :style="{ height: safeAreaBottom }"></view>
</scroll-view>
<!-- 固定在底部的TabBar -->
<wd-tabbar fixed v-model="tabbar" class="safe-area-tabbar">
<wd-tabbar-item title="考核实施主表" icon="cart"></wd-tabbar-item>
<wd-tabbar-item title="考核实施子表" icon="user"></wd-tabbar-item>
</wd-tabbar>
</template>
<script setup>
import {
queryKhssZbByIdApi,
queryKhssZbBtByIdApi,
queryKhssFbByIdApi,
queryKhssFbBtByIdApi,
queryKhssAllSumByIdApi
} from '@/api/bpm'
import {
getFilename
} from '@/utils'
//
const tabbar = ref(0)
const zbInfo = ref({})
const fbInfo = ref([])
const zbBtInfo = ref([])
const fbBtInfo = ref([])
const collapse = ref([''])
const fbCollapse = ref([''])
const fbCollapse2 = ref([''])
const jxxqList = ref([])
const sumJx = ref(0)
const allJx = ref(0)
const page = ref(1)
const total = ref(0)
const scrollTop = ref(0)
const tabbarHeight = ref(50)
const systemInfo = ref({})
const scrollViewHeight = ref('100vh')
const props = defineProps({
formData: {
type: Object,
default: () => ({})
}
})
//
const safeAreaBottom = computed(() => {
// #ifdef H5
return `${tabbarHeight.value}px`
// #endif
// #ifdef APP-PLUS || MP-WEIXIN
return `calc(${tabbarHeight.value}px + env(safe-area-inset-bottom))`
// #endif
})
//
const getSystemInfo = () => {
uni.getSystemInfo({
success: (res) => {
systemInfo.value = res
const safeBottom = res.safeAreaInsets?.bottom || 0
scrollViewHeight.value =
`calc(${res.windowHeight}px - ${tabbarHeight.value + safeBottom}px)`
}
})
}
// TabBar
const initTabbarHeight = () => {
const query = uni.createSelectorQuery().select('.safe-area-tabbar')
query.boundingClientRect(data => {
if (data) {
tabbarHeight.value = data.height
getSystemInfo()
}
}).exec()
}
//
const queryById = async () => {
const zbRes = await queryKhssZbByIdApi(props.formData.dataId)
if (zbRes.success) {
zbInfo.value = zbRes.result.records[0]
allJx.value = zbInfo.value.redemptionTotal
if (zbInfo.value.jxxqs) {
jxxqList.value = zbInfo.value.jxxqs
}
if (zbInfo.value.khjxZbId) {
const btRes = await queryKhssZbBtByIdApi(zbInfo.value.khjxZbId)
zbBtInfo.value = btRes.result
}
if (zbInfo.value.jxfpBtId) {
const btRes = await queryKhssFbBtByIdApi(zbInfo.value.jxfpBtId)
fbBtInfo.value = btRes.result
}
}
const fbRes = await queryKhssFbByIdApi({
mainId: props.formData.dataId
})
fbInfo.value = fbRes.result.records
total.value = fbRes.result.total
queryKhssAllSumByIdApi(props.formData.dataId).then(res => {
sumJx.value = res.result
})
}
//
const getKhjxValue = (khjxId) => {
if (!jxxqList.value || jxxqList.value.length === 0) return ''
const item = jxxqList.value.find(item => item.khjxId === khjxId)
return item ? item.numValue : ''
}
//
const getJxDetailValue = (mainId, jxfpBtId) => {
if (!fbInfo.value || fbInfo.value.length === 0) return ''
const currentItem = fbInfo.value.find(item => item.id === mainId)
if (!currentItem || !currentItem.jxxfpSaves) return ''
const detail = currentItem.jxxfpSaves.find(save => save.jxfpBt === jxfpBtId)
return detail ? detail.value : ''
}
const handleChange = (value) => {
fbInfo.value = []
queryKhssFbByIdApi({
mainId: props.formData.dataId,
pageNo: value.value
}).then(res => {
fbInfo.value = res.result.records
scrollTop.value = scrollTop.value ? 0 : 1 //
})
}
const onlinePreview = (e) => {
uni.navigateTo({
url: `/pages/onlinePreview/detail?data=${e}`
})
}
onMounted(() => {
queryById()
})
onReady(() => {
initTabbarHeight()
getSystemInfo()
})
</script>
<style lang="scss" scoped>
/* 滚动内容区域 */
.content-scroll {
width: 100%;
flex: 1;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
/* 底部占位视图 */
.bottom-spacer {
width: 100%;
}
/* 安全区域适配 */
.safe-area-tabbar {
/* #ifdef APP-PLUS || MP-WEIXIN */
padding-bottom: env(safe-area-inset-bottom);
/* #endif */
/* #ifdef H5 */
position: sticky;
bottom: 0;
/* #endif */
}
</style>

View File

@ -0,0 +1,59 @@
<template>
<wd-cell-group title="审批信息">
<!-- <wd-cell title="制度名称" :value="info.zdmc" /> -->
<wd-cell title="法律法规名称" :value="info.flfgmc">
<view style="color: blue;"
@click="onlinePreview(`/pages/onlinePreview/detail?data=${info.mingcheng}`)">
{{info.flfgmc}}
</view>
</wd-cell>
<wd-cell title="颁布部门" :value="info.fabubumen" />
<wd-cell title="法律法规类型" :value="info.flfgfl_dictText" />
<wd-cell title="实施日期" :value="info.shishiriqi" />
<wd-cell title="最新修订日期" :value="info.zxxdrq" />
<wd-cell title="适用条款" />
<wd-textarea v-model="info.sytk" readonly/>
<wd-cell title="识别人" :value="info.sbr" />
</wd-cell-group>
</template>
<script setup>
import {
queryByIdApi
} from '@/api/lawsAndRegulations/bpmApi'
const info = ref({})
const image = ref([])
const gzxxvalue = ref('')//
const wxnrvalue = ref('')//
const props = defineProps({
formData: {
type: Object,
default: () => {},
}
})
const onlinePreview = (url) => {
uni.navigateTo({
url
})
}
//
const QueryById = () => {
queryByIdApi(props.formData.dataId).then((res) => {
console.log("res----------------",res)
if (res.success) {
info.value = res.result.records[0]
// gzxxvalue= res.result.gzxx
// wxnrvalue= res.result.wxnr
}
})
}
onMounted(() => {
QueryById()
})
</script>

View File

@ -1,46 +1,57 @@
<template> <template>
<wd-tabbar fixed v-model="tabbar" shape="round"> <!-- 可滚动内容区域 -->
<wd-tabbar-item title="指标考核主表" icon="cart"></wd-tabbar-item> <scroll-view class="content-scroll" :style="{ height: scrollViewHeight }" scroll-y :scroll-top="scrollTop">
<wd-tabbar-item title="指标考核子表" icon="user"></wd-tabbar-item> <!-- 主表内容 -->
</wd-tabbar> <wd-cell-group border v-if="tabbar == '0'">
<wd-cell-group border v-if="tabbar == '0'"> <wd-cell size="large" title="年月" :value="zbInfo.year + '年' + zbInfo.month + '月'" />
<wd-cell size="large" title="年月" :value="zbInfo.year + '年' + zbInfo.month + '月'" /> <wd-cell size="large" title="考核指标" :value="zbInfo.assessmentIndicators" />
<wd-cell size="large" title="考核指标" :value="zbInfo.assessmentIndicators" /> <wd-cell size="large" title="指标类别" :value="zbInfo.indicatorCategory_dictText" />
<wd-cell size="large" title="指标类别" :value="zbInfo.indicatorCategory_dictText" /> <wd-collapse v-model="khdxCollapse">
<wd-cell size="large" title="考核对象" :value="zbInfo.templetName_dictText" /> <wd-collapse-item title="考核对象" name="考核对象">{{zbInfo.templetName_dictText}}</wd-collapse-item>
<wd-cell size="large" title="考核周期" :value="zbInfo.assessmentCycle_dictText" /> </wd-collapse>
<wd-cell size="large" title="考核部门" :value="zbInfo.assessmentDepart_dictText" /> <wd-cell size="large" title="考核周期" :value="zbInfo.assessmentCycle_dictText" />
<wd-collapse v-model="zbCollapse"> <wd-cell size="large" title="考核部门" :value="zbInfo.assessmentDepart_dictText" />
<wd-collapse-item title="评价方法" name="评价方法">{{zbInfo.evaluationMethod}}</wd-collapse-item> <wd-collapse v-model="zbCollapse">
</wd-collapse> <wd-collapse-item title="评价方法" name="评价方法">{{zbInfo.evaluationMethod}}</wd-collapse-item>
<wd-cell size="large"> </wd-collapse>
<template #title> <wd-cell size="large">
<view>
<view style="display: inline-block">考核附件</view>
</view>
</template>
<view style="color: blue;" @click="onlinePreview(zbInfo.khfj)">
{{zbInfo.khfj}}
</view>
</wd-cell>
</wd-cell-group>
<wd-collapse v-model="collapse" v-if="tabbar == '1'">
<wd-collapse-item v-for="(fbItem, fbIndex) in fbInfo" :key="fbIndex" :title="fbItem.depart_dictText"
:name="'item' + (fbIndex + 1)">
<wd-cell v-for="(btItem, btIndex) in btInfo" :key="btIndex" :title="btItem.name"
:value="getDwkhValue(fbItem, btItem.id)" />
<wd-cell>
<template #title> <template #title>
<view> <view>
<view style="display: inline-block">附件</view> <view style="display: inline-block">考核附件</view>
</view> </view>
</template> </template>
<view style="color: blue;" @click="onlinePreview(fbItem.annex)"> <view style="color: blue;" @click="onlinePreview(zbInfo.khfj)">
{{getFilename(fbItem.annex)}} {{getFilename(zbInfo.khfj)}}
</view> </view>
</wd-cell> </wd-cell>
</wd-collapse-item> </wd-cell-group>
</wd-collapse> <!-- 子表内容 -->
<wd-collapse v-model="collapse" v-if="tabbar == '1'">
<wd-collapse-item v-for="(fbItem, fbIndex) in fbInfo" :key="fbIndex" :title="fbItem.depart_dictText"
:name="'item' + (fbIndex + 1)">
<wd-cell v-for="(btItem, btIndex) in btInfo" :key="btIndex" :title="btItem.name"
:value="getDwkhValue(fbItem, btItem.id)" />
<wd-cell>
<template #title>
<view>
<view style="display: inline-block">附件</view>
</view>
</template>
<view style="color: blue;" @click="onlinePreview(fbItem.annex)">
{{getFilename(fbItem.annex)}}
</view>
</wd-cell>
</wd-collapse-item>
</wd-collapse>
<wd-pagination v-if="tabbar == '1'" v-model="page" :total="total" @change="handleChange" />
<!-- 底部占位视图 -->
<view class="bottom-spacer" :style="{ height: safeAreaBottom }"></view>
</scroll-view>
<wd-tabbar fixed v-model="tabbar" class="safe-area-tabbar">
<wd-tabbar-item title="指标考核主表" icon="cart"></wd-tabbar-item>
<wd-tabbar-item title="指标考核子表" icon="user"></wd-tabbar-item>
</wd-tabbar>
</template> </template>
<script setup> <script setup>
@ -58,7 +69,14 @@
const btInfo = ref([]) const btInfo = ref([])
const btDataInfo = ref([]) const btDataInfo = ref([])
const zbCollapse = ref(['评价方法']) const zbCollapse = ref(['评价方法'])
const collapse = ref(['item1']) const khdxCollapse = ref(['考核对象'])
const collapse = ref(['item01'])
const page = ref(1)
const total = ref(0)
const scrollTop = ref(0)
const tabbarHeight = ref(50)
const systemInfo = ref({})
const scrollViewHeight = ref('100vh')
const props = defineProps({ const props = defineProps({
formData: { formData: {
@ -67,20 +85,57 @@
} }
}) })
//
const safeAreaBottom = computed(() => {
// #ifdef H5
return `${tabbarHeight.value}px`
// #endif
// #ifdef APP-PLUS || MP-WEIXIN
return `calc(${tabbarHeight.value}px + env(safe-area-inset-bottom))`
// #endif
})
//
const getSystemInfo = () => {
uni.getSystemInfo({
success: (res) => {
systemInfo.value = res
const safeBottom = res.safeAreaInsets?.bottom || 0
scrollViewHeight.value =
`calc(${res.windowHeight}px - ${tabbarHeight.value + safeBottom}px)`
}
})
}
// TabBar
const initTabbarHeight = () => {
const query = uni.createSelectorQuery().select('.safe-area-tabbar')
query.boundingClientRect(data => {
if (data) {
tabbarHeight.value = data.height
getSystemInfo()
}
}).exec()
}
const queryById = async () => { const queryById = async () => {
// 1. // 1.
const zbRes = await queryZbkhZbByIdApi(props.formData.dataId); const zbRes = await queryZbkhZbByIdApi(props.formData.dataId);
if (zbRes.success) { if (zbRes.success) {
zbInfo.value = zbRes.result.records[0]; zbInfo.value = zbRes.result.records[0];
// 2. btInfo // 2. btInfo
if (zbInfo.value.dwkhBtId) { if (zbInfo.value.dwkhBtId) {
const btRes = await queryZbkhBtByIdApi(zbInfo.value.dwkhBtId); const btRes = await queryZbkhBtByIdApi(zbInfo.value.dwkhBtId);
btInfo.value = btRes.result; btInfo.value = btRes.result;
} }
} }
// 3. fbInfo // 3. fbInfo
const fbRes = await queryZbkhFbByIdApi(props.formData.dataId); const fbRes = await queryZbkhFbByIdApi({
mainId: props.formData.dataId
});
fbInfo.value = fbRes.result.records; fbInfo.value = fbRes.result.records;
total.value = fbRes.result.total
}; };
const getDwkhValue = (fbItem, btId) => { const getDwkhValue = (fbItem, btId) => {
@ -88,6 +143,18 @@
const found = fbItem.dwkhSaves.find(item => item.dwkhBtId === btId); const found = fbItem.dwkhSaves.find(item => item.dwkhBtId === btId);
return found ? found.value : ''; return found ? found.value : '';
}; };
const handleChange = (value) => {
fbInfo.value = []
queryZbkhFbByIdApi({
mainId: props.formData.dataId,
pageNo: value.value
}).then(res => {
fbInfo.value = res.result.records
scrollTop.value = scrollTop.value ? 0 : 1 //
})
}
const onlinePreview = (e) => { const onlinePreview = (e) => {
uni.navigateTo({ uni.navigateTo({
@ -97,17 +164,32 @@
onMounted(() => { onMounted(() => {
queryById() queryById()
getSystemInfo()
}) })
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
/* 手动引入 wd-segmented 样式 */ /* 滚动内容区域 */
@import 'wot-design-uni/components/wd-segmented/index.scss'; .content-scroll {
width: 100%;
flex: 1;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
/* 或直接覆盖关键样式 */ /* 底部占位视图 */
.wd-segmented { .bottom-spacer {
/* 确保样式优先级 */ width: 100%;
opacity: 1 !important; }
visibility: visible !important;
} /* 安全区域适配 */
.safe-area-tabbar {
/* #ifdef APP-PLUS || MP-WEIXIN */
padding-bottom: env(safe-area-inset-bottom);
/* #endif */
/* #ifdef H5 */
position: sticky;
bottom: 0;
/* #endif */
}
</style> </style>

View File

@ -0,0 +1,44 @@
<template>
<PageLayout :navbarShow="false">
<wd-card type="rectangle">
<template #title>
<view class="title">
<view>2020-02-03服务到期</view>
<view class="title-tip">
<wd-icon name="warning" size="14px" custom-style="vertical-align: bottom" />
您可以去电脑上使用该服务
</view>
</view>
</template>
<view style="height: 40px;" class="content">
<image
src="https://img11.360buyimg.com/imagetools/jfs/t1/143248/37/5695/265818/5f3a8546E98d998a4/745897ca9c9e474b.jpg"
width="40"
height="40"
alt="joy"
style="border-radius: 4px; margin-right: 12px;"
/>
<view>
<view style="color: rgba(0,0,0,0.85); font-size: 16px;">智催评营销</view>
<view style="color: rgba(0,0,0,0.25); font-size: 12px;">高级版-快速吸粉 | 周期一年</view>
</view>
</view>
<template #footer>
<view>
<wd-button size="small" style="margin-right: 8px;">评价</wd-button>
<wd-button size="small" plain>立即使用</wd-button>
</view>
</template>
</wd-card>
</PageLayout>
</template>
<script setup>
</script>
<style>
</style>

View File

@ -0,0 +1,36 @@
<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationBarTitleText: '办公室设备列表',
},
}
</route>
<template>
<PageLayout navTitle="设备管理">
<view class="content">
<view v-if="current === 0">
<Personaldevices></Personaldevices>
</view>
<view v-if="current === 1">
</view>
</view>
</PageLayout>
</template>
<script setup>
import Personaldevices from './Personaldevices'
const current = ref(0)
const items = ref(['个人使用房间设备', '全部房间设备'])
function onClickItem(e) {
if (current.value != e.currentIndex) {
current.value = e.currentIndex;
}
}
</script>
<style>
</style>

View File

@ -1,20 +0,0 @@
<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationBarTitleText: '',
},
}
</route>
<template>
<view class=""></view>
</template>
<script lang="ts" setup>
//
</script>
<style lang="scss" scoped>
//
</style>

View File

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

View File

@ -118,7 +118,6 @@
pageSize pageSize
}).then((res) => { }).then((res) => {
if (res.success) { if (res.success) {
console.log('----',res.result.records)
list.value = [...list.value, ...res.result.records] list.value = [...list.value, ...res.result.records]
} }
loading = false loading = false

View File

@ -83,10 +83,7 @@
new base64().encode(baseUrl + url)) new base64().encode(baseUrl + url))
} }
} else if (/^-?\d+$/.test(quote) && !insFlag) { } else if (/^-?\d+$/.test(quote) && !insFlag) {
getJobDesIdByDepAndName({ getJobDesIdByDepAndName(quote).then((res) => {
jobname: quote,
jobdep: useUserStore().userInfo.orgCode
}).then((res) => {
fileUrl.value = getEnvBaseUrl() + '/jmreport/view/929517863011811328?id=' + res fileUrl.value = getEnvBaseUrl() + '/jmreport/view/929517863011811328?id=' + res
.id + .id +
"&token=" + useUserStore().userInfo.token; "&token=" + useUserStore().userInfo.token;
@ -113,7 +110,7 @@
} }
const getList = () => { const getList = () => {
getListApi(useUserStore().userInfo.orgCode).then(res => { getListApi().then(res => {
data.value = res.result data.value = res.result
dataSource.value = [data.value.map(item => { dataSource.value = [data.value.map(item => {
return { return {

View File

@ -0,0 +1,144 @@
<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('提交成功!')
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

@ -0,0 +1,77 @@
<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationStyle: 'custom',
navigationBarTitleText: '健康随访详情',
},
}
</route>
<template>
<PageLayout navTitle="健康随访详情">
<wd-cell-group v-for="(item, i) in info" :key="i" border>
<wd-cell title="填报内容:" :value="item.tbnr" />
<wd-cell title="是否:" :value="item.sf" />
</wd-cell-group>
</PageLayout>
</template>
<script setup>
import {
useMessage,
useToast
} from 'wot-design-uni'
import {
followpersonList,
addhealthList,
queryByIdApi
} from '@/api/healthfollow/healthfllow'
import {
imgUrl
} from '@/utils/index'
import {
useUserStore
} from '@/store/user'
const message = useMessage()
const toast = useToast()
const userStore = useUserStore();
const info = ref({})
const path = ref([])
const image = ref([])
const resumptiontime = ref(0)
const minDate = ref(0)
const queryById = (e) => {
console.log("3334eeeeeeeeeee--", e)
queryByIdApi(e).then((res) => {
if (res.success) {
info.value = res.result.records
console.log("res---", res.result.records)
}
})
}
// sort
const sortedInfo = computed(() => {
if (info.value && info.value.records) {
return [...info.value.records].sort((a, b) => {
return parseInt(a.sort) - parseInt(b.sort)
})
}
return []
})
onLoad((options) => {
console.log("options---传进来的id--", options)
queryById(options.id)
})
</script>
<style lang="scss" scoped>
.footer {
padding: 12px;
}
</style>

View File

@ -0,0 +1,173 @@
<template>
<PageLayout :navbarShow="false">
<wd-card id="top1">
<wd-row>
<wd-col :span="16">
<wd-datetime-picker type="year-month" v-model="dataValue" label="填报时间" @confirm="getList" id="top1" />
</wd-col>
<wd-col :span="8" style="margin-top: 5px;">
<wd-button @click="clear">重置</wd-button>
</wd-col>
</wd-row>
</wd-card>
<view v-for="(item, i) in list" :key="i" @click="jump(`./HealthDetails?id=${item.id}`)">
<wd-card
:title="item.xm+'的'+item.createTime.substring(0,4)+'年'+item.ksny.substring(5,7)+'月'+'的健康随访填报表'">
<view class="card-content">
<view class="meta-info">
<wd-icon name="usergroup" size="14px" color="#999"></wd-icon>
<text class="meta-text">{{item.depart_dictText}}</text>
<!-- <wd-icon name="time" size="14px" color="#999" style="margin-left: auto;"></wd-icon> -->
<!-- <text class="meta-text">
{{item.ksny}}</text> -->
</view>
</view>
</wd-card>
</view>
</PageLayout>
</template>
<script setup>
import {
useMessage,
useToast
} from 'wot-design-uni'
import SelectDept from '@/components/SelectDept/SelectDept'
import {
followpersonList,
addhealthList
} from '@/api/healthfollow/healthfllow'
const realname = ref('') //
const list = ref([])
const total = ref(0)
const screenHeight = ref(0)
const screenWidth = ref(0)
const tableHeight = ref(0)
const range = ref([]) //
const dataValue = ref(Date.now())
let pageNo = 1
let pageSize = 10
let loading = false
const clear = () => {
dataValue.value = Date.now()
getpersonList();
}
//
const getList = () => {
const date = new Date(dataValue.value);
const year = date.getFullYear();
const month = date.getMonth() + 1;
let monthdate = '';
if(month<10){
monthdate = '0'+month;
}else{
monthdate = month;
}
let params = {
}
console.log("res--按时间查询-params-111-",params)
addhealthList({
// ...params,
cxdata: year + '-' + monthdate,
pageNo,
pageSize
}).then(res => {
console.log("res--按时间查询-222-",res)
if (res.success) {
list.value = res.result.records.map((item, index) => ({
...item, //
}));
total.value = res.result.total
}
})
}
//
const getpersonList = (e)=> {
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
let monthdate = '';
if(month<10){
monthdate = '0'+month;
}else{
monthdate = month;
}
let params = {
// ksny: year + '-' + monthdate +'-01'
}
console.log("res--初始化----params-111-",params)
addhealthList({
// ...params,
cxdata: year + '-' + monthdate,
pageNo,
pageSize
}).then((res) => {
console.log("res--初始化---222--", res)
if (res.success) {
list.value = res.result.records.map((item, index) => ({
...item, //
}));
total.value = res.result.total
}
})
.catch((err) => {
console.log(err);
});
}
/*切换页码*/
const handleChange = ({
value
}) => {
pageNo = value
getpersonList(1)
}
const calculateTableHeight = () => {
const systemInfo = uni.getSystemInfoSync();
screenWidth.value = systemInfo.screenWidth;
screenHeight.value = systemInfo.screenHeight;
// +
const query = uni.createSelectorQuery();
query.select('#top1').boundingClientRect(data => {
const topHeight = data ? data.height : 0;
const navHeight = 88; //
const margin = 20; //
//
tableHeight.value = screenHeight.value - topHeight - navHeight;
}).exec();
}
const jump = (url) => {
uni.navigateTo({
url: url
});
}
onMounted(() => {
getpersonList();
followpersonList();
calculateTableHeight();
//
uni.onWindowResize(() => {
calculateTableHeight();
});
})
onReachBottom(() => {
if (loading) return
queryLeave(1); //1
})
</script>
<style>
</style>

View File

@ -0,0 +1,148 @@
<template>
<PageLayout :navbarShow="false">
<wd-card id="top1">
<wd-row>
<wd-col :span="16" style="margin-top: 5px;">
<uni-easyinput v-model="realname" placeholder="姓名模糊查询" @change="getpersonList"
@clear="getpersonList" style="width: 100%;" />
</wd-col>
<wd-col :span="6" style="margin-top: 5px;margin-left: 3px;">
<wd-button @click="sendMessage" style="width: 100%;">发送消息</wd-button>
</wd-col>
</wd-row>
</wd-card>
<wd-table :data="list" :height="tableHeight">
<wd-table-col prop="ldhth" label="" align="center" :width="screenWidth / 5">
<template #value="{row}">
<wd-checkbox v-model="row.checked" @change="handleCheckboxChange(row)"></wd-checkbox>
</template>
</wd-table-col>
<wd-table-col prop="xm" label="姓名" align="center" :width="screenWidth / 5"></wd-table-col>
<wd-table-col prop="gfxry_dictText" label="疾病类别" align="center" :width="screenWidth /5"></wd-table-col>
<wd-table-col prop="nl" label="年龄" align="center" :width="screenWidth /5"></wd-table-col>
<wd-table-col prop="xb_dictText" label="性别" align="center" :width="screenWidth / 5"></wd-table-col>
</wd-table>
<wd-pagination custom-style="border: 1px solid #ececec;border-top:none" v-model="pageNo" :total="total"
@change="handleChange"></wd-pagination>
</PageLayout>
</template>
<script setup>
import {
useMessage,
useToast
} from 'wot-design-uni'
import SelectDept from '@/components/SelectDept/SelectDept'
import {
followpersonList,
addByCld
} from '@/api/healthfollow/healthfllow'
const realname = ref('') //
const list = ref([])
let pageNo = 0
let pageSize = 10
const total = ref(0)
const screenHeight = ref(0)
const screenWidth = ref(0)
const tableHeight = ref(0)
const message = useMessage()
const toast = useToast()
const getpersonList = (e) => {
if (e != 1) { //1
pageNo = 1
}
let params = {
xm: '*' + realname.value + '*'
}
followpersonList({
...params,
pageNo,
pageSize
}).then((res) => {
console.log("res--健康随访---", res)
if (res.success) {
list.value = res.result.records.map((item, index) => ({
...item, //
xh: index + 1, // xh 1
checked: true // true
}));
total.value = res.result.total
}
// getHeight();
})
.catch((err) => {
console.log(err);
});
}
const sendMessage = () => {
//
const selectedData = list.value.filter(item => item.checked);
if (selectedData.length === 0) {
toast.warning('请先选择要发送消息的人员')
return;
}
// ldhth
const ldhthValues = selectedData.map(item => item.ldhth).join(',');
console.log('拼接后的 ldhth 值:', ldhthValues);
addByCld({
ldhths:ldhthValues
}).then(res=>{
toast.success(res.message)
console.log("res----",res)
// if(res.success){
// toast.success(res.message)
// }
})
}
const handleCheckboxChange = (row) => {
//
console.log(`选中状态变更: ${row.xm},当前状态: ${row.checked}`);
}
/*切换页码*/
const handleChange = ({
value
}) => {
pageNo = value
getpersonList(1)
}
const calculateTableHeight = () => {
const systemInfo = uni.getSystemInfoSync();
screenWidth.value = systemInfo.screenWidth;
screenHeight.value = systemInfo.screenHeight;
// +
const query = uni.createSelectorQuery();
query.select('#top1').boundingClientRect(data => {
const topHeight = data ? data.height : 0;
const navHeight = 88; //
const margin = 20; //
//
tableHeight.value = screenHeight.value - topHeight - navHeight;
}).exec();
}
onMounted(() => {
getpersonList();
followpersonList();
calculateTableHeight();
//
uni.onWindowResize(() => {
calculateTableHeight();
});
})
</script>
<style>
</style>

View File

@ -0,0 +1,81 @@
<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationStyle: 'custom',
navigationBarTitleText: '健康随访',
},
}
</route>
<template>
<PageLayout navTitle="健康随访">
<view style="margin: 0 10px;">
<uni-segmented-control style="margin-top: 10px;margin-bottom: 10px" :current="current" :values="items"
@clickItem="onClickItem" styleType="button"></uni-segmented-control>
</view>
<view class="content">
<view v-if="current === 0">
<send></send>
</view>
<view v-if="current === 1">
<lookhealth></lookhealth>
</view>
</view>
</PageLayout>
</template>
<script setup>
import {
useMessage,
useToast
} from 'wot-design-uni'
import {
useAppStore
} from '@/store';
import {
useUserStore
} from '@/store/user';
import {
addApi,
queryIf3rdGxyApi
} from '@/api/politics/health'
import {
getEnvBaseUrl
} from '@/utils/index'
import send from './send'
import lookhealth from './lookhealth'
const items = ref(['发送随访信息', '查看随访信息'])
const userStore = useUserStore(); //
const current = ref(0)
function onClickItem(e) {
if (current.value != e.currentIndex) {
current.value = e.currentIndex;
}
}
onLoad(() => {
// if3rdGxy()
})
</script>
<style lang="scss" scoped>
.form-container {
padding: 20rpx;
background-color: #f5f7fa;
min-height: 100vh;
}
.card {
background: #ffffff;
border-radius: 16rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
margin-bottom: 30rpx;
overflow: hidden;
}
.footer {
padding: 40rpx 0;
}
</style>

View File

@ -1,13 +1,16 @@
<!-- component标签可以变换组件 --> <!-- component标签可以变换组件 -->
<template> <template>
<view> <view>
<component ref="comptRef" :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey" v-if="asyncComponent" <component ref="comptRef" :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey"
@getStampSuc="getStampSuccess"></component> v-if="asyncComponent" @getStampSuc="getStampSuccess"></component>
<view v-else>该模块暂未建立审批页面</view> <view v-else>该模块暂未建立审批页面</view>
</view> </view>
<wd-tabbar v-if="false">
<wd-tabbar-item></wd-tabbar-item>
</wd-tabbar>
<wd-pagination v-if="false"/>
</template> </template>
<script setup> <script setup>
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
const compName = ref(''); const compName = ref('');
const asyncComponent = ref(null); const asyncComponent = ref(null);
const modules = import.meta.glob('/src/pages-bpm/**/*.vue'); const modules = import.meta.glob('/src/pages-bpm/**/*.vue');
@ -35,34 +38,34 @@
}, },
formData: { formData: {
type: Object, type: Object,
default: () => { }, default: () => {},
} }
}) })
// option // option
watch(() => props.path, (newVal) => { watch(() => props.path, (newVal) => {
if (newVal){ if (newVal) {
compName.value = newVal; compName.value = newVal;
} }
// //
const comp = modules[`/src/pages-bpm/${compName.value}.vue`] const comp = modules[`/src/pages-bpm/${compName.value}.vue`]
if(!comp){ if (!comp) {
console.log(newVal) console.log(newVal)
if(newVal.indexOf('index')==-1){ if (newVal.indexOf('index') == -1) {
compName.value = newVal+'/index' compName.value = newVal + '/index'
console.log(compName.value) console.log(compName.value)
const comp2 = modules[`/src/pages-bpm/${compName.value}.vue`] const comp2 = modules[`/src/pages-bpm/${compName.value}.vue`]
comp2().then((myModule) => { comp2().then((myModule) => {
asyncComponent.value = myModule.default asyncComponent.value = myModule.default
}).catch(() => { }).catch(() => {
}) })
} }
}else{ } else {
comp().then((myModule) => { comp().then((myModule) => {
asyncComponent.value = myModule.default asyncComponent.value = myModule.default
}).catch(() => { }).catch(() => {
}) })
} }
@ -73,18 +76,18 @@
// #endif // #endif
}); });
const signValidator = ()=>{ const signValidator = () => {
console.log(comptRef.value) console.log(comptRef.value)
// //
if(!comptRef.value.signValidator){ if (!comptRef.value.signValidator) {
console.log(123124) console.log(123124)
return null; return null;
}else{ } else {
console.log(12) console.log(12)
return comptRef.value.signValidator() return comptRef.value.signValidator()
} }
} }
const getStampSuccess = (val) => { const getStampSuccess = (val) => {
// this.$emit('getStampSuc', val) // this.$emit('getStampSuc', val)
// //<component>使vuex // //<component>使vuex
@ -93,9 +96,9 @@
// esignTag: val // esignTag: val
// }); // });
} }
defineExpose({ // defineExpose({ //
signValidator signValidator
}) })
</script> </script>

View File

@ -222,12 +222,16 @@
"root": "pages-home", "root": "pages-home",
"pages": [ "pages": [
{ {
"path": "home/home", "path": "device-control/office/index",
"type": "page", "type": "page",
"layout": "default", "layout": "default",
"style": { "style": {
"navigationBarTitleText": "" "navigationBarTitleText": "办公室设备列表"
} }
},
{
"path": "device-control/office/Personaldevices",
"type": "page"
} }
] ]
}, },
@ -479,6 +483,41 @@
"navigationStyle": "custom", "navigationStyle": "custom",
"navigationBarTitleText": "健康填报" "navigationBarTitleText": "健康填报"
} }
},
{
"path": "health/followup",
"type": "page",
"layout": "default",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "健康随访问卷"
}
},
{
"path": "healthfollow/HealthDetails",
"type": "page",
"layout": "default",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "健康随访详情"
}
},
{
"path": "healthfollow/lookhealth",
"type": "page"
},
{
"path": "healthfollow/send",
"type": "page"
},
{
"path": "healthfollow/sendmessage",
"type": "page",
"layout": "default",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "健康随访"
}
} }
] ]
}, },
@ -525,10 +564,26 @@
"path": "document/index", "path": "document/index",
"type": "page" "type": "page"
}, },
{
"path": "khss/index",
"type": "page"
},
{
"path": "lawsAndRegulations/index",
"type": "page"
},
{ {
"path": "leaveApplication/index", "path": "leaveApplication/index",
"type": "page" "type": "page"
}, },
{
"path": "OfficeEquipmentMaintenanceApplication/index",
"type": "page"
},
{
"path": "SuperiorSystem/index",
"type": "page"
},
{ {
"path": "unconventional/index", "path": "unconventional/index",
"type": "page" "type": "page"

View File

@ -52,9 +52,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, watch, onBeforeUnmount } from 'vue'
import { getFileAccessHttpUrl } from '@/common/uitls' import { getFileAccessHttpUrl } from '@/common/uitls'
import { onLoad } from '@dcloudio/uni-app'
import { useToast, useMessage } from 'wot-design-uni' import { useToast, useMessage } from 'wot-design-uni'
import { useRouter } from '@/plugin/uni-mini-router' import { useRouter } from '@/plugin/uni-mini-router'
import { http } from '@/utils/http' import { http } from '@/utils/http'
@ -62,20 +60,22 @@
import useUpload from '@/hooks/useUpload' import useUpload from '@/hooks/useUpload'
import { getEnvBaseUrl } from '@/utils/index' import { getEnvBaseUrl } from '@/utils/index'
import { queryPostByUserIdApi, editUserApi } from '@/api/system/user' import { queryPostByUserIdApi, editUserApi } from '@/api/system/user'
import { useAppStore } from '@/store'
import { clockInApi } from '@/api/humanResource/personnel'
const appStore = useAppStore();
const userStore = useUserStore() const userStore = useUserStore()
const toast = useToast() const toast = useToast()
const router = useRouter() const router = useRouter()
const message = useMessage() const message = useMessage()
const loading = ref(false)
const post = ref('') const post = ref('')
let stopWatch : any = null let stopWatch : any = null
const dataSource = [ const dataSource = [
// { key: 'collect', title: '', class: 'cuIcon-favorfill text-yellow' },
// { key: 'redPacket', title: '', class: 'cuIcon-redpacket_fill text-red' },
{ key: 'setting', title: '个人资料', class: 'cuIcon-settingsfill text-cyan' }, { key: 'setting', title: '个人资料', class: 'cuIcon-settingsfill text-cyan' },
{ key: 'clockin', title: '打卡', class: 'cuIcon-location text-cyan' },
{ key: 'scan', title: '扫码', class: 'cuIcon-scan text-red' }, { key: 'scan', title: '扫码', class: 'cuIcon-scan text-red' },
// { key: 'location', title: '', class: 'cuIcon-location text-cyan' },
{ key: 'exit', title: '退出', class: 'cuIcon-exit text-cyan' }, { key: 'exit', title: '退出', class: 'cuIcon-exit text-cyan' },
] ]
@ -156,8 +156,34 @@
toast.warning('H5暂不支持') toast.warning('H5暂不支持')
// #endif // #endif
} }
const clockin = () => {
if (loading.value) return
loading.value = true;
uni.getLocation({
type: 'wgs84',
success: function (position) {
clockInApi({
longitude: position.longitude,
latitude: position.latitude
}).then((res : any) => {
if (res.success) {
toast.success(res.message)
} else {
toast.warning(res.message)
}
loading.value = false
})
},
fail: function (err) {
toast.warning('请打开系统定位再打卡!')
loading.value = false
}
});
}
const exit = () => { const exit = () => {
console.log(message)
message message
.confirm({ .confirm({
title: '提示', title: '提示',
@ -180,6 +206,9 @@
case 'exit': case 'exit':
exit() exit()
break break
case 'clockin':
clockin()
break
default: default:
toast.show('功能暂未开发~') toast.show('功能暂未开发~')
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -27,7 +27,8 @@ interface NavigateToOptions {
"/pages/production/shishishuju/nyxhSssj" | "/pages/production/shishishuju/nyxhSssj" |
"/pages/production/shishishuju/trqSssj" | "/pages/production/shishishuju/trqSssj" |
"/pages/production/shishishuju/ysjSssj" | "/pages/production/shishishuju/ysjSssj" |
"/pages-home/home/home" | "/pages-home/device-control/office/index" |
"/pages-home/device-control/office/Personaldevices" |
"/pages-message/chat/chat" | "/pages-message/chat/chat" |
"/pages-message/contacts/contacts" | "/pages-message/contacts/contacts" |
"/pages-message/personPage/personPage" | "/pages-message/personPage/personPage" |
@ -53,12 +54,21 @@ interface NavigateToOptions {
"/pages-humanResource/personnel/standingbook" | "/pages-humanResource/personnel/standingbook" |
"/pages-integrated/duty/index" | "/pages-integrated/duty/index" |
"/pages-politics/health/add" | "/pages-politics/health/add" |
"/pages-politics/health/followup" |
"/pages-politics/healthfollow/HealthDetails" |
"/pages-politics/healthfollow/lookhealth" |
"/pages-politics/healthfollow/send" |
"/pages-politics/healthfollow/sendmessage" |
"/pages-process/approvalTabbar" | "/pages-process/approvalTabbar" |
"/pages-process/myApplyProcess" | "/pages-process/myApplyProcess" |
"/pages-process/taskHandle" | "/pages-process/taskHandle" |
"/pages-bpm/carRental/index" | "/pages-bpm/carRental/index" |
"/pages-bpm/document/index" | "/pages-bpm/document/index" |
"/pages-bpm/khss/index" |
"/pages-bpm/lawsAndRegulations/index" |
"/pages-bpm/leaveApplication/index" | "/pages-bpm/leaveApplication/index" |
"/pages-bpm/OfficeEquipmentMaintenanceApplication/index" |
"/pages-bpm/SuperiorSystem/index" |
"/pages-bpm/unconventional/index" | "/pages-bpm/unconventional/index" |
"/pages-bpm/unconventional/stamp" | "/pages-bpm/unconventional/stamp" |
"/pages-bpm/zbkh/index"; "/pages-bpm/zbkh/index";

View File

@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
import { pages, subPackages, tabBar } from '@/pages.json' import { pages, subPackages, tabBar } from '@/pages.json'
import { isMpWeixin } from './platform' import { isMpWeixin } from './platform'
import { useAppStore } from '@/store' 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 { try {
let path = '' let path = ''
let webApp = import.meta.env.VITE_WEBAPP let webApp = import.meta.env.VITE_WEBAPP
console.log(webApp) if (webApp) {// upDateAppApi by min
if(webApp){// upDateAppApi by min
path = webApp path = webApp
} }
console.log(path)
upDateAppApi(path).then(async (res : any) => { upDateAppApi(path).then(async (res : any) => {
let { let {
result result
@ -285,19 +283,19 @@ export const useUpdateApp = defineStore('updateApp', () => {
* @param isWgt 是否是热资源更新 默认不是 * @param isWgt 是否是热资源更新 默认不是
*/ */
export const hasNewVersion = (version, isWgt = false) => { export const hasNewVersion = (version, isWgt = false) => {
// #ifdef APP_PLUS // #ifdef APP_PLUS
return new Promise((resolve) => { return new Promise((resolve) => {
if (isWgt) { if (isWgt) {
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => { plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
const currentVersion = widgetInfo.versionCode const currentVersion = widgetInfo.versionCode
resolve(Number(version) > Number(currentVersion)) resolve(Number(version) > Number(currentVersion))
}) })
} else { } else {
const currentVersion = plus.runtime.versionCode const currentVersion = plus.runtime.versionCode
resolve(Number(version) > Number(currentVersion)) resolve(Number(version) > Number(currentVersion))
} }
}) })
// #endif // #endif
} }
export function onClickUpdate(updateType : string, url) { export function onClickUpdate(updateType : string, url) {
@ -389,107 +387,38 @@ export const getLocation = () => {
type: 'wgs84', type: 'wgs84',
success: function (position) { success: function (position) {
// //
uni.request({ getLocationApi(position.longitude, position.latitude).then((res : any) => {
url: 'https://api.tianditu.gov.cn/geocoder', if (res) {
method: 'GET', const obj = res.addressComponent
data: { store.setPosition(obj.city ? obj.city : obj.province) //
postStr: JSON.stringify({ store.setLocation(obj.city ? obj.province + obj.city + obj.county : obj.province + obj.county) //
lon: position.longitude, getWeather(position.longitude, position.latitude)
lat: position.latitude, } else {
ver: 1
}),
type: 'geocode',
tk: '30fe0f0c1b2320e112bde797f3ddaff4'
},
success: function (res : any) {
let data = res.data;
if (data.status == 0) {
const obj = data.result.addressComponent
store.setPosition(obj.city ? obj.city : obj.province) //
store.setLocation(obj.city ? obj.province + obj.city + obj.county : obj.province + obj.county) //
getWeather(position.latitude, position.longitude)
} else {
handleDefaultLocation()
}
},
fail: function (err) {
// uni.showToast({
// title: '',
// icon: 'error'
// })
handleDefaultLocation() handleDefaultLocation()
} }
}); })
}, },
fail: function (err) { fail: function () {
//
// if (err.errCode === 2 || err.errCode === 12) {
// // 2: , 12:
// uni.showToast({
// title: '',
// icon: 'error'
// })
// } else {
// uni.showToast({
// title: '',
// icon: 'error'
// })
// }
handleDefaultLocation() handleDefaultLocation()
} }
}); });
} }
const getWeather = (lat : number, lon : number) => {
let params = {
lat: lat,
lon: lon
}
weatherRequest(params)
}
// //
function handleDefaultLocation() { function handleDefaultLocation() {
useAppStore().setPosition('濮阳市') useAppStore().setPosition('濮阳市')
weatherRequest({ getWeather(115.08784, 35.773116) // //油田总部经纬度
q: '濮阳市'
})
} }
function weatherRequest(params : { lat ?: number; lon ?: number; q ?: string }) { function getWeather(lon : number, lat : number) {
const store = useAppStore() const store = useAppStore()
uni.request({ getWeatherApi(lon, lat).then((res : any) => {
url: 'https://api.openweathermap.org/data/2.5/weather', if (res) {
method: 'GET', store.setTemperature(Math.round(res.main.temp - 273.15))
data: { store.setWeather(res.weather[0].icon)
...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'
// })
}
},
// fail: function () {
// uni.showToast({
// title: '',
// icon: 'error'
// })
// }
});
} }
export const imgUrl = (url : string) => { export const imgUrl = (url : string) => {
@ -517,7 +446,7 @@ export function getFileAccessHttpUrl(avatar, subStr) {
/* 获取文件名 */ /* 获取文件名 */
export function getFilename(text : string) { export function getFilename(text : string) {
if (!text) { if (!text) {
return text === null ? null : ""; return text === null ? null : "";
} }
if (text.indexOf(',') > 0) { if (text.indexOf(',') > 0) {
let arr = text.split(",") let arr = text.split(",")