first commit
120
.flattened-pom.xml
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.chanko.yunxi</groupId>
|
||||||
|
<artifactId>mes</artifactId>
|
||||||
|
<version>2.0.0-jdk8-snapshot</version>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>${project.artifactId}</name>
|
||||||
|
<description>芋道项目基础脚手架</description>
|
||||||
|
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
||||||
|
<modules>
|
||||||
|
<module>mes-dependencies</module>
|
||||||
|
<module>mes-framework</module>
|
||||||
|
<module>mes-server</module>
|
||||||
|
<module>mes-module-system</module>
|
||||||
|
<module>mes-module-infra</module>
|
||||||
|
<module>mes-module-heli</module>
|
||||||
|
</modules>
|
||||||
|
<properties>
|
||||||
|
<lombok.version>1.18.30</lombok.version>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
|
||||||
|
<maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
|
||||||
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
|
<mapstruct.version>1.5.5.Final</mapstruct.version>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
|
||||||
|
<revision>2.0.0-jdk8-snapshot</revision>
|
||||||
|
<spring.boot.version>2.7.17</spring.boot.version>
|
||||||
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
</properties>
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.chanko.yunxi</groupId>
|
||||||
|
<artifactId>mes-dependencies</artifactId>
|
||||||
|
<version>2.0.0-jdk8-snapshot</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>huaweicloud</id>
|
||||||
|
<name>huawei</name>
|
||||||
|
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>aliyunmaven</id>
|
||||||
|
<name>aliyun</name>
|
||||||
|
<url>https://maven.aliyun.com/repository/public</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<build>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||||
|
<version>${spring.boot.version}</version>
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>${lombok.version}</version>
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>org.mapstruct</groupId>
|
||||||
|
<artifactId>mapstruct-processor</artifactId>
|
||||||
|
<version>${mapstruct.version}</version>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>flatten-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>flatten-maven-plugin</artifactId>
|
||||||
|
<version>${flatten-maven-plugin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>flatten</id>
|
||||||
|
<phase>process-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>flatten</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>flatten.clean</id>
|
||||||
|
<phase>clean</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>clean</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<flattenMode>resolveCiFriendliesOnly</flattenMode>
|
||||||
|
<updatePomFile>true</updatePomFile>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
28
.gitignore
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# ---> Java
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
.idea
|
||||||
|
target/
|
||||||
|
node_modules/
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
replay_pid*
|
||||||
|
target
|
BIN
.image/Java监控.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
.image/MySQL.jpg
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
.image/OA请假-列表.jpg
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
.image/OA请假-发起.jpg
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
.image/OA请假-详情.jpg
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
.image/Redis.jpg
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
.image/admin-uniapp/01.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
.image/admin-uniapp/02.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
.image/admin-uniapp/03.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
.image/admin-uniapp/04.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
.image/admin-uniapp/05.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
.image/admin-uniapp/06.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
.image/admin-uniapp/07.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
.image/admin-uniapp/08.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
.image/admin-uniapp/09.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
.image/common/mall-feature.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
.image/common/mall-preview.png
Normal file
After Width: | Height: | Size: 238 KiB |
BIN
.image/common/mes-cloud-architecture.png
Normal file
After Width: | Height: | Size: 201 KiB |
BIN
.image/common/mes-roadmap.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
.image/common/project-vs.png
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
.image/common/ruoyi-vue-pro-architecture.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
.image/common/ruoyi-vue-pro-biz.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
.image/个人中心.jpg
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
.image/代码生成.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
.image/令牌管理.jpg
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
.image/任务列表-审批.jpg
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
.image/任务列表-已办.jpg
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
.image/任务列表-待办.jpg
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
.image/任务日志.jpg
Normal file
After Width: | Height: | Size: 124 KiB |
BIN
.image/商户信息.jpg
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
.image/在线用户.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
.image/大屏设计器-列表.jpg
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
.image/大屏设计器-编辑.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
.image/大屏设计器-预览.jpg
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
.image/字典数据.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
.image/字典类型.jpg
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
.image/定时任务.jpg
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
.image/岗位管理.jpg
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
.image/应用信息-列表.jpg
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
.image/应用信息-编辑.jpg
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
.image/应用管理.jpg
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
.image/我的流程-列表.jpg
Normal file
After Width: | Height: | Size: 176 KiB |
BIN
.image/我的流程-发起.jpg
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
.image/我的流程-详情.jpg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
.image/报表设计器-图形报表.jpg
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
.image/报表设计器-打印设计.jpg
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
.image/报表设计器-数据报表.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
.image/操作日志.jpg
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
.image/支付订单.jpg
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
.image/敏感词.jpg
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
.image/数据库文档.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
.image/文件管理.jpg
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
.image/文件管理2.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
.image/文件配置.jpg
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
.image/日志中心.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
.image/流程模型-列表.jpg
Normal file
After Width: | Height: | Size: 173 KiB |
BIN
.image/流程模型-定义.jpg
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
.image/流程模型-设计.jpg
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
.image/流程表单.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
.image/生成效果.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
.image/用户分组.jpg
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
.image/用户管理.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
.image/登录.jpg
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
.image/登录日志.jpg
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
.image/短信日志.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
.image/短信模板.jpg
Normal file
After Width: | Height: | Size: 248 KiB |
BIN
.image/短信渠道.jpg
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
.image/租户套餐.png
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
.image/租户管理.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
.image/系统接口.jpg
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
.image/菜单管理.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
.image/表单构建.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
.image/角色管理.jpg
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
.image/访问日志.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
.image/退款订单.jpg
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
.image/通知公告.jpg
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
.image/部门管理.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
.image/配置管理.jpg
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
.image/链路追踪.jpg
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
.image/错误日志.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
.image/错误码管理.jpg
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
.image/首页.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2021 ruoyi-vue-pro
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
11
heli-app/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
/dist*
|
||||||
|
*-lock.*
|
||||||
|
pnpm-debug
|
||||||
|
auto-*.d.ts
|
||||||
|
.idea
|
||||||
|
.history
|
201
heli-app/LICENSE
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
1
heli-app/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
微信小程序
|
32
heli-app/deploy.sh
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# 确保脚本抛出遇到的错误
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
# 1. 先提交 master
|
||||||
|
|
||||||
|
git push git@github.com:xxx.git master:master
|
||||||
|
|
||||||
|
# 2. 打包生成静态文件
|
||||||
|
# npm run build:h5
|
||||||
|
# 注意:项目使用了 uniClound,需在 HbuilderX 打包 H5 网站,否则无法使用云功能
|
||||||
|
cli publish --platform h5 --project erabbit-uni-app --spaceId mp-2fac390c-2ea7-4d12-9726-f5b9a3bb6c37
|
||||||
|
|
||||||
|
# 3. 生成流水线.yml
|
||||||
|
mkdir -p "./dist/build/h5/.github/workflows"
|
||||||
|
cp "./deploy.yml" "./dist/build/h5/.github/workflows/deploy.yml"
|
||||||
|
|
||||||
|
# 4. 进入生成的文件夹,提交到主仓库 gh-pages 分支
|
||||||
|
# 如果是发布到自定义域名
|
||||||
|
# echo 'www.example.com' > CNAME
|
||||||
|
cd dist/build/h5
|
||||||
|
git init -b master
|
||||||
|
git add -A
|
||||||
|
git commit -m 'deploy: gh-pages'
|
||||||
|
|
||||||
|
# 如果发布到 https://<USERNAME>.github.io/<REPO>
|
||||||
|
# git push -f git@gitee.com:<USERNAME>/<REPO>.git master:gh-pages
|
||||||
|
git push -f git@github.com:xxx.git master:gh-pages
|
||||||
|
|
||||||
|
cd -
|
36
heli-app/deploy.yml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
name: deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [gh-pages]
|
||||||
|
pull_request:
|
||||||
|
branches: [gh-pages]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
gitee:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Sync To Gitee
|
||||||
|
uses: wearerequired/git-mirror-action@master
|
||||||
|
env:
|
||||||
|
# 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
|
||||||
|
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
|
||||||
|
with:
|
||||||
|
# 注意替换为你的 GitHub 源仓库地址
|
||||||
|
source-repo: git@github.com:xxx.git
|
||||||
|
# 注意替换为你的 Gitee 目标仓库地址
|
||||||
|
destination-repo: git@gitee.com:xxx.git
|
||||||
|
# dry-run: true
|
||||||
|
|
||||||
|
- name: Build Gitee Pages
|
||||||
|
uses: yanglbme/gitee-pages-action@main
|
||||||
|
with:
|
||||||
|
# 注意替换为你的 Gitee 用户名
|
||||||
|
gitee-username: xxx
|
||||||
|
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
|
||||||
|
gitee-password: ${{ secrets.GITEE_PASSWORD }}
|
||||||
|
# 注意替换为你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
|
||||||
|
gitee-repo: Megasu/uniapp-shop-vue3-ts
|
||||||
|
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
|
||||||
|
branch: gh-pages
|
||||||
|
# directory: docs/.vitepress/dist
|
42
heli-app/index.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<script>
|
||||||
|
var coverSupport =
|
||||||
|
'CSS' in window &&
|
||||||
|
typeof CSS.supports === 'function' &&
|
||||||
|
(CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
|
||||||
|
document.write(
|
||||||
|
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||||
|
(coverSupport ? ', viewport-fit=cover' : '') +
|
||||||
|
'" />',
|
||||||
|
)
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<title></title>
|
||||||
|
<!--preload-links-->
|
||||||
|
<!--app-context-->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app">
|
||||||
|
<!--app-html-->
|
||||||
|
</div>
|
||||||
|
<script type="module" src="/src/main.ts"></script>
|
||||||
|
//
|
||||||
|
<script>
|
||||||
|
// var _hmt = _hmt || []
|
||||||
|
// ;(function () {
|
||||||
|
// var hm = document.createElement('script')
|
||||||
|
// hm.src = 'https://hm.baidu.com/hm.js?47837f06b6f8cf8ba80165ca9a80711'
|
||||||
|
// var s = document.getElementsByTagName('script')[0]
|
||||||
|
// s.parentNode.insertBefore(hm, s)
|
||||||
|
// })()
|
||||||
|
//
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
94
heli-app/package.json
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"name": "uni-app-personal",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"dev:app": "uni -p app",
|
||||||
|
"dev:app-android": "uni -p app-android",
|
||||||
|
"dev:app-ios": "uni -p app-ios",
|
||||||
|
"dev:custom": "uni -p",
|
||||||
|
"dev:h5": "uni",
|
||||||
|
"dev:h5:ssr": "uni --ssr",
|
||||||
|
"dev:mp-alipay": "uni -p mp-alipay",
|
||||||
|
"dev:mp-baidu": "uni -p mp-baidu",
|
||||||
|
"dev:mp-kuaishou": "uni -p mp-kuaishou",
|
||||||
|
"dev:mp-lark": "uni -p mp-lark",
|
||||||
|
"dev:mp-qq": "uni -p mp-qq",
|
||||||
|
"dev:mp-toutiao": "uni -p mp-toutiao",
|
||||||
|
"dev:mp-weixin": "uni -p mp-weixin",
|
||||||
|
"dev:quickapp-webview": "uni -p quickapp-webview",
|
||||||
|
"dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
|
||||||
|
"dev:quickapp-webview-union": "uni -p quickapp-webview-union",
|
||||||
|
"build:app": "uni build -p app",
|
||||||
|
"build:app-android": "uni build -p app-android",
|
||||||
|
"build:app-ios": "uni build -p app-ios",
|
||||||
|
"build:custom": "uni build -p",
|
||||||
|
"build:h5": "uni build",
|
||||||
|
"build:h5:ssr": "uni build --ssr",
|
||||||
|
"build:mp-alipay": "uni build -p mp-alipay",
|
||||||
|
"build:mp-baidu": "uni build -p mp-baidu",
|
||||||
|
"build:mp-kuaishou": "uni build -p mp-kuaishou",
|
||||||
|
"build:mp-lark": "uni build -p mp-lark",
|
||||||
|
"build:mp-qq": "uni build -p mp-qq",
|
||||||
|
"build:mp-toutiao": "uni build -p mp-toutiao",
|
||||||
|
"build:mp-weixin": "uni build -p mp-weixin",
|
||||||
|
"build:quickapp-webview": "uni build -p quickapp-webview",
|
||||||
|
"build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
|
||||||
|
"build:quickapp-webview-union": "uni build -p quickapp-webview-union",
|
||||||
|
"tsc": "vue-tsc --noEmit --skipLibCheck",
|
||||||
|
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
|
||||||
|
"prepare": "husky install",
|
||||||
|
"lint-staged": "lint-staged"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"*.{js,ts,vue}": [
|
||||||
|
"eslint --fix"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@dcloudio/uni-app": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-app-plus": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-components": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-h5": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-alipay": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-baidu": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-jd": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-kuaishou": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-lark": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-qq": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-toutiao": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-weixin": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-mp-xhs": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-quickapp-webview": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-ui": "^1.4.28",
|
||||||
|
"pinia": "2.0.27",
|
||||||
|
"pinia-plugin-persistedstate": "^3.2.0",
|
||||||
|
"vue": "3.4.21",
|
||||||
|
"vue-i18n": "9.10.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@dcloudio/types": "3.4.8",
|
||||||
|
"@dcloudio/uni-automator": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-cli-shared": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-stacktracey": "3.0.0-3090920231225001",
|
||||||
|
"@dcloudio/uni-vue-devtools": "3.0.0-alpha-3080220230511001",
|
||||||
|
"@dcloudio/vite-plugin-uni": "3.0.0-3090920231225001",
|
||||||
|
"@rushstack/eslint-patch": "^1.1.4",
|
||||||
|
"@types/node": "^18.11.9",
|
||||||
|
"@uni-helper/uni-app-types": "^0.5.12",
|
||||||
|
"@uni-helper/uni-ui-types": "^0.5.11",
|
||||||
|
"@vue/eslint-config-prettier": "^7.0.0",
|
||||||
|
"@vue/eslint-config-typescript": "^11.0.0",
|
||||||
|
"@vue/runtime-core": "3.4.21",
|
||||||
|
"@vue/tsconfig": "^0.4.0",
|
||||||
|
"eslint": "^8.22.0",
|
||||||
|
"eslint-plugin-vue": "^9.3.0",
|
||||||
|
"husky": "^8.0.0",
|
||||||
|
"lint-staged": "^13.0.3",
|
||||||
|
"miniprogram-api-typings": "^3.12.0",
|
||||||
|
"prettier": "^2.7.1",
|
||||||
|
"sass": "^1.56.1",
|
||||||
|
"typescript": "^5.1.6",
|
||||||
|
"vite": "4.0.3",
|
||||||
|
"vue-tsc": "^1.8.8"
|
||||||
|
}
|
||||||
|
}
|
28
heli-app/project.config.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"appid": "wx48fad418e2753b1c",
|
||||||
|
"compileType": "miniprogram",
|
||||||
|
"libVersion": "3.3.0",
|
||||||
|
"packOptions": {
|
||||||
|
"ignore": [],
|
||||||
|
"include": []
|
||||||
|
},
|
||||||
|
"setting": {
|
||||||
|
"coverView": true,
|
||||||
|
"es6": true,
|
||||||
|
"postcss": true,
|
||||||
|
"minified": true,
|
||||||
|
"enhance": true,
|
||||||
|
"showShadowRootInWxmlPanel": true,
|
||||||
|
"packNpmRelationList": [],
|
||||||
|
"babelSetting": {
|
||||||
|
"ignore": [],
|
||||||
|
"disablePlugins": [],
|
||||||
|
"outputPath": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"condition": {},
|
||||||
|
"editorSetting": {
|
||||||
|
"tabIndent": "insertSpaces",
|
||||||
|
"tabSize": 4
|
||||||
|
}
|
||||||
|
}
|
7
heli-app/project.private.config.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
|
||||||
|
"projectname": "app-nx-personal",
|
||||||
|
"setting": {
|
||||||
|
"compileHotReLoad": true
|
||||||
|
}
|
||||||
|
}
|
28
heli-app/src/App.vue
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: 王文杰
|
||||||
|
* @Date: 2024-01-04 12:54:56
|
||||||
|
* @LastEditors: 王文杰
|
||||||
|
* @LastEditTime: 2024-03-26 14:34:58
|
||||||
|
* @FilePath: /app-nx-personal/src/App.vue
|
||||||
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
|
-->
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
|
||||||
|
import { updateManager } from '@/utils/index'
|
||||||
|
onLaunch(() => {
|
||||||
|
console.log('App Launch')
|
||||||
|
updateManager()
|
||||||
|
})
|
||||||
|
onShow(() => {
|
||||||
|
console.log('App Show')
|
||||||
|
})
|
||||||
|
onHide(() => {
|
||||||
|
console.log('App Hide')
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
// 字体图标
|
||||||
|
@import '@/styles/fonts.scss';
|
||||||
|
@import '@/styles/base.scss';
|
||||||
|
</style>
|
152
heli-app/src/components/XtxGuess.vue
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
// import { getHomeGoodsGuessLikeAPI } from '@/services/home'
|
||||||
|
import type { PageParams } from '@/types/global'
|
||||||
|
import type { GuessItem } from '@/types/home'
|
||||||
|
import { onMounted, ref } from 'vue'
|
||||||
|
|
||||||
|
// 分页参数
|
||||||
|
const pageParams: Required<PageParams> = {
|
||||||
|
page: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
}
|
||||||
|
// 猜你喜欢的列表
|
||||||
|
const guessList = ref<GuessItem[]>([])
|
||||||
|
// 已结束标记
|
||||||
|
const finish = ref(false)
|
||||||
|
// 获取猜你喜欢数据
|
||||||
|
const getHomeGoodsGuessLikeData = async () => {
|
||||||
|
// 退出分页判断
|
||||||
|
if (finish.value === true) {
|
||||||
|
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
|
||||||
|
}
|
||||||
|
// const res = await getHomeGoodsGuessLikeAPI(pageParams)
|
||||||
|
// guessList.value = res.result.items
|
||||||
|
// 数组追加
|
||||||
|
guessList.value.push(...res.result.items)
|
||||||
|
// 分页条件
|
||||||
|
if (pageParams.page < res.result.pages) {
|
||||||
|
// 页码累加
|
||||||
|
pageParams.page++
|
||||||
|
} else {
|
||||||
|
finish.value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 重置数据
|
||||||
|
const resetData = () => {
|
||||||
|
pageParams.page = 1
|
||||||
|
guessList.value = []
|
||||||
|
finish.value = false
|
||||||
|
}
|
||||||
|
// 组件挂载完毕
|
||||||
|
onMounted(() => {
|
||||||
|
getHomeGoodsGuessLikeData()
|
||||||
|
})
|
||||||
|
// 暴露方法
|
||||||
|
defineExpose({
|
||||||
|
resetData,
|
||||||
|
getMore: getHomeGoodsGuessLikeData,
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<!-- 猜你喜欢 -->
|
||||||
|
<view class="caption">
|
||||||
|
<text class="text">猜你喜欢</text>
|
||||||
|
</view>
|
||||||
|
<view class="guess">
|
||||||
|
<navigator
|
||||||
|
class="guess-item"
|
||||||
|
v-for="item in guessList"
|
||||||
|
:key="item.id"
|
||||||
|
:url="`/pages/goods/goods?id=${item.id}`"
|
||||||
|
>
|
||||||
|
<image class="image" mode="aspectFill" :src="item.picture"></image>
|
||||||
|
<view class="name"> {{ item.name }} </view>
|
||||||
|
<view class="price">
|
||||||
|
<text class="small">¥</text>
|
||||||
|
<text>{{ item.price }}</text>
|
||||||
|
</view>
|
||||||
|
</navigator>
|
||||||
|
</view>
|
||||||
|
<view class="loading-text">
|
||||||
|
{{ finish ? '没有更多数据~' : '正在加载...' }}
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/* 分类标题 */
|
||||||
|
.caption {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 36rpx 0 40rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #262626;
|
||||||
|
.text {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 28rpx 0 30rpx;
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
width: 20rpx;
|
||||||
|
height: 20rpx;
|
||||||
|
background-image: url(@/static/images/bubble.png);
|
||||||
|
background-size: contain;
|
||||||
|
margin: 0 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 猜你喜欢 */
|
||||||
|
.guess {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
.guess-item {
|
||||||
|
width: 345rpx;
|
||||||
|
padding: 24rpx 20rpx 20rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.image {
|
||||||
|
width: 304rpx;
|
||||||
|
height: 304rpx;
|
||||||
|
}
|
||||||
|
.name {
|
||||||
|
height: 75rpx;
|
||||||
|
margin: 10rpx 0;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #262626;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
}
|
||||||
|
.price {
|
||||||
|
line-height: 1;
|
||||||
|
padding-top: 4rpx;
|
||||||
|
color: #cf4444;
|
||||||
|
font-size: 26rpx;
|
||||||
|
}
|
||||||
|
.small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 加载提示文字
|
||||||
|
.loading-text {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
}
|
||||||
|
</style>
|
40
heli-app/src/components/XtxSwiper.vue
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import type { BannerItem } from '@/types/home'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const activeIndex = ref(0)
|
||||||
|
|
||||||
|
// 当 swiper 下标发生变化时触发
|
||||||
|
const onChange: UniHelper.SwiperOnChange = (ev) => {
|
||||||
|
activeIndex.value = ev.detail.current
|
||||||
|
}
|
||||||
|
// 定义 props 接收
|
||||||
|
defineProps<{
|
||||||
|
list: BannerItem[]
|
||||||
|
}>()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view class="carousel">
|
||||||
|
<swiper :circular="true" :autoplay="false" :interval="3000" @change="onChange">
|
||||||
|
<swiper-item v-for="item in list" :key="item.id">
|
||||||
|
<navigator url="/pages/index/index" hover-class="none" class="navigator">
|
||||||
|
<image mode="aspectFill" class="image" :src="item.imgUrl"></image>
|
||||||
|
</navigator>
|
||||||
|
</swiper-item>
|
||||||
|
</swiper>
|
||||||
|
<!-- 指示点 -->
|
||||||
|
<view class="indicator">
|
||||||
|
<text
|
||||||
|
v-for="(item, index) in list"
|
||||||
|
:key="item.id"
|
||||||
|
class="dot"
|
||||||
|
:class="{ active: index === activeIndex }"
|
||||||
|
></text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import './styles/XtxSwiper.scss';
|
||||||
|
</style>
|
31
heli-app/src/components/styles/XtxSwiper.scss
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* 轮播图 */
|
||||||
|
.carousel {
|
||||||
|
height: 280rpx;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
transform: translateY(0);
|
||||||
|
background-color: #efefef;
|
||||||
|
.indicator {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 16rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
.dot {
|
||||||
|
width: 30rpx;
|
||||||
|
height: 6rpx;
|
||||||
|
margin: 0 8rpx;
|
||||||
|
border-radius: 6rpx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
.active {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.navigator,
|
||||||
|
.image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
145
heli-app/src/components/vk-data-goods-sku-popup/vk-data-goods-sku-popup.d.ts
vendored
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
import { Component } from '@uni-helper/uni-app-types'
|
||||||
|
|
||||||
|
/** SKU 弹出层 */
|
||||||
|
export type SkuPopup = Component<SkuPopupProps>
|
||||||
|
|
||||||
|
/** SKU 弹出层实例 */
|
||||||
|
export type SkuPopupInstance = InstanceType<SkuPopup>
|
||||||
|
|
||||||
|
/** SKU 弹出层属性 */
|
||||||
|
export type SkuPopupProps = {
|
||||||
|
/** 双向绑定,true 为打开组件,false 为关闭组件 */
|
||||||
|
modelValue: boolean
|
||||||
|
/** 商品信息本地数据源 */
|
||||||
|
localdata: SkuPopupLocaldata
|
||||||
|
/** 按钮模式 1:都显示 2:只显示购物车 3:只显示立即购买 */
|
||||||
|
mode?: 1 | 2 | 3
|
||||||
|
/** 该商品已抢完时的按钮文字 */
|
||||||
|
noStockText?: string
|
||||||
|
/** 库存文字 */
|
||||||
|
stockText?: string
|
||||||
|
/** 点击遮罩是否关闭组件 */
|
||||||
|
maskCloseAble?: boolean
|
||||||
|
/** 顶部圆角值 */
|
||||||
|
borderRadius?: string | number
|
||||||
|
/** 最小购买数量 */
|
||||||
|
minBuyNum?: number
|
||||||
|
/** 最大购买数量 */
|
||||||
|
maxBuyNum?: number
|
||||||
|
/** 每次点击后的数量 */
|
||||||
|
stepBuyNum?: number
|
||||||
|
/** 是否只能输入 step 的倍数 */
|
||||||
|
stepStrictly?: boolean
|
||||||
|
/** 是否隐藏库存的显示 */
|
||||||
|
hideStock?: false
|
||||||
|
/** 主题风格 */
|
||||||
|
theme?: 'default' | 'red-black' | 'black-white' | 'coffee' | 'green'
|
||||||
|
/** 默认金额会除以100(即100=1元),若设置为0,则不会除以100(即1=1元) */
|
||||||
|
amountType?: 1 | 0
|
||||||
|
/** 自定义获取商品信息的函数(已知支付宝不支持,支付宝请改用localdata属性) */
|
||||||
|
customAction?: () => void
|
||||||
|
/** 是否显示右上角关闭按钮 */
|
||||||
|
showClose?: boolean
|
||||||
|
/** 关闭按钮的图片地址 */
|
||||||
|
closeImage?: string
|
||||||
|
/** 价格的字体颜色 */
|
||||||
|
priceColor?: string
|
||||||
|
/** 立即购买 - 按钮的文字 */
|
||||||
|
buyNowText?: string
|
||||||
|
/** 立即购买 - 按钮的字体颜色 */
|
||||||
|
buyNowColor?: string
|
||||||
|
/** 立即购买 - 按钮的背景颜色 */
|
||||||
|
buyNowBackgroundColor?: string
|
||||||
|
/** 加入购物车 - 按钮的文字 */
|
||||||
|
addCartText?: string
|
||||||
|
/** 加入购物车 - 按钮的字体颜色 */
|
||||||
|
addCartColor?: string
|
||||||
|
/** 加入购物车 - 按钮的背景颜色 */
|
||||||
|
addCartBackgroundColor?: string
|
||||||
|
/** 商品缩略图背景颜色 */
|
||||||
|
goodsThumbBackgroundColor?: string
|
||||||
|
/** 样式 - 不可点击时,按钮的样式 */
|
||||||
|
disableStyle?: object
|
||||||
|
/** 样式 - 按钮点击时的样式 */
|
||||||
|
activedStyle?: object
|
||||||
|
/** 样式 - 按钮常态的样式 */
|
||||||
|
btnStyle?: object
|
||||||
|
/** 字段名 - 商品表id的字段名 */
|
||||||
|
goodsIdName?: string
|
||||||
|
/** 字段名 - sku表id的字段名 */
|
||||||
|
skuIdName?: string
|
||||||
|
/** 字段名 - 商品对应的sku列表的字段名 */
|
||||||
|
skuListName?: string
|
||||||
|
/** 字段名 - 商品规格名称的字段名 */
|
||||||
|
specListName?: string
|
||||||
|
/** 字段名 - sku库存的字段名 */
|
||||||
|
stockName?: string
|
||||||
|
/** 字段名 - sku组合路径的字段名 */
|
||||||
|
skuArrName?: string
|
||||||
|
/** 字段名 - 商品缩略图字段名(未选择sku时) */
|
||||||
|
goodsThumbName?: string
|
||||||
|
/** 被选中的值 */
|
||||||
|
selectArr?: string[]
|
||||||
|
|
||||||
|
/** 打开弹出层 */
|
||||||
|
onOpen: () => void
|
||||||
|
/** 关闭弹出层 */
|
||||||
|
onClose: () => void
|
||||||
|
/** 点击加入购物车时(需选择完SKU才会触发)*/
|
||||||
|
onAddCart: (event: SkuPopupEvent) => void
|
||||||
|
/** 点击立即购买时(需选择完SKU才会触发)*/
|
||||||
|
onBuyNow: (event: SkuPopupEvent) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 商品信息本地数据源 */
|
||||||
|
export type SkuPopupLocaldata = {
|
||||||
|
/** 商品 ID */
|
||||||
|
_id: string
|
||||||
|
/** 商品名称 */
|
||||||
|
name: string
|
||||||
|
/** 商品图片 */
|
||||||
|
goods_thumb: string
|
||||||
|
/** 商品规格列表 */
|
||||||
|
spec_list: SkuPopupSpecItem[]
|
||||||
|
/** 商品SKU列表 */
|
||||||
|
sku_list: SkuPopupSkuItem[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 商品规格名称的集合 */
|
||||||
|
export type SkuPopupSpecItem = {
|
||||||
|
/** 规格名称 */
|
||||||
|
name: string
|
||||||
|
/** 规格集合 */
|
||||||
|
list: { name: string }[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 商品SKU列表 */
|
||||||
|
export type SkuPopupSkuItem = {
|
||||||
|
/** SKU ID */
|
||||||
|
_id: string
|
||||||
|
/** 商品 ID */
|
||||||
|
goods_id: string
|
||||||
|
/** 商品名称 */
|
||||||
|
goods_name: string
|
||||||
|
/** 商品图片 */
|
||||||
|
image: string
|
||||||
|
/** SKU 价格 * 100, 注意:需要乘以 100 */
|
||||||
|
price: number
|
||||||
|
/** SKU 规格组成, 注意:需要与 spec_list 数组顺序对应 */
|
||||||
|
sku_name_arr: string[]
|
||||||
|
/** SKU 库存 */
|
||||||
|
stock: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 当前选择的sku数据 */
|
||||||
|
export type SkuPopupEvent = SkuPopupSkuItem & {
|
||||||
|
/** 商品购买数量 */
|
||||||
|
buy_num: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 全局组件类型声明 */
|
||||||
|
declare module '@vue/runtime-core' {
|
||||||
|
export interface GlobalComponents {
|
||||||
|
'vk-data-goods-sku-popup': SkuPopup
|
||||||
|
}
|
||||||
|
}
|