新增了微信网页登录功能与关联功能。

拆分前台与Express后端API接口,前端VUE代码负责接收Express后端发来的数据进行展示,Express后端复制处理敏感信息和接口访问。
This commit is contained in:
紫幽冥竹 2024-03-07 16:11:49 +08:00
parent c0b2977f92
commit 7603f1513e
119 changed files with 6127 additions and 525 deletions

View File

@ -1,144 +0,0 @@
<template>
<div>
<div class="header">
<div class="left">
<div class="leftBox">
<div
class="titleOne"
@click="toggleDropdown"
@mousemove="changeBackgroundColorMove1()"
@mouseleave="changeBackgroundColorLeave1()"
:style="backgroundColor1"
>
目录<el-icon style="padding-left: 5px;"><ArrowRight /></el-icon>
</div>
<div class="dropdown" v-if="showDropdown">
<div
class="titleTwo"
@click="about()"
@mousemove="changeBackgroundColorMove2()"
@mouseleave="changeBackgroundColorLeave2()"
:style="backgroundColor2"
>
关于
</div>
<div
class="titleThree"
@click="pickingDetails()"
@mousemove="changeBackgroundColorMove3()"
@mouseleave="changeBackgroundColorLeave3()"
:style="backgroundColor3"
>
物料申请
</div>
<div
class="titleFour"
@click="finishedProduct()"
@mousemove="changeBackgroundColorMove4()"
@mouseleave="changeBackgroundColorLeave4()"
:style="backgroundColor4"
>
成品入库
</div>
</div>
</div>
</div>
<div style="position: fixed; top: 6%; left: 50%; transform: translate(-50%, -50%);">
<img src="../assets/logo.png" style="width: 80px; height: 80px;"/>
</div>
<div class="right" v-if="!this.token">
<!-- 注册和登录 -->
<el-icon color="white"><Coin /></el-icon>
<div class="icon" @click="register">注册</div>
<el-icon color="white"><Check /></el-icon>
<div class="icon" @click="login">登录</div>
</div>
<div class="right" v-if="this.token">
<!-- 注册和登录 -->
<el-icon color="white"><User /></el-icon>
<div class="icon">{{this.name}}</div>
<el-icon color="white"><RemoveFilled /></el-icon>
<div class="icon" @click="logout">退出登录</div>
</div>
</div>
</div>
</template>
<script setup>
import {ref,reactive, onMounted} from 'vue'
import router from "../router";
const clickNum = ref(0)
let showDropdown = ref(false)
const backgroundColor1 = ref('')
const backgroundColor2 = ref('')
const backgroundColor3 = ref('')
const backgroundColor4 = ref('')
const token = ref(false)
const name = ref('')
function changeBackgroundColorMove1(){
backgroundColor1.value = 'background-color: black;'
}
function changeBackgroundColorLeave1(){
backgroundColor1.value = ''
}
function changeBackgroundColorMove2(){
backgroundColor2.value = 'background-color:black;'
}
function changeBackgroundColorLeave2(){
backgroundColor2.value = ''
}
function changeBackgroundColorMove3(){
backgroundColor3.value = 'background-color: black;'
}
function changeBackgroundColorLeave3(){
backgroundColor3.value = ''
}
function changeBackgroundColorMove4(){
backgroundColor4.value = 'background-color: black;'
}
function changeBackgroundColorLeave4(){
backgroundColor4.value = ''
}
function toggleDropdown() {
console.log("showDropdown:",showDropdown.value)
showDropdown.value = !showDropdown.value
clickNum.value++
}
//
function pickingDetails(){
router.push({name:'pickingDetails'})
}
function login(){
router.push({name:'login'})
}
function register(){
router.push({name:"register"})
}
function about(){
router.push({name:'about'})
}
function finishedProduct(){
router.push({name:'finishedProduct'})
}
function logout(){
localStorage.removeItem('contact');
token.value = false
name = null
}
onMounted(()=>{
if(localStorage.getItem('contact') != null){
token.value=true
name.value = localStorage.getItem('contact');
}
})
</script>
<style scoped>
@import "../assets/css/header.css";
</style>

View File

@ -1,41 +0,0 @@
<template>
<div>
<img
src="../assets/images/logo.png"
class="zoomable"
alt="Your Image"
@mouseover="zoomIn"
@mouseout="zoomOut"
/>
<p
class="zoomable"
@mouseover="zoomIn"
@mouseout="zoomOut"
>
Your Text Your Text Your Text Your Text Your Text Your Text Your Text Your Text Your Text Your Text
</p>
</div>
</template>
<script>
export default {
methods: {
zoomIn(event) {
event.target.style.transition = "transform 0.5s ease";
event.target.style.transform = "scale(1.2)";
},
zoomOut(event) {
event.target.style.transition = "transform 0.5s ease";
event.target.style.transform = "scale(1)";
}
}
};
</script>
<style>
.zoomable {
transition: transform 0.5s ease; /* 添加过渡效果 */
}
</style>

View File

View File

@ -0,0 +1 @@
PqBrC6N99go7Y02A

BIN
wsyt/dist.zip Normal file

Binary file not shown.

View File

@ -15,6 +15,7 @@
"element-plus": "^2.4.4",
"md5": "^2.3.0",
"mitt": "^3.0.1",
"pinia": "^2.1.7",
"qrcode": "^1.5.3",
"uuid": "^9.0.1",
"v-viewer": "^3.0.13",
@ -24,10 +25,7 @@
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.5.2",
<<<<<<< HEAD
=======
"copy-webpack-plugin": "^12.0.2",
>>>>>>> 29d3e42 (鸿)
"vite": "^5.0.10"
}
},
@ -448,8 +446,6 @@
"resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.1.6.tgz",
"integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
},
<<<<<<< HEAD
=======
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
@ -496,14 +492,11 @@
"@jridgewell/trace-mapping": "^0.3.9"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
<<<<<<< HEAD
=======
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.22",
"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
@ -550,7 +543,6 @@
"node": ">= 8"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/@popperjs/core": {
"name": "@sxzz/popperjs-es",
"version": "2.11.7",
@ -726,8 +718,6 @@
"win32"
]
},
<<<<<<< HEAD
=======
"node_modules/@sindresorhus/merge-streams": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
@ -772,7 +762,6 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"node_modules/@types/lodash": {
"version": "4.14.202",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz",
@ -786,8 +775,6 @@
"@types/lodash": "*"
}
},
<<<<<<< HEAD
=======
"node_modules/@types/node": {
"version": "20.11.20",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.11.20.tgz",
@ -798,7 +785,6 @@
"undici-types": "~5.26.4"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
@ -992,8 +978,6 @@
}
}
},
<<<<<<< HEAD
=======
"node_modules/@webassemblyjs/ast": {
"version": "1.11.6",
"resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz",
@ -1233,7 +1217,6 @@
"ajv": "^8.8.2"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -1272,8 +1255,6 @@
"form-data": "^4.0.0"
}
},
<<<<<<< HEAD
=======
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
@ -1312,7 +1293,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
@ -1321,8 +1301,6 @@
"node": ">=6"
}
},
<<<<<<< HEAD
=======
"node_modules/caniuse-lite": {
"version": "1.0.30001589",
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
@ -1330,7 +1308,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"node_modules/charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz",
@ -1339,8 +1316,6 @@
"node": "*"
}
},
<<<<<<< HEAD
=======
"node_modules/chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
@ -1351,7 +1326,6 @@
"node": ">=6.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
@ -1389,8 +1363,6 @@
"node": ">= 0.8"
}
},
<<<<<<< HEAD
=======
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
@ -1418,7 +1390,6 @@
"webpack": "^5.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz",
@ -1463,8 +1434,6 @@
"resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
"integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
},
<<<<<<< HEAD
=======
"node_modules/electron-to-chromium": {
"version": "1.4.680",
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz",
@ -1472,7 +1441,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"node_modules/element-plus": {
"version": "2.4.4",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.4.tgz",
@ -1508,8 +1476,6 @@
"resolved": "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz",
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
},
<<<<<<< HEAD
=======
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@ -1531,7 +1497,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"node_modules/esbuild": {
"version": "0.19.10",
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.10.tgz",
@ -1570,8 +1535,6 @@
"@esbuild/win32-x64": "0.19.10"
}
},
<<<<<<< HEAD
=======
"node_modules/escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
@ -1582,14 +1545,11 @@
"node": ">=6"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
<<<<<<< HEAD
=======
"node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
@ -1637,14 +1597,11 @@
"node": ">=4.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
<<<<<<< HEAD
=======
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
@ -1717,7 +1674,6 @@
"node": ">=8"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
@ -1778,8 +1734,6 @@
"node": "6.* || 8.* || >= 10.*"
}
},
<<<<<<< HEAD
=======
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
@ -1842,14 +1796,11 @@
"node": ">= 4"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
<<<<<<< HEAD
=======
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
@ -1859,7 +1810,6 @@
"node": ">=0.10.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@ -1868,8 +1818,6 @@
"node": ">=8"
}
},
<<<<<<< HEAD
=======
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
@ -1929,7 +1877,6 @@
"node": ">=6.11.5"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
@ -1987,8 +1934,6 @@
"resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
<<<<<<< HEAD
=======
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
@ -2018,7 +1963,6 @@
"node": ">=8.6"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
@ -2054,8 +1998,6 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
<<<<<<< HEAD
=======
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
@ -2079,7 +2021,6 @@
"node": ">=0.10.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/normalize-wheel-es": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
@ -2123,8 +2064,6 @@
"node": ">=8"
}
},
<<<<<<< HEAD
=======
"node_modules/path-type": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/path-type/-/path-type-5.0.0.tgz",
@ -2134,14 +2073,11 @@
"node": ">=12"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
<<<<<<< HEAD
=======
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
@ -2151,7 +2087,56 @@
"node": ">=8.6"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/pinia": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
"integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
"dependencies": {
"@vue/devtools-api": "^6.5.0",
"vue-demi": ">=0.14.5"
},
"funding": {
"url": "https://github.com/sponsors/posva"
},
"peerDependencies": {
"@vue/composition-api": "^1.4.0",
"typescript": ">=4.4.4",
"vue": "^2.6.14 || ^3.3.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
},
"typescript": {
"optional": true
}
}
},
"node_modules/pinia/node_modules/vue-demi": {
"version": "0.14.7",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz",
"integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/pngjs": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
@ -2173,8 +2158,6 @@
"node": "^10 || ^12 || >=14"
}
},
<<<<<<< HEAD
=======
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
@ -2184,7 +2167,6 @@
"node": ">=6"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/qrcode": {
"version": "1.5.3",
"resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.3.tgz",
@ -2202,8 +2184,6 @@
"node": ">=10.13.0"
}
},
<<<<<<< HEAD
=======
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
@ -2219,7 +2199,6 @@
"safe-buffer": "^5.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
@ -2228,8 +2207,6 @@
"node": ">=0.10.0"
}
},
<<<<<<< HEAD
=======
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
@ -2239,14 +2216,11 @@
"node": ">=0.10.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
},
<<<<<<< HEAD
=======
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
@ -2257,7 +2231,6 @@
"node": ">=0.10.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/rollup": {
"version": "4.9.1",
"resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.9.1.tgz",
@ -2287,8 +2260,6 @@
"fsevents": "~2.3.2"
}
},
<<<<<<< HEAD
=======
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@ -2328,14 +2299,11 @@
"randombytes": "^2.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
},
<<<<<<< HEAD
=======
"node_modules/slash": {
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/slash/-/slash-5.1.0.tgz",
@ -2355,7 +2323,6 @@
"node": ">=0.10.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
@ -2364,8 +2331,6 @@
"node": ">=0.10.0"
}
},
<<<<<<< HEAD
=======
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
@ -2377,7 +2342,6 @@
"source-map": "^0.6.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
@ -2402,8 +2366,6 @@
"node": ">=8"
}
},
<<<<<<< HEAD
=======
"node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
@ -2576,7 +2538,6 @@
"punycode": "^2.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
@ -2695,8 +2656,6 @@
"resolved": "https://registry.npmjs.org/vue-viewer/-/vue-viewer-1.0.4.tgz",
"integrity": "sha512-wXNqcHR6BhoESCmSdQcNAwzNeOquZVxqphQRZlcZRr01xhso6pj5jtAknLNbBNWYOYnl8b8SpOsi5ob8agvrlw=="
},
<<<<<<< HEAD
=======
"node_modules/watchpack": {
"version": "2.4.0",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
@ -2810,7 +2769,6 @@
"node": ">= 10.13.0"
}
},
>>>>>>> 29d3e42 (鸿)
"node_modules/which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",
@ -3068,8 +3026,6 @@
"resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.1.6.tgz",
"integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
},
<<<<<<< HEAD
=======
"@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
@ -3107,14 +3063,11 @@
"@jridgewell/trace-mapping": "^0.3.9"
}
},
>>>>>>> 29d3e42 (鸿)
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
<<<<<<< HEAD
=======
"@jridgewell/trace-mapping": {
"version": "0.3.22",
"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
@ -3152,7 +3105,6 @@
"fastq": "^1.6.0"
}
},
>>>>>>> 29d3e42 (鸿)
"@popperjs/core": {
"version": "npm:@sxzz/popperjs-es@2.11.7",
"resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
@ -3249,8 +3201,6 @@
"dev": true,
"optional": true
},
<<<<<<< HEAD
=======
"@sindresorhus/merge-streams": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
@ -3292,7 +3242,6 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"@types/lodash": {
"version": "4.14.202",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz",
@ -3306,8 +3255,6 @@
"@types/lodash": "*"
}
},
<<<<<<< HEAD
=======
"@types/node": {
"version": "20.11.20",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.11.20.tgz",
@ -3318,7 +3265,6 @@
"undici-types": "~5.26.4"
}
},
>>>>>>> 29d3e42 (鸿)
"@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
@ -3475,8 +3421,6 @@
}
}
},
<<<<<<< HEAD
=======
"@webassemblyjs/ast": {
"version": "1.11.6",
"resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz",
@ -3697,7 +3641,6 @@
"fast-deep-equal": "^3.1.3"
}
},
>>>>>>> 29d3e42 (鸿)
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -3730,8 +3673,6 @@
"form-data": "^4.0.0"
}
},
<<<<<<< HEAD
=======
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
@ -3761,14 +3702,11 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
<<<<<<< HEAD
=======
"caniuse-lite": {
"version": "1.0.30001589",
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
@ -3776,14 +3714,11 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz",
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
},
<<<<<<< HEAD
=======
"chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
@ -3791,7 +3726,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
@ -3823,8 +3757,6 @@
"delayed-stream": "~1.0.0"
}
},
<<<<<<< HEAD
=======
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
@ -3846,7 +3778,6 @@
"serialize-javascript": "^6.0.2"
}
},
>>>>>>> 29d3e42 (鸿)
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz",
@ -3882,8 +3813,6 @@
"resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
"integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
},
<<<<<<< HEAD
=======
"electron-to-chromium": {
"version": "1.4.680",
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz",
@ -3891,7 +3820,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"element-plus": {
"version": "2.4.4",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.4.tgz",
@ -3924,8 +3852,6 @@
"resolved": "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz",
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
},
<<<<<<< HEAD
=======
"enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@ -3944,7 +3870,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"esbuild": {
"version": "0.19.10",
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.10.tgz",
@ -3976,8 +3901,6 @@
"@esbuild/win32-x64": "0.19.10"
}
},
<<<<<<< HEAD
=======
"escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
@ -3985,14 +3908,11 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
<<<<<<< HEAD
=======
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
@ -4030,14 +3950,11 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
<<<<<<< HEAD
=======
"events": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
@ -4100,7 +4017,6 @@
"to-regex-range": "^5.0.1"
}
},
>>>>>>> 29d3e42 (鸿)
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
@ -4137,8 +4053,6 @@
"resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
<<<<<<< HEAD
=======
"glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
@ -4189,28 +4103,22 @@
"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
<<<<<<< HEAD
=======
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
<<<<<<< HEAD
=======
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
@ -4258,7 +4166,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
@ -4306,8 +4213,6 @@
"resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
<<<<<<< HEAD
=======
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
@ -4331,7 +4236,6 @@
"picomatch": "^2.3.1"
}
},
>>>>>>> 29d3e42 (鸿)
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
@ -4355,8 +4259,6 @@
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
},
<<<<<<< HEAD
=======
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
@ -4377,7 +4279,6 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"normalize-wheel-es": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
@ -4409,29 +4310,40 @@
"resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
<<<<<<< HEAD
=======
"path-type": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/path-type/-/path-type-5.0.0.tgz",
"integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
<<<<<<< HEAD
=======
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"pinia": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
"integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
"requires": {
"@vue/devtools-api": "^6.5.0",
"vue-demi": ">=0.14.5"
},
"dependencies": {
"vue-demi": {
"version": "0.14.7",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz",
"integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
"requires": {}
}
}
},
"pngjs": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
@ -4447,15 +4359,12 @@
"source-map-js": "^1.0.2"
}
},
<<<<<<< HEAD
=======
"punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"qrcode": {
"version": "1.5.3",
"resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.3.tgz",
@ -4467,8 +4376,6 @@
"yargs": "^15.3.1"
}
},
<<<<<<< HEAD
=======
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
@ -4484,35 +4391,28 @@
"safe-buffer": "^5.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
},
<<<<<<< HEAD
=======
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
},
<<<<<<< HEAD
=======
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
>>>>>>> 29d3e42 (鸿)
"rollup": {
"version": "4.9.1",
"resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.9.1.tgz",
@ -4535,8 +4435,6 @@
"fsevents": "~2.3.2"
}
},
<<<<<<< HEAD
=======
"run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@ -4573,14 +4471,11 @@
"randombytes": "^2.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
},
<<<<<<< HEAD
=======
"slash": {
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/slash/-/slash-5.1.0.tgz",
@ -4594,14 +4489,11 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
},
<<<<<<< HEAD
=======
"source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
@ -4613,7 +4505,6 @@
"source-map": "^0.6.0"
}
},
>>>>>>> 29d3e42 (鸿)
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
@ -4632,8 +4523,6 @@
"ansi-regex": "^5.0.1"
}
},
<<<<<<< HEAD
=======
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
@ -4762,7 +4651,6 @@
"punycode": "^2.1.0"
}
},
>>>>>>> 29d3e42 (鸿)
"uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
@ -4819,8 +4707,6 @@
"resolved": "https://registry.npmjs.org/vue-viewer/-/vue-viewer-1.0.4.tgz",
"integrity": "sha512-wXNqcHR6BhoESCmSdQcNAwzNeOquZVxqphQRZlcZRr01xhso6pj5jtAknLNbBNWYOYnl8b8SpOsi5ob8agvrlw=="
},
<<<<<<< HEAD
=======
"watchpack": {
"version": "2.4.0",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
@ -4914,7 +4800,6 @@
"dev": true,
"peer": true
},
>>>>>>> 29d3e42 (鸿)
"which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",

View File

@ -6,7 +6,8 @@
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
"preview": "vite preview",
"devs": "vite --host 10.168.101.50 --port 80"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

View File

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 332 KiB

View File

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 342 KiB

View File

Before

Width:  |  Height:  |  Size: 769 KiB

After

Width:  |  Height:  |  Size: 769 KiB

View File

Before

Width:  |  Height:  |  Size: 765 KiB

After

Width:  |  Height:  |  Size: 765 KiB

View File

Before

Width:  |  Height:  |  Size: 1003 KiB

After

Width:  |  Height:  |  Size: 1003 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

Before

Width:  |  Height:  |  Size: 567 KiB

After

Width:  |  Height:  |  Size: 567 KiB

View File

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 297 KiB

After

Width:  |  Height:  |  Size: 297 KiB

View File

Before

Width:  |  Height:  |  Size: 313 KiB

After

Width:  |  Height:  |  Size: 313 KiB

View File

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

View File

Before

Width:  |  Height:  |  Size: 449 KiB

After

Width:  |  Height:  |  Size: 449 KiB

View File

Before

Width:  |  Height:  |  Size: 458 KiB

After

Width:  |  Height:  |  Size: 458 KiB

View File

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 253 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

Before

Width:  |  Height:  |  Size: 321 KiB

After

Width:  |  Height:  |  Size: 321 KiB

View File

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 391 KiB

View File

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 287 KiB

View File

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 276 B

After

Width:  |  Height:  |  Size: 276 B

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -16,7 +16,7 @@
<br />
<el-image
class="grid-text-title-img-wenyang"
:src="dialogImgUrl_xiaoguo"
:src="dialogImgUrl_xiaoguo.split(',')[0]"
fit="contain"
/>
<!-- <el-image style="width: 300px; height: 300px" :src="dialogImgUrl_xiaoguo" fit="contain" />-->
@ -27,7 +27,7 @@
<el-image
class="grid-text-title-img"
:src="dialogImgUrl_xiaoguo"
:src="dialogImgUrl_xiaoguo.split(',')[0]"
fit="contain"
/>
<!-- <el-image style="width: 300px; height: 300px" :src="dialogImgUrl_xiaoguo" fit="contain" />-->
@ -36,7 +36,7 @@
<div class="grid-text-title">纹样图</div>
<el-image
style="width: 300px; height: 300px"
:src="dialogImgUrl_wenyang"
:src="dialogImgUrl_wenyang.split(',')[0]"
fit="contain"
/>
<!--<el-image style="width: 300px; height: 300px" :src="dialogImgUrl_wenyang" fit="contain" />-->

View File

@ -0,0 +1,258 @@
<template>
<div>
<div class="header">
<div class="left">
<div class="leftBox">
<div
class="titleOne"
@click="toggleDropdown"
@mousemove="changeBackgroundColorMove1()"
@mouseleave="changeBackgroundColorLeave1()"
:style="backgroundColor1"
>
目录<el-icon style="padding-left: 5px;"><ArrowRight /></el-icon>
</div>
<div class="dropdown" v-if="showDropdown">
<div
class="titleTwo"
@click="about()"
@mousemove="changeBackgroundColorMove2()"
@mouseleave="changeBackgroundColorLeave2()"
:style="backgroundColor2"
>
关于
</div>
<div
class="titleThree"
@click="pickingDetails()"
@mousemove="changeBackgroundColorMove3()"
@mouseleave="changeBackgroundColorLeave3()"
:style="backgroundColor3"
>
物料申请
</div>
<div
class="titleFour"
@click="finishedProduct()"
@mousemove="changeBackgroundColorMove4()"
@mouseleave="changeBackgroundColorLeave4()"
:style="backgroundColor4"
>
成品入库
</div>
</div>
</div>
</div>
<div style="position: fixed; top: 6%; left: 50%; transform: translate(-50%, -50%);">
<img src="../assets/logo.png" style="width: 80px; height: 80px;"/>
</div>
<div class="right" v-if="isWechat">
<!-- 在微信中显示的内容 -->
<div style="display: grid; grid-template-columns: 1fr;gap: 0px;color: #ffffff;font-size: 12px;">
<img v-if="access_token==null" src="@/assets/images/微信.png" @click="wechatlogin" style="width: 50px; height: 50px;" />
<img v-else :src=headimgurl style="width: 50px; height: 50px;" />
<div v-if="access_token==null">微信登录</div>
<div v-else>{{name}}</div>
</div>
</div>
<div v-else >
<!-- 非微信环境中的内容 -->
</div>
<div class="right" v-if="!token&&!isWechat">
<!-- 注册和登录 -->
<el-icon color="white"><Coin /></el-icon>
<div class="icon" @click="register">注册</div>
<el-icon color="white"><Check /></el-icon>
<div class="icon" @click="login">登录</div>
</div>
<div class="right" v-if="token">
<!-- 注册和登录 -->
<el-icon color="white"><User /></el-icon>
<div class="icon">{{name}}</div>
<el-icon color="white"><RemoveFilled /></el-icon>
<div class="icon" @click="logout">退出登录</div>
</div>
</div>
</div>
</template>
<script setup>
import {ref,reactive, onMounted} from 'vue'
import router from "../router";
import {wechatLogin} from "@/util/indexApi";
import axios from 'axios';
import { ElNotification } from 'element-plus';
import { expressUrl } from '@/util/Resource';
const clickNum = ref(0)
let showDropdown = ref(false)
const backgroundColor1 = ref('')
const backgroundColor2 = ref('')
const backgroundColor3 = ref('')
const backgroundColor4 = ref('')
let token = ref(false)
let access_token = ref(null)
let name = ref(null)
let isWechat = ref(false)
let headimgurl = ref(null)
function changeBackgroundColorMove1(){
backgroundColor1.value = 'background-color: black;'
}
function changeBackgroundColorLeave1(){
backgroundColor1.value = ''
}
function changeBackgroundColorMove2(){
backgroundColor2.value = 'background-color:black;'
}
function changeBackgroundColorLeave2(){
backgroundColor2.value = ''
}
function changeBackgroundColorMove3(){
backgroundColor3.value = 'background-color: black;'
}
function changeBackgroundColorLeave3(){
backgroundColor3.value = ''
}
function changeBackgroundColorMove4(){
backgroundColor4.value = 'background-color: black;'
}
function changeBackgroundColorLeave4(){
backgroundColor4.value = ''
}
function toggleDropdown() {
console.log("showDropdown:",showDropdown.value)
showDropdown.value = !showDropdown.value
clickNum.value++
}
//
function pickingDetails(){
router.push({name:'pickingDetails'})
}
function login(){
router.push({name:'login'})
}
function register(){
router.push({name:"register"})
}
function about(){
router.push({name:'about'})
}
function finishedProduct(){
router.push({name:'finishedProduct'})
}
function logout(){
localStorage.removeItem('contact');
token.value = false
name.value = null
}
function wechatlogin(){
wechatLogin()
}
function isWeixin() {
const ua = window.navigator.userAgent.toLowerCase();
return /micromessenger/i.test(ua);
}
const open1 = () => {
ElNotification({
title: '微信登录成功',
message: '请填写本站账户和密码、名称进行绑定',
type: 'success',
})}
function showNotification (title,message,type = 'success'){
ElNotification({
title,
message,
type,
});
}
onMounted(()=>{
isWechat.value = isWeixin();
if(localStorage.getItem('contact') != null&& !isWechat.value ){
token.value=true
name.value = localStorage.getItem('contact');
}
if(isWechat.value&&localStorage.getItem('access_token')==null)
{
// URL
const url = window.location.href;
// URLcode
function getQueryString(name) {
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = url.substr(url.indexOf('?')+1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
// code
const code = getQueryString('code');
// codeGETcodeExpress
wechatlogintoken(code);
}
else if(isWechat.value){
access_token.value=localStorage.getItem('access_token');
name.value=localStorage.getItem('nickname');
headimgurl.value=localStorage.getItem('headimgurl');
}
})
async function wechatlogintoken(code){
if (code !== null) {
try {
const response = await axios.get(`${expressUrl}/wechatlogin?code=${code}`);
console.log(response.data)
if (response.data.status === 200) {
// openid.value = response.data.nickname;
localStorage.setItem('openid', response.data.openid);
localStorage.setItem('nickname', response.data.nickname);
localStorage.setItem('headimgurl', response.data.headimgurl);
localStorage.setItem('access_token', response.data.accesstoken);
localStorage.setItem('cellPhoneNumber',response.data.cellPhoneNumber);
//
access_token.value = localStorage.getItem('access_token');
name.value = localStorage.getItem('nickname');
headimgurl.value = localStorage.getItem('headimgurl');
if(localStorage.getItem('cellPhoneNumber')=='')
{
showNotification('微信登录成功', '请填写本站账户和密码、名称进行绑定');
router.push({name:'linkedmobile'});
}
}else if(response.data.status === 201)
{
localStorage.setItem('openid', response.data.openid);
localStorage.setItem('nickname', response.data.nickname);
localStorage.setItem('headimgurl', response.data.headimgurl);
localStorage.setItem('access_token', response.data.accesstoken);
localStorage.setItem('cellPhoneNumber', '');
//
access_token.value = localStorage.getItem('access_token');
name.value = localStorage.getItem('nickname');
headimgurl.value = localStorage.getItem('headimgurl');
open1();
router.push({name:response.data.route});
}
} catch (error) {
}
}
}
</script>
<style scoped>
@import "../assets/css/header.css";
</style>

View File

@ -3,7 +3,6 @@ import './assets/main.css'
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
@ -13,7 +12,6 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import axios from 'axios'
const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
@ -24,5 +22,4 @@ app.use(ElementPlus)
app.config.globalProperties.axios = axios;
app.use(router)
app.mount('#app')

View File

@ -14,6 +14,7 @@ const router = createRouter({
{ path: '/register', name: 'register', component: () => import('../views/register.vue')},
{ path: '/pickingDetails', name: 'pickingDetails', component: () => import('../views/pickingDetails.vue')},
{ path: '/finishedProduct', name: 'finishedProduct', component: () => import('../views/finishedProduct.vue')},
{ path: '/linkedmobile', name: 'linkedmobile', component: () => import('../views/linkedmobile.vue')},
{ path: '/test', name: 'test', component: () => import('../views/test.vue')},
]
})

View File

@ -16,7 +16,8 @@ export const filiServiceUrl="http://cop.qdniiot.com/service/";
export const FfiliServiceUrl="https://apaas.seeyonv8.com/service/";
//文件下载url
export const filiStorageKeyUrl="api/wushuiyuntai3071243142359302596/FileAppService/generateShareUrl";
//Express后端地址
export const expressUrl="/express";
// 请求头
export const headers = {
'Content-Type': 'application/json',
@ -70,4 +71,10 @@ export const Enums=['wuliaoguanli','xiuniangzhichengjibie','minzu','jifa','xiuni
//[id,name]
export const EnumCodeMap=reactive(new Map<string, any>());
export const EnumCodeoPtionsMap=reactive(new Map<string, any>());
export const EnumCodeoPtionsMapS=reactive(new Map<string, any>());
export const EnumCodeoPtionsMapS=reactive(new Map<string, any>());
//微信相关
export const weixinAppId="wxf5c654b43f104000";
export const weixinAppSecret="64fb551a04edb118580983e965df2591";
export const weixinredirect_uri="https://wsyt.guizhoujc.com";
//export const weixinredirect_uri="http://10.168.101.50";

View File

@ -1,12 +1,13 @@
//欧政铭
import { ref } from 'vue';
import axios from 'axios';
import axios , { AxiosResponse }from 'axios';
import { v4 as uuidv4 } from 'uuid';//需要安装npm install uuid
import { calculateSignature } from '@/util/md5Util'; // 修改为实际的路径
import {headers,appSecret, Enums, isEnvironment, renyuanApiUrl} from '@/util/Resource';
import {filiStorageKeyUrl,serviceUrl,FserviceUrl,
wazpApiUpdateUrl,filiServiceUrl,FfiliServiceUrl,EnumApiUrl,
import {headers,appSecret, isEnvironment, renyuanApiUrl} from '@/util/Resource';
import {filiStorageKeyUrl,serviceUrl,expressUrl,
wazpApiUpdateUrl,filiServiceUrl,FfiliServiceUrl,
EnumCodeMap,EnumCodeoPtionsMap,EnumCodeoPtionsMapS,GetUserByApiUrl,userApiUpdateUrl
,weixinAppId,weixinredirect_uri
} from '@/util/Resource';
@ -109,89 +110,44 @@ export async function selectApi(leixing,pageNumber,pageSize,apiurl){
}
}
//枚举查询接口
/**
*
* @param codes code
* @param apiurl url
* @param isEnvironment true
*
* @returns
*/
export async function selectEnumApi(codes,apiurl){
//随机32位请求流水号
const randomUUID = uuidv4();
let randomNum = randomUUID.substr(0, 32);
// 请求头headers在Resource.ts文件里面
// 请求体部分参数
let requestBody =null;
requestBody = {
requestId: randomNum,
timestamp: Date.now(),
//异步回调URL
"notifyUrl": "",
//排序
"sort": {
"orders": [
{
"property": "createTime",
"direction": "ASC"
}
]
},
// 条件
"params":{"enumCodes": [codes]}
};
// 计算 MD5 签名
const signature = calculateSignature(requestBody, appSecret);
headers['sign'] = signature;
try {
// 发送 POST 请求api/wushuiyuntai9146708742788827704/Renyuandangan11AppServiceImpl/selectById
//调用本地+serviceUrl
let response =null;
if(isEnvironment){
response = await axios.post(serviceUrl+apiurl, requestBody, { headers });
}else{
response = await axios.post(apiurl, requestBody, { headers });
}
// 处理返回的数据
if(response.status === 200){
const responseData = response.data;
const temp1 =ref([])
const temp2 =ref([])
for (const key in responseData['data']['content']) {
//把得到的枚举存到map里面
EnumCodeMap.set(responseData['data']['content'][key]['id'],responseData['data']['content'][key]['name']);
//存给下拉选项用
if(responseData['data']['content'][key]['enumCode']=='minzu')
{
temp1.value.push(responseData['data']['content'][key]['name']);
EnumCodeoPtionsMapS.set(responseData['data']['content'][key]['name'],responseData['data']['content'][key]['id'])
}
if(responseData['data']['content'][key]['enumCode']=='jifa')
{
temp2.value.push(responseData['data']['content'][key]['name']);
EnumCodeoPtionsMapS.set(responseData['data']['content'][key]['name'],responseData['data']['content'][key]['id'])
}
}
if(codes=='minzu')
EnumCodeoPtionsMap.set('民族',temp1.value);
if(codes=='jifa')
EnumCodeoPtionsMap.set('技法',temp2.value);
//return parseJson( responseData['data']['content']);
return responseData;
}else{console.log('枚举',EnumCodeMap);}
} catch (error) {
console.error('调用枚举接口发生错误:', error);
}
export async function selectEnumApi(): Promise<void> {
try {
// 发送GET请求获取枚举数据
const response: AxiosResponse<any> = await axios.get(`${expressUrl}/enum`);
if (response.status === 200) {
const responseData = response.data;
// 遍历并处理枚举数据
for (const key in responseData) {
const content = responseData[key]['data']['content'];
for (const item of content) {
// 存储到全局枚举名称与ID映射
EnumCodeMap.set(item['id'], item['name']);
// 存储下拉选项的映射
// EnumCodeoPtionsMapS.set(item['name'], item['id']);
// 根据枚举类型分别存储到对应的下拉选项列表
if (item['enumCode'] === 'minzu') {
EnumCodeoPtionsMap.get('民族')?.push(item['name']) || EnumCodeoPtionsMap.set('民族', [item['name']]);
} else if (item['enumCode'] === 'jifa') {
EnumCodeoPtionsMap.get('技法')?.push(item['name']) || EnumCodeoPtionsMap.set('技法', [item['name']]);
}
}
}
} else {
console.error(`获取枚举信息失败,状态码:${response.status}`);
}
} catch (error) {
console.error('调用枚举查询接口发生错误:', error);
}
}
/** id
* @param uid id
*/
@ -428,6 +384,14 @@ export async function UP_User_Api(){
}
}
export function wechatLogin(){
window.location.href ='https://open.weixin.qq.com/connect/oauth2/authorize?appid='+weixinAppId+'&redirect_uri='+weixinredirect_uri+'&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect';
// window.location.href ='https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4ba9c65aa31c50db&redirect_uri=http://10.168.101.50/wechatlogin/&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect';
}
//解析JSON接口
/**

View File

@ -67,14 +67,14 @@
<div slot="header" class="card-header">
<img
v-if="item.danganleixing == zuopinleixing.作品"
:src="item.xiaoguotu"
:src="item.xiaoguotu.split(',')[0]"
alt="作品图片"
class="card-image"
@click="dialogV(item.id)"
/>
<img
v-else-if="item.danganleixing == zuopinleixing.纹样"
:src="item.yuanshitupian"
:src="item.yuanshitupian.split(',')[0]"
alt="作品图片"
class="card-image"
@click="dialogV(item.id)"
@ -159,15 +159,10 @@
import { onMounted, ref } from "vue";
import {
zuopinleixing,
wazpApiUrl,
EnumApiUrl,
Enums,
sousuoUrl,
EnumCodeoPtionsMapS,
EnumCodeMap,
expressUrl,
} from "@/util/Resource";
import {
selectApi,
getFiliUrl,
selectEnumApi,
selectUserApi,
UP_WAZP_Api,
@ -177,21 +172,15 @@ import el_dialog from "../components/dialog.vue";
import input_select from "@/components/input_select.vue";
import emitter from "@/util/emitter";
import Viewer from "@/components/Viewer.vue";
import axios from 'axios';
//
//let zuopingDataArray:zuopingData = {} as zuopingData;
// 使 ref
let zuopingDataArray = ref([]);
let wenyangDataArray = ref([]);
//
let handleFilterDataArray = ref([]);
//
let DataArray = ref([]);
let num = ref(8);
let onM = ref("全部");
let yenum = ref(1);
let Tsousuo = ref("");
let Txiala = ref("");
//
let srcList = ref([
@ -225,13 +214,16 @@ function dialogV(id) {
//
onMounted(async () => {
//
for (const key in Enums) {
await selectEnumApi(Enums[key], EnumApiUrl);
}
//for (const key in Enums) {
await selectEnumApi();
//}
//{"danganleixing": "WENYANG"}
//await getSelectApi({"and_like_mingcheng": ""},1,10,sousuoUrl);
await getSelectApi({ danganleixing: "ZUOPIN" }, 1, 10, wazpApiUrl);
await getSelectApi({ danganleixing: "WENYANG" }, 1, 10, wazpApiUrl);
//let tt = await axios.get(`http://10.168.101.50:3000/zuopin?danganleixing=${'ZUOPIN'}&pageNumber=${1}&pageSize=${10}`)
// await axios.get(`http://10.168.101.50:3000/wenyang?danganleixing=${'WENYANG'}&pageNumber=${1}&pageSize=${10}`)
await getSelectApi("/zuopin","ZUOPIN", 1, 10);
await getSelectApi("/wenyang","WENYANG", 1, 10);
});
/**
@ -241,14 +233,13 @@ onMounted(async () => {
* @param pageSize 每页的数量
* @param wazpApiUrl 纹案与作品分页查询接口url
*/
async function getSelectApi(str, pageNumber, pageSize, wazpApiUrl) {
async function getSelectApi(luyou,str, pageNumber, pageSize) {
try {
//
console.log(str);
//let str =ref({"danganleixing": "WENYANG"});
const result = await selectApi(str, pageNumber, pageSize, wazpApiUrl);
console.log(result.data);
//
const result =await axios.get(`${expressUrl}${luyou}?danganleixing=${str}&pageNumber=${pageNumber}&pageSize=${pageSize}`)
//
if (DataArray.value == "") {
// DataArray
DataArray.value = result.data.content;
@ -275,26 +266,11 @@ function startsWithHttpOrHttps(url) {
}
//
async function wazpfenlei(result) {
const getFiliUrlPromise = (url) =>
getFiliUrl(url).then((res) => res.split(",")[0]);
for (const item of result) {
const dataIndex = DataArray.value.findIndex((data) => data.id === item.id);
if (dataIndex !== -1) {
// xiaoguotu
if (!startsWithHttpOrHttps(DataArray.value[dataIndex]["xiaoguotu"])) {
DataArray.value[dataIndex]["xiaoguotu"] = item.xiaoguotu
? await getFiliUrlPromise(item.xiaoguotu)
: "";
}
// wenyangtupian
if (!startsWithHttpOrHttps(DataArray.value[dataIndex]["wenyangtupian"])) {
DataArray.value[dataIndex]["wenyangtupian"] = item.wenyangtupian
? await getFiliUrlPromise(item.wenyangtupian)
: "";
}
//
if (
@ -316,16 +292,7 @@ async function wazpfenlei(result) {
DataArray.value[dataIndex]["shejishiCode"] =
user.data.content["xingming"];
}
// yuanshitupian
if (item.danganleixing === zuopinleixing.纹样 && item.yuanshitupian) {
if (
!startsWithHttpOrHttps(DataArray.value[dataIndex]["yuanshitupian"])
) {
DataArray.value[dataIndex]["yuanshitupian"] = item.yuanshitupian
? await getFiliUrlPromise(item.yuanshitupian)
: "";
}
}
}
}
}
@ -340,7 +307,6 @@ function wenyangcon() {
temp.value.push(DataArray.value[key]);
}
}
console.log("纹样:", temp.value);
handleFilterDataArray.value = temp.value.slice(0, num.value);
}
function zuopincon() {
@ -410,7 +376,9 @@ function addcon() {
//
emitter.on("sousuo", async (value) => {
try {
await getSelectApi({ and_like_mingcheng: Tsousuo.value }, 1, 8, sousuoUrl);
console.log(value)
//await getSelectApi({ and_like_mingcheng: Tsousuo.value }, 1, 8, sousuoUrl);
await getSelectApi("/sousuo",value[0], 1, 8);
handleFilterDataArray.value = DataArray.value
.filter((item) => item.mingcheng.includes(value[0]))
.slice(0, num.value);
@ -426,32 +394,84 @@ emitter.on("sousuo", async (value) => {
emitter.on("xiala", async (value) => {
try {
await filterAndSetData(value, sousuoUrl);
filterAndSetData(value);
} catch (error) {
console.error("筛选数据时发生错误:", error);
}
});
async function filterAndSetData(value, sousuoUrl) {
async function filterAndSetData(value) {
let conditionKey;
let enumValue = EnumCodeoPtionsMapS.get(value[0]);
if (value[1] === "民族") {
conditionKey = "minzu";
await getSelectApi({ [conditionKey]: enumValue }, 1, 8, sousuoUrl);
let foundKey = getKeyByValue(EnumCodeMap, value[0]);
const temp = await axios.get(`${expressUrl}/shaixuan?leixing=${conditionKey}&foundKey=${foundKey}&pageNumber=${1}&pageSize=${8}`)
let filteredData = ref([]);
// Map id
const existingIds = new Map(DataArray.value.map(item => [item.id, true]));
// 使
const newData = [];
for (const item of temp.data.content) {
if (!existingIds.has(item.id)) {
newData.push(item);
existingIds.set(item.id, true);
}
}
// DataArray
DataArray.value.push(...newData);
for (const item of DataArray.value) {
if (item[conditionKey] === getKeyByValue(EnumCodeMap, value[0])) {
filteredData.value.push(item);
}
}
//wazpfenlei(temp.data.content)
handleFilterDataArray.value = filteredData.value.slice(0, num.value);
//await getSelectApi("/shaixuan",{ [conditionKey]: enumValue }, 1, 8);
} else if (value[1] === "技法") {
conditionKey = "jifa";
await getSelectApi({ [conditionKey]: enumValue }, 1, 8, sousuoUrl);
let foundKey = getKeyByValue(EnumCodeMap, value[0]);
const temp = await axios.get(`${expressUrl}/shaixuan?leixing=${conditionKey}&foundKey=${foundKey}&pageNumber=${1}&pageSize=${8}`)
let filteredData = ref([]);
// Map id
const existingIds = new Map(DataArray.value.map(item => [item.id, true]));
// 使
const newData = [];
for (const item of temp.data.content) {
if (!existingIds.has(item.id)) {
newData.push(item);
existingIds.set(item.id, true);
}
}
// DataArray
DataArray.value.push(...newData);
for (const item of DataArray.value) {
if (item[conditionKey] === getKeyByValue(EnumCodeMap, value[0])) {
filteredData.value.push(item);
}
}
//wazpfenlei(temp.data.content)
handleFilterDataArray.value = filteredData.value.slice(0, num.value);
//await getSelectApi("/shaixuan",{ [conditionKey]: enumValue }, 1, 8);
}
const filteredData = [];
for (const key in DataArray.value) {
if (DataArray.value[key][conditionKey] === enumValue) {
filteredData.push(DataArray.value[key]);
function getKeyByValue(map, value) {
for (const [key, mapValue] of map.entries()) {
if (mapValue === value) {
return key;
}
}
return undefined; // undefined
}
handleFilterDataArray.value = filteredData.slice(0, num.value);
}
</script>

View File

@ -0,0 +1,224 @@
<template>
<div>
<!--头部标签 -->
<div class="header">
<div style="position: fixed; top: 6%; left: 50%; transform: translate(-50%, -50%);">
<img src="/src/assets/logo.png" style="width: 80px; height: 80px;cursor: pointer;" @click="enterHomePage"/>
</div>
</div>
</div>
<!-- 注册表单的外层包裹容器 -->
<div class="register-wrap">
<!-- 注册表单 -->
<el-form class="register-container" label-position="top" status-icon>
<!-- 标题 -->
<h2>用户注册</h2><br>
<el-form-item label="联系方式:">
<el-input v-model="contact" placeholder="手机号" autocomplete="off" minlength="11" maxlength="11" show-word-limit
:rules="[{ required: true, message: '手机号不能为空', trigger: 'change' }, { validator: validateMobile, trigger: 'change' }]"></el-input>
</el-form-item>
<el-form-item label="密码:" class="left-top-label">
<el-input type="password" v-model="password" placeholder="设置密码" autocomplete="off" show-password
:rules="[{ required: true, message: '密码不能为空', trigger: 'change' }, { validator: validatePassword, trigger: 'change' }]"></el-input>
</el-form-item>
<el-form-item label="确认密码:">
<el-input type="password" v-model="confirmPassword" placeholder="确认密码" autocomplete="off" show-password
:rules="[{ required: true, message: '确认密码不能为空', trigger: 'blur' }, { validator: validateConfirmPassword, trigger: 'blur' }]"></el-input>
</el-form-item>
<el-form-item label="姓名:">
<el-input v-model="name" placeholder="姓名" autocomplete="off"></el-input>
</el-form-item>
<!-- 注册按钮 -->
<el-form-item>
<el-button type="primary" @click="callApi" style="width: 100%;">注册</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script setup>
import headerComponent from '../components/promotionalPageComponents/header.vue'
import FooterCompoent from '../components/footer.vue'
import router from '../router'
import { expressUrl } from '@/util/Resource'
import { ref } from 'vue';
import axios from 'axios';
import { ElNotification } from 'element-plus'
/*components: {
//
Plus,FooterCompoent
}*/
const password= ref('');
const confirmPassword= ref('');
const name= ref('');
const contact= ref('');
const userType= 'YOUKE';
const open1 = () => {
ElNotification({
title: '关联成功',
message: '微信已与本站存在的账号关联绑定成功',
type: 'success',
})
}
const showNotification = (title, message, type = 'success') => {
ElNotification({
title,
message,
type,
});
};
function enterHomePage(){
router.push({name:'home'})
}
function gotoLogin() {
//
// 使 Vue Router
router.push({ name: 'login' });
}
// 8-16
function validatePassword(rule, value, callback) {
const passwordReg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
if (!passwordReg.test(value)) {
callback(new Error('密码格式不正确需为8-16位数字和字母的组合'));
} else {
callback();
}
}
//
function validateConfirmPassword(rule, value, callback) {
if (value !== this.password) {
callback(new Error('两次输入的密码不一致'));
} else {
callback();
}
}
// 11
function validateMobile(rule, value, callback) {
const mobileReg = /^1[3-9]\d{9}$/;
if (!mobileReg.test(value)) {
callback(new Error('手机号格式不正确'));
} else {
callback();
}
}
async function callApi(){
if(localStorage.getItem('openid')!=null&&name.value!=''&&contact.value!=''&&password.value!='')
{
const openid = localStorage.getItem('openid');
const response = await axios.post(`${expressUrl}/linkedmobile?openid=${openid}&name=${name.value}&Mobile=${contact.value}&password=${password.value}&userType=${userType}`);
if(response.data.message=="SUCCESS")
//
console.log(response.data)
localStorage.setItem('cellPhoneNumber', response.data.cellPhoneNumber);
open1();
router.push({name:'home'})
}
}
</script>
<style scoped lang="css">
.header {
width: 100%;
height: 100px;
display: flex;
justify-content: space-between;
align-items: center;
position: fixed;
top: 0;
left: 0;
padding: 10px;
/*border-bottom: 1px solid #ddd; /* 根据实际情况设置头部底边框 */
transition: background-color 0.3s ease; /* 添加过渡效果 */
color: #000000; /* 文字颜色 */
background-image:url(../assets/headerBackgroungImg.png);
background-color: #8a2924;
z-index: 99;
}
/* .register-wrap {
padding-left: 60%;
box-sizing: border-box;
width: 100%;
height: 100%;
padding-top: 6%;
background-repeat: no-repeat;
background-position: center right;
background-size: 100%;
width: 100%;
height: 730px;
background-image: url("/src/assets/pj.jpg");
background-repeat: no-repeat;
background-position: center right;
background-size: cover;
} */
.register-wrap {
box-sizing: border-box;
width: 100%;
height: 100vh;
padding-top: 10%;
/* background-repeat: no-repeat; */
background-position: center right;
background-image: url("/src/assets/mainBackgroundPic.png");
/* background-repeat: no-repeat;
background-position: center right;
background-size: cover; */
}
.register-container {
border-radius: 10px;
margin: 0 auto;
width: 400px ;
padding: 30px 35px 15px 35px;
background: #fff;
border: 1px solid #eaeaea;
text-align: left;
box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.1);
}
.title {
margin: 0px auto 40px auto;
text-align: center;
color: #505458;
}
/* 样式 */
.avatar-uploader {
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 100px;
border: 1px dashed #D9D9D9;
border-radius: 6px;
overflow: hidden;
position: relative;
}
.avatar {
width: 100px;
height: 100px;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
}
</style>

19
wsyt/src/views/test.vue Normal file
View File

@ -0,0 +1,19 @@
<template>
<el-button @click="openDialog" type="primary">按钮</el-button>
</template>
<script setup>
function openDialog(){
localStorage.setItem('openid', "response.data.openid");
localStorage.setItem('nickname', "你哈");
}
</script>
<style>
.zoomable {
transition: transform 0.5s ease; /* 添加过渡效果 */
}
</style>

View File

@ -18,11 +18,17 @@ export default defineConfig({
// host: true,
// open: true,
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
// https://openapi-apaas.seeyonv8.com
'/api': {
target: 'https://openapi-apaas.seeyonv8.com',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/api/, '')
},
'/express':{
target: 'http://172.24.12.71:3000',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/express/, '')
}
}
}

44
wsyt_server/app.ts Normal file
View File

@ -0,0 +1,44 @@
import createError from 'http-errors';
import express from 'express';
import path from 'path';
import cookieParser from 'cookie-parser';
import logger from 'morgan';
import indexRouter from './routes/index';
import usersRouter from './routes/users';
import parser from 'body-parser';
const cors =require('cors')
const app = express();
app.use(cors())
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
//app.use(parser.urlencoded({ extended: false }))
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
//app.use(parser.json());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
} as express.ErrorRequestHandler);
export default app;

91
wsyt_server/bin/server.ts Normal file
View File

@ -0,0 +1,91 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
import app from "../app";
import http from "http";
import debug from "debug";
/**
* Get port from environment and store in Express.
*/
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
const server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val:any) {
const port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error:any) {
if (error.syscall !== 'listen') {
throw error;
}
const bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
const addr = server.address();
const bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr!.port;
debug('Listening on ' + bind);
}

View File

@ -0,0 +1,23 @@
import { Request, Response,NextFunction } from 'express';
import {Enums,EnumApiUrl} from './../util/Resource';
import { selectEnumApi } from '../util/curd';
class EnumController {
// 枚举查询
selectEnum = async (req: Request, res: Response, next: NextFunction) => {
try {
const promises:any[] = [];
for (const key in Enums) {
promises.push(selectEnumApi(Enums[key], EnumApiUrl));
}
const results = await Promise.all(promises);
res.send(results);
} catch (error) {
next(error);
}
}
}
// 创建一个上述类的一个实例,将其导出
export const enumController = new EnumController();
export default enumController;

View File

@ -0,0 +1,174 @@
import { Request, Response,NextFunction } from 'express';
import axios from 'axios';
import { selectApi,getFiliUrl,createUserApi } from '../util/curd';
import { wazpApiUrl,sousuoUrl,createuserUrl } from '../util/Resource';
class IndexController {
zuopinGet = async (req: Request, res: Response, next: NextFunction) => {
const danganleixing = req.query.danganleixing;
const pageNumber = req.query.pageNumber;
const pageSize = req.query.pageSize;
//在TypeScript中当你在对象字面量属性名和变量名相同时可以省略冒号后面的变量名。所以danganleixing:danganleixing可以简写为danganleixing。
const temp = selectApi({ danganleixing }, pageNumber, pageSize, wazpApiUrl);
temp.then(async (response) => {
const promises = [];
for (const key in response.data.content) {
promises.push(getFiliUrl(response.data.content[key]['xiaoguotu']).then((url) => {
response.data.content[key]['xiaoguotu'] = url;
}));
promises.push(getFiliUrl(response.data.content[key]['wenyangtupian']).then((url) => {
response.data.content[key]['wenyangtupian'] = url;
}));
}
await Promise.all(promises);
res.send(response.data);
})
.catch(next); // 如果有错误,传递给后续的错误处理中间件
};
// 纹样查询
wenyangGet = async (req: Request, res: Response, next: NextFunction) => {
const danganleixing = req.query.danganleixing;
const pageNumber = req.query.pageNumber;
const pageSize = req.query.pageSize;
const temp = selectApi({ danganleixing }, pageNumber, pageSize, wazpApiUrl);
temp.then(async (response) => {
const promises = [];
for (const key in response.data.content) {
promises.push(getFiliUrl(response.data.content[key]['yuanshitupian']).then((url) => {
response.data.content[key]['yuanshitupian'] = url;
}));
}
await Promise.all(promises);
res.send(response.data);
})
.catch(next); // 如果有错误,传递给后续的错误处理中间件
};
// 搜索查询
sousuoGet = async (req: Request, res: Response, next: NextFunction) => {
const danganleixing = req.query.danganleixing;
const pageNumber = req.query.pageNumber;
const pageSize = req.query.pageSize;
console.log(danganleixing)
const temp = selectApi({ and_like_mingcheng:danganleixing }, pageNumber, pageSize, sousuoUrl);
temp.then(async (response) => {
const promises = [];
for (const key in response.data.content) {
promises.push(getFiliUrl(response.data.content[key]['yuanshitupian']).then((url) => {
response.data.content[key]['yuanshitupian'] = url;
} ) );
promises.push(getFiliUrl(response.data.content[key]['xiaoguotu']).then((url) => {
response.data.content[key]['xiaoguotu'] = url;
} ) );
promises.push(getFiliUrl(response.data.content[key]['wenyangtupian']).then((url) => {
response.data.content[key]['wenyangtupian'] = url;
} ) );
}
await Promise.all(promises);
res.send(response.data);
})
.catch(next); // 如果有错误,传递给后续的错误处理中间件
};
//筛选查询
shaixuanGet = async (req: Request, res: Response, next: NextFunction) => {
const leixing = req.query.leixing;
const foundKey = req.query.foundKey;
const pageNumber = req.query.pageNumber;
const pageSize = req.query.pageSize;
if(leixing=="minzu"){
const temp = selectApi({"minzu":foundKey}, pageNumber, pageSize, sousuoUrl);
temp.then(async(response)=>{
const promises = [];
for (const key in response.data.content) {
if(response.data.content[key]['yuanshitupian']!=''){
promises.push(getFiliUrl(response.data.content[key]['yuanshitupian']).then((url) => {
response.data.content[key]['yuanshitupian'] = url;
}))
}else if(response.data.content[key]['xiaoguotu']!=''){
promises.push(getFiliUrl(response.data.content[key]['xiaoguotu']).then((url) => {
response.data.content[key]['xiaoguotu'] = url;
}))
}else if(response.data.content[key]['wenyangtupian']!=''){
promises.push(getFiliUrl(response.data.content[key]['wenyangtupian']).then((url) => {
response.data.content[key]['wenyangtupian'] = url;
}))
}else{
}
}
await Promise.all(promises);
res.send(response.data);
})
}else{
const temp = selectApi({"jifa":foundKey}, pageNumber, pageSize, sousuoUrl);
temp.then(async(response)=>{
const promises = [];
for (const key in response.data.content) {
if(response.data.content[key]['yuanshitupian']!=''){
promises.push(getFiliUrl(response.data.content[key]['yuanshitupian']).then((url) => {
response.data.content[key]['yuanshitupian'] = url;
}))
}else if(response.data.content[key]['xiaoguotu']!=''){
promises.push(getFiliUrl(response.data.content[key]['xiaoguotu']).then((url) => {
response.data.content[key]['xiaoguotu'] = url;
}))
}else if(response.data.content[key]['wenyangtupian']!=''){
promises.push(getFiliUrl(response.data.content[key]['wenyangtupian']).then((url) => {
response.data.content[key]['wenyangtupian'] = url;
}))
}else{
}
}
await Promise.all(promises);
res.send(response.data);
})
}
}
// 注册
register = async (req: Request, res: Response,next: NextFunction) => {
// ...内部的具体注册逻辑
const name = req.query.name;
const password = req.query.password;
const Mobile = req.query.Mobile;
const userType = req.query.userType;
const temp = createUserApi(name,password,Mobile,userType,createuserUrl);
temp.then((response) => {
if(response.message=="SUCCESS"){
res.send(response.message);
}
});
};
}
// 创建一个上述类的一个实例,将其导出
export const indexController = new IndexController();
export default indexController;

View File

@ -0,0 +1,200 @@
import e, { Request, Response } from 'express';
import axios from 'axios';
import {localUrl,wechatloginUrl,createwechatUrl,UserSelectUrl,updatewechatUrl,
weixinAppId,weixinAppSecret} from '../../util/Resource';
import { selectWXUserApi ,createWXUserApi,selectUserApi,updateWXUserApi } from '../../util/curd';
class UserController {
// 注册
register = async (req: Request, res: Response) => {
// ...内部的具体注册逻辑
};
// 更新
updatewechat = async (req: Request, res: Response) => {
// ...内部的具体注册逻辑
const openid = req.query.openid;
const cellPhoneNumber = req.query.cellPhoneNumber;
const id=req.query.WXuserid;
await updateWXUserApi(id,openid,cellPhoneNumber,updatewechatUrl).then((response)=>{
if(response.message=="SUCCESS")
{
//返回绑定成功消息
res.send({message:"SUCCESS"});
}else{
res.send({message:"绑定失败请重新绑定ERROR"});
}
});
};
// 登录
wechatlogin = async (req: Request, res: Response) => {
// ... 内部的具体登录逻辑
const code = req.query.code;
// 使用code向微信API发起请求获取access_token和openid
await axios.get(`https://api.weixin.qq.com/sns/oauth2/access_token`, {
params: {
appid: weixinAppId, // 替换为你的公众号APPID
secret: weixinAppSecret, // 替换为你的公众号SECRET
code: code,
grant_type: 'authorization_code'
}
}).then(async function(response) {
if(response.status===200){
const data = response.data;
// ...在此处处理数据并进行后续操作,例如存储用户信息等...
await axios.get('https://api.weixin.qq.com/sns/userinfo',{
params:{
access_token: data.access_token,
openid: data.openid,
lang: 'zh_CN'
}
}
) .then(async(response2)=>{
//先查询是否存在微信用户,不存在就创建微信用户
await selectWXUserApi(response2.data.openid,wechatloginUrl).then(async(response3)=>{
const openid = response2.data.openid;
//判断用户是否存在0为不存在
if(response3.data.content.length==0)
{
//console.log("用户不存在")
//await axios.get('/wechatcreate?openid=${response2.data.openid}&nickname=${response2.data.nickname}&headimgurl=${response2.data.headimgurl}&accesstoken=${data.access_token}&refreshtoken=${data.refresh_token}')
//创建完成后进行手机号关联,在createWXUser类
await axios.get(`${localUrl}/wechatcreate?openid=${response2.data.openid}&nickname=${response2.data.nickname}&headimgurl=${response2.data.headimgurl}&accesstoken=${data.access_token}&refreshtoken=${data.refresh_token}`)
.then((response)=>{
//判断微信是否创建成功
if(response.data.status==200)
{
res.send({
'status':201,
'route':'linkedmobile',
'openid':openid,
'nickname':response2.data.nickname,
'headimgurl':response2.data.headimgurl,
'accesstoken':data.access_token
})
}
})
}else{
//电话号
const cellPhoneNumber = response3.data.content[0].cellPhoneNumber;
//把数据穿给前端
res.send({
'status':200,
'openid':openid,
'cellPhoneNumber':cellPhoneNumber,
'nickname':response2.data.nickname,
'headimgurl':response2.data.headimgurl,
'accesstoken':data.access_token,
})
}
})
//selectApi({"openid":data.openid},wechatloginUrl)
})
}})
};
createWXUser =async (req: Request, res: Response) => {
// ...内部的具体注册逻辑
const openid = req.query.openid
const nickname = req.query.nickname;
const headimgurl = req.query.headimgurl;
const accesstoken = req.query.accesstoken;
const refreshtoken = req.query.refreshtoken;
await createWXUserApi(openid,nickname,headimgurl,accesstoken,refreshtoken,createwechatUrl).then((response)=>{
//创建完成后关联手机
res.send({status:200,message:"创建微信账户成功"})
})
};
// 关联手机
linkedmobile = async (req: Request, res: Response) => {
// ...内部的具体注册逻辑
const openid = req.query.openid;
const name = req.query.name;
const password = req.query.password;
const Mobile = req.query.Mobile;
const userType = req.query.userType;
let isMobile=false;
let isPassword=false;
let WXuserid='';
if(openid!=null||openid!=''){
//先查询openid是否存在
let isopenid = false;
//1.先查询微信用户是否存在
await selectWXUserApi(openid,wechatloginUrl).then(async(response:any)=>{
//1.不存在微信用户就创建微信用户
if(response.data.content.length>0){
isopenid = true;
WXuserid=response.data.content[0].id;
}else{
isopenid = true;
}})
//2.查询人员档案,手机是否存在
await selectUserApi(Mobile,UserSelectUrl).then(async(response2:any)=>{
//存在就关联更新
if(response2.data.content.length>0){
isMobile=true;
//判断密码是否一致
if(password==response2.data.content[0].mima)
{
isPassword=true;
console.log("密码一致")
}else{
console.log("密码不一致")
res.send('输入的密码与人员档案的密码不一致')
}
}else{
//不存在就创建
await axios.post(`${localUrl}/register?name=${name}&password=${password}&Mobile=${Mobile}&userType=${userType}`)
.then(async(response)=>{
if(response.data=="SUCCESS"){
await axios.get(`${localUrl}/wechatupdate?openid=${openid}&cellPhoneNumber=${Mobile}&WXuserid=${WXuserid}`)
.then((response)=>{
if(response.data.message=="SUCCESS"){
res.send({message:"SUCCESS",cellPhoneNumber:Mobile})
}})
}
})
}
});
//两个都存在就关联更新
if(isopenid&&isMobile&&isPassword){
await axios.get(`${localUrl}/wechatupdate?openid=${openid}&cellPhoneNumber=${Mobile}&WXuserid=${WXuserid}`)
.then((response)=>{
if(response.data.message=="SUCCESS"){
res.send({message:"SUCCESS",cellPhoneNumber:Mobile})
}})
}
}
};
}
// 创建一个上述类的一个实例,将其导出
export const userController = new UserController();
export default userController;

View File

@ -0,0 +1,4 @@
import * as shelljs from "shelljs";
shelljs.cp("-R" , "public" , "dist");
shelljs.cp("-R" , "views" , "dist");

View File

@ -0,0 +1,8 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}
a {
color: #00B7FF;
}

Some files were not shown because too many files have changed in this diff Show More