完善通用查询和详情界面

This commit is contained in:
ldeyun 2025-02-14 14:12:21 +08:00
parent 8cf96126fe
commit cc6681cfb5
4 changed files with 894 additions and 770 deletions

View File

@ -90,6 +90,14 @@ export function cxcRyDatAstatistics(parm) { // 员工分组统计
})
}
export function cxcRyDatAstatisticsCertificate(parm) { // 员工按证件分组统计
return https({
url: '/cxc_rlzy.zb/cxcRlzyZb/getStatisticsCertificate',
method: 'get',
data: parm
})
}
export function cxcRyDatAstatisticsDetails(parm) { // 员工信息统计
return https({
url: '/cxc_rlzy.zb/cxcRlzyZb/details',

View File

@ -28,16 +28,16 @@
<uni-row>
<view v-for="(item,index) in jxkhxxList">
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{index+1}}
</view>
</uni-col>
<uni-col :span="10">
<view class="dataStyle">
<view class="dataStyle1">
{{item.nf}}
</view>
</uni-col><uni-col :span="10">
<view class="dataStyle">
<view class="dataStyle1">
{{item.khcj+"---"+item.khcj_dictText}}
</view>
</uni-col>
@ -69,20 +69,20 @@
<uni-row>
<view v-for="(item,index) in gzjlList">
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.kssj}}
</view>
</uni-col>
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.jssj}}
</view>
</uni-col><uni-col :span="11">
<view class="dataStyle">
<view class="dataStyle2" ref="dataView">
{{item.jlms}}
</view>
</uni-col><uni-col :span="5">
<view class="dataStyle">
<view class="dataStyle1">
{{item.jlms2}}
</view>
</uni-col>
@ -125,30 +125,30 @@
<uni-row>
<view v-for="(item,index) in xlxxList">
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.xllb}}
</view>
</uni-col>
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.byyx}}
</view>
</uni-col><uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle2" ref="dataView">
{{item.sxzy}}
</view>
</uni-col><uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.qdxl}}
</view>
</uni-col>
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.qdxw}}
</view>
</uni-col>
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.bytime}}
</view>
</uni-col>
@ -185,25 +185,25 @@
<uni-row>
<view v-for="(item,index) in zjtzList">
<uni-col :span="6">
<view class="dataStyle">
<view class="dataStyle2" ref="dataView">
{{item.zjmc}}
</view>
</uni-col>
<uni-col :span="5">
<view class="dataStyle">
<view class="dataStyle1">
{{item.zsdj}}
</view>
</uni-col><uni-col :span="5">
<view class="dataStyle">
<view class="dataStyle1">
{{item.fzrq}}
</view>
</uni-col><uni-col :span="5">
<view class="dataStyle">
<view class="dataStyle1">
{{item.fssj}}
</view>
</uni-col>
<uni-col :span="3">
<view class="dataStyle">
<view class="dataStyle1">
{{item.bz}}
</view>
</uni-col>
@ -241,25 +241,25 @@
<uni-row>
<view v-for="(item,index) in zyjtcyList">
<uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.ybrgx}}
</view>
</uni-col>
<uni-col :span="3">
<view class="dataStyle">
<view class="dataStyle1">
{{item.gxname}}
</view>
</uni-col><uni-col :span="6">
<view class="dataStyle">
<view class="dataStyle1">
{{item.cstime}}
</view>
</uni-col><uni-col :span="4">
<view class="dataStyle">
<view class="dataStyle1">
{{item.cyzzmm}}
</view>
</uni-col>
<uni-col :span="7">
<view class="dataStyle">
<view class="dataStyle2" ref="dataView">
{{item.cygzdw}}
</view>
</uni-col>
@ -403,123 +403,146 @@
}
}
// adjustFontSize()
}).catch((err) => {
console.log(err);
})
}
function getJbxx() {
cellData.value.push({
"title": "姓名",
"value": renyuanData.value.xm,
"titleSpan": 3,
"valueSpan": 3
"valueSpan": 3,
"class": "dataStyle"
})
cellData.value.push({
"title": "性别",
"value": renyuanData.value.xb_dictText,
"titleSpan": 3,
"valueSpan": 4
"valueSpan": 4,
"class": "dataStyle"
})
cellData.value.push({
"title": "出生年月",
"value": renyuanData.value.cssj,
"titleSpan": 4,
"valueSpan": 4
"valueSpan": 4,
"class": "dataStyle"
})
cellData.value.push({
"title": "民族",
"value": renyuanData.value.mz,
"titleSpan": 3,
"valueSpan": 3
"valueSpan": 3,
"class": "dataStyle"
})
cellData.value.push({
"title": "籍贯",
"value": renyuanData.value.jg,
"titleSpan": 3,
"valueSpan": 5
"valueSpan": 5,
"class": "dataStyle"
})
cellData.value.push({
"title": "出生地",
"value": renyuanData.value.csd,
"titleSpan": 3,
"valueSpan": 4
"valueSpan": 4,
"class": "dataStyle"
})
cellData.value.push({
"title": "工作时间",
"value": renyuanData.value.cjgzsj,
"titleSpan": 4,
"valueSpan": 5
"valueSpan": 5,
"class": "dataStyle"
})
cellData.value.push({
"title": "政治面貌",
"value": renyuanData.value.zzmm + renyuanData.value.jrsj,
"value": renyuanData.value.zzmm === "群众" ? renyuanData.value.zzmm : renyuanData.value.zzmm +
renyuanData.value.jrsj,
"titleSpan": 4,
"valueSpan": 4
"valueSpan": 4,
"class": "dataStyle1"
})
cellData.value.push({
"title": "现专业",
"value": "",
"titleSpan": 3,
"valueSpan": 8
"valueSpan": 8,
"class": "dataStyle"
})
cellData.value.push({
"title": "用工形式",
"value": renyuanData.value.rylb1_dictText,
"titleSpan": 4,
"valueSpan": 5
"valueSpan": 5,
"class": "dataStyle"
})
cellData.value.push({
"title": "健康状况",
"value": "",
"titleSpan": 4,
"valueSpan": 4
"valueSpan": 4,
"class": "dataStyle"
})
cellData.value.push({
"title": "所在单位",
"value": renyuanData.value.orgCode_dictText,
"titleSpan": 4,
"valueSpan": 6
"valueSpan": 6,
"class": "dataStyle"
})
cellData.value.push({
"title": "专业技术资格",
"value": gbxxList.value.zc + gbxxList.value.zcsj,
"value": gbxxList.value.zc === 0 ? "/" : gbxxList.value.zc + gbxxList.value.zcsj,
"titleSpan": 5,
"valueSpan": 7
"valueSpan": 7,
"class": "dataStyle1"
})
cellData.value.push({
"title": "职业资格等级",
"value": zyzgdjList.value.ztgz + zyzgdjList.value.ztgzdj,
"value": zyzgdjList.value.ztgz === "0" ? "/" : zyzgdjList.value.ztgz + zyzgdjList.value.ztgzdj,
"titleSpan": 5,
"valueSpan": 7
"valueSpan": 7,
"class": "dataStyle"
})
cellData.value.push({
"title": "",
"value": "",
"titleSpan": 0,
"valueSpan": 0
"valueSpan": 0,
"class": "dataStyle"
})
cellData.value.push({
"title": "职务(岗位)",
"value": gbxxList.value.zw,
"titleSpan": 5,
"valueSpan": 7
"valueSpan": 7,
"class": "dataStyle"
})
cellData.value.push({
"title": "职位级别",
"value": gbxxList.value.zwcj,
"titleSpan": 5,
"valueSpan": 7
"valueSpan": 7,
"class": "dataStyle"
})
cellData.value.push({
"title": "",
"value": "",
"titleSpan": 0,
"valueSpan": 0
"valueSpan": 0,
"class": "dataStyle"
})
}
@ -553,22 +576,20 @@
.titleStyle {
font-size: 12px;
color: #747474;
line-height: 50px;
height: 50px;
line-height: 35px;
height: 35px;
background: #F2F9FC;
text-align: center;
vertical-align: middle;
border-left: 1px solid #919191;
border-bottom: 1px solid #919191;
;
;
}
/* 内容样式 */
.dataStyle {
max-font-size: 14px;
/* 最大字体限制 */
min-font-size: 10px;
/* 最小字体限制 */
font-size: 14px;
color: #00007f;
line-height: 25px;
@ -583,4 +604,42 @@
overflow-wrap: break-word;
}
/* 内容样式 */
.dataStyle1 {
max-font-size: 14px;
/* 最大字体限制 */
min-font-size: 10px;
/* 最小字体限制 */
font-size: 14px;
color: #00007f;
line-height: 30px;
height: 30px;
font-weight: 500;
text-align: center;
vertical-align: middle;
border-bottom: 1px solid #919191;
border-left: 1px solid #919191;
text-align: center;
word-wrap: break-word;
overflow-wrap: break-word;
}
/* 内容样式 */
.dataStyle2 {
font-size: 12px;
color: #00007f;
line-height: 15px;
height: 30px;
font-weight: 500;
text-align: center;
vertical-align: middle;
border-bottom: 1px solid #919191;
border-left: 1px solid #919191;
text-align: center;
word-wrap: break-word;
overflow-wrap: break-word;
}
</style>

View File

@ -5,14 +5,16 @@
<uni-col :span="5"><uni-title :title="'选择单位'" align="left" type="h4"></uni-title></uni-col>
<uni-col :span="19">
<trq-depart-select v-model="selectedOrgCode" returnCodeOrID="orgCode" @change="onOrgCodeChange"></trq-depart-select>
<trq-depart-select v-model="selectedOrgCode" returnCodeOrID="orgCode"
@change="onOrgCodeChange"></trq-depart-select>
</uni-col>
</uni-row>
<uni-row style="margin-bottom: 20rpx; margin-left: 30rpx; margin-right: 30rpx">
<uni-col :span="5"><uni-title :title="'选择字段'" align="left" type="h4"></uni-title></uni-col>
<uni-col :span="19">
<uni-data-select v-model="selectedField" :localdata="fieldList" @change="onFieldChange"></uni-data-select>
<uni-data-select v-model="selectedField" :localdata="fieldList"
@change="onFieldChange"></uni-data-select>
</uni-col>
</uni-row>
</view>
@ -24,7 +26,8 @@
<!-- 翻页按钮 -->
<view style="display: flex; justify-content: center; margin-top: 10px">
<button @click="prevPage" :disabled="currentPage === 1" size="mini">上一页</button>
<button @click="nextPage" :disabled="currentPage * pageSize >= chartDataCount.value" size="mini">下一页</button>
<button @click="nextPage" :disabled="currentPage * pageSize >= chartDataCount.value"
size="mini">下一页</button>
</view>
<!-- 数据表格 -->
@ -82,17 +85,36 @@
</template>
<script setup>
import { ref, reactive, onMounted, computed } from 'vue';
import {
ref,
reactive,
onMounted,
computed
} from 'vue';
import * as echarts from 'echarts';
import { cxcRyDatAstatistics, cxcRyDatAstatisticsDetails } from '@/api/renyuan.js';
import {
cxcRyDatAstatistics,
cxcRyDatAstatisticsCertificate,
cxcRyDatAstatisticsDetails
} from '@/api/renyuan.js';
// tableData
const bottomHeight = ref(0);
//
const chart = ref(null);
const chartDataCount = ref(0);
const fieldList = ref([
const fieldList = ref([{
text: '取证情况',
value: 'zjmc',
isDict: false,
dictCode: 'gzrlzy'
},
{
text: '岗位类别',
value: 'gwlb',
isDict: false,
dictCode: ''
}, {
text: '性别',
value: 'xb',
isDict: true,
@ -211,7 +233,7 @@ const getChartOption = (ChartData) => {
let legendData = [];
for (let i = 0; i < fieldValues.value.length; i++) {
legendData.push(fieldValues.value[i].filedText);
legendData.push(fieldValues.value[i].fieldText);
}
tempChartData.forEach((item) => {
@ -221,7 +243,7 @@ const getChartOption = (ChartData) => {
for (let i = 0; i < fieldValues.value.length; i++) {
let tempData = [];
tempChartData.forEach((item) => {
console.log(item);
// console.log(item);
if (item.data[i]) {
tempData.push(item.data[i]);
} else {
@ -229,7 +251,7 @@ const getChartOption = (ChartData) => {
}
});
seriesData.push({
name: fieldValues.value[i].filedText,
name: fieldValues.value[i].fieldText,
type: 'bar',
label: {
show: true, //
@ -275,8 +297,7 @@ const getChartOption = (ChartData) => {
show: false //线
}
},
yAxis: [
{
yAxis: [{
show: true,
boundaryGap: false, //线
type: 'value',
@ -300,8 +321,7 @@ const getChartOption = (ChartData) => {
axisLine: {
show: false //线
}
}
],
}],
series: seriesData,
legend: {
@ -393,13 +413,16 @@ function findNodeByOrgCode(treeData, targetOrgCode) {
function collectUniqueKeyFieldValues(tree) {
const uniqueMap = new Map();
tree.forEach((item) => {
const { fieldValue, filedText } = item;
const key = `${fieldValue}-${filedText}`;
const {
fieldValue,
fieldText
} = item;
const key = `${fieldValue}-${fieldText}`;
if (!uniqueMap.has(key)) {
uniqueMap.set(key, {
fieldValue,
filedText
fieldText
});
}
});
@ -467,7 +490,8 @@ function transformData(selectOrgCode, data) {
// console.log(entry);
hierarchy.forEach((code) => {
// console.log(code);
let tempOrgText = orgMapper.findOrgText(code) === undefined ? '' : orgMapper.findOrgText(code);
let tempOrgText = orgMapper.findOrgText(code) === undefined ? '' : orgMapper.findOrgText(
code);
// console.log(tempOrgText);
if (!nodes.has(code)) {
nodes.set(code, {
@ -579,7 +603,7 @@ const groupByOrgCode = (orgCode, data) => {
groupedByFieldValue[item.fieldValue] = {
orgCode: item.orgCode,
orgText: item.orgText,
filedText: item.filedText,
fieldText: item.fieldText,
number: 0,
ldhth: []
};
@ -591,17 +615,21 @@ const groupByOrgCode = (orgCode, data) => {
} catch (error) {
console.log(error);
}
console.log(1, orgMapper.findOrgText(orgCode));
// console.log(1, orgMapper.findOrgText(orgCode));
//
const result = {
orgCode: orgCode,
orgText: orgMapper.findOrgText(orgCode),
fieldValues: Object.keys(groupedByFieldValue).map((fieldValue) => {
const { filedText, orgCode, orgText } = groupedByFieldValue[fieldValue] || {};
const {
fieldText,
orgCode,
orgText
} = groupedByFieldValue[fieldValue] || {};
return {
fieldValue: fieldValue,
filedText: filedText,
fieldText: fieldText,
orgCode: orgCode,
orgText: orgText,
number: groupedByFieldValue[fieldValue].number,
@ -647,15 +675,27 @@ const fetchStatisticsData = async () => {
let res = [];
chartData.value = [];
try {
if (selectedField.value === "zjmc") {
console.log(dictCode.value)
res = await cxcRyDatAstatisticsCertificate({
orgCode: selectedOrgCode.value,
field: selectedField.value,
dictCode: dictCode.value,
fieldisDict: fieldisDict.value
});
} else {
res = await cxcRyDatAstatistics({
orgCode: selectedOrgCode.value,
field: selectedField.value,
dictCode: dictCode.value,
fieldisDict: fieldisDict.value
});
}
// console.log(res); //deepseek
if (res.success) {
// console.log(selectedOrgCode.value, res);
console.log(selectedOrgCode.value, res);
if (res.result.length < 1) {
uni.showToast({
title: '查询数据为空'
@ -700,6 +740,7 @@ const fetchPersonnelList = async (ldhthList) => {
//
const onOrgCodeChange = (e, data) => {
personnelList.value = []
selectedOrgCode.value = e;
// console.log(data.value.title);
selectedOrgCodeLabel.value = data.value.title;
@ -707,6 +748,7 @@ const onOrgCodeChange = (e, data) => {
};
const onFieldChange = (e) => {
personnelList.value = []
// console.log(e);
try {
selectedField.value = e;
@ -727,7 +769,10 @@ const onFieldChange = (e) => {
};
const onChartClick = (e) => {
const { ldhth } = chartData.value;
personnelList.value = []
const {
ldhth
} = chartData.value;
if (ldhth && ldhth.length > 0) {
fetchPersonnelList(ldhth);
}

View File

@ -7,7 +7,7 @@
</view>
</uni-col>
<uni-col :span="item.valueSpan">
<view class="dataStyle">
<view :class="item.class">
{{ doEmptyString(item.value) }}
</view>
</uni-col>
@ -77,8 +77,8 @@
.titleStyle {
font-size: 12px;
color: #747474;
line-height: 50px;
height: 50px;
line-height: 30px;
height: 30px;
background: #F2F9FC;
text-align: center;
vertical-align: middle;
@ -90,14 +90,26 @@
/* 内容样式 */
.dataStyle {
max-font-size: 14px;
/* 最大字体限制 */
min-font-size: 10px;
/* 最小字体限制 */
font-size: 14px;
color: #00007f;
line-height: 25px;
height: 50px;
line-height: 35px;
height: 30px;
font-weight: 500;
text-align: center;
vertical-align: middle;
border-bottom: 1px solid #919191;
text-overflow: ellipsis;
overflow: hidden;
}
/* 内容样式 */
.dataStyle1 {
font-size: 12px;
color: #00007f;
line-height: 15px;
height: 30px;
font-weight: 500;
text-align: center;
vertical-align: middle;