From 2183aab470aa8020ef9cf37c42a188f19e2e37a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=97=B5=20=E5=B9=B4=E6=B3=BD?= <627844378@qq.com>
Date: Tue, 11 Feb 2025 09:34:29 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=AF=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E4=BA=BA=E5=91=98=E7=BB=9F=E8=AE=A1=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 1 +
.env.production | 3 +-
.gitignore | 2 +
api/renyuan.js | 16 +
pages.json | 8 +
.../views/renliziyuan/renyuanxinxi/index.vue | 13 +-
.../renliziyuan/renyuanxinxi/qttongji.vue | 349 ++++++++++++++++++
uni_modules/lime-shared/addUnit/index.ts | 4 +-
uni_modules/lime-shared/animation/ease.ts | 3 +-
uni_modules/lime-shared/animation/index.ts | 4 +-
.../lime-shared/animation/useTransition.ts | 21 +-
uni_modules/lime-shared/animation/uvue.uts | 21 +-
.../lime-shared/arrayBufferToFile/index.ts | 6 +-
uni_modules/lime-shared/base64ToPath/index.ts | 4 +-
.../lime-shared/canIUseCanvas2d/index.ts | 8 +-
uni_modules/lime-shared/changelog.md | 23 ++
uni_modules/lime-shared/cloneDeep/index.ts | 4 +-
.../components/lime-shared/lime-shared.vue | 149 ++++----
uni_modules/lime-shared/createImage/index.ts | 9 +-
uni_modules/lime-shared/debounce/index.ts | 4 +-
uni_modules/lime-shared/exif/index.ts | 4 +-
uni_modules/lime-shared/floatAdd/index.ts | 50 +--
uni_modules/lime-shared/getClassStr/index.ts | 6 +-
.../lime-shared/getCurrentPage/index.ts | 4 +-
.../lime-shared/getLocalFilePath/index.ts | 2 +-
uni_modules/lime-shared/getRect/index.ts | 4 +-
uni_modules/lime-shared/getRect/uvue.uts | 4 +-
uni_modules/lime-shared/getRect/vue.ts | 4 +-
uni_modules/lime-shared/getStyleStr/index.ts | 8 +-
uni_modules/lime-shared/hasOwn/index.ts | 4 +-
uni_modules/lime-shared/isDef/index.ts | 4 +-
uni_modules/lime-shared/isEmpty/index.ts | 4 +-
uni_modules/lime-shared/isFunction/index.ts | 4 +-
uni_modules/lime-shared/isNumber/index.ts | 2 +-
uni_modules/lime-shared/isNumeric/index.ts | 4 +-
uni_modules/lime-shared/isObject/index.ts | 4 +-
uni_modules/lime-shared/isString/index.ts | 6 +-
uni_modules/lime-shared/kebabCase/index.ts | 4 +-
uni_modules/lime-shared/package.json | 9 +-
uni_modules/lime-shared/pathToBase64/index.ts | 4 +-
uni_modules/lime-shared/raf/index.ts | 8 +-
uni_modules/lime-shared/raf/uvue.ts | 38 +-
uni_modules/lime-shared/raf/vue.ts | 3 +-
uni_modules/lime-shared/readme.md | 14 +
uni_modules/lime-shared/sleep/index.ts | 4 +-
uni_modules/lime-shared/throttle/index.ts | 4 +-
uni_modules/lime-shared/toArray/index.ts | 4 +-
uni_modules/lime-shared/toBoolean/index.ts | 4 +-
uni_modules/lime-shared/toNumber/index.ts | 4 +-
uni_modules/lime-shared/unitConvert/index.ts | 29 +-
50 files changed, 692 insertions(+), 207 deletions(-)
create mode 100644 pages/views/renliziyuan/renyuanxinxi/qttongji.vue
diff --git a/.env.development b/.env.development
index b6fc12c..e059f52 100644
--- a/.env.development
+++ b/.env.development
@@ -1,3 +1,4 @@
# 开发环境
# 请求接口地址
VITE_REQUEST_BASE_URL = https://36.112.48.190
+#VITE_REQUEST_BASE_URL = http://10.75.15.247:8080
diff --git a/.env.production b/.env.production
index 5ca2ca3..9338f38 100644
--- a/.env.production
+++ b/.env.production
@@ -1,3 +1,4 @@
# 生产环境
# 请求接口地址
-VITE_REQUEST_BASE_URL = https://36.112.48.190
+#VITE_REQUEST_BASE_URL = https://36.112.48.190
+VITE_REQUEST_BASE_URL = http://10.75.15.247:8080
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index ee4ee9f..c768048 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,3 +61,5 @@
/node_modules/.vite/deps/dayjs.js
/node_modules/.vite/deps/dayjs.js.map
/node_modules/.vite/deps/package.json
+/uni_modules
+/node_modules
diff --git a/api/renyuan.js b/api/renyuan.js
index 6990e57..2eb4f44 100644
--- a/api/renyuan.js
+++ b/api/renyuan.js
@@ -80,4 +80,20 @@ export function cxcRyDataTongji(url, parm) { // 员工信息统计
method: 'get',
data: parm
})
+}
+
+export function cxcRyDatAstatistics(parm) { // 员工分组统计
+ return https({
+ url: '/cxc_rlzy.zb/cxcRlzyZb/statistics',
+ method: 'get',
+ data: parm
+ })
+}
+
+export function cxcRyDatAstatisticsDetails(parm) { // 员工信息统计
+ return https({
+ url: '/cxc_rlzy.zb/cxcRlzyZb/details',
+ method: 'get',
+ data: parm
+ })
}
\ No newline at end of file
diff --git a/pages.json b/pages.json
index 52fd167..571274f 100644
--- a/pages.json
+++ b/pages.json
@@ -233,6 +233,14 @@
"navigationBarTitleText": "人员年龄分组统计信息",
"navigationBarTextStyle": "white"
+ }
+ },
+ {
+ "path": "pages/views/renliziyuan/renyuanxinxi/qttongji",
+ "style": {
+ "navigationBarTitleText": "其他统计信息",
+ "navigationBarTextStyle": "white"
+
}
}
],
diff --git a/pages/views/renliziyuan/renyuanxinxi/index.vue b/pages/views/renliziyuan/renyuanxinxi/index.vue
index 7a820b5..782e15d 100644
--- a/pages/views/renliziyuan/renyuanxinxi/index.vue
+++ b/pages/views/renliziyuan/renyuanxinxi/index.vue
@@ -8,10 +8,13 @@
-
+
+
+
+
+
-
@@ -29,6 +32,12 @@
url: "/pages/views/renliziyuan/renyuanxinxi/tongji"
})
}
+
+ function toQtTongji() {
+ uni.navigateTo({
+ url: "/pages/views/renliziyuan/renyuanxinxi/qttongji"
+ })
+ }
\ No newline at end of file
diff --git a/uni_modules/lime-shared/addUnit/index.ts b/uni_modules/lime-shared/addUnit/index.ts
index 25bc2b1..78476c9 100644
--- a/uni_modules/lime-shared/addUnit/index.ts
+++ b/uni_modules/lime-shared/addUnit/index.ts
@@ -7,7 +7,7 @@ import {isDef} from '../isDef'
* @returns 添加了单位的值,如果值为 null 则返回 null
*/
-// #ifndef APP-IOS || APP-ANDROID
+// #ifndef UNI-APP-X && APP
export function addUnit(value?: string | number): string | null {
if (!isDef(value)) {
return null;
@@ -19,7 +19,7 @@ export function addUnit(value?: string | number): string | null {
// #endif
-// #ifdef APP-IOS || APP-ANDROID
+// #ifdef UNI-APP-X && APP
function addUnit(value: string): string
function addUnit(value: number): string
function addUnit(value: any|null): string|null {
diff --git a/uni_modules/lime-shared/animation/ease.ts b/uni_modules/lime-shared/animation/ease.ts
index 9358c6d..0af156e 100644
--- a/uni_modules/lime-shared/animation/ease.ts
+++ b/uni_modules/lime-shared/animation/ease.ts
@@ -1,2 +1,3 @@
import {cubicBezier} from './bezier';
-export let ease = cubicBezier(0.25, 0.1, 0.25, 1);
\ No newline at end of file
+export let ease = cubicBezier(0.25, 0.1, 0.25, 1);
+export let linear = cubicBezier(0,0,1,1);
\ No newline at end of file
diff --git a/uni_modules/lime-shared/animation/index.ts b/uni_modules/lime-shared/animation/index.ts
index 5665983..5979064 100644
--- a/uni_modules/lime-shared/animation/index.ts
+++ b/uni_modules/lime-shared/animation/index.ts
@@ -1,10 +1,10 @@
// @ts-nocheck
-// #ifdef APP-IOS || APP-ANDROID
+// #ifdef UNI-APP-X && APP
export * from './uvue.uts'
// #endif
-// #ifndef APP-IOS || APP-ANDROID
+// #ifndef UNI-APP-X && APP
export * from './vue.ts'
// #endif
diff --git a/uni_modules/lime-shared/animation/useTransition.ts b/uni_modules/lime-shared/animation/useTransition.ts
index 818e591..b9502c2 100644
--- a/uni_modules/lime-shared/animation/useTransition.ts
+++ b/uni_modules/lime-shared/animation/useTransition.ts
@@ -1,14 +1,14 @@
// @ts-nocheck
-import { ComponentPublicInstance } from 'vue'
-import { ease } from './ease';
+import type { ComponentPublicInstance } from 'vue'
+import { ease, linear } from './ease';
import { Timeline, Animation } from './';
export type UseTransitionOptions = {
duration ?: number
immediate ?: boolean
context ?: ComponentPublicInstance
}
-// #ifndef APP-IOS || APP-ANDROID
-import { ref, watch, Ref } from '@/uni_modules/lime-shared/vue'
+// #ifndef UNI-APP-X && APP
+import { ref, watch, type Ref } from '@/uni_modules/lime-shared/vue'
export function useTransition(percent : Ref|(() => number), options : UseTransitionOptions) : Ref {
const current = ref(0)
@@ -47,7 +47,7 @@ export function useTransition(percent : Ref|(() => number), options : Us
// #endif
-// #ifdef APP-IOS || APP-ANDROID
+// #ifdef UNI-APP-X && APP
type UseTransitionReturnType = Ref
export function useTransition(source : any, options : UseTransitionOptions) : UseTransitionReturnType {
const outputRef : Ref = ref(0)
@@ -69,7 +69,7 @@ export function useTransition(source : any, options : UseTransitionOptions) : Us
0,
ease,
nowValue => {
- outputRef.value = nowValue //nowValue < 0.0001 ? 0 : Math.abs(v - nowValue) < 0.00001 ? v : nowValue;
+ outputRef.value = nowValue
clearTimeout(timer)
if(outputRef.value == v){
timer = setTimeout(()=>{
@@ -78,14 +78,17 @@ export function useTransition(source : any, options : UseTransitionOptions) : Us
}, duration)
}
}
- ), null
+ ),
+ null
);
}
if (context != null && typeof source == 'string') {
context.$watch(source, watchFunc, { immediate } as WatchOptions)
- } else {
- watch(source, watchFunc, { immediate } as WatchOptions)
+ } else if(typeof source == 'function'){
+ watch(source, watchFunc, { immediate })
+ } else if(source instanceof Ref){
+ watch(source as Ref, watchFunc, { immediate })
}
const stop = ()=>{
diff --git a/uni_modules/lime-shared/animation/uvue.uts b/uni_modules/lime-shared/animation/uvue.uts
index 9a10db0..37e2bc9 100644
--- a/uni_modules/lime-shared/animation/uvue.uts
+++ b/uni_modules/lime-shared/animation/uvue.uts
@@ -1,3 +1,4 @@
+import { raf, cancelRaf} from '../raf'
// @ts-nocheck
export class Timeline {
state : string
@@ -13,7 +14,7 @@ export class Timeline {
this.state = 'Initiated';
}
start() {
- if (!(this.state === 'Initiated')) return;
+ if (!(this.state == 'Initiated')) return;
this.state = 'Started';
let startTime = Date.now();
@@ -43,20 +44,26 @@ export class Timeline {
if (animation == null) return
this.animations.delete(animation);
}
- clearTimeout(this.tickHandler);
+ // cancelAnimationFrame(this.tickHandler);
if (this.state != 'Started') return
- this.tickHandler = setTimeout(() => {
+
+ this.tickHandler = raf(()=>{
this.tick!()
- }, 1000 / 60)
- // this.tickHandlers.push(this.tickHandler)
+ })
+
+ this.tickHandlers.push(this.tickHandler)
}
- this.tick!()
+ if(this.tick != null) {
+ this.tick!()
+ }
+
}
pause() {
if (!(this.state === 'Started')) return;
this.state = 'Paused';
this.pauseStart = Date.now();
- clearTimeout(this.tickHandler);
+ cancelRaf(this.tickHandler);
+ // cancelRaf(this.tickHandler);
}
resume() {
if (!(this.state === 'Paused')) return;
diff --git a/uni_modules/lime-shared/arrayBufferToFile/index.ts b/uni_modules/lime-shared/arrayBufferToFile/index.ts
index fd67048..49ee530 100644
--- a/uni_modules/lime-shared/arrayBufferToFile/index.ts
+++ b/uni_modules/lime-shared/arrayBufferToFile/index.ts
@@ -1,10 +1,8 @@
// @ts-nocheck
-// #ifndef APP-IOS || APP-ANDROID
+// #ifndef UNI-APP-X && APP
export * from './vue.ts'
// #endif
-// #ifdef UNI-APP-X
-// #ifdef APP-IOS || APP-ANDROID
+// #ifdef UNI-APP-X && APP
export * from './uvue.uts'
-// #endif
// #endif
\ No newline at end of file
diff --git a/uni_modules/lime-shared/base64ToPath/index.ts b/uni_modules/lime-shared/base64ToPath/index.ts
index 28a3bf5..af9a9d2 100644
--- a/uni_modules/lime-shared/base64ToPath/index.ts
+++ b/uni_modules/lime-shared/base64ToPath/index.ts
@@ -1,9 +1,9 @@
// @ts-nocheck
-// #ifndef APP-IOS || APP-ANDROID
+// #ifndef UNI-APP-X && APP
export * from './vue.ts'
// #endif
-// #ifdef APP-IOS || APP-ANDROID
+// #ifdef UNI-APP-X && APP
export * from './uvue.uts'
// #endif
diff --git a/uni_modules/lime-shared/canIUseCanvas2d/index.ts b/uni_modules/lime-shared/canIUseCanvas2d/index.ts
index 95211d1..be5623a 100644
--- a/uni_modules/lime-shared/canIUseCanvas2d/index.ts
+++ b/uni_modules/lime-shared/canIUseCanvas2d/index.ts
@@ -1,6 +1,6 @@
// @ts-nocheck
-// #ifndef APP-IOS || APP-ANDROID
+// #ifndef UNI-APP-X && APP
// #ifdef MP-ALIPAY
interface My {
@@ -57,11 +57,11 @@ export function canIUseCanvas2d(): boolean {
// #ifdef MP-TOUTIAO
return gte('1.78.0');
// #endif
+ // #ifdef UNI-APP-X && WEB || UNI-APP-X && APP
+ return true;
+ // #endif
// #ifndef MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO
return false
// #endif
- // #ifdef APP-IOS || APP-ANDROID || APP-NVUE || APP-VUE
- return false;
- // #endif
}
diff --git a/uni_modules/lime-shared/changelog.md b/uni_modules/lime-shared/changelog.md
index 9b9b7dc..a5a6125 100644
--- a/uni_modules/lime-shared/changelog.md
+++ b/uni_modules/lime-shared/changelog.md
@@ -1,3 +1,26 @@
+
+## 0.2.7(2025-01-17)
+- fix: 针对canvas 平台判断优化
+## 0.2.6(2025-01-09)
+- feat: 增加`areaData`中国省市区数据
+## 0.2.5(2025-01-07)
+- fix: animation在app上类型问题
+## 0.2.4(2025-01-04)
+- feat: getRect类型问题
+## 0.2.3(2025-01-01)
+- chore: unitConvert使用uni.rpx2px
+## 0.2.2(2024-12-11)
+- chore: 动画使用`requestAnimationFrame`
+## 0.2.1(2024-11-20)
+- feat: 增加`characterLimit`
+## 0.2.0(2024-11-14)
+- fix: vue2的类型问题
+## 0.1.9(2024-11-14)
+- feat: 增加`shuffle`
+## 0.1.8(2024-10-08)
+- fix: vue2 条件编译 // #ifdef APP-IOS || APP-ANDROID 会生效
+## 0.1.7(2024-09-23)
+- fix: raf 类型跟随版本变更
## 0.1.6(2024-07-24)
- fix: vue2 app ts需要明确的后缀,所有补全
- chore: 减少依赖
diff --git a/uni_modules/lime-shared/cloneDeep/index.ts b/uni_modules/lime-shared/cloneDeep/index.ts
index 03f85cd..3428c49 100644
--- a/uni_modules/lime-shared/cloneDeep/index.ts
+++ b/uni_modules/lime-shared/cloneDeep/index.ts
@@ -1,10 +1,10 @@
// @ts-nocheck
-// #ifdef APP-IOS || APP-ANDROID
+// #ifdef UNI-APP-X && APP
export * from './uvue.ts'
// #endif
-// #ifndef APP-IOS || APP-ANDROID
+// #ifndef UNI-APP-X && APP
export * from './vue.ts'
// #endif
\ No newline at end of file
diff --git a/uni_modules/lime-shared/components/lime-shared/lime-shared.vue b/uni_modules/lime-shared/components/lime-shared/lime-shared.vue
index 284e8f0..e2d7fe2 100644
--- a/uni_modules/lime-shared/components/lime-shared/lime-shared.vue
+++ b/uni_modules/lime-shared/components/lime-shared/lime-shared.vue
@@ -15,6 +15,9 @@
import { debounce } from '@/uni_modules/lime-shared/debounce'
import { fillZero } from '@/uni_modules/lime-shared/fillZero'
import { floatAdd } from '@/uni_modules/lime-shared/floatAdd'
+ import { floatMul } from '@/uni_modules/lime-shared/floatMul'
+ import { floatDiv } from '@/uni_modules/lime-shared/floatDiv'
+ import { floatSub } from '@/uni_modules/lime-shared/floatSub'
import { getClassStr } from '@/uni_modules/lime-shared/getClassStr'
import { getCurrentPage } from '@/uni_modules/lime-shared/getCurrentPage'
import { getStyleStr } from '@/uni_modules/lime-shared/getStyleStr'
@@ -40,91 +43,102 @@
import { toNumber } from '@/uni_modules/lime-shared/toNumber'
import { unitConvert } from '@/uni_modules/lime-shared/unitConvert'
import { getCurrentInstance } from '@/uni_modules/lime-shared/vue'
+ import { capitalizedAmount } from '@/uni_modules/lime-shared/capitalizedAmount'
// #ifdef VUE2
type UTSJSONObject = any
// #endif
const context = getCurrentInstance()
- getRect('#shared', context!).then(res =>{
- console.log('res', res.bottom)
- })
- getAllRect('#shared', context).then(res =>{
- console.log('res', res)
- })
+ // getRect('#shared', context!).then(res =>{
+ // console.log('res', res.bottom)
+ // })
+ // getAllRect('#shared', context).then(res =>{
+ // console.log('res', res)
+ // })
- console.log('camelCase::', camelCase("hello world"));
- console.log('camelCase::', camelCase("my_name_is_john", true));
- console.log('canIUseCanvas2d::', canIUseCanvas2d());
- console.log('clamp::', clamp(5 ,0, 10));
- console.log('cloneDeep::', cloneDeep({a:5}));
- console.log('closest::', closest([1, 3, 5, 7, 9], 6));
+ // console.log('camelCase::', camelCase("hello world"));
+ // console.log('camelCase::', camelCase("my_name_is_john", true));
+ // console.log('canIUseCanvas2d::', canIUseCanvas2d());
+ // console.log('clamp::', clamp(5 ,0, 10));
+ // console.log('cloneDeep::', cloneDeep({a:5}));
+ // console.log('closest::', closest([1, 3, 5, 7, 9], 6));
- const saveData = (data: any) => {
- // 模拟保存数据的操作
- console.log(`Saving data: ${data}`);
- }
+ // const saveData = (data: any) => {
+ // // 模拟保存数据的操作
+ // console.log(`Saving data: ${data}`);
+ // }
- const debouncedSaveData = debounce(saveData, 500);
- debouncedSaveData('Data 1');
- debouncedSaveData('Data 2');
+ // const debouncedSaveData = debounce(saveData, 500);
+ // debouncedSaveData('Data 1');
+ // debouncedSaveData('Data 2');
- console.log('fillZero', fillZero(1))
- console.log('floatAdd', floatAdd(0.1, 0.2))
- console.log('getClassStr', getClassStr({hover: true}))
- console.log('getStyleStr', getStyleStr({ color: 'red', fontSize: '16px', backgroundColor: '', border: null }))
- console.log('hasOwn', hasOwn({a: true}, 'key'))
- console.log('isBase64::', isBase64("SGVsbG8sIFdvcmxkIQ=="));
- console.log('isBrowser::', isBrowser);
- console.log('isDef::', isDef('6'));
- console.log('isEmpty::', isEmpty({a: true}));
+ // console.log('fillZero', fillZero(1))
+ // console.log('floatAdd', floatAdd(0.1, 0.2), floatAdd(1.05, 0.05), floatAdd(0.1, 0.7), floatAdd(0.0001, 0.0002), floatAdd(123.456 , 789.012))
+ // console.log('floatMul', floatMul(0.1, 0.02), floatMul(1.0255, 100))
+ // console.log('floatDiv', floatDiv(10.44, 100), floatDiv(1.0255, 100), floatDiv(5.419909340994699, 0.2))
+ // console.log('floatSub', floatSub(0.4, 0.1), floatSub(1.0255, 100))
+ const now = () : number => System.nanoTime() / 1_000_000.0
+ console.log('capitalizedAmount', capitalizedAmount(0.4))
+ console.log('capitalizedAmount', capitalizedAmount(100))
+ console.log('capitalizedAmount', capitalizedAmount(100000000))
+ console.log('capitalizedAmount', capitalizedAmount('2023.04'))
+ console.log('capitalizedAmount', capitalizedAmount(-1024))
+ console.log('now', now(), Date.now())
+ // console.log('getClassStr', getClassStr({hover: true}))
+ // console.log('getStyleStr', getStyleStr({ color: 'red', fontSize: '16px', backgroundColor: '', border: null }))
+ // console.log('hasOwn', hasOwn({a: true}, 'key'))
+ // console.log('isBase64::', isBase64("SGVsbG8sIFdvcmxkIQ=="));
+ // console.log('isBrowser::', isBrowser);
+ // console.log('isDef::', isDef('6'));
+ // console.log('isEmpty::', isEmpty({a: true}));
- const b = () =>{}
- console.log('isFunction::', isFunction(b));
- console.log('isNumber::', isNumber('6'));
- console.log('isNumeric::', isNumeric('6'));
- console.log('isObject::', isObject({}));
+ // const b = () =>{}
+ // console.log('isFunction::', isFunction(b));
+ // console.log('isNumber::', isNumber('6'));
+ // console.log('isNumeric::', isNumeric('6'));
+ // console.log('isObject::', isObject({}));
- const promise = ():Promise => {
- return new Promise((resolve) => {
- resolve(true)
- })
- }
- const a = promise()
- console.log('isPromise::', isPromise(a));
- console.log('isString::', isString('null'));
- console.log('kebabCase::', kebabCase('my love'));
- console.log('raf::', raf(()=>{
- console.log('raf:::1')
- }));
- console.log('doubleRaf::', doubleRaf(()=>{
- console.log('doubleRaf:::1')
- }));
- console.log('random', random(0, 10))
- console.log('random', random(0, 1, 2))
- console.log('range', range(0, 10, 2))
- console.log('sleep', sleep(300).then(res => {
- console.log('log')
- }))
+ // const promise = ():Promise => {
+ // return new Promise((resolve) => {
+ // resolve(true)
+ // })
+ // }
+ // const a = promise()
+ // console.log('isPromise::', isPromise(a));
+ // console.log('isString::', isString('null'));
+ // console.log('kebabCase::', kebabCase('my love'));
+ // console.log('raf::', raf(()=>{
+ // console.log('raf:::1')
+ // }));
+ // console.log('doubleRaf::', doubleRaf(()=>{
+ // console.log('doubleRaf:::1')
+ // }));
+ // console.log('random', random(0, 10))
+ // console.log('random', random(0, 1, 2))
+ // console.log('range', range(0, 10, 2))
+ // console.log('sleep', sleep(300).then(res => {
+ // console.log('log')
+ // }))
- const handleScroll = (a: string) => {
- console.log("Scroll event handled!", a);
- }
+ // const handleScroll = (a: string) => {
+ // console.log("Scroll event handled!", a);
+ // }
- // // 使用节流函数对 handleScroll 进行节流,间隔时间为 500 毫秒
- const throttledScroll = throttle(handleScroll, 500);
- throttledScroll('5');
- const page = getCurrentPage()
- console.log('getCurrentPage::', page)
+ // // // 使用节流函数对 handleScroll 进行节流,间隔时间为 500 毫秒
+ // const throttledScroll = throttle(handleScroll, 500);
+ // throttledScroll('5');
+ // const page = getCurrentPage()
+ // console.log('getCurrentPage::', page)
- console.log('toArray', toArray(5))
- console.log('toBoolean', toBoolean(5))
- console.log('toNumber', toNumber('5'))
- console.log('unitConvert', unitConvert('5'))
+ // console.log('toArray', toArray(5))
+ // console.log('toBoolean', toBoolean(5))
+ // console.log('toNumber', toNumber('5'))
+ // console.log('unitConvert', unitConvert('5'))
// uni.getImageInfo({
// src: '/static/logo.png',
@@ -132,6 +146,9 @@
// console.log('res', res)
// }
// })
+ export default {
+
+ }
diff --git a/pages/views/renliziyuan/renyuanxinxi/qttongji - 副本.vue b/pages/views/renliziyuan/renyuanxinxi/qttongji - 副本.vue
deleted file mode 100644
index 625676a..0000000
--- a/pages/views/renliziyuan/renyuanxinxi/qttongji - 副本.vue
+++ /dev/null
@@ -1,730 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 选择字段: {{ selectedFieldLabel }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- 序号
-
-
- 姓名
-
-
- 性别
-
-
- 年龄
-
-
- 操作
-
-
-
-
-
-
-
-
- {{ index + 1 }}
-
-
-
-
- {{ item.xm }}
-
-
-
-
- {{ item.xb_dictText }}
-
-
-
-
- {{ item.nl }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/views/renliziyuan/renyuanxinxi/qttongji.vue b/pages/views/renliziyuan/renyuanxinxi/qttongji.vue
index 9a265bf..0948c74 100644
--- a/pages/views/renliziyuan/renyuanxinxi/qttongji.vue
+++ b/pages/views/renliziyuan/renyuanxinxi/qttongji.vue
@@ -2,19 +2,17 @@
-
-
-
-
+
+
+
-
-
- 选择字段: {{ selectedFieldLabel }}
-
+
+
+
@@ -87,15 +85,15 @@ const bottomHeight = ref(0);
const chart = ref(null);
const fieldList = ref([
{
- label: '性别',
+ text: '性别',
value: 'xb'
},
{
- label: '年龄',
+ text: '年龄',
value: 'nl'
},
{
- label: '学历',
+ text: '学历',
value: 'rylb1'
}
]); // 字段列表
@@ -103,10 +101,10 @@ const selectedOrgCode = ref(''); // 当前选择的单位 orgCode
const selectedOrgCodeLabel = ref('请选择单位'); // 当前选择的单位名称
const selectedField = ref(''); // 当前选择的字段
const selectedFieldLabel = ref('请选择字段'); // 当前选择的字段名称
-const orgCodeGroupData = ref([]); //按照orgcode进行分组的数据
+const orgCodeGroupData = ref([]); //按照orgcode进行分组的数据 含劳动合同号
const chartData = ref({}); // 图表数据
const personnelList = ref([]); // 人员列表 initChart
-
+const fieldValues = ref([]);
const chartOption = ref({});
function detail(record) {
@@ -153,91 +151,209 @@ const initChart = () => {
};
// 更新图表
-const updateChart = () => {
+const updateChart = (tempchartData) => {
// 初始化图表
setTimeout(async () => {
if (!chart.value) return;
const myChart = await chart.value.init(echarts);
- chartOption.value = transformDataForEcharts(chartData.value, selectedOrgCode.value);
+ console.log(tempchartData);
+ let temp = JSON.parse(JSON.stringify(tempchartData[0].children));
+ let xData = [];
+ let seriesData = [];
+ console.log(1, temp);
+ //当前机构下的数据 transformDataForEcharts
+
+ temp.forEach((item) => {
+ xData.push(item.name);
+ });
+
+ for (let i = 0; i < fieldValues.value.length; i++) {
+ let tempData = [];
+ temp.forEach((item) => {
+ if (item.data[i]) {
+ tempData.push(item.data[i]);
+ } else {
+ tempData.push(0);
+ }
+ });
+ seriesData.push({ name: fieldValues.value[i], type: 'bar', data: tempData });
+ }
+
+ console.log(xData, seriesData, fieldValues.value);
myChart.setOption({
xAxis: {
type: 'category',
- data: chartOption.value.categories.map((code) => `${code}${chartOption.value.children ? ' ▶' : ''}`)
+ data: xData
},
yAxis: { type: 'value' },
- series: chartOption.value.series,
+ series: seriesData,
tooltip: { trigger: 'axis' },
- legend: { data: chartOption.value.series.map((s) => s.name) }
+ legend: { data: fieldValues.value }
});
+
// 点击钻取事件
myChart.on('click', (params) => {
- const clickedCode = params.name.split(' ')[0];
- const nextData = transformDataForEcharts(originalData, clickedCode);
-
- if (nextData.categories.length > 0) {
- historyStack.push(currentLevel);
- currentLevel = clickedCode;
- renderChart(nextData);
- } else if (nextData.children) {
- historyStack.push(currentLevel);
- currentLevel = clickedCode;
- chartData = transformDataForEcharts(originalData, currentLevel);
- renderChart(chartData);
- } else {
- console.log('已是最末级节点');
- }
+ // console.log(params.name, params.seriesIndex, params.dataIndex);
+ console.log(orgCodeGroupData.value);
+ let updateData = findNodeByOrgCode(orgCodeGroupData.value, params.name);
+ console.log(updateData);
+ // updateChart(updateData);
});
}, 300);
};
+//根据一个键值查找数据
+/**
+ * 从树状数据中根据 orgCode 获取节点及其子节点数据
+ * @param {Array} treeData 树状数据
+ * @param {string} targetOrgCode 目标 orgCode
+ * @returns {Object|null} 匹配的节点及其子节点数据,未找到返回 null
+ */
+function findNodeByOrgCode(treeData, targetOrgCode) {
+ // console.log(treeData, targetOrgCode);
+ for (const node of treeData) {
+ // 如果当前节点匹配,直接返回该节点及其子节点
+ if (node.name === targetOrgCode) {
+ return node;
+ }
+ // 递归检查子节点
+ if (node.children && node.children.length > 0) {
+ const found = findNodeByOrgCode(node.children, targetOrgCode);
+ if (found) return found;
+ }
+ }
+ return null;
+}
+
+//获取所有的fieldValue
+function collectUniqueKeyValues(tree, key) {
+ const uniqueValues = new Set(); // 使用Set来自动处理唯一性
+
+ function traverse(node) {
+ if (node[key] !== undefined) {
+ uniqueValues.add(node[key]);
+ }
+ if (node.children && Array.isArray(node.children)) {
+ node.children.forEach((child) => traverse(child));
+ }
+ }
+
+ tree.forEach((node) => traverse(node)); // 假设tree是一个数组
+
+ return Array.from(uniqueValues); // 将Set转换为数组
+}
+
+// 示例用法
+// const result = findNodeByOrgCode(echartData, "A01A01A01A01");
+// console.log(result);
/**
* 转换数据为支持钻取的ECharts格式
* @param {Array} data 原始数据
- * @param {string} currentOrgCode 当前组织编码
- * @returns {Object} 包含当前层级数据和子节点信息的对象
+ * @param {string} selectOrgCode 当前选择的组织编码
+ * @returns {Object} 包含当前层级数据和子节点信息的对象 符合echart的格式
*/
-function transformDataForEcharts(data, currentOrgCode = '') {
- // 计算当前层级的长度(每级+3)
- const currentLevel = currentOrgCode.length;
- const nextLevel = currentLevel + 3;
- console.log(currentLevel, nextLevel, currentOrgCode, data);
- // 过滤当前层级数据
- const currentLevelData = data.filter((item) => item.orgCode.length === currentLevel && (currentLevel === 0 || item.orgCode === currentOrgCode));
- console.log(1);
- console.log(currentLevelData);
- // 过滤直接子节点(严格前缀匹配)
- const children = data
- .filter(
- (item) => item.orgCode.startsWith(currentOrgCode) && item.orgCode.length === nextLevel && (currentLevel === 0 || item.orgCode.slice(0, currentLevel) === currentOrgCode)
- )
- .map((item) => ({
- orgCode: item.orgCode,
- hasChildren: data.some((d) => d.orgCode.startsWith(item.orgCode) && d.orgCode.length === nextLevel + 3)
- }));
- console.log(2, children);
- // 按fieldValue分组统计
- const fieldGroups = currentLevelData.reduce((acc, curr) => {
- const key = curr.fieldValue;
- if (!acc[key]) {
- acc[key] = {
- name: key,
- data: []
- };
+//-----------------------------------------------------------------------------------------
+function transformData(selectOrgCode, data) {
+ const nodes = new Map();
+ //获取所有的fieldValue 用于图例和钻取和data[]中的数据顺序保持一致 动态建立fieldValue的数据
+ fieldValues.value = collectUniqueKeyValues(data, 'fieldValue');
+ // 获取orgCode的所有层级
+ function getHierarchy(orgCode) {
+ const hierarchy = [];
+ for (let i = selectOrgCode.length; i <= orgCode.length; i += 3) {
+ hierarchy.push(orgCode.substring(0, i));
}
- acc[key].data.push(curr.number);
- return acc;
- }, {});
+ // console.log('hierarchy', hierarchy);
+ return hierarchy;
+ }
+ // 获取父级orgCode
+ function getParentCode(code) {
+ if (code.length <= 3) return null;
+ return code.substring(0, code.length - 3);
+ }
+ // 动态赋值series的数据长度
+ let tempArrayValue = new Array(fieldValues.value.length).fill(0);
+ // 创建所有节点并建立父子关系
+ data.forEach((entry) => {
+ const hierarchy = getHierarchy(entry.orgCode);
+ hierarchy.forEach((code) => {
+ if (!nodes.has(code)) {
+ nodes.set(code, {
+ orgCode: code,
+ type: 'bar',
+ data: JSON.parse(JSON.stringify(tempArrayValue)), // 初始化data为[0, 0] 动态
+ children: []
+ });
+ }
+ });
- return {
- categories: currentLevelData.map((d) => d.orgCode),
- series: Object.values(fieldGroups),
- children: children.length > 0 ? children : null
- };
+ // console.log('fieldValues', fieldValues.value, fieldValues.value.length, hierarchy);
+
+ // 更新当前节点的data
+ const node = nodes.get(entry.orgCode);
+ const fieldValue = parseInt(entry.fieldValue, 10);
+
+ for (let i = 0; i < fieldValues.value.length; i++) {
+ if (fieldValue === parseInt(fieldValues.value[i], 10)) {
+ // console.log(555, i, fieldValue, fieldValues.value[i], entry.number);
+ node.data[i] += entry.number;
+ }
+ }
+
+ // console.log(11, node);
+
+ // 建立父子关系
+ for (let i = 0; i < hierarchy.length - 1; i++) {
+ const parentCode = hierarchy[i];
+ const childCode = hierarchy[i + 1];
+ const parentNode = nodes.get(parentCode);
+ const childNode = nodes.get(childCode);
+ if (!parentNode.children.some((c) => c.orgCode === childCode)) {
+ parentNode.children.push(childNode);
+ }
+ }
+ });
+
+ // 计算非叶子节点的data(子节点之和)
+ function computeData(node) {
+ if (node.children.length === 0) return;
+ node.data = JSON.parse(JSON.stringify(tempArrayValue));
+ node.children.forEach((child) => {
+ computeData(child);
+ for (let i = 0; i < fieldValues.value.length; i++) {
+ // console.log(666, i, node.data[i], child.data[i]);
+ node.data[i] += child.data[i];
+ }
+ });
+ }
+
+ // 获取所有根节点(没有父节点或父节点不存在)
+ const rootNodes = [];
+ nodes.forEach((node, code) => {
+ const parentCode = getParentCode(code);
+ // console.log(parentCode);
+ if (!parentCode || !nodes.has(parentCode)) {
+ rootNodes.push(node);
+ }
+ });
+
+ // 递归计算每个根节点的data
+ rootNodes.forEach((root) => computeData(root));
+ // console.log('rootNodes', rootNodes);
+ // 转换为目标格式
+ function formatTree(node) {
+ return {
+ name: node.orgCode,
+ type: 'bar',
+ data: node.data,
+ children: node.children.map((child) => formatTree(child))
+ };
+ }
+
+ return rootNodes.map((root) => formatTree(root));
}
-// 使用示例
-// let currentLevel = 'A01A01'; // 初始层级
-// let chartData = transformDataForEcharts(originalData, currentLevel);
+//-----------------------------------------------------------------------------------------
//根据 orgCode 的分级格式,递归地汇总本级及其所有下级的数据,并将下级数据放在本级的 children 属性中。 deepseek
@@ -253,12 +369,14 @@ const groupByOrgCode = (orgCode, data) => {
// 按照 fieldValue 分组
const groupedByFieldValue = {};
filteredData.forEach((item) => {
+ // console.log(item.orgCode, 11, groupedByFieldValue[item.fieldValue]);
if (!groupedByFieldValue[item.fieldValue]) {
groupedByFieldValue[item.fieldValue] = {
number: 0,
ldhth: []
};
}
+ // console.log(item.orgCode, 22, groupedByFieldValue[item.fieldValue]);
groupedByFieldValue[item.fieldValue].number += item.number;
groupedByFieldValue[item.fieldValue].ldhth.push(...item.ldhth.split(','));
});
@@ -274,6 +392,8 @@ const groupByOrgCode = (orgCode, data) => {
children: []
};
+ console.log('本级', result);
+
// 获取所有下一级的 orgCode
const nextLevelOrgCodes = new Set();
filteredData.forEach((item) => {
@@ -291,11 +411,10 @@ const groupByOrgCode = (orgCode, data) => {
}
});
+ console.log('全部', result);
+
return result;
};
-
-//-----------------------------------------------------------------------------------------
-
// 获取统计数据 then
const fetchStatisticsData = async () => {
if (!selectedOrgCode.value || !selectedField.value) return;
@@ -304,11 +423,11 @@ const fetchStatisticsData = async () => {
orgCode: selectedOrgCode.value,
field: selectedField.value
});
- // console.log(res); //deepseek
+ // console.log(res); //deepseek
orgCodeGroupData.value = groupByOrgCode(selectedOrgCode.value, res);
- console.log(orgCodeGroupData.value);
- chartData.value = orgCodeGroupData.value.children;
- updateChart();
+ chartData.value = transformData(selectedOrgCode.value, res);
+ // console.log(chartData.value);
+ updateChart(chartData.value);
} catch (error) {
console.error('获取统计数据失败:', error);
}
@@ -336,10 +455,21 @@ const onOrgCodeChange = (e, data) => {
};
const onFieldChange = (e) => {
- const index = e.detail.value;
- selectedField.value = fieldList.value[index].value;
- selectedFieldLabel.value = fieldList.value[index].label;
- fetchStatisticsData();
+ console.log(e);
+ try {
+ selectedField.value = e;
+ for (var index = 0; index < fieldList.length; index++) {
+ var element = array[index];
+ if (element.value === e) {
+ selectedFieldLabel.value = element.text;
+ }
+ }
+ console.log(selectedFieldLabel);
+ fetchStatisticsData();
+ } catch (error) {
+ //TODO handle the exception
+ console.log(error);
+ }
};
const onChartClick = (e) => {
@@ -349,90 +479,154 @@ const onChartClick = (e) => {
}
};
-