完成产品和文章页面的开发;完成悬浮按钮全局显示;修改完成产品和文章页面的tree选择

This commit is contained in:
hejin 2025-08-23 22:50:25 +08:00
parent 89bd607864
commit 2cc55b44c5
15 changed files with 1086 additions and 38 deletions

View File

@ -71,6 +71,7 @@
"@dcloudio/uni-cli-shared": "3.0.0-3090420231025001",
"@dcloudio/uni-stacktracey": "3.0.0-3090420231025001",
"@dcloudio/vite-plugin-uni": "3.0.0-3090420231025001",
"@uni-helper/vite-plugin-uni-layouts": "^0.1.11",
"@vue/runtime-core": "^3.2.45",
"vite": "4.0.3"
}

View File

@ -93,6 +93,9 @@ importers:
'@dcloudio/vite-plugin-uni':
specifier: 3.0.0-3090420231025001
version: 3.0.0-3090420231025001(postcss@8.5.6)(vite@4.0.3(@types/node@24.2.1)(sass@1.63.4)(terser@5.43.1))(vue@3.5.18)
'@uni-helper/vite-plugin-uni-layouts':
specifier: ^0.1.11
version: 0.1.11(rollup@3.29.5)
'@vue/runtime-core':
specifier: ^3.2.45
version: 3.5.18
@ -1358,6 +1361,15 @@ packages:
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
engines: {node: '>= 8.0.0'}
'@rollup/pluginutils@5.2.0':
resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@sinonjs/commons@1.8.6':
resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==}
@ -1380,6 +1392,9 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
@ -1407,6 +1422,12 @@ packages:
'@types/yargs@16.0.9':
resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==}
'@uni-helper/uni-env@0.1.7':
resolution: {integrity: sha512-vxWnscbm1VgmK4ZzqN721mY0mIIVCeJutA32fH9P29itaYewVfL9VAWZWZi7nHJEssTkzhfdTTfydcnJKxUQzg==}
'@uni-helper/vite-plugin-uni-layouts@0.1.11':
resolution: {integrity: sha512-FXdFATBFsHAl7xY9q3KO0EexMRGua/7txIiQTm2rQi1/bXcft4CUXldtuHl9Upq0V6CT47aanmfzcOF5CpHK7Q==}
'@vitejs/plugin-legacy@4.1.1':
resolution: {integrity: sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -1447,24 +1468,36 @@ packages:
'@vue/compiler-core@3.2.47':
resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
'@vue/compiler-core@3.4.21':
resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==}
'@vue/compiler-core@3.5.18':
resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==}
'@vue/compiler-dom@3.2.47':
resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
'@vue/compiler-dom@3.4.21':
resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==}
'@vue/compiler-dom@3.5.18':
resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==}
'@vue/compiler-sfc@3.2.47':
resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
'@vue/compiler-sfc@3.4.21':
resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==}
'@vue/compiler-sfc@3.5.18':
resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==}
'@vue/compiler-ssr@3.2.47':
resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
'@vue/compiler-ssr@3.4.21':
resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==}
'@vue/compiler-ssr@3.5.18':
resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==}
@ -1496,6 +1529,9 @@ packages:
'@vue/shared@3.2.47':
resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
'@vue/shared@3.4.21':
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
'@vue/shared@3.5.18':
resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
@ -1561,6 +1597,10 @@ packages:
array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
ast-kit@0.11.3:
resolution: {integrity: sha512-qdwwKEhckRk0XE22/xDdmU3v/60E8Edu4qFhgTLIhGGDs/PAJwLw9pQn8Rj99PitlbBZbYpx0k/lbir4kg0SuA==}
engines: {node: '>=16.14.0'}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@ -1664,6 +1704,14 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
c12@1.11.2:
resolution: {integrity: sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==}
peerDependencies:
magicast: ^0.3.4
peerDependenciesMeta:
magicast:
optional: true
cac@6.7.9:
resolution: {integrity: sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==}
engines: {node: '>=8'}
@ -1706,10 +1754,17 @@ packages:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
chownr@2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
cjs-module-lexer@1.4.3:
resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
@ -1743,6 +1798,13 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
@ -1853,6 +1915,9 @@ packages:
resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==}
engines: {node: '>= 10'}
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@ -1861,6 +1926,9 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
destroy@1.2.0:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@ -1881,6 +1949,10 @@ packages:
engines: {node: '>=8'}
deprecated: Use your platform's native DOMException instead
dotenv@16.6.1:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@ -2054,6 +2126,10 @@ packages:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
fs-minipass@2.1.0:
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
engines: {node: '>= 8'}
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@ -2092,6 +2168,10 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
giget@1.2.5:
resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==}
hasBin: true
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@ -2403,6 +2483,10 @@ packages:
jimp@0.10.3:
resolution: {integrity: sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==}
jiti@1.21.7:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
jpeg-js@0.3.7:
resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==}
@ -2568,10 +2652,30 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
minipass@3.3.6:
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
minipass@5.0.0:
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
engines: {node: '>=8'}
minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
module-alias@2.2.3:
resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==}
@ -2593,6 +2697,9 @@ packages:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
node-fetch-native@1.6.7:
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@ -2614,10 +2721,18 @@ packages:
nwsapi@2.2.21:
resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==}
nypm@0.5.4:
resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==}
engines: {node: ^14.16.0 || >=16.10.0}
hasBin: true
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
ohash@1.1.6:
resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==}
omggif@1.0.10:
resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==}
@ -2695,6 +2810,15 @@ packages:
path-to-regexp@0.1.12:
resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
phin@2.9.3:
resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
@ -2710,6 +2834,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
@ -2738,6 +2866,9 @@ packages:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
pngjs@3.4.0:
resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
engines: {node: '>=4.0.0'}
@ -2852,6 +2983,9 @@ packages:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
rc9@2.1.2:
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
@ -2945,6 +3079,9 @@ packages:
resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==}
engines: {node: '>=10'}
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@ -3029,6 +3166,9 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
std-env@3.9.0:
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
string-hash@1.1.3:
resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==}
@ -3082,6 +3222,10 @@ packages:
resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
engines: {node: '>=6'}
tar@6.2.1:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
terminal-link@2.1.1:
resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==}
engines: {node: '>=8'}
@ -3104,6 +3248,9 @@ packages:
tinycolor2@1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
@ -3138,6 +3285,9 @@ packages:
typedarray-to-buffer@3.1.5:
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
undici-types@7.10.0:
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
@ -3360,6 +3510,9 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
yaml@1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
@ -5260,6 +5413,14 @@ snapshots:
estree-walker: 2.0.2
picomatch: 2.3.1
'@rollup/pluginutils@5.2.0(rollup@3.29.5)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
rollup: 3.29.5
'@sinonjs/commons@1.8.6':
dependencies:
type-detect: 4.0.8
@ -5291,6 +5452,8 @@ snapshots:
dependencies:
'@babel/types': 7.28.2
'@types/estree@1.0.8': {}
'@types/graceful-fs@4.1.9':
dependencies:
'@types/node': 24.2.1
@ -5319,6 +5482,27 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
'@uni-helper/uni-env@0.1.7':
dependencies:
std-env: 3.9.0
'@uni-helper/vite-plugin-uni-layouts@0.1.11(rollup@3.29.5)':
dependencies:
'@babel/types': 7.28.2
'@uni-helper/uni-env': 0.1.7
'@vue/compiler-core': 3.4.21
'@vue/compiler-sfc': 3.4.21
ast-kit: 0.11.3(rollup@3.29.5)
c12: 1.11.2
chokidar: 3.6.0
fast-glob: 3.3.3
jsonc-parser: 3.3.1
magic-string: 0.30.17
scule: 1.3.0
transitivePeerDependencies:
- magicast
- rollup
'@vitejs/plugin-legacy@4.1.1(terser@5.43.1)(vite@4.0.3(@types/node@24.2.1)(sass@1.63.4)(terser@5.43.1))':
dependencies:
'@babel/core': 7.28.0
@ -5384,6 +5568,14 @@ snapshots:
estree-walker: 2.0.2
source-map: 0.6.1
'@vue/compiler-core@3.4.21':
dependencies:
'@babel/parser': 7.28.0
'@vue/shared': 3.4.21
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-core@3.5.18':
dependencies:
'@babel/parser': 7.28.0
@ -5397,6 +5589,11 @@ snapshots:
'@vue/compiler-core': 3.2.47
'@vue/shared': 3.2.47
'@vue/compiler-dom@3.4.21':
dependencies:
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
'@vue/compiler-dom@3.5.18':
dependencies:
'@vue/compiler-core': 3.5.18
@ -5415,6 +5612,18 @@ snapshots:
postcss: 8.5.6
source-map: 0.6.1
'@vue/compiler-sfc@3.4.21':
dependencies:
'@babel/parser': 7.28.0
'@vue/compiler-core': 3.4.21
'@vue/compiler-dom': 3.4.21
'@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.21
estree-walker: 2.0.2
magic-string: 0.30.17
postcss: 8.5.6
source-map-js: 1.2.1
'@vue/compiler-sfc@3.5.18':
dependencies:
'@babel/parser': 7.28.0
@ -5432,6 +5641,11 @@ snapshots:
'@vue/compiler-dom': 3.2.47
'@vue/shared': 3.2.47
'@vue/compiler-ssr@3.4.21':
dependencies:
'@vue/compiler-dom': 3.4.21
'@vue/shared': 3.4.21
'@vue/compiler-ssr@3.5.18':
dependencies:
'@vue/compiler-dom': 3.5.18
@ -5477,6 +5691,8 @@ snapshots:
'@vue/shared@3.2.47': {}
'@vue/shared@3.4.21': {}
'@vue/shared@3.5.18': {}
abab@2.0.6: {}
@ -5530,6 +5746,14 @@ snapshots:
array-flatten@1.1.1: {}
ast-kit@0.11.3(rollup@3.29.5):
dependencies:
'@babel/parser': 7.28.0
'@rollup/pluginutils': 5.2.0(rollup@3.29.5)
pathe: 1.1.2
transitivePeerDependencies:
- rollup
asynckit@0.4.0: {}
autoprefixer@10.4.21(postcss@8.5.6):
@ -5682,6 +5906,21 @@ snapshots:
bytes@3.1.2: {}
c12@1.11.2:
dependencies:
chokidar: 3.6.0
confbox: 0.1.8
defu: 6.1.4
dotenv: 16.6.1
giget: 1.2.5
jiti: 1.21.7
mlly: 1.8.0
ohash: 1.1.6
pathe: 1.1.2
perfect-debounce: 1.0.0
pkg-types: 1.3.1
rc9: 2.1.2
cac@6.7.9: {}
call-bind-apply-helpers@1.0.2:
@ -5727,8 +5966,14 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
chownr@2.0.0: {}
ci-info@3.9.0: {}
citty@0.1.6:
dependencies:
consola: 3.4.2
cjs-module-lexer@1.4.3: {}
cliui@7.0.4:
@ -5757,6 +6002,10 @@ snapshots:
concat-map@0.0.1: {}
confbox@0.1.8: {}
consola@3.4.2: {}
content-disposition@0.5.4:
dependencies:
safe-buffer: 5.2.1
@ -5837,10 +6086,14 @@ snapshots:
dependencies:
execa: 5.1.1
defu@6.1.4: {}
delayed-stream@1.0.0: {}
depd@2.0.0: {}
destr@2.0.5: {}
destroy@1.2.0: {}
detect-newline@3.1.0: {}
@ -5853,6 +6106,8 @@ snapshots:
dependencies:
webidl-conversions: 5.0.0
dotenv@16.6.1: {}
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@ -6090,6 +6345,10 @@ snapshots:
jsonfile: 6.1.0
universalify: 2.0.1
fs-minipass@2.1.0:
dependencies:
minipass: 3.3.6
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@ -6127,6 +6386,16 @@ snapshots:
get-stream@6.0.1: {}
giget@1.2.5:
dependencies:
citty: 0.1.6
consola: 3.4.2
defu: 6.1.4
node-fetch-native: 1.6.7
nypm: 0.5.4
pathe: 2.0.3
tar: 6.2.1
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@ -6657,6 +6926,8 @@ snapshots:
transitivePeerDependencies:
- debug
jiti@1.21.7: {}
jpeg-js@0.3.7: {}
js-tokens@4.0.0: {}
@ -6818,10 +7089,30 @@ snapshots:
minimist@1.2.8: {}
minipass@3.3.6:
dependencies:
yallist: 4.0.0
minipass@5.0.0: {}
minizlib@2.1.2:
dependencies:
minipass: 3.3.6
yallist: 4.0.0
mkdirp@0.5.6:
dependencies:
minimist: 1.2.8
mkdirp@1.0.4: {}
mlly@1.8.0:
dependencies:
acorn: 8.15.0
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.6.1
module-alias@2.2.3: {}
ms@2.0.0: {}
@ -6834,6 +7125,8 @@ snapshots:
negotiator@0.6.3: {}
node-fetch-native@1.6.7: {}
node-int64@0.4.0: {}
node-releases@2.0.19: {}
@ -6848,8 +7141,19 @@ snapshots:
nwsapi@2.2.21: {}
nypm@0.5.4:
dependencies:
citty: 0.1.6
consola: 3.4.2
pathe: 2.0.3
pkg-types: 1.3.1
tinyexec: 0.3.2
ufo: 1.6.1
object-inspect@1.13.4: {}
ohash@1.1.6: {}
omggif@1.0.10: {}
on-finished@2.4.1:
@ -6922,6 +7226,12 @@ snapshots:
path-to-regexp@0.1.12: {}
pathe@1.1.2: {}
pathe@2.0.3: {}
perfect-debounce@1.0.0: {}
phin@2.9.3: {}
phin@3.7.1:
@ -6934,6 +7244,8 @@ snapshots:
picomatch@2.3.1: {}
picomatch@4.0.3: {}
pify@2.3.0: {}
pinia@2.0.3(vue@3.5.18):
@ -6952,6 +7264,12 @@ snapshots:
dependencies:
find-up: 4.1.0
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
mlly: 1.8.0
pathe: 2.0.3
pngjs@3.4.0: {}
postcss-import@14.1.0(postcss@8.5.6):
@ -7064,6 +7382,11 @@ snapshots:
iconv-lite: 0.4.24
unpipe: 1.0.0
rc9@2.1.2:
dependencies:
defu: 6.1.4
destr: 2.0.5
react-is@17.0.2: {}
read-cache@1.0.0:
@ -7147,6 +7470,8 @@ snapshots:
dependencies:
xmlchars: 2.2.0
scule@1.3.0: {}
semver@6.3.1: {}
semver@7.7.2: {}
@ -7241,6 +7566,8 @@ snapshots:
statuses@2.0.1: {}
std-env@3.9.0: {}
string-hash@1.1.3: {}
string-length@4.0.2:
@ -7285,6 +7612,15 @@ snapshots:
tapable@2.2.2: {}
tar@6.2.1:
dependencies:
chownr: 2.0.0
fs-minipass: 2.1.0
minipass: 5.0.0
minizlib: 2.1.2
mkdirp: 1.0.4
yallist: 4.0.0
terminal-link@2.1.1:
dependencies:
ansi-escapes: 4.3.2
@ -7309,6 +7645,8 @@ snapshots:
tinycolor2@1.6.0: {}
tinyexec@0.3.2: {}
tmpl@1.0.5: {}
to-regex-range@5.0.1:
@ -7341,6 +7679,8 @@ snapshots:
dependencies:
is-typedarray: 1.0.0
ufo@1.6.1: {}
undici-types@7.10.0: {}
unicode-canonical-property-names-ecmascript@2.0.1: {}
@ -7507,6 +7847,8 @@ snapshots:
yallist@3.1.1: {}
yallist@4.0.0: {}
yaml@1.10.2: {}
yargs-parser@20.2.9: {}

View File

@ -86,4 +86,11 @@ export const prodOrNewsInfoApi = (id) => {
**/
export const appMaxCatgIdApi = (catgName) => {
return request.get(`/web/getCatgIdApp?catgName=${catgName}`)
}
/**
* @function 获取文章分页详情
**/
export const articlePageApi = (params) => {
return request.get('/web/newsPageList', {params})
}

View File

@ -1,15 +1,187 @@
<template>
<view class="pages">
文章详情
<Tabs
:list="tabsList"
v-model:active="tabsActive"
@tabsChange="tabsChange"
/>
<view class="container" id="anchor-0">
<view class="info">
<view class="title">
<text>{{info.title}}</text>
<view class="date">
- {{ dayjs(info.publicDate).format('YYYY-MM-DD') }} -
</view>
</view>
<view class="rich-text" v-html="info.description"></view>
</view>
</view>
<view class="module" id="anchor-1">
{{$t('news.relatedProducts')}}
</view>
<view class="container">
<view class="product-list">
<view
class="product-item"
v-for="item in relatedProducts"
:key="item.id"
>
<image class="cover" :src="item.mainPic" mode="aspectFill"></image>
<view class="text-ellipsis title">
{{item.title}}
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { ref } from 'vue';
import { ref, computed, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import dayjs from 'dayjs';
import { prodOrNewsInfoApi } from '@/api/index.js';
const { t } = useI18n()
const tabsActive = ref(0)
const anchorTop = ref([
{id:'#anchor-0',top:0},
{id:'#anchor-1',top:0},
])
const tabsList = [
t('common.Newdetail'),
t('news.relatedProducts')
]
const tabsChange = (index) => {
tabsActive.value = index
uni.pageScrollTo({
scrollTop: anchorTop.value[index].top,
})
}
const id = ref('')
const info = ref({})
const productsImages = ref([])
const getInfo = () => {
prodOrNewsInfoApi(id.value).then(({data:res}) => {
info.value = res.data.busiProdNew
let picsArr = res.data.busiProdNew.pics ? res.data.busiProdNew.pics.split(',') : [];
productsImages.value = [
res.data.busiProdNew.mainPic,
...picsArr
]
uni.setNavigationBarTitle({
title: res.data.busiProdNew.title
})
nextTick(() => {
anchorTop.value.forEach(item => {
const query = uni.createSelectorQuery().in(this);
query.select(item.id).boundingClientRect((rect) => {
item.top = rect.top - 60
}).exec();
})
})
})
}
const relatedProducts = ref([
{id:123,title: 'SINOTRUK HOWO Tractor Truck Head',mainPic:'https://dianliang123.oss-cn-qingdao.aliyuncs.com/user/2025/07/09/55979a0deee24031a38e934c6b06ca20.jpg'},
{id:121233,title: 'SINOTRUK HOWO Tractor Truck Head',mainPic:'https://dianliang123.oss-cn-qingdao.aliyuncs.com/user/2025/07/09/55979a0deee24031a38e934c6b06ca20.jpg'},
{id:122221113,title: 'SINOTRUK HOWO Tractor Truck Head',mainPic:'https://dianliang123.oss-cn-qingdao.aliyuncs.com/user/2025/07/09/55979a0deee24031a38e934c6b06ca20.jpg'},
{id:121113123,title: 'SINOTRUK HOWO Tractor Truck Head',mainPic:'https://dianliang123.oss-cn-qingdao.aliyuncs.com/user/2025/07/09/55979a0deee24031a38e934c6b06ca20.jpg'}
])
onLoad((options) => {
id.value = options.id
getInfo()
})
</script>
<style lang="scss" scoped>
.pages {
padding: 0 18rpx;
padding-top: calc(var(--status-bar-height) + 50px);
padding-bottom: 200rpx;
overflow: hidden;
::v-deep .tabs {
width: 100%;
margin: 0;
height: 100rpx;
position: fixed;
top: calc(var(--status-bar-height) + 44px);
left: 0;
justify-content: space-around;
background-color: #e4ecff;
z-index: 99;
.tabs-item {
margin-right: 0;
}
}
.container {
width: 100%;
height: min-content;
background-color: #ffffff;
position: relative;
border-radius: 10rpx;
overflow-x: auto;
word-break: break-all;
.info {
width: 100%;
padding: 34rpx 20rpx;
.title {
width: 100%;
margin-bottom: 20rpx;
padding-bottom: 20rpx;
text-align: center;
color: #292d2e;
border-bottom: 1rpx solid #9e9e9e;
font-weight: bold;
.date {
margin-top: 10rpx;
color: #9e9e9e;
font-weight: 400;
}
}
}
.inquiry-bg {
width: 100%;
height: 411rpx;
}
.product-list {
padding: 38rpx 12rpx;
display: flex;
flex-wrap: wrap;
background-color: #fff;
.product-item {
width: 49%;
height: 468rpx;
margin-bottom: 14rpx;
border: 2rpx solid #ebf3f7;
border-radius: 8rpx;
&:nth-child(2n) {
margin-left: 2%;
}
.cover {
width: 100%;
height: 358rpx;
}
.title {
padding: 16rpx 16rpx 0;
color: #0d0e0e;
border-top: 2rpx dashed #ebf3f7;
}
}
}
}
.module {
margin: 38rpx 0;
color: #292d2e;
font-weight: bold;
}
}
</style>

View File

@ -3,9 +3,10 @@
<Tabs
:list="tabsList"
v-model:active="tabsActive"
@tabsChange="tabsChange"
/>
<view class="container">
<view class="container" id="anchor-0">
<swiper
class="swiper"
circular
@ -30,7 +31,7 @@
</view>
</view>
<view class="module">
<view class="module" id="anchor-1">
{{$t('products.productDetails')}}
</view>
@ -41,7 +42,7 @@
>
</view>
<view class="module">
<view class="module" id="anchor-2">
{{$t('products.inquiry')}}
</view>
@ -147,7 +148,7 @@
</uni-forms>
</view>
<view class="module">
<view class="module" id="anchor-3">
{{$t('news.relatedProducts')}}
</view>
@ -169,7 +170,7 @@
<view class="footer-box">
<Apps />
<view class="operation-box">
<view>
<view @click="tabsChange(2)">
{{$t('common.sendInquiry')}}
</view>
<view>
@ -182,7 +183,7 @@
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { ref, computed } from 'vue';
import { ref, computed, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import {
prodOrNewsInfoApi,
@ -193,12 +194,24 @@
const { t } = useI18n()
const tabsActive = ref(0)
const anchorTop = ref([
{id:'#anchor-0',top:0},
{id:'#anchor-1',top:0},
{id:'#anchor-2',top:0},
{id:'#anchor-3',top:0},
])
const tabsList = [
t('menu.Products'),
t('products.productDetails'),
t('products.inquiry'),
t('news.relatedProducts')
]
const tabsChange = (index) => {
tabsActive.value = index
uni.pageScrollTo({
scrollTop: anchorTop.value[index].top,
})
}
const id = ref('')
const info = ref({})
@ -214,6 +227,14 @@
uni.setNavigationBarTitle({
title: res.data.busiProdNew.title
})
nextTick(() => {
anchorTop.value.forEach(item => {
const query = uni.createSelectorQuery().in(this);
query.select(item.id).boundingClientRect((rect) => {
item.top = rect.top - 60
}).exec();
})
})
})
}
@ -301,10 +322,19 @@
<style lang="scss" scoped>
.pages {
padding: 0 18rpx;
padding-top: calc(var(--status-bar-height) + 50px);
padding-bottom: 200rpx;
overflow: hidden;
::v-deep .tabs {
width: 100%;
margin: 0;
height: 100rpx;
position: fixed;
top: calc(var(--status-bar-height) + 44px);
left: 0;
justify-content: space-around;
background-color: #e4ecff;
z-index: 99;
.tabs-item {
margin-right: 0;
}
@ -314,7 +344,7 @@
height: min-content;
background-color: #ffffff;
position: relative;
border-radius: 20rpx;
border-radius: 10rpx;
overflow-x: auto;
word-break: break-all;
.swiper {

View File

@ -29,7 +29,7 @@
</view>
</view>
</view>
<button class="online-btn">
<button class="online-btn" @click="goOnline">
{{ $t('common.Online') }}
</button>
<image @click="emits('close')" class="close" src="@/assets/images/icon/online-close.png"></image>
@ -42,6 +42,13 @@
import { ref } from 'vue';
const emits = defineEmits(['close'])
const goOnline = () => {
emits('close')
uni.switchTab({
url: '/pages/inquiry/index'
})
}
</script>
<style lang="scss" scoped>

31
src/layouts/default.vue Normal file
View File

@ -0,0 +1,31 @@
<template>
<view>
<view class="anchor"></view>
<slot></slot>
<SuspensionBtn @ClickTop="ClickTop" @clickMsg="onlineModalShow=true"/>
<OnlineModal v-if="onlineModalShow" @close="onlineModalShow=false" />
</view>
</template>
<script setup>
import { ref } from 'vue';
import { useScroll } from '@/stores/index.js';
const pageRef = ref()
const onlineModalShow = ref(false)
const onlineModalRef = ref()
const ClickTop = () => {
uni.pageScrollTo({
selector: '.anchor'
})
useScroll().sendCallback()
}
</script>
<style lang="scss" scoped>
.anchor {
position: absolute;
top: 0;
left: 0;
}
</style>

View File

@ -50,7 +50,8 @@
"Quickcontact": "Quick contact",
"sending": "sending",
"Reset": "Reset",
"Sure": "Sure"
"Sure": "Sure",
"Newdetail": "Newdetail"
},
"menu": {
"Home": "Home",

View File

@ -50,7 +50,8 @@
"Quickcontact": "快速联系",
"sending": "发送",
"Reset": "重置",
"Sure": "确认"
"Sure": "确认",
"Newdetail": "文章详情"
},
"menu": {
"Home": "首页",

View File

@ -57,14 +57,16 @@
"path": "article-details",
"style": {
"navigationBarTitleText": "News detail",
"enablePullDownRefresh": true
"enablePullDownRefresh": true,
"navigationStyle": "default"
}
},
{
"path": "online",
"style": {
"navigationBarTitleText": "Online",
"enablePullDownRefresh": true
"enablePullDownRefresh": true,
"navigationStyle": "default"
}
}
]

View File

@ -1,15 +1,435 @@
<template>
<view class="pages">
文章栏目
<CustomHeader :title="$t('menu.News')"></CustomHeader>
<view class="main">
<scroll-view class="menu-box" :scroll-y="true" v-if="catgTree.length">
<uni-collapse
ref="collapseRef"
v-model="collapseValue"
accordion
@change="collapseChange"
>
<uni-collapse-item
title-border="none"
:border="false"
:title="item.label"
:show-arrow="false"
v-for="(item,index) in catgTree"
:key="item.id"
:class="collapseValue === String(index) ? 'collapse-active' : ''"
>
<view
class="level2-item"
:class="level2 === child.id ? 'level2-item-active' : ''"
v-for="child in item.children"
:key="child.id"
@click="level2Change(child)"
>
{{child.label}}
</view>
</uni-collapse-item>
</uni-collapse>
</scroll-view>
<view class="list-box">
<scroll-view class="level3-box" v-if="catgTreeLevel3.length > 1" :scroll-x="true" :show-scrollbar="false">
<view
class="level3-item"
:class="level3 === item.id ? 'level3-active' : ''"
v-for="(item,index) in catgTreeLevel3"
:key="index"
@click="level3Change(item)"
>
{{item.label}}
</view>
</scroll-view>
<view class="level4-box" v-if="catgTreeLevel4Modal">
<view class="level4-list">
<view
:class="item.id === level4 ? 'level4-item-active' : ''"
class="level4-item"
v-for="item in catgTreeLevel4"
:key="item.id"
@click="level4 = item.id"
>
{{item.label}}
</view>
</view>
<view class="footer-box">
<view @click="Reset">
{{$t('common.Reset')}}
</view>
<view @click="catgTreeLevel4Modal=false">
{{$t('common.Sure')}}
</view>
</view>
</view>
<scroll-view
class="list-scroll"
:scroll-y="true"
:scroll-top="prodScroll"
@scroll="scroll"
>
<view
class="prod-item"
v-for="item in prodList"
:key="item.id"
@click="goProdDetails(item)"
>
<view class="cover">
<image :src="item.mainPic"></image>
</view>
<view class="title text-ellipsis">
{{item.title}}
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { ref } from 'vue';
import { onLoad, onShow } from '@dcloudio/uni-app';
import { ref, computed, watch, nextTick } from 'vue';
import { prodOrNewsCatgApi, articlePageApi, appMaxCatgIdApi } from '@/api';
import { useScroll } from '@/stores/index.js';
const total = ref(0)
const prodList = ref([])
const params = ref({
pageNum: 1,
pageSize: 10,
catgId: undefined,
maxCatgId: '',
})
const init = (isLoad) => {
if (isLoad) {
params.value.pageNum += 1
} else {
params.value.pageNum = 1
}
return articlePageApi(params.value).then(({data:res}) => {
if (isLoad) {
prodList.value = [...prodList.value,res.data.records]
} else {
prodList.value = res.data.records
}
total.value = res.data.total
})
}
const collapseRef = ref()
const collapseValue = ref('0')
const level2 = ref('')
const level3 = ref(undefined)
const level4 = ref(undefined)
const catgTree = ref([])
const catgTreeLevel3 = computed(() => {
let arr = []
if (collapseValue.value && catgTree.value.length) {
let findObj = catgTree.value[Number(collapseValue.value)].children.find(item => item.id === level2.value)
if (findObj) {
arr = findObj.children
}
}
return [{id:undefined,label:'all',children:[]}, ...arr]
})
const catgTreeLevel4 = ref([])
const catgTreeLevel4Modal = ref(false)
const level2Change = (row) => {
level2.value = row.id
level3.value = undefined
level4.value = undefined
catgTreeLevel4Modal.value = false
}
const level3Change = (row) => {
catgTreeLevel4.value = []
level3.value = row.id
catgTreeLevel4Modal.value = false
if (row.children.length) {
catgTreeLevel4.value = row.children
catgTreeLevel4Modal.value = true
}
}
const Reset = () => {
level4.value = undefined
catgTreeLevel4Modal.value = false
}
const finalCatgId = computed(() => {
let id = undefined
if(level3.value) {
id = level3.value
} else if (level2.value) {
id = level2.value
} else if (collapseValue.value && catgTree.value.length) {
id = catgTree.value[Number(collapseValue.value)].id
} else {
id = params.value.maxCatgId
}
return id
})
watch(() => finalCatgId.value, (val) => {
params.value.catgId = val
init()
}, {deep:true})
const getMaxCatgId = () => {
return appMaxCatgIdApi('News').then(({data:res}) => {
params.value.maxCatgId = res.data || '8d6227f7c859a9118ffc2471abdfa819'
})
}
const catgTreeInit = () => {
return prodOrNewsCatgApi(params.value.maxCatgId).then(({data:res}) => {
catgTree.value = res.data
if (res.data.length) {
params.value.catgId = res.data[0].children.length ? res.data[0].children[0].id : res.data[0].id
}
})
}
const collapseChange = (e) => {
level2.value = undefined
level3.value = undefined
level4.value = undefined
Reset()
}
const oldScrollTop = ref(0)
const prodScroll = ref(0)
const scroll = (e) => {
oldScrollTop.value = e.detail.scrollTop
}
const ClickTop = () => {
prodScroll.value = oldScrollTop.value
nextTick(() => {
prodScroll.value = 0
})
}
useScroll().callback = ClickTop
const goProdDetails = (row) => {
uni.navigateTo({
url: `/application/article-details?id=${row.id}`
})
}
onShow(() => {
})
onLoad(async() => {
await getMaxCatgId()
await catgTreeInit()
init()
})
</script>
<style lang="scss" scoped>
.pages {
padding-top: calc(var(--status-bar-height) + 60rpx);
/* #ifdef H5 */
min-height: calc(100vh - 50px);
/* #endif */
.main {
width: 100%;
display: flex;
.menu-box {
width: 32%;
height: calc(100vh - 50px - (var(--status-bar-height)) - 34px);
/* #ifdef H5 */
height: calc(100vh - 50px - (var(--status-bar-height)));
/* #endif */
border-right: 2rpx solid #e5edf4;
::v-deep .uni-collapse {
background-color: transparent;
.uni-collapse-item__title-box {
line-height: unset;
background-color: transparent;
.uni-collapse-item__title-text {
white-space: unset;
text-overflow: unset;
}
}
}
.collapse-active {
color: #015fe8;
background-color: #ffffff;
overflow: hidden;
border-top-right-radius: 25rpx;
border-bottom-right-radius: 25rpx;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(148,159,176,0.25);
::v-deep .uni-collapse-item__title-text {
color: #015fe8;
}
}
.level2-item {
width: 100%;
padding: 22rpx 16rpx;
position: relative;
color: #77778b;
&:first-child {
&::before {
content: '';
width: 90%;
height: 2rpx;
position: absolute;
top: 0;
right: 0;
background-color: #eceef0;
}
}
}
.level2-item-active {
color: #015fe8;
&::after {
content: '';
width: 4rpx;
height: 100%;
position: absolute;
left: 0;
top: 0;
background-color: #015fe8;
}
}
}
.list-box {
width: 68%;
padding-left: 16rpx;
position: relative;
.level3-box {
height: 68rpx;
white-space: nowrap;
.level3-item {
display: inline-block;
width: max-content;
height: 100%;
margin-right: 20rpx;
padding: 0 14rpx;
line-height: 68rpx;
color: #77778b;
background-color: #fff;
border-radius: 40rpx;
&:first-child {
padding: 0 36rpx;
}
&:last-child {
margin-right: 0;
}
}
.level3-active {
color: #015fe8;
border: 2rpx solid #015fe8;
}
}
.level4-box {
width: 95%;
height: 92%;
padding: 18rpx;
position: absolute;
top: 80rpx;
left: 50%;
transform: translateX(-50%);
background-color: #fff;
z-index: 9999;
box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(155,163,184,0.25);
.level4-list {
width: 100%;
height: calc(100% - 72rpx);
display: flex;
flex-wrap: wrap;
overflow-y: auto;
.level4-item {
width: 48%;
height: min-content;
margin-right: 2%;
padding: 10rpx 0;
text-align: center;
color: #77778b;
border: 1rpx solid #e6e8ed;
border-radius: 36rpx;
font-size: 24rpx;
&:nth-child(2n) {
margin-right: 0;
}
}
.level4-item-active {
color: #292d2e;
background-color: #eceef0;
border-color: #d6dce2;
}
}
.footer-box {
width: 100%;
position: absolute;
left: 0;
bottom: 0;
display: flex;
view {
flex: 1;
height: 72rpx;
line-height: 72rpx;
text-align: center;
font-weight: 500;
&:first-child {
color: #292d2e;
background-color: #fff;
box-shadow: 0rpx -4rpx 12rpx 0rpx rgba(192,195,209,0.25);
}
&:last-child {
color: #fff;
background: linear-gradient( 270deg, #6B98FE 0%, #0212FF 100%), #FFFFFF;
}
}
}
}
.list-scroll {
width: 100%;
height: calc(100vh - 50px - 68rpx - (var(--status-bar-height)) - 34px);
/* #ifdef H5 */
height: calc(100vh - 50px - 68rpx - (var(--status-bar-height)));
/* #endif */
background: linear-gradient(to bottom, #e4ecff 5%,#ffffff 15%);
.prod-item {
width: 100%;
height: 162rpx;
display: flex;
padding: 18rpx 24rpx;
position: relative;
&::after {
content: '';
width: calc(100% - 200rpx);
height: 2rpx;
position: absolute;
right: 0;
bottom: 0;
background-color: #eceef0;
}
.cover {
width: 165rpx;
height: 100%;
border-radius: 15rpx;
overflow: hidden;
image {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.title {
flex: 1;
height: 99%;
padding-left: 34rpx;
padding-bottom: 10rpx;
color: #323437;
-webkit-line-clamp: 3;
}
}
}
}
}
}
</style>

View File

@ -99,17 +99,16 @@
:key="item.id"
@click="goProdDetails(item)"
>
<image :src="item.mainPic" mode="aspectFit"></image>
<view class="text-ellipsis">
<view class="cover">
<image :src="item.mainPic"></image>
</view>
<view class="title text-ellipsis">
{{item.title}}
</view>
</view>
</scroll-view>
</view>
</view>
<SuspensionBtn @ClickTop="ClickTop" @clickMsg="onlineModalShow=true"/>
<OnlineModal v-if="onlineModalShow" @close="onlineModalShow=false" />
</view>
</template>
@ -117,6 +116,7 @@
import { onLoad, onShow } from '@dcloudio/uni-app';
import { ref, computed, watch, nextTick } from 'vue';
import { prodOrNewsCatgApi, prodPageApi, appMaxCatgIdApi } from '@/api';
import { useScroll } from '@/stores/index.js';
const total = ref(0)
const prodList = ref([])
@ -124,7 +124,7 @@
pageNum: 1,
pageSize: 10,
catgId: undefined,
maxCatgId: '660179025d0e2e0e4263db0eec86a8cc',
maxCatgId: '',
text: '',
})
const init = (isLoad) => {
@ -134,7 +134,6 @@
params.value.pageNum = 1
}
return prodPageApi(params.value).then(({data:res}) => {
console.log(res)
if (isLoad) {
prodList.value = [...prodList.value,res.data.records]
} else {
@ -202,7 +201,7 @@
}, {deep:true})
const getMaxCatgId = () => {
return appMaxCatgIdApi('Products').then(({data:res}) => {
console.log(res)
params.value.maxCatgId = res.data || '660179025d0e2e0e4263db0eec86a8cc'
})
}
const catgTreeInit = () => {
@ -231,9 +230,7 @@
prodScroll.value = 0
})
}
const onlineModalShow = ref(false)
const onlineModalRef = ref()
useScroll().callback = ClickTop
const goProdDetails = (row) => {
uni.navigateTo({
@ -253,12 +250,12 @@
<style lang="scss" scoped>
.pages {
padding-top: calc(var(--status-bar-height) + 60rpx);
/* #ifdef H5 */
min-height: calc(100vh - 50px);
/* #endif */
.search-box {
padding: 16rpx;
padding-top: calc(var(--status-bar-height) + 60rpx);
::v-deep .uni-easyinput {
border-radius: 32rpx;
border: 2rpx solid #015fe8 !important;
@ -288,7 +285,12 @@
::v-deep .uni-collapse {
background-color: transparent;
.uni-collapse-item__title-box {
line-height: unset;
background-color: transparent;
.uni-collapse-item__title-text {
white-space: unset;
text-overflow: unset;
}
}
}
.collapse-active {
@ -434,8 +436,7 @@
width: 100%;
height: 162rpx;
display: flex;
padding: 18rpx 0;
padding-right: 24rpx;
padding: 18rpx 24rpx;
position: relative;
&::after {
content: '';
@ -446,11 +447,18 @@
bottom: 0;
background-color: #eceef0;
}
image {
.cover {
width: 165rpx;
height: 100%;
border-radius: 15rpx;
overflow: hidden;
image {
width: 100%;
height: 100%;
object-fit: cover;
}
}
view {
.title {
flex: 1;
height: 99%;
padding-left: 34rpx;

View File

@ -8,7 +8,7 @@
<script setup>
import { onLoad, onPullDownRefresh } from '@dcloudio/uni-app';
import { ref } from 'vue';
import { categoryInfoApi } from '@/api/index.js';
import { categoryInfoApi, appMaxCatgIdApi } from '@/api/index.js';
const id = ref('66c10877ee325e7f5da316e69ceb2eb9')
const info = ref({})
@ -18,8 +18,16 @@
})
}
const getMaxCatgId = () => {
return appMaxCatgIdApi('About').then(({data:res}) => {
id.value = res.data || '66c10877ee325e7f5da316e69ceb2eb9'
})
}
onPullDownRefresh(async() => {
try {
await getMaxCatgId()
await init()
} catch(err) {
console.log(err)
@ -27,7 +35,8 @@
uni.stopPullDownRefresh()
})
onLoad((options) => {
onLoad(async(options) => {
await getMaxCatgId()
init()
})
</script>

View File

@ -47,3 +47,16 @@ export const useIndex = defineStore('index',()=>{
menuTree
}
})
export const useScroll = defineStore('scroll', () => {
const callback = ref()
const sendCallback = () => {
callback.value && callback.value()
}
return {
callback,
sendCallback
}
})

View File

@ -1,5 +1,6 @@
import uni from "@dcloudio/vite-plugin-uni";
import { defineConfig, loadEnv } from 'vite';
import UniLayouts from '@uni-helper/vite-plugin-uni-layouts'
export default defineConfig(({ command, mode }) => {
// 根据当前工作目录中的 `mode` 加载 .env 文件
@ -7,7 +8,10 @@ export default defineConfig(({ command, mode }) => {
const env = loadEnv(mode, process.cwd(), '')
return {
// vite 配置
plugins: [uni()],
plugins: [
uni(),
UniLayouts(),
],
base: './',
define: {
__VUE_I18N_FULL_INSTALL__: true,