Merge remote-tracking branch 'remotes/origin/master'
# Conflicts: # env/.env.development # src/pages-process/components/DynamicLink.vue # src/pages.json # src/types/uni-pages.d.ts
This commit is contained in:
commit
c278e4618a
4
env/.env
vendored
4
env/.env
vendored
@ -2,8 +2,12 @@ VITE_APP_TITLE = '数智产销'
|
||||
VITE_APP_PORT = 9000
|
||||
|
||||
VITE_UNI_APPID = '__UNI__9F097F0'
|
||||
#测试APPID
|
||||
#VITE_UNI_APPID = '__UNI__1B02D50'
|
||||
VITE_WX_APPID = 'wx8e287639924edb51'
|
||||
|
||||
#发布版本号
|
||||
|
||||
# h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base
|
||||
VITE_APP_PUBLIC_BASE=/
|
||||
|
||||
|
10
env/.env.development
vendored
10
env/.env.development
vendored
@ -4,6 +4,14 @@ NODE_ENV = 'development'
|
||||
VITE_DELETE_CONSOLE = false
|
||||
# 是否开启sourcemap
|
||||
VITE_SHOW_SOURCEMAP = true
|
||||
VITE_SERVER_BASEURL = 'http://10.75.15.246:8080/jeecg-boot'
|
||||
# 是否启用读取配置文件 min
|
||||
#VITE_WEBAPP = 'D://opt//AppUpdateTest'
|
||||
VITE_WEBAPP = ''
|
||||
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://szcx.zyyt.sinopec.com/jeecg-boot'
|
||||
|
||||
|
||||
|
||||
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/wwapi'
|
||||
#VITE_SERVER_BASEURL = 'https://szcx.zyyt.sinopec.com/yjapi'
|
6
env/.env.production
vendored
6
env/.env.production
vendored
@ -4,4 +4,10 @@ NODE_ENV = 'development'
|
||||
VITE_DELETE_CONSOLE = true
|
||||
# 是否开启sourcemap
|
||||
VITE_SHOW_SOURCEMAP = false
|
||||
# 是否启用读取配置文件 min
|
||||
#VITE_WEBAPP = 'D://opt//AppUpdateTest'
|
||||
VITE_WEBAPP = ''
|
||||
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/yjapi'
|
||||
#VITE_SERVER_BASEURL = 'http://10.75.15.247:8080/jeecg-boot'
|
@ -18,7 +18,7 @@ export default defineManifestConfig({
|
||||
appid: VITE_UNI_APPID,
|
||||
description: '',
|
||||
versionName: '2.0.0',
|
||||
versionCode: '20250605',
|
||||
versionCode: '20250616',
|
||||
transformPx: false,
|
||||
locale: VITE_FALLBACK_LOCALE, // 'zh-Hans'
|
||||
/* 5+App特有相关 */
|
||||
@ -26,9 +26,20 @@ export default defineManifestConfig({
|
||||
usingComponents: true,
|
||||
nvueStyleCompiler: 'uni-app',
|
||||
compilerVersion: 3,
|
||||
android: {
|
||||
webView: {
|
||||
domStorageEnabled: true,
|
||||
databaseEnabled: true,
|
||||
allowFileAccess: true
|
||||
}
|
||||
},
|
||||
compatible: {
|
||||
ignoreVersion: true,
|
||||
},
|
||||
webview: {
|
||||
debug: true,
|
||||
crossDomain: true // 允许跨域通信
|
||||
},
|
||||
splashscreen: {
|
||||
alwaysShowBeforeRender: true,
|
||||
waiting: true,
|
||||
|
@ -134,9 +134,13 @@
|
||||
"@uni-helper/vite-plugin-uni-pages": "0.2.20",
|
||||
"@uni-helper/vite-plugin-uni-platform": "^0.0.4",
|
||||
"@unocss/preset-legacy-compat": "^0.59.4",
|
||||
"@vue/devtools-api": "^7.7.6",
|
||||
"@vue/devtools-kit": "^7.7.6",
|
||||
"@vue/devtools-shared": "^7.7.6",
|
||||
"@vue/runtime-core": "^3.4.21",
|
||||
"@vue/tsconfig": "^0.1.3",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"birpc": "^2.3.0",
|
||||
"commitlint": "^18.6.1",
|
||||
"czg": "^1.9.4",
|
||||
"eslint": "^8.57.1",
|
||||
@ -146,8 +150,10 @@
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"eslint-plugin-vue": "^9.32.0",
|
||||
"hookable": "^5.5.3",
|
||||
"mockjs": "^1.1.0",
|
||||
"openapi-ts-request": "^1.1.2",
|
||||
"perfect-debounce": "^1.0.0",
|
||||
"postcss": "^8.4.49",
|
||||
"postcss-html": "^1.7.0",
|
||||
"postcss-scss": "^4.0.9",
|
||||
|
@ -225,6 +225,15 @@ importers:
|
||||
'@unocss/preset-legacy-compat':
|
||||
specifier: ^0.59.4
|
||||
version: 0.59.4
|
||||
'@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
|
||||
'@vue/runtime-core':
|
||||
specifier: ^3.4.21
|
||||
version: 3.5.13
|
||||
@ -234,6 +243,9 @@ importers:
|
||||
autoprefixer:
|
||||
specifier: ^10.4.20
|
||||
version: 10.4.20(postcss@8.4.49)
|
||||
birpc:
|
||||
specifier: ^2.3.0
|
||||
version: 2.3.0
|
||||
commitlint:
|
||||
specifier: ^18.6.1
|
||||
version: 18.6.1(@types/node@20.17.9)(typescript@5.7.2)
|
||||
@ -261,12 +273,18 @@ importers:
|
||||
eslint-plugin-vue:
|
||||
specifier: ^9.32.0
|
||||
version: 9.32.0(eslint@8.57.1)
|
||||
hookable:
|
||||
specifier: ^5.5.3
|
||||
version: 5.5.3
|
||||
mockjs:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
openapi-ts-request:
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/node@20.17.9)(@vue/compiler-sfc@3.5.13)(chokidar@3.6.0)(typescript@5.7.2)
|
||||
perfect-debounce:
|
||||
specifier: ^1.0.0
|
||||
version: 1.0.0
|
||||
postcss:
|
||||
specifier: ^8.4.49
|
||||
version: 8.4.49
|
||||
@ -1234,14 +1252,12 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [gnu]
|
||||
|
||||
'@dcloudio/uts-linux-x64-musl@3.0.0-4030620241128001':
|
||||
resolution: {integrity: sha512-HbuOIYCe0KTzW42oqACQDmSuLWmiEG9zUE3rGpp5QP3MKpcB4wJ5BAOusCt3V02akyVv4/IGToktN8dc9N7+Eg==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@dcloudio/uts-win32-ia32-msvc@3.0.0-4030620241128001':
|
||||
resolution: {integrity: sha512-pgITm85ya64iJ19mixTUOiYVAyCJQ+V66L5Ue/cmME6CA2dU9DjTtPEP6DdSnoyq9JWcdbQLyVEQkxxtBSOyGA==}
|
||||
@ -1968,55 +1984,46 @@ packages:
|
||||
resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.28.0':
|
||||
resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@rollup/rollup-linux-arm64-gnu@4.28.0':
|
||||
resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-arm64-musl@4.28.0':
|
||||
resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.28.0':
|
||||
resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.28.0':
|
||||
resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.28.0':
|
||||
resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-x64-gnu@4.28.0':
|
||||
resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-x64-musl@4.28.0':
|
||||
resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@rollup/rollup-win32-arm64-msvc@4.28.0':
|
||||
resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==}
|
||||
|
31
src/App.vue
31
src/App.vue
@ -3,8 +3,8 @@
|
||||
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'
|
||||
import { beforEach } from '@/router/index'
|
||||
import { jurisdictionApi } from '@/api/system';
|
||||
import { useAppStore, useUpdateApp } from '@/store'
|
||||
import { getLocation } from '@/utils';
|
||||
import { useAppStore } from '@/store'
|
||||
import { getLocation, useUpdateApp } from '@/utils';
|
||||
export default {
|
||||
onLaunch: function (options) {
|
||||
// 检查更新
|
||||
@ -13,30 +13,49 @@
|
||||
getLocation()
|
||||
},
|
||||
onShow: function (options) {
|
||||
if (uni.getStorageSync('logintime') && uni.getStorageSync('logintime') + 1800000 <= Date.now()) { //登录半小时自动注销 需重新登陆
|
||||
//改造了一下,加了白名单验证
|
||||
//为了实现实流检定的证书验证页面
|
||||
//jiang 20250605
|
||||
// 定义白名单页面
|
||||
const publicPages = [
|
||||
'/pages/sljd/index'
|
||||
]
|
||||
|
||||
// 检查当前页面是否在白名单中
|
||||
const isPublicPage = publicPages.includes(`/${options.path}`)
|
||||
|
||||
// 非白名单页面才执行登录检查
|
||||
if (!isPublicPage) {
|
||||
if (uni.getStorageSync('logintime') && uni.getStorageSync('logintime') + 1800000 <= Date.now()) {
|
||||
uni.removeStorageSync('logintime')
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/login'
|
||||
})
|
||||
return
|
||||
}
|
||||
// 首次进入页面时路由拦截
|
||||
}
|
||||
|
||||
// 路由拦截(白名单页面跳过)
|
||||
setTimeout(() => {
|
||||
const currentPage = options.path
|
||||
if (!isPublicPage) {
|
||||
beforEach({ path: '/' }, { path: currentPage, fullPath: currentPage }, (data) => {
|
||||
if (data?.path) {
|
||||
uni.redirectTo({ url: data.path })
|
||||
}
|
||||
})
|
||||
}
|
||||
}, 100)
|
||||
|
||||
// 权限检查(非白名单页面执行)
|
||||
if (!isPublicPage) {
|
||||
jurisdictionApi("1827997127165677570").then((res : any) => {
|
||||
// 0正常 1灰化
|
||||
if (res.success) {
|
||||
const appStore = useAppStore()
|
||||
appStore.setIsGray(res.result.value) // 更新状态
|
||||
appStore.setIsGray(res.result.value)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
// 全局变量
|
||||
|
92
src/api/bpm/index.ts
Normal file
92
src/api/bpm/index.ts
Normal file
@ -0,0 +1,92 @@
|
||||
import { http } from '@/utils/http';
|
||||
|
||||
/*通过id查询公文数据*/
|
||||
export function queryDocumentByIdApi(id : string) {
|
||||
return http({
|
||||
url: '/cxcoagwfb/cxcOaGwfb/queryById',
|
||||
method: 'GET',
|
||||
data: { id }
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/*通过id查询干租车数据*/
|
||||
export function queryCarRentalByIdApi(id : string) {
|
||||
return http({
|
||||
url: '/CarRental/cxcCarRental/queryById',
|
||||
method: 'GET',
|
||||
data: { id }
|
||||
})
|
||||
}
|
||||
|
||||
/*通过id查询指标考核主表数据*/
|
||||
export function queryZbkhZbByIdApi(id : string) {
|
||||
return http({
|
||||
url: '/jxkh.zbkh/cxcJxkhZbkhZb/listById',
|
||||
method: 'GET',
|
||||
data: { id }
|
||||
})
|
||||
}
|
||||
|
||||
/*通过id查询指标考核子表数据*/
|
||||
export function queryZbkhFbByIdApi(data : object) {
|
||||
return http({
|
||||
url: '/jxkh.zbkh/cxcJxkhZbkhZb/listCxcJxkhZbkhDwkhByMainId',
|
||||
method: 'GET',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/*通过id查询指标考核自定义表头*/
|
||||
export function queryZbkhBtByIdApi(mainId : string) {
|
||||
return http({
|
||||
url: '/jxkh.dwkhbt/cxcJxkhZbkhDwkhBtZb/listByMainId',
|
||||
method: 'GET',
|
||||
data: { mainId }
|
||||
})
|
||||
}
|
||||
|
||||
/*通过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 }
|
||||
})
|
||||
}
|
26
src/api/bpm/sign.ts
Normal file
26
src/api/bpm/sign.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import { http } from '@/utils/http';
|
||||
|
||||
/*通过id查询数据*/
|
||||
export function checkSign(ldhth : string) {
|
||||
return http({
|
||||
url: '/cxcesign/cxcEsign/getUserCo',
|
||||
method: 'GET',
|
||||
data: { ldhth }
|
||||
})
|
||||
}
|
||||
|
||||
export function getCompleteNum(procInsId : string) {
|
||||
return http({
|
||||
url: '/cxcesign/cxcEsign/getCompleteNum',
|
||||
method: 'GET',
|
||||
data: { procInsId }
|
||||
})
|
||||
}
|
||||
|
||||
export function processHistoryList(processInstanceId : string) {
|
||||
return http({
|
||||
url: '/act/task/processHistoryList',
|
||||
method: 'GET',
|
||||
data: { processInstanceId }
|
||||
})
|
||||
}
|
@ -49,7 +49,7 @@ export function countByOrgApi(params : object) {
|
||||
})
|
||||
}
|
||||
|
||||
/*通过id查询请假数据*/
|
||||
/*通过id查询数据*/
|
||||
export function queryByIdApi(id : string) {
|
||||
return http({
|
||||
url: '/CxcQxj/cxcQxj/queryById',
|
||||
|
11
src/api/humanResource/clockin/index.ts
Normal file
11
src/api/humanResource/clockin/index.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { http } from '@/utils/http';
|
||||
|
||||
|
||||
/*新增打卡记录*/
|
||||
export function addApi(config : Object) {
|
||||
return http({
|
||||
url: '/cxc_rlzy.wbxm.wbdk/cxcRlzyWbdk/add',
|
||||
method: 'POST',
|
||||
data: config
|
||||
})
|
||||
}
|
10
src/api/integrated/unconventional.ts
Normal file
10
src/api/integrated/unconventional.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { http } from '@/utils/http';
|
||||
|
||||
// 健康数据提交API
|
||||
export function queryUnData(data : Object) {
|
||||
return http({
|
||||
url: '/cxcfcggzsq/cxcFcggzsq/queryByIdDict',
|
||||
method: 'get',
|
||||
data
|
||||
})
|
||||
}
|
@ -1,18 +1,17 @@
|
||||
import { http } from '@/utils/http';
|
||||
|
||||
export function getListApi(orgCode : string) {
|
||||
export function getListApi() {
|
||||
return http({
|
||||
url: '/sjgl.scnr/cxcSjSc/queryTreeData',
|
||||
method: 'GET',
|
||||
data: { orgCode }
|
||||
method: 'GET'
|
||||
})
|
||||
}
|
||||
|
||||
export function getJobDesIdByDepAndName(config : Object) {
|
||||
export function getJobDesIdByDepAndName(jobname : string) {
|
||||
return http({
|
||||
url: '/sjgl.tynr/cxcSjJobdescription/queryByNameDep',
|
||||
method: 'GET',
|
||||
data: config
|
||||
data: { jobname }
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -26,10 +26,13 @@ export function loginApi(config : LoginParams) {
|
||||
* @param
|
||||
* @returns
|
||||
*/
|
||||
export function upDateAppApi() {
|
||||
export function upDateAppApi(path : string) {
|
||||
return http({
|
||||
url: '/sys/common/upDateApp',
|
||||
method: 'GET'
|
||||
method: 'GET',
|
||||
data: {
|
||||
path
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
77
src/components/Esign/SinopecEsignPage.vue
Normal file
77
src/components/Esign/SinopecEsignPage.vue
Normal file
@ -0,0 +1,77 @@
|
||||
<!-- component标签可以变换组件 -->
|
||||
<template>
|
||||
<view>
|
||||
<view v-if="ifH5">
|
||||
<SinopecEsignPageH5 :valiData="props.valiData" :procInsId="props.procInsId" :path="props.path" ref="signH5" :fileName="props.fileName" @stampSuccess="getStampSuccess"></SinopecEsignPageH5>
|
||||
</view>
|
||||
<view v-else>
|
||||
<SinopecEsignPageAPP :valiData="props.valiData" :procInsId="props.procInsId" :path="props.path" ref="signAPP" :fileName="props.fileName" @stampSuccess="getStampSuccess"></SinopecEsignPageAPP>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
ref
|
||||
} from 'vue'
|
||||
import {
|
||||
onLoad,
|
||||
} from '@dcloudio/uni-app';
|
||||
import SinopecEsignPageH5 from '@/components/Esign/SinopecEsignPageH5.vue'
|
||||
import SinopecEsignPageAPP from '@/components/Esign/SinopecEsignPageAPP.vue'
|
||||
const emit = defineEmits(['stampSuccess'])
|
||||
const ifH5 = ref(null);
|
||||
const signH5 = ref(null);
|
||||
const signAPP = ref(null);
|
||||
|
||||
|
||||
const props = defineProps({
|
||||
fileName: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
valiData: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
procInsId: { //签章验证
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
path: {//签章验证
|
||||
type: String,
|
||||
default: ""
|
||||
}
|
||||
})
|
||||
|
||||
//判断是否h5 by 闵
|
||||
var ifH = false;
|
||||
|
||||
onLoad(() => {
|
||||
//#ifdef H5 || MP-WEIXIN
|
||||
ifH5.value = true;
|
||||
//#endif
|
||||
})
|
||||
|
||||
//获取印章成功事件,并将信号传给确认提交按钮。
|
||||
const getStampSuccess=(val)=> {
|
||||
emit('stampSuccess', val)
|
||||
}
|
||||
|
||||
const signValidator = ()=>{
|
||||
//这里进行电子签章验证
|
||||
if(ifH5.value){
|
||||
return signH5.value.signValidator();
|
||||
}else{
|
||||
return signAPP.value.signValidator()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
defineExpose({ //暴露方法
|
||||
signValidator
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
250
src/components/Esign/SinopecEsignPageAPP.vue
Normal file
250
src/components/Esign/SinopecEsignPageAPP.vue
Normal file
@ -0,0 +1,250 @@
|
||||
<!-- component标签可以变换组件 -->
|
||||
<template>
|
||||
<view>
|
||||
<view v-if="errorMsg" style="color: red;padding-left: 13px;">{{errorMsg}}</view>
|
||||
<iframe id="jingeIframe" style="width: 100%;height: 600px;border: none;" ref="iframe" title="金格云阅读"
|
||||
src="./static/CloudSign/viewer.html" :transmissionData="transmissionData"
|
||||
:change:transmissionData="renderjs.postMessageToIframe" @load="setConfig"></iframe>
|
||||
<wd-toast></wd-toast>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
getCompleteNum
|
||||
} from '@/api/bpm/sign'
|
||||
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
|
||||
import {
|
||||
onLoad,
|
||||
onShow,
|
||||
onReachBottom,
|
||||
onPullDownRefresh
|
||||
} from '@dcloudio/uni-app';
|
||||
import {
|
||||
useUserStore
|
||||
} from '@/store/user'
|
||||
import { checkSign } from '@/api/bpm/sign'
|
||||
import { useToast, useMessage } from 'wot-design-uni'
|
||||
|
||||
export default {
|
||||
name: 'SinopecEsignPageAPP',
|
||||
options: {
|
||||
styleIsolation: 'shared',
|
||||
},
|
||||
props: {
|
||||
fileName: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
valiData: {
|
||||
type: Object
|
||||
},
|
||||
procInsId: { //签章验证
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
path: {//签章验证
|
||||
type: String,
|
||||
default: ""
|
||||
}
|
||||
},
|
||||
emits: ['message'],
|
||||
setup(props, { emit }) {
|
||||
const toast = useToast()
|
||||
const store = useUserStore();
|
||||
const iframe = ref(null);
|
||||
const compName = ref('');
|
||||
const asyncComponent = ref(null);
|
||||
const sealArrayTemp = ref([]);
|
||||
const signNum = ref(0);
|
||||
const sign = ref(false);
|
||||
const ldhth = ref('');
|
||||
const username = ref('');
|
||||
const iframeWin = ref(null);
|
||||
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
|
||||
const filterArrNum = ref(0);
|
||||
const transmissionData = ref({});
|
||||
const errorMsg = ref('');
|
||||
|
||||
const setConfig = () => {
|
||||
transmissionData.value = {
|
||||
filename: props.fileName,
|
||||
apiUrl: baseUrl,
|
||||
userid: username.value,
|
||||
}
|
||||
console.log(transmissionData.value)
|
||||
}
|
||||
|
||||
const signValidator = async () => { //签章验证 by 闵
|
||||
errorMsg.value = '';
|
||||
let flag = false;
|
||||
if (props.path == 'unconventional/stamp') {
|
||||
if (props.valiData.flag) { //先判断数量验证
|
||||
if (props.valiData && props.valiData.flag) {//有flag需要正常验证
|
||||
let nowTime = new Date(props.valiData.time).getTime();
|
||||
let filterArr = []
|
||||
filterArr = sealArrayTemp.value.filter(item => {
|
||||
let sealTime = new Date(item.createTime).getTime();
|
||||
if (sealTime >= nowTime && item.userName == props.valiData.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
filterArrNum.value = filterArr.length;
|
||||
if (props.valiData.num <= filterArrNum.value) {
|
||||
return true;
|
||||
} else {
|
||||
errorMsg.value = "您需要签章(签字或盖章)" + props.valiData.num + "次,目前只签章了" + filterArrNum.value + "次。";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
//2024.3.22张祥瑞
|
||||
//如果签章路径是非常规盖章则走这里,验证机制为跳过签章个数验证,只要没签章则不能提交流程
|
||||
// let flag = false;
|
||||
if (sign.value) {
|
||||
return flag = true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||||
} else {
|
||||
return flag = false;
|
||||
}
|
||||
} else if (props.path == 'modules/gwjdspd/modules/CxcGwjdSpdFromByProcess') { //判断公务接待模块
|
||||
//2024.5.16张祥瑞
|
||||
//如果签章路径是非常规盖章则走这里,验证机制为跳过签章个数验证,只要没签章则不能提交流程
|
||||
// let flag = false;
|
||||
if (sign.value) {
|
||||
return flag = true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||||
} else {
|
||||
return flag = false;
|
||||
}
|
||||
} else {
|
||||
if (sign.value) {
|
||||
return true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||||
} else {
|
||||
// let flag = false;
|
||||
await getCompleteNum(props.procInsId).then(res => {
|
||||
console.log("res--------132------", res);
|
||||
// console.log("flag--132------",flag);
|
||||
if (res) {
|
||||
if (signNum.value >= (Number(res.result.nrOfCompletedInstances) + 1)) {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
console.log("flag--142------", flag);
|
||||
return flag;
|
||||
}
|
||||
|
||||
const stampingCompleted = (data) => {
|
||||
console.log(JSON.stringify(data))
|
||||
let sealArray = data.data.sealArray;
|
||||
sealArrayTemp.value = sealArray;
|
||||
console.log(sealArrayTemp.value);
|
||||
|
||||
let sealNumMap = {}
|
||||
sealArray.forEach(item => {
|
||||
if (sealNumMap[item.keySN]) {
|
||||
sealNumMap[item.keySN] += 1;
|
||||
if (sealNumMap[item.keySN] > 2) {
|
||||
let remainder = Math.ceil(sealNumMap[item.keySN] / 2) - 1
|
||||
sealNumMap[item.keySN + remainder] = sealNumMap[item.keySN] - remainder * 2;
|
||||
}
|
||||
} else {
|
||||
sealNumMap[item.keySN] = 1;
|
||||
}
|
||||
})
|
||||
signNum.value = Object.keys(sealNumMap).length;
|
||||
console.log(sealNumMap)
|
||||
console.log("ev.data----", data)
|
||||
if (data.type === 'successMessage') {
|
||||
console.log("ev------------", ev)
|
||||
sign.value = true;
|
||||
console.log("改变状态后-------this.sign-----", sign.value)
|
||||
let wjurl = ev.currentTarget[0].data.filename;
|
||||
if (wjurl.split('/')[0].includes("非常规盖章")) {
|
||||
let wjdata = ev.currentTarget[0].data;
|
||||
emit('message', wjdata);
|
||||
}
|
||||
} else if (data.type === 'sealArray') {
|
||||
sign.value = false;
|
||||
console.log("删除盖章后的参数--this.sign--", sign.value)
|
||||
}
|
||||
}
|
||||
|
||||
onShow(() => {
|
||||
setTimeout(()=>{
|
||||
setConfig()
|
||||
},500)
|
||||
})
|
||||
|
||||
onLoad(() => {
|
||||
let userInfo = store.userInfo;
|
||||
ldhth.value = userInfo.workNo;
|
||||
checkSign(ldhth.value).then((res) => {
|
||||
if (res) {
|
||||
username.value = res
|
||||
} else {
|
||||
toast.error("您没有申请电子签章服务!请移步到系统管理-电子签章管理中注册,并联系信息化支持中心进行otp绑定。联系电话:4874260")
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// defineExpose({ //暴露方法
|
||||
// signValidator
|
||||
// })
|
||||
|
||||
return {
|
||||
iframe,
|
||||
compName,
|
||||
asyncComponent,
|
||||
sealArrayTemp,
|
||||
signNum,
|
||||
sign,
|
||||
ldhth,
|
||||
username,
|
||||
iframeWin,
|
||||
baseUrl,
|
||||
filterArrNum,
|
||||
transmissionData,
|
||||
signValidator,
|
||||
stampingCompleted,
|
||||
errorMsg
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<script module="renderjs" lang="renderjs">
|
||||
export default {
|
||||
mounted() {
|
||||
this.setupMessageListener()
|
||||
},
|
||||
methods: {
|
||||
postMessageToIframe(data) {
|
||||
console.log(data)
|
||||
const iframe = document.getElementById('jingeIframe')
|
||||
if (iframe && iframe.contentWindow) {
|
||||
iframe.contentWindow.postMessage(data, '*')
|
||||
}
|
||||
},
|
||||
setupMessageListener() {
|
||||
let that = this;
|
||||
window.addEventListener('message', (ev,ev2) => {
|
||||
console.log(ev.data)
|
||||
if (ev) {
|
||||
try {
|
||||
that.$ownerInstance.callMethod('stampingCompleted', ev.data)
|
||||
} catch (error) {
|
||||
console.error('Call method error:', error)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style scoped>
|
||||
</style>
|
230
src/components/Esign/SinopecEsignPageH5.vue
Normal file
230
src/components/Esign/SinopecEsignPageH5.vue
Normal file
@ -0,0 +1,230 @@
|
||||
<!-- component标签可以变换组件 -->
|
||||
<template>
|
||||
<view>
|
||||
<view v-if="errorMsg" style="color: red;padding-left: 13px;">{{errorMsg}}</view>
|
||||
<iframe id="jingeIframe" class="App-iframe" width="100%" ref="iframe" title="金格云阅读"
|
||||
src="./static/CloudSign/viewer.html" @load="setConfig"></iframe>
|
||||
<wd-toast></wd-toast>
|
||||
</view>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
getCompleteNum
|
||||
} from '@/api/bpm/sign'
|
||||
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
|
||||
import {
|
||||
onLoad,
|
||||
onShow,
|
||||
onReachBottom,
|
||||
onPullDownRefresh
|
||||
} from '@dcloudio/uni-app';
|
||||
import {
|
||||
useUserStore
|
||||
} from '@/store/user'
|
||||
import { checkSign } from '@/api/bpm/sign'
|
||||
import { useToast, useMessage, useNotify, dayjs } from 'wot-design-uni'
|
||||
const emit = defineEmits(['message'])
|
||||
const iframe = ref(null); //ref
|
||||
const toast = useToast()
|
||||
const store = useUserStore();
|
||||
const compName = ref('');
|
||||
const asyncComponent = ref(null);
|
||||
const sealArrayTemp = ref([]); //签章数据
|
||||
const signNum = ref(0);
|
||||
const sign = ref(false);
|
||||
const ldhth = ref('');
|
||||
const username = ref('');
|
||||
const iframeWin = ref(null);
|
||||
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
|
||||
const filterArrNum = ref(0); //过滤后的数据
|
||||
const errorMsg = ref('');
|
||||
|
||||
defineOptions({
|
||||
name: 'SinopecEsignPage',
|
||||
options: {
|
||||
styleIsolation: 'shared',
|
||||
},
|
||||
})
|
||||
const props = defineProps({
|
||||
fileName: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
valiData: {
|
||||
type: Object
|
||||
},
|
||||
procInsId: { //签章验证
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
path: {//签章验证
|
||||
type: String,
|
||||
default: ""
|
||||
}
|
||||
})
|
||||
|
||||
onShow(() => {
|
||||
setTimeout(()=>{
|
||||
setConfig()
|
||||
},500)
|
||||
})
|
||||
|
||||
|
||||
|
||||
const setConfig = () => {
|
||||
// //给html传值
|
||||
iframeWin.value = iframe.value.contentWindow
|
||||
console.log(iframe.value)
|
||||
console.log(iframe.value.contentWindow)
|
||||
try {
|
||||
iframeWin.value.postMessage({
|
||||
filename: props.fileName,
|
||||
apiUrl: baseUrl,
|
||||
userid: username.value,
|
||||
}, '*')
|
||||
} catch (error) {
|
||||
console.error('PostMessage error:', error);
|
||||
// 可以在这里添加备用通信方式
|
||||
}
|
||||
}
|
||||
|
||||
const signValidator = async () => { //签章验证 by 闵
|
||||
|
||||
console.log(props.valiData)
|
||||
errorMsg.value = '';
|
||||
let flag = false;
|
||||
if (props.path == 'unconventional/stamp') { //非常规验证
|
||||
if (props.valiData.flag) { //先判断数量验证
|
||||
if (props.valiData && props.valiData.flag) {//有flag需要正常验证
|
||||
let nowTime = new Date(props.valiData.time).getTime();
|
||||
let filterArr = []
|
||||
console.log(sealArrayTemp.value)
|
||||
filterArr = sealArrayTemp.value.filter(item => {
|
||||
let sealTime = new Date(item.createTime).getTime();
|
||||
if (sealTime >= nowTime && item.userName == props.valiData.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
console.log(filterArr)
|
||||
filterArrNum.value = filterArr.length;
|
||||
if (props.valiData.num <= filterArrNum.value) {
|
||||
return true;
|
||||
} else {
|
||||
console.log(324325)
|
||||
errorMsg.value = "您需要签章(签字或盖章)" + props.valiData.num + "次,目前只签章了" + filterArrNum.value + "次。";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
//2024.3.22张祥瑞
|
||||
//如果签章路径是非常规盖章则走这里,验证机制为跳过签章个数验证,只要没签章则不能提交流程
|
||||
// let flag = false;
|
||||
if (sign.value) {
|
||||
return flag = true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||||
} else {
|
||||
return flag = false;
|
||||
}
|
||||
} else if (props.path == 'modules/gwjdspd/modules/CxcGwjdSpdFromByProcess') { //判断公务接待模块
|
||||
//2024.5.16张祥瑞
|
||||
//如果签章路径是非常规盖章则走这里,验证机制为跳过签章个数验证,只要没签章则不能提交流程
|
||||
// let flag = false;
|
||||
if (sign.value) {
|
||||
return flag = true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||||
} else {
|
||||
return flag = false;
|
||||
}
|
||||
} else {
|
||||
if (sign.value) {
|
||||
return true; //只要执行了签章成功操作就返回成功,否则加载个数验证
|
||||
} else {
|
||||
// let flag = false;
|
||||
await getCompleteNum(props.procInsId).then(res => {
|
||||
console.log("res--------132------", res);
|
||||
// console.log("flag--132------",flag);
|
||||
if (res) {
|
||||
if (signNum.value >= (Number(res.result.nrOfCompletedInstances) + 1)) {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
console.log("flag--142------", flag);
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
||||
onLoad(() => {
|
||||
//获取当前登录人所属部门
|
||||
//这里是要去esign表中使用劳动合同号查询当前使用人的userid
|
||||
let userInfo = store.userInfo;
|
||||
ldhth.value = userInfo.workNo;
|
||||
checkSign(ldhth.value).then((res) => {
|
||||
if (res) {
|
||||
username.value = res
|
||||
} else {
|
||||
toast.error("您没有申请电子签章服务!请移步到系统管理-电子签章管理中注册,并联系信息化支持中心进行otp绑定。联系电话:4874260")
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
//接收html盖完章后传过来的值
|
||||
window.addEventListener("message", (ev) => {
|
||||
console.log(ev)
|
||||
//1.获取签章信息
|
||||
let sealArray = ev.data.data.sealArray;
|
||||
sealArrayTemp.value = sealArray;
|
||||
console.log(sealArrayTemp.value);
|
||||
//2.循环数组,转换为正确个数(以keySn为比对核心,相同的keySn为个数1)
|
||||
let sealNumMap = {}
|
||||
sealArray.forEach(item => {
|
||||
if (sealNumMap[item.keySN]) {
|
||||
sealNumMap[item.keySN] += 1;
|
||||
//个数为2为一组
|
||||
if (sealNumMap[item.keySN] > 2) {
|
||||
let remainder = Math.ceil(sealNumMap[item.keySN] / 2) - 1
|
||||
sealNumMap[item.keySN + remainder] = sealNumMap[item.keySN] - remainder * 2;
|
||||
}
|
||||
} else {
|
||||
sealNumMap[item.keySN] = 1;
|
||||
}
|
||||
})
|
||||
signNum.value = Object.keys(sealNumMap).length;
|
||||
console.log(sealNumMap)
|
||||
console.log("ev.data----", ev.data)
|
||||
if (ev.data.type === 'successMessage') {
|
||||
console.log("ev------------", ev)
|
||||
sign.value = true;
|
||||
console.log("改变状态后-------this.sign-----", sign.value)
|
||||
let wjurl = ev.currentTarget[0].data.filename;
|
||||
//切割盖章文件,用来判断是否是非常规盖章--张祥瑞2024.1.11
|
||||
// let wjurl1=wjurl.split('/');
|
||||
if (wjurl.split('/')[0].includes("非常规盖章")) {
|
||||
let wjdata = ev.currentTarget[0].data;
|
||||
emit('message', wjdata);
|
||||
}
|
||||
} else if (ev.data.type === 'sealArray') { //添加删除盖章后签章,改为false --张祥瑞 2024.3.22
|
||||
sign.value = false;
|
||||
console.log("删除盖章后的参数--this.sign--", sign.value)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
defineExpose({ //暴露方法
|
||||
signValidator
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.App-iframe {
|
||||
width: 100%;
|
||||
height: 700px;
|
||||
border: none;
|
||||
}
|
||||
</style>
|
4
src/env.d.ts
vendored
4
src/env.d.ts
vendored
@ -14,7 +14,9 @@ interface ImportMetaEnv {
|
||||
/** 服务端口号 */
|
||||
readonly VITE_SERVER_PORT: string
|
||||
/** 后台接口地址 */
|
||||
readonly VITE_SERVER_BASEURL: string
|
||||
readonly VITE_WEBAPP: string
|
||||
/** 读取更新配置文件路径 by min */
|
||||
readonly WEBAPP: string
|
||||
/** H5是否需要代理 */
|
||||
readonly VITE_APP_PROXY: 'true' | 'false'
|
||||
/** H5是否需要代理,需要的话有个前缀 */
|
||||
|
@ -3,7 +3,7 @@
|
||||
"appid": "__UNI__9F097F0",
|
||||
"description": "",
|
||||
"versionName": "2.0.0",
|
||||
"versionCode": "20250605",
|
||||
"versionCode": "20250616",
|
||||
"transformPx": false,
|
||||
"app-plus": {
|
||||
"usingComponents": true,
|
||||
@ -89,8 +89,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"android": {
|
||||
"webView": {
|
||||
"domStorageEnabled": true,
|
||||
"databaseEnabled": true,
|
||||
"allowFileAccess": true
|
||||
}
|
||||
},
|
||||
"compatible": {
|
||||
"ignoreVersion": true
|
||||
},
|
||||
"webview": {
|
||||
"debug": true,
|
||||
"crossDomain": true
|
||||
}
|
||||
},
|
||||
"quickapp": {},
|
||||
|
54
src/pages-bpm/carRental/index.vue
Normal file
54
src/pages-bpm/carRental/index.vue
Normal file
@ -0,0 +1,54 @@
|
||||
<template>
|
||||
<wd-cell-group title="申请信息">
|
||||
<wd-cell title="用车单位" :value="info.usingDepart_dictText" />
|
||||
<wd-cell title="车型" :value="info.vehicleModel" />
|
||||
<wd-cell title="车牌号" :value="info.carNumber" />
|
||||
<wd-cell title="驾驶员姓名" :value="info.driverName" />
|
||||
<wd-cell title="派车领导" :value="info.carLeader_dictText" />
|
||||
<wd-cell title="出车工作日" :value="info.workingDay + '天'" />
|
||||
<wd-cell title="劳动合同号" :value="info.ldhth" />
|
||||
<wd-cell title="开始时间" :value="info.startTime" />
|
||||
<wd-cell title="结束时间" :value="info.endTime" />
|
||||
<wd-cell title="附件" v-if="info.path">
|
||||
<template v-for="(img, index) in image" :key="index">
|
||||
<wd-img :width="100" :height="100" :src="img" :enable-preview="true" />
|
||||
</template>
|
||||
</wd-cell>
|
||||
<wd-cell title="交办任务" :value="info.taskAssigned" />
|
||||
<wd-cell title="备注" :value="info.remarks" />
|
||||
</wd-cell-group>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
queryCarRentalByIdApi
|
||||
} from '@/api/bpm'
|
||||
import {
|
||||
imgUrl
|
||||
} from '@/utils/index'
|
||||
|
||||
const info = ref({})
|
||||
const image = ref([])
|
||||
const props = defineProps({
|
||||
formData: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
}
|
||||
})
|
||||
|
||||
// 申请信息
|
||||
const queryById = () => {
|
||||
queryCarRentalByIdApi(props.formData.dataId).then((res) => {
|
||||
if (res.success) {
|
||||
info.value = res.result.records[0]
|
||||
if (info.value.fj) {
|
||||
image.value = info.value.fj.split(',').map(path => imgUrl(path))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
queryById()
|
||||
})
|
||||
</script>
|
56
src/pages-bpm/document/index.vue
Normal file
56
src/pages-bpm/document/index.vue
Normal file
@ -0,0 +1,56 @@
|
||||
<template>
|
||||
<wd-cell-group title="申请信息">
|
||||
<wd-cell title="发文字号" :value="info.fwzh" />
|
||||
<wd-cell>
|
||||
<template #title>
|
||||
<view>
|
||||
<view style="display: inline-block">发文标题</view>
|
||||
</view>
|
||||
</template>
|
||||
<view style="color: blue;" @click="onlinePreview(info.wjbt)">
|
||||
{{info.fwbt}}
|
||||
</view>
|
||||
</wd-cell>
|
||||
<wd-cell title="发文日期" :value="info.fwtime" />
|
||||
<wd-cell title="拟稿人" :value="info.ngr" />
|
||||
<wd-cell title="拟稿人电话" :value="info.ngrdh" />
|
||||
<wd-cell title="类别及代号" :value="info.wjlb" />
|
||||
<wd-cell title="密级" :value="info.mj_dictText" />
|
||||
<wd-cell title="主题词" :value="info.ztc" />
|
||||
<wd-cell title="文件描述" :value="info.wjms" />
|
||||
<wd-cell title="签发人" :value="info.qfr_dictText" />
|
||||
</wd-cell-group>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
queryDocumentByIdApi
|
||||
} from '@/api/bpm'
|
||||
|
||||
const info = ref({})
|
||||
const props = defineProps({
|
||||
formData: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
}
|
||||
})
|
||||
|
||||
// 申请信息
|
||||
const queryById = () => {
|
||||
queryDocumentByIdApi(props.formData.dataId).then((res) => {
|
||||
if (res.success) {
|
||||
info.value = res.result.records[0]
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const onlinePreview = (e) => {
|
||||
uni.navigateTo({
|
||||
url: `/pages/onlinePreview/detail?data=${e}`
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
queryById()
|
||||
})
|
||||
</script>
|
230
src/pages-bpm/khss/index.vue
Normal file
230
src/pages-bpm/khss/index.vue
Normal 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>
|
@ -26,13 +26,6 @@
|
||||
import {
|
||||
imgUrl
|
||||
} from '@/utils/index'
|
||||
|
||||
defineOptions({
|
||||
name: 'index',
|
||||
options: {
|
||||
styleIsolation: 'shared',
|
||||
},
|
||||
})
|
||||
const info = ref({})
|
||||
const image = ref([])
|
||||
const props = defineProps({
|
||||
@ -48,140 +41,18 @@
|
||||
});
|
||||
}
|
||||
// 申请信息
|
||||
const qjQueryById = () => {
|
||||
const queryById = () => {
|
||||
queryByIdApi(props.formData.dataId).then((res) => {
|
||||
if (res.success) {
|
||||
info.value = res.result.records[0]
|
||||
if(info.value.path){
|
||||
image.value = info.value.path.split(',').map(path => imgUrl(path))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
qjQueryById()
|
||||
queryById()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.info_box {
|
||||
padding: 40rpx 30rpx 16rpx 30rpx;
|
||||
width: 630rpx;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
|
||||
border-radius: 16rpx;
|
||||
margin-top: 30rpx;
|
||||
|
||||
|
||||
.title {
|
||||
font-size: 28rpx;
|
||||
color: #333333;
|
||||
background-image: url(../../static/index/line.png);
|
||||
background-size: 44rpx 12rpx;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left bottom;
|
||||
margin-bottom: 30rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.info {
|
||||
font-size: 28rpx;
|
||||
margin-bottom: 24rpx;
|
||||
|
||||
view {
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
text {
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.progress {
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
|
||||
border-radius: 16rpx;
|
||||
width: 630rpx;
|
||||
padding: 40rpx 30rpx 16rpx 30rpx;
|
||||
margin-top: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
|
||||
.status {
|
||||
padding: 4rpx 8rpx;
|
||||
display: inline-block;
|
||||
|
||||
color: #FFFFFF;
|
||||
font-size: 20rpx;
|
||||
margin-left: 8rpx;
|
||||
border-radius: 8rpx;
|
||||
|
||||
}
|
||||
|
||||
.complete {
|
||||
background-color: #7AC756;
|
||||
}
|
||||
|
||||
.refuse {
|
||||
background-color: #FE4600;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 28rpx;
|
||||
color: #333333;
|
||||
background-image: url(../../static/index/line.png);
|
||||
background-size: 44rpx 12rpx;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left bottom;
|
||||
margin-bottom: 40rpx;
|
||||
|
||||
}
|
||||
|
||||
// .box:not(:first-child) {
|
||||
// padding-top: 60rpx;
|
||||
// }
|
||||
.box:not(:last-child) {
|
||||
position: relative;
|
||||
padding-bottom: 60rpx;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: ' ';
|
||||
width: 1px;
|
||||
height: 100%;
|
||||
background: #efefef;
|
||||
left: -42rpx;
|
||||
top: 10rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.box {
|
||||
margin-left: 50rpx;
|
||||
|
||||
|
||||
.topic {
|
||||
position: relative;
|
||||
font-size: 28rpx;
|
||||
color: #333333;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: ' ';
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
background: #01508B;
|
||||
border-radius: 14rpx;
|
||||
left: -50rpx;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
.name_time {
|
||||
font-size: 24rpx;
|
||||
color: #888888;
|
||||
margin-top: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
51
src/pages-bpm/unconventional/index.vue
Normal file
51
src/pages-bpm/unconventional/index.vue
Normal file
@ -0,0 +1,51 @@
|
||||
<template>
|
||||
<wd-cell-group title="申请信息">
|
||||
<wd-cell title="申请人" :value="info.sqr" />
|
||||
<wd-cell title="业务类别" :value="info.ywlb" />
|
||||
<wd-cell title="申请事由" :value="info.sqsy" />
|
||||
<wd-cell title="部门审批领导" :value="info.bmspld_dictText" />
|
||||
<wd-cell title="申请部门" :value="info.sqbm" />
|
||||
<wd-cell title="申请时间" :value="info.sqsj" />
|
||||
<wd-cell title="申请盖章领导" :value="info.gzld" />
|
||||
<wd-cell title="申请盖章厂领导" :value="info.gzcld" />
|
||||
<wd-cell title="盖章位置" :value="info.gzwz" />
|
||||
<wd-cell title="盖章文件" >
|
||||
<view style="color: #4d80f0;" @click="onlinePreView(info.wj)" plain>{{info.wj.match(/([^\/]+)(?=\.\w+$)/)[0]}}</view>
|
||||
</wd-cell>
|
||||
</wd-cell-group>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
queryUnData
|
||||
} from '@/api/integrated/unconventional'
|
||||
import {
|
||||
imgUrl
|
||||
} from '@/utils/index'
|
||||
|
||||
const info = ref({})
|
||||
const image = ref([])
|
||||
const props = defineProps({
|
||||
formData: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
}
|
||||
})
|
||||
|
||||
const queryData = ()=>{
|
||||
queryUnData({id:props.formData.dataId}).then(res=>{
|
||||
info.value = res.result.records[0]
|
||||
})
|
||||
}
|
||||
|
||||
const onlinePreView = (fileUrl) => {
|
||||
uni.navigateTo({
|
||||
url: `/pages/onlinePreview/detail?data=${fileUrl}`
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
queryData();
|
||||
})
|
||||
</script>
|
115
src/pages-bpm/unconventional/stamp.vue
Normal file
115
src/pages-bpm/unconventional/stamp.vue
Normal file
@ -0,0 +1,115 @@
|
||||
<template>
|
||||
<wd-collapse v-model="value">
|
||||
<wd-collapse-item title="表单数据" name="item1">
|
||||
<wd-cell title="申请人" :value="info.sqr" />
|
||||
<wd-cell title="业务类别" :value="info.ywlb" />
|
||||
<wd-cell title="申请事由" :value="info.sqsy" />
|
||||
<wd-cell title="部门审批领导" :value="info.bmspld_dictText" />
|
||||
<wd-cell title="申请部门" :value="info.sqbm" />
|
||||
<wd-cell title="申请时间" :value="info.sqsj" />
|
||||
<wd-cell title="申请盖章领导" :value="info.gzld" />
|
||||
<wd-cell title="申请盖章厂领导" :value="info.gzcld" />
|
||||
<wd-cell title="盖章位置" :value="info.gzwz" />
|
||||
</wd-collapse-item>
|
||||
<wd-collapse-item custom-body-style="padding:0;" title="盖章文件" name="item2">
|
||||
<SinopecEsignPage :valiData="valiData" ref="sign" :procInsId="props.formData.procInsId" :path="props.formData.path" :fileName="info.wjdict" @stampSuccess="getStampSuccess" ></SinopecEsignPage>
|
||||
</wd-collapse-item>
|
||||
</wd-collapse>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
queryUnData
|
||||
} from '@/api/integrated/unconventional'
|
||||
import {
|
||||
processHistoryList
|
||||
} from '@/api/bpm/sign'
|
||||
import {
|
||||
imgUrl
|
||||
} from '@/utils/index'
|
||||
import SinopecEsignPage from '@/components/Esign/SinopecEsignPage.vue'
|
||||
import { useUserStore } from '@/store/user'
|
||||
const userStore = useUserStore()
|
||||
|
||||
const emit = defineEmits(['getStampSuc'])
|
||||
|
||||
const sign = ref(null);
|
||||
const value = ref([]);
|
||||
const info = ref({});
|
||||
const valiData = ref({});
|
||||
const ifEsign = ref(true);
|
||||
const props = defineProps({
|
||||
formData: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
fileName: {
|
||||
type: String,
|
||||
default: ""
|
||||
}
|
||||
})
|
||||
|
||||
const queryData = ()=>{
|
||||
queryUnData({id:props.formData.dataId}).then(res=>{
|
||||
info.value = res.result.records[0]
|
||||
initValiData(info.value); //处理验证data by 闵
|
||||
let lj = info.value.wj.split("/");
|
||||
let ljurl = lj[2] + '/' + lj[3];
|
||||
info.value.wjdict = ljurl;
|
||||
})
|
||||
}
|
||||
|
||||
const initValiData = (data)=>{
|
||||
//处理验证data by 闵
|
||||
let name = userStore.userInfo.realname;
|
||||
let num = null;
|
||||
if(data.lds){
|
||||
let ldsMap = JSON.parse(data.lds);
|
||||
if(ldsMap[name]) num = ldsMap[name]
|
||||
}
|
||||
if(data.clds){
|
||||
let cldsMap = JSON.parse(data.clds);
|
||||
if(cldsMap[name]) num = cldsMap[name]
|
||||
}
|
||||
if(num){
|
||||
valiData.value.flag = true;
|
||||
valiData.value.num = num;
|
||||
valiData.value.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
const initValtime = ()=>{
|
||||
processHistoryList(props.formData.procInsId).then(res=>{
|
||||
if (res.success) {
|
||||
valiData.value.time = res.result.records[0].startTime
|
||||
} else {
|
||||
console.log("加载失败")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//获取印章成功事件,并将信号传给确认提交按钮。
|
||||
const getStampSuccess=(val)=> {
|
||||
emit('getStampSuc', val)
|
||||
}
|
||||
|
||||
const signValidator = (procInsId,path)=>{
|
||||
//这里进行电子签章验证
|
||||
return sign.value.signValidator();
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
queryData();
|
||||
initValtime();
|
||||
})
|
||||
|
||||
|
||||
defineExpose({ //暴露方法
|
||||
signValidator,
|
||||
ifEsign
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
|
||||
</style>
|
195
src/pages-bpm/zbkh/index.vue
Normal file
195
src/pages-bpm/zbkh/index.vue
Normal file
@ -0,0 +1,195 @@
|
||||
<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.year + '年' + zbInfo.month + '月'" />
|
||||
<wd-cell size="large" title="考核指标" :value="zbInfo.assessmentIndicators" />
|
||||
<wd-cell size="large" title="指标类别" :value="zbInfo.indicatorCategory_dictText" />
|
||||
<wd-collapse v-model="khdxCollapse">
|
||||
<wd-collapse-item title="考核对象" name="考核对象">{{zbInfo.templetName_dictText}}</wd-collapse-item>
|
||||
</wd-collapse>
|
||||
<wd-cell size="large" title="考核周期" :value="zbInfo.assessmentCycle_dictText" />
|
||||
<wd-cell size="large" title="考核部门" :value="zbInfo.assessmentDepart_dictText" />
|
||||
<wd-collapse v-model="zbCollapse">
|
||||
<wd-collapse-item title="评价方法" name="评价方法">{{zbInfo.evaluationMethod}}</wd-collapse-item>
|
||||
</wd-collapse>
|
||||
<wd-cell size="large">
|
||||
<template #title>
|
||||
<view>
|
||||
<view style="display: inline-block">考核附件</view>
|
||||
</view>
|
||||
</template>
|
||||
<view style="color: blue;" @click="onlinePreview(zbInfo.khfj)">
|
||||
{{getFilename(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>
|
||||
<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>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
queryZbkhZbByIdApi,
|
||||
queryZbkhFbByIdApi,
|
||||
queryZbkhBtByIdApi
|
||||
} from '@/api/bpm'
|
||||
import {
|
||||
getFilename
|
||||
} from '@/utils'
|
||||
const tabbar = ref(0)
|
||||
const zbInfo = ref({})
|
||||
const fbInfo = ref([])
|
||||
const btInfo = ref([])
|
||||
const btDataInfo = ref([])
|
||||
const zbCollapse = ref(['评价方法'])
|
||||
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({
|
||||
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 () => {
|
||||
// 1. 获取主表数据
|
||||
const zbRes = await queryZbkhZbByIdApi(props.formData.dataId);
|
||||
if (zbRes.success) {
|
||||
zbInfo.value = zbRes.result.records[0];
|
||||
// 2. 获取标题数据(btInfo)
|
||||
if (zbInfo.value.dwkhBtId) {
|
||||
const btRes = await queryZbkhBtByIdApi(zbInfo.value.dwkhBtId);
|
||||
btInfo.value = btRes.result;
|
||||
}
|
||||
}
|
||||
// 3. 获取子表数据(fbInfo)
|
||||
const fbRes = await queryZbkhFbByIdApi({
|
||||
mainId: props.formData.dataId
|
||||
});
|
||||
fbInfo.value = fbRes.result.records;
|
||||
total.value = fbRes.result.total
|
||||
};
|
||||
|
||||
const getDwkhValue = (fbItem, btId) => {
|
||||
if (!fbItem.dwkhSaves) return ''; // 如果没有 dwkhSaves,返回空
|
||||
const found = fbItem.dwkhSaves.find(item => item.dwkhBtId === btId);
|
||||
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) => {
|
||||
uni.navigateTo({
|
||||
url: `/pages/onlinePreview/detail?data=${e}`
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
queryById()
|
||||
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>
|
@ -25,8 +25,8 @@
|
||||
:rules="[{ required: true, message: '请选择开始时间' }]" :min-date="minBegintime" />
|
||||
<wd-calendar label="结束时间" prop="endtime" v-model="model.endtime"
|
||||
:rules="[{ required: true, message: '请选择结束时间' }]" :min-date="minEndtime" />
|
||||
<wd-picker :label="examineleader" prop="examineleader" v-model="model.examineleader"
|
||||
:columns="examineleaderData" :rules="[{ required: true, message: '请选择' + examineleader }]" />
|
||||
<wd-picker label="审批领导" prop="examineleader" v-model="model.examineleader" v-if="zwmc == '0'"
|
||||
:columns="examineleaderData" :rules="[{ required: true, message: '请选择审批领导'}]" />
|
||||
<wd-picker label="单位劳资员" prop="hr" v-model="model.hr" :columns="hrData" v-if="zwmc == '0'"/>
|
||||
<SelectUser label="班组长" v-model="model.teamleader" isRadioSelection v-if="zwmc == '0'"></SelectUser>
|
||||
<wd-input label="出发地" prop="departure" v-model="model.departure"
|
||||
@ -88,7 +88,6 @@
|
||||
type: [], //用[]、0无法正常被验证 就是不选请假类型时也能通过表单验证 所以在form中使用自定义验证
|
||||
begintime: null,
|
||||
endtime: null,
|
||||
examineleader: '',
|
||||
hr: '',
|
||||
teamleader: '',
|
||||
departure: appStore.location,
|
||||
@ -101,8 +100,6 @@
|
||||
const typeData = ref([])
|
||||
const examineleaderData = ref([])
|
||||
const hrData = ref([])
|
||||
/**判断显示审批 / 分管领导*/
|
||||
const examineleader = ref('')
|
||||
const zwmc = ref('')
|
||||
const ifOk = ref(true)
|
||||
const minBegintime = ref(0)
|
||||
@ -251,11 +248,6 @@
|
||||
}
|
||||
})
|
||||
zwmc.value = res.result.zwmc
|
||||
if (zwmc.value == '2') {
|
||||
examineleader.value = '分管领导';
|
||||
} else {
|
||||
examineleader.value = '审批领导';
|
||||
}
|
||||
} else {
|
||||
toast.warning(res.message)
|
||||
setTimeout(() => {
|
||||
|
@ -67,8 +67,10 @@
|
||||
if (res.success) {
|
||||
info.value = res.result.records[0]
|
||||
minDate.value = dateStringToTimestamp(info.value.begintime)
|
||||
if(image.value.path){
|
||||
image.value = info.value.path.split(',').map(path => imgUrl(path))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
<wd-card title="解读材料">
|
||||
<view style="color: blue;"
|
||||
@click="onlinePreview(`/pages/onlinePreview/detail?data=${dataSource.jdwj}`)">
|
||||
{{dataSource.jdwj}}
|
||||
{{getFilename(dataSource.jdwj)}}
|
||||
</view>
|
||||
</wd-card>
|
||||
</view>
|
||||
@ -33,6 +33,9 @@
|
||||
import {
|
||||
queryDataById
|
||||
} from '@/api/pages/file'
|
||||
import {
|
||||
getFilename
|
||||
} from '@/utils'
|
||||
|
||||
const appStore = useAppStore()
|
||||
const dataSource = ref({})
|
||||
|
@ -83,10 +83,7 @@
|
||||
new base64().encode(baseUrl + url))
|
||||
}
|
||||
} else if (/^-?\d+$/.test(quote) && !insFlag) {
|
||||
getJobDesIdByDepAndName({
|
||||
jobname: quote,
|
||||
jobdep: useUserStore().userInfo.orgCode
|
||||
}).then((res) => {
|
||||
getJobDesIdByDepAndName(quote).then((res) => {
|
||||
fileUrl.value = getEnvBaseUrl() + '/jmreport/view/929517863011811328?id=' + res
|
||||
.id +
|
||||
"&token=" + useUserStore().userInfo.token;
|
||||
@ -113,7 +110,7 @@
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
getListApi(useUserStore().userInfo.orgCode).then(res => {
|
||||
getListApi().then(res => {
|
||||
data.value = res.result
|
||||
dataSource.value = [data.value.map(item => {
|
||||
return {
|
||||
|
@ -1,16 +1,20 @@
|
||||
<!-- component标签可以变换组件 -->
|
||||
<template>
|
||||
<view>
|
||||
<component :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey" v-if="asyncComponent"
|
||||
@getStampSuc="getStampSuccess"></component>
|
||||
<component ref="comptRef" :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey"
|
||||
v-if="asyncComponent" @getStampSuc="getStampSuccess"></component>
|
||||
<view v-else>该模块暂未建立审批页面!</view>
|
||||
</view>
|
||||
<wd-tabbar v-if="false">
|
||||
<wd-tabbar-item></wd-tabbar-item>
|
||||
</wd-tabbar>
|
||||
<wd-pagination v-if="false"/>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
|
||||
<script setup>
|
||||
const compName = ref('');
|
||||
const asyncComponent = ref(null);
|
||||
const modules = import.meta.glob('/src/pages-bpm/**/*.vue');
|
||||
const comptRef = ref();
|
||||
|
||||
|
||||
defineOptions({
|
||||
@ -34,26 +38,37 @@
|
||||
},
|
||||
formData: {
|
||||
type: Object,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
}
|
||||
|
||||
})
|
||||
// 监听 option 变化
|
||||
watch(() => props.path, (newVal) => {
|
||||
console.log("newVal----",newVal)
|
||||
if (newVal){
|
||||
if (newVal) {
|
||||
compName.value = newVal;
|
||||
if(newVal.indexOf('index')==-1){
|
||||
compName.value = newVal+'/index'
|
||||
}
|
||||
}
|
||||
//动态加载页面
|
||||
const comp = modules[`/src/pages-bpm/${compName.value}.vue`]
|
||||
if (!comp) {
|
||||
console.log(newVal)
|
||||
if (newVal.indexOf('index') == -1) {
|
||||
compName.value = newVal + '/index'
|
||||
console.log(compName.value)
|
||||
const comp2 = modules[`/src/pages-bpm/${compName.value}.vue`]
|
||||
comp2().then((myModule) => {
|
||||
asyncComponent.value = myModule.default
|
||||
}).catch(() => {
|
||||
|
||||
})
|
||||
}
|
||||
} else {
|
||||
comp().then((myModule) => {
|
||||
asyncComponent.value = myModule.default
|
||||
}).catch(() => {
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
}, {
|
||||
deep: true,
|
||||
// #ifdef MP-WEIXIN
|
||||
@ -61,6 +76,17 @@
|
||||
// #endif
|
||||
});
|
||||
|
||||
const signValidator = () => {
|
||||
console.log(comptRef.value)
|
||||
//这里进行电子签章验证
|
||||
if (!comptRef.value.signValidator) {
|
||||
console.log(123124)
|
||||
return null;
|
||||
} else {
|
||||
console.log(12)
|
||||
return comptRef.value.signValidator()
|
||||
}
|
||||
}
|
||||
|
||||
const getStampSuccess = (val) => {
|
||||
// this.$emit('getStampSuc', val)
|
||||
@ -70,6 +96,10 @@
|
||||
// esignTag: val
|
||||
// });
|
||||
}
|
||||
|
||||
defineExpose({ //暴露方法
|
||||
signValidator
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -189,13 +189,14 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
|
||||
import SelectUserModal from '@/components/SelectUser/components/SelectUserModal.vue'
|
||||
import { getFileAccessHttpUrl } from '@/common/uitls'
|
||||
import { useQueue } from 'wot-design-uni'
|
||||
import Mupload from '@/components/Mupload/Mupload.vue'
|
||||
import { getProcessTaskTransInfo, processComplete, taskEntrust, callBackProcessApi, sendMessageApi } from '@/api/process'
|
||||
import { useToast, useMessage, useNotify, dayjs } from 'wot-design-uni'
|
||||
const emit = defineEmits(['dataSubmit'])
|
||||
|
||||
|
||||
defineOptions({
|
||||
name: 'taskDeal',
|
||||
@ -368,6 +369,25 @@
|
||||
}
|
||||
|
||||
const handleProcessComplete = (nextNode) => {
|
||||
emit('dataSubmit', val=>{
|
||||
console.log(val)
|
||||
let valiData = val
|
||||
if (model.value.processModel == 3) {
|
||||
valiData.flag = true;
|
||||
}
|
||||
console.log(valiData)
|
||||
if (!valiData.flag) { //不通过验证 点击提交流程前加了一个表单验证 by 闵
|
||||
switch (valiData.type) {
|
||||
case 0:
|
||||
toast.error("请确认是否填写完表单或验证是否正确!")
|
||||
break;
|
||||
case 1:
|
||||
toast.error("请确认是否盖章!")
|
||||
break;
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (model.value.processModel == 4) { //4: 取回流程
|
||||
message
|
||||
.confirm({
|
||||
@ -443,6 +463,9 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
const handleManyProcessComplete = () => { //驳回任务提交
|
||||
|
@ -14,7 +14,7 @@
|
||||
<DynamicLink ref="linkRef" :path="path" :formData="formData"></DynamicLink>
|
||||
</wd-tab>
|
||||
<wd-tab title="任务处理" v-if="type!='history'">
|
||||
<taskDeal :formData="formData" :useData="useData"></taskDeal>
|
||||
<taskDeal :formData="formData" :useData="useData" @dataSubmit="dataSubmit"></taskDeal>
|
||||
</wd-tab>
|
||||
<wd-tab title="流程图">
|
||||
<view class="container">
|
||||
@ -52,16 +52,6 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
ref,
|
||||
computed
|
||||
} from 'vue'
|
||||
import {
|
||||
onLoad,
|
||||
onShow,
|
||||
onReachBottom,
|
||||
onPullDownRefresh
|
||||
} from '@dcloudio/uni-app';
|
||||
import { useToast, useMessage } from 'wot-design-uni'
|
||||
import {
|
||||
useAppStore
|
||||
@ -93,6 +83,9 @@
|
||||
const tab = ref(0)
|
||||
const completedNum = ref(0);
|
||||
const popup = ref(false)
|
||||
const linkRef = ref();
|
||||
|
||||
|
||||
const showFullScreen = () => {
|
||||
popup.value = true
|
||||
};
|
||||
@ -123,6 +116,7 @@
|
||||
formData.value = data;//流程信息
|
||||
let tempFormUrl = res.result.formUrlMobile;
|
||||
path.value = tempFormUrl; //url路径
|
||||
formData.value.path = tempFormUrl; //加载path属性
|
||||
}
|
||||
})
|
||||
} else {
|
||||
@ -164,6 +158,29 @@
|
||||
})
|
||||
})
|
||||
|
||||
const dataSubmit = async (callback)=> { //触发表单的保存数据 by 闵
|
||||
//1.先验证是否有form,如果有form则需要验证
|
||||
//2.如果没有form,则不需要验证
|
||||
let callData = {
|
||||
flag: false,
|
||||
type: 0,
|
||||
}
|
||||
console.log(linkRef.value)
|
||||
// if(linkRef.value.ifEsign){
|
||||
let data = await linkRef.value.signValidator()
|
||||
if(data==false||data==true){
|
||||
callData.flag = data;
|
||||
callData.type = 1;
|
||||
}else{
|
||||
callData.flag = true;
|
||||
}
|
||||
// }else{
|
||||
// callData.flag = true;
|
||||
// }
|
||||
callback(callData);
|
||||
}
|
||||
|
||||
|
||||
const imgPath = computed(() => {
|
||||
var params = qs.stringify({
|
||||
'processInstanceId': formData.value.procInsId
|
||||
|
@ -22,8 +22,7 @@
|
||||
"fontSize": "11px",
|
||||
"iconWidth": "24px",
|
||||
"spacing": "3px",
|
||||
"list": [
|
||||
{
|
||||
"list": [{
|
||||
"iconPath": "static/tabbar/tabbar-home-2.png",
|
||||
"selectedIconPath": "static/tabbar/tabbar-home.png",
|
||||
"pagePath": "pages/index/index",
|
||||
@ -49,8 +48,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "pages/login/login",
|
||||
"type": "home",
|
||||
"style": {
|
||||
@ -148,6 +146,15 @@
|
||||
"navigationBarTitleText": "生产数据"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/sljd/index",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "实流检定"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/user/people",
|
||||
"type": "page",
|
||||
@ -208,24 +215,20 @@
|
||||
"type": "page"
|
||||
}
|
||||
],
|
||||
"subPackages": [
|
||||
{
|
||||
"subPackages": [{
|
||||
"root": "pages-home",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "home/home",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
"style": {
|
||||
"navigationBarTitleText": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages-message",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "chat/chat",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -266,8 +269,7 @@
|
||||
},
|
||||
{
|
||||
"root": "pages-user",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "userEdit/userEdit",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -275,13 +277,11 @@
|
||||
"navigationBarTitleText": "",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages-work",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "dragPage/index",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -321,8 +321,7 @@
|
||||
},
|
||||
{
|
||||
"root": "pages-sub",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "online/online",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -353,8 +352,7 @@
|
||||
},
|
||||
{
|
||||
"root": "pages-operate",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "file/detail",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -385,8 +383,7 @@
|
||||
},
|
||||
{
|
||||
"root": "pages-humanResource",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "absence/add",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -447,8 +444,7 @@
|
||||
},
|
||||
{
|
||||
"root": "pages-integrated",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "duty/index",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -456,13 +452,11 @@
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "干部值班"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages-politics",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "health/add",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -470,13 +464,11 @@
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "健康填报"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages-process",
|
||||
"pages": [
|
||||
{
|
||||
"pages": [{
|
||||
"path": "approvalTabbar",
|
||||
"type": "page",
|
||||
"layout": "default",
|
||||
@ -507,15 +499,39 @@
|
||||
},
|
||||
{
|
||||
"root": "pages-bpm",
|
||||
"pages": [
|
||||
"pages": [{
|
||||
"path": "carRental/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "lawsAndRegulations/index",
|
||||
"path": "document/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "khss/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "leaveApplication/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "unconventional/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "unconventional/stamp",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "zbkh/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
|
||||
"path": "lawsAndRegulations/index",
|
||||
"type": "page"
|
||||
},
|
||||
{
|
||||
"path": "OfficeEquipmentMaintenanceApplication/index",
|
||||
"type": "page"
|
||||
|
@ -9,7 +9,7 @@
|
||||
</route>
|
||||
<template>
|
||||
<PageLayout :navbarShow="false">
|
||||
<view class="nav" >
|
||||
<view class="nav">
|
||||
<view class="nav_box">
|
||||
<view class="weather_calender">
|
||||
<view class="position position-left">
|
||||
@ -103,7 +103,9 @@
|
||||
import {
|
||||
taskListApi
|
||||
} from '@/api/process'
|
||||
import { isH5 } from '@/utils/platform'
|
||||
import {
|
||||
isH5
|
||||
} from '@/utils/platform'
|
||||
|
||||
defineOptions({
|
||||
name: 'index',
|
||||
@ -148,7 +150,6 @@
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const goPageMore = (page) => {
|
||||
router.replace({
|
||||
name: 'more',
|
||||
@ -159,19 +160,69 @@
|
||||
})
|
||||
}
|
||||
|
||||
const queryCarousel = () => {
|
||||
// 轮播图
|
||||
queryCarouselApi({
|
||||
const queryCarousel = async () => {
|
||||
// 1. 尝试从缓存获取
|
||||
const cachedData = await getCarouselCache();
|
||||
// 2. 如果有未过期的缓存,直接使用
|
||||
if (cachedData) {
|
||||
carouselList.value = cachedData.data;
|
||||
// 3. 只有当缓存快过期时(例如剩余25%有效期),才在后台更新
|
||||
const cacheAge = Date.now() - cachedData.timestamp;
|
||||
if (cacheAge > 24 * 60 * 60 * 1000 * 7 * 0.75) { // 24小时 * 7缓存有效期
|
||||
fetchAndUpdateCarousel(); // 后台静默更新
|
||||
}
|
||||
return;
|
||||
}
|
||||
// 4. 没有有效缓存,强制获取最新数据
|
||||
await fetchAndUpdateCarousel();
|
||||
};
|
||||
|
||||
const fetchAndUpdateCarousel = async () => {
|
||||
try {
|
||||
const res = await queryCarouselApi({
|
||||
zslb: 6
|
||||
}).then((res) => {
|
||||
});
|
||||
if (res.success) {
|
||||
let arr = res.result.records[0].wenjian.split(',')
|
||||
carouselList.value = arr.map((item) => {
|
||||
return getEnvBaseUrl() + '/sys/common/static/' + item
|
||||
})
|
||||
const arr = res.result.records[0].wenjian.split(',');
|
||||
const newData = arr.map(item => getEnvBaseUrl() + '/sys/common/static/' + item);
|
||||
carouselList.value = newData;
|
||||
setCarouselCache(newData);
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('更新轮播图失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取缓存(带时间戳验证)
|
||||
const getCarouselCache = () => {
|
||||
const cacheStr = uni.getStorageSync('carousel_data')
|
||||
if (!cacheStr) return null;
|
||||
try {
|
||||
const {
|
||||
data,
|
||||
timestamp
|
||||
} = JSON.parse(cacheStr);
|
||||
if (Date.now() - timestamp < 24 * 60 * 60 * 1000 * 7) {
|
||||
return {
|
||||
data,
|
||||
timestamp
|
||||
};
|
||||
}
|
||||
uni.removeStorageSync('carousel_data');
|
||||
return null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
// 设置缓存(带时间戳)
|
||||
const setCarouselCache = (data) => {
|
||||
const cacheData = {
|
||||
data,
|
||||
timestamp: Date.now()
|
||||
};
|
||||
uni.setStorageSync('carousel_data', JSON.stringify(cacheData))
|
||||
};
|
||||
|
||||
const queryModule = () => {
|
||||
getUserPermissionApi({
|
||||
|
@ -105,9 +105,9 @@
|
||||
let pw = Base64.encode(encodeURIComponent(password.value))
|
||||
loading.value = true
|
||||
/*生产环境 begin */
|
||||
loginApi({ username: un, password: pw })
|
||||
// loginApi({ username: un, password: pw })
|
||||
/*开发环境 begin */
|
||||
// loginApi({ username: userName.value, password: password.value, captcha: 'app' })
|
||||
loginApi({ username: userName.value, password: password.value, captcha: 'app' })
|
||||
.then((res : any) => {
|
||||
if (res.success) {
|
||||
const { result } = res
|
||||
|
@ -58,7 +58,6 @@
|
||||
}
|
||||
|
||||
onLoad((options) => {
|
||||
console.log(2222)
|
||||
detail.value = options.data
|
||||
detailArr.value = options.data.split(",");
|
||||
//#ifdef H5 || MP-WEIXIN
|
||||
@ -78,7 +77,6 @@
|
||||
|
||||
onShow (()=>{
|
||||
//页面卸载,如果是从
|
||||
console.log(ifBackAll.value)
|
||||
if(ifBackAll.value){
|
||||
//直接返回上一级
|
||||
uni.navigateBack({
|
||||
|
137
src/pages/sljd/index.vue
Normal file
137
src/pages/sljd/index.vue
Normal file
@ -0,0 +1,137 @@
|
||||
<route lang="json5" type="page">
|
||||
{
|
||||
layout: 'default',
|
||||
style: {
|
||||
navigationStyle: 'custom',
|
||||
navigationBarTitleText: '实流检定',
|
||||
},
|
||||
}
|
||||
</route>
|
||||
<template>
|
||||
<view class="cert-status">
|
||||
<view class="placeholder">
|
||||
<view style="width: 100%; display: grid; place-items: center">
|
||||
<uni-title :title=" '天然气产销厂天然气计量化验中心'" type="h1" color="white" />
|
||||
<uni-title :title=" '证书防伪查询系统'" type="h1" color="red" />
|
||||
|
||||
<!-- 添加证书状态显示区域 -->
|
||||
<view>
|
||||
<span class="status-tag" :class="status === '有效' ? 'valid' : 'invalid'">{{ status }}</span>
|
||||
<span>| 第{{ queryCount }}次查询</span>
|
||||
<span>| 查询时间:{{ queryTime }}</span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view navTitle="在线预览">
|
||||
<iframe id="bdIframe" :src="fileUrl" ref="bdIframe" style="border: none;" class="iframe" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app';
|
||||
import {
|
||||
Base64
|
||||
} from 'js-base64'
|
||||
import {
|
||||
ref,
|
||||
watch
|
||||
} from 'vue'
|
||||
|
||||
// 定义状态数据
|
||||
const status = ref('');
|
||||
const queryCount = ref(0);
|
||||
const queryTime = ref('');
|
||||
var fileUrl = ref("");
|
||||
const baseUrl = 'https://10.75.166.6/jeecg-boot/sys/common/static/';
|
||||
|
||||
onLoad((options) => {
|
||||
let url = JSON.parse(options.data)
|
||||
url = baseUrl + url;
|
||||
fileUrl.value = 'https://szcx.zyyt.sinopec.com/preview/onlinePreview?url=' + encodeURIComponent(Base64
|
||||
.encode(url))
|
||||
|
||||
// 模拟从接口获取证书状态数据
|
||||
// 实际应用中应替换为真实的接口调用
|
||||
loadCertificateStatus(options.certId || 'default-cert-id');
|
||||
})
|
||||
|
||||
// 加载证书状态数据
|
||||
const loadCertificateStatus = (certId) => {
|
||||
// 模拟数据,实际应通过API获取
|
||||
const mockData = {
|
||||
status: '有效', // 或'无效'
|
||||
queryCount: 5,
|
||||
queryTime: new Date().toISOString().split('T')[0]
|
||||
};
|
||||
|
||||
// 更新状态数据
|
||||
status.value = mockData.status;
|
||||
queryCount.value = mockData.queryCount;
|
||||
queryTime.value = mockData.queryTime;
|
||||
|
||||
// 如果状态为无效,可添加额外处理
|
||||
if (status.value === '无效') {
|
||||
console.warn('证书无效,ID:', certId);
|
||||
}
|
||||
}
|
||||
|
||||
// 监听URL变化,如有需要可重新加载状态
|
||||
watch(() => fileUrl.value, () => {
|
||||
// 从URL中提取证书ID并重新加载状态
|
||||
// 这里需要根据实际URL格式调整提取逻辑
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
#bdIframe {
|
||||
position: absolute;
|
||||
top: 20;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.placeholder {
|
||||
height: v-bind(cusnavbarheight);
|
||||
}
|
||||
|
||||
/* 证书状态样式 */
|
||||
.cert-status {
|
||||
margin-top: 20rpx;
|
||||
font-size: 32rpx;
|
||||
color: #fff;
|
||||
padding: 16rpx 30rpx;
|
||||
border-radius: 10rpx;
|
||||
/* 深蓝色背景 */
|
||||
background-color: #0a2463;
|
||||
/* 科技感底纹 - 使用线性渐变和背景图案 */
|
||||
background-image:
|
||||
linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%),
|
||||
linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%);
|
||||
background-size: 20rpx 20rpx;
|
||||
background-position: 0 0, 10rpx 10rpx;
|
||||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.status-tag {
|
||||
padding: 2rpx 10rpx;
|
||||
border-radius: 4rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.valid {
|
||||
color: #00b42a;
|
||||
border: 1rpx solid #00b42a;
|
||||
}
|
||||
|
||||
.invalid {
|
||||
color: #e64340;
|
||||
border: 1rpx solid #e64340;
|
||||
}
|
||||
</style>
|
@ -52,9 +52,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch, onBeforeUnmount } from 'vue'
|
||||
import { getFileAccessHttpUrl } from '@/common/uitls'
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import { useToast, useMessage } from 'wot-design-uni'
|
||||
import { useRouter } from '@/plugin/uni-mini-router'
|
||||
import { http } from '@/utils/http'
|
||||
@ -62,20 +60,22 @@
|
||||
import useUpload from '@/hooks/useUpload'
|
||||
import { getEnvBaseUrl } from '@/utils/index'
|
||||
import { queryPostByUserIdApi, editUserApi } from '@/api/system/user'
|
||||
import { useAppStore } from '@/store'
|
||||
import { addApi } from '@/api/humanResource/clockin'
|
||||
|
||||
const appStore = useAppStore();
|
||||
const userStore = useUserStore()
|
||||
const toast = useToast()
|
||||
const router = useRouter()
|
||||
const message = useMessage()
|
||||
const loading = ref(false)
|
||||
const post = ref('')
|
||||
let stopWatch : any = null
|
||||
|
||||
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: 'clockin', title: '打卡', class: 'cuIcon-location text-cyan' },
|
||||
{ key: 'scan', title: '扫码', class: 'cuIcon-scan text-red' },
|
||||
// { key: 'location', title: '定位', class: 'cuIcon-location text-cyan' },
|
||||
{ key: 'exit', title: '退出', class: 'cuIcon-exit text-cyan' },
|
||||
]
|
||||
|
||||
@ -156,8 +156,28 @@
|
||||
toast.warning('H5暂不支持')
|
||||
// #endif
|
||||
}
|
||||
|
||||
const clockin = () => {
|
||||
// #ifndef H5
|
||||
if (loading.value) return
|
||||
addApi({
|
||||
weizhi: appStore.clockin
|
||||
}).then((res : any) => {
|
||||
if(res.success){
|
||||
toast.success(res.message)
|
||||
}else{
|
||||
toast.warning(res.message)
|
||||
}
|
||||
loading.value = true
|
||||
})
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
toast.warning('H5暂不支持')
|
||||
// #endif
|
||||
}
|
||||
|
||||
|
||||
const exit = () => {
|
||||
console.log(message)
|
||||
message
|
||||
.confirm({
|
||||
title: '提示',
|
||||
@ -180,6 +200,9 @@
|
||||
case 'exit':
|
||||
exit()
|
||||
break
|
||||
case 'clockin':
|
||||
clockin()
|
||||
break
|
||||
default:
|
||||
toast.show('功能暂未开发~')
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ setRouteName(routes)
|
||||
const router = createRouter({
|
||||
routes: [...routes], // 路由表信息
|
||||
})
|
||||
export const whiteList = ['/pages/login/login']
|
||||
export const whiteList = ['/pages/login/login','/pages/sljd/index' ]// 添加需要公开访问的页面路径 jiang20250605
|
||||
export const loginPage = '/pages/login/login'
|
||||
|
||||
export const beforEach = (to, from, next) => {
|
||||
|
BIN
src/static/CloudSign/cmaps/78-EUC-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78-EUC-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78-EUC-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78-EUC-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78-RKSJ-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78-RKSJ-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78ms-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78ms-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/78ms-RKSJ-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/78ms-RKSJ-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/83pv-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/83pv-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/90ms-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/90ms-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/90ms-RKSJ-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/90ms-RKSJ-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/90msp-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/90msp-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/90msp-RKSJ-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/90msp-RKSJ-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/90pv-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/90pv-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/90pv-RKSJ-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/90pv-RKSJ-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Add-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Add-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Add-RKSJ-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Add-RKSJ-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Add-RKSJ-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Add-RKSJ-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Add-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Add-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-0.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-0.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-1.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-1.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-3.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-3.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-4.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-4.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-5.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-5.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-6.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-6.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-UCS2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-CNS1-UCS2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-0.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-0.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-1.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-1.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-3.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-3.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-4.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-4.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-5.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-5.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-GB1-UCS2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-GB1-UCS2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-0.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-0.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-1.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-1.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-3.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-3.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-4.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-4.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-5.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-5.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-6.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-6.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-UCS2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Japan1-UCS2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-0.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-0.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-1.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-1.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-UCS2.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/Adobe-Korea1-UCS2.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/B5-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/B5-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/B5-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/B5-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/B5pc-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/B5pc-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/B5pc-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/B5pc-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/CNS-EUC-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/CNS-EUC-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/CNS-EUC-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/CNS-EUC-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/CNS1-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/CNS1-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/CNS1-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/CNS1-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/CNS2-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/CNS2-H.bcmap
Normal file
Binary file not shown.
3
src/static/CloudSign/cmaps/CNS2-V.bcmap
Normal file
3
src/static/CloudSign/cmaps/CNS2-V.bcmap
Normal file
@ -0,0 +1,3 @@
|
||||
àRCopyright 1990-2009 Adobe Systems Incorporated.
|
||||
All rights reserved.
|
||||
See ./LICENSEáCNS2-H
|
BIN
src/static/CloudSign/cmaps/ETHK-B5-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/ETHK-B5-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/ETHK-B5-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/ETHK-B5-V.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/ETen-B5-H.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/ETen-B5-H.bcmap
Normal file
Binary file not shown.
BIN
src/static/CloudSign/cmaps/ETen-B5-V.bcmap
Normal file
BIN
src/static/CloudSign/cmaps/ETen-B5-V.bcmap
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user