Compare commits
7 Commits
d831ee932b
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c0036acfd | |||
| 2c38893c43 | |||
| a30d3572a5 | |||
| b6b6649a9b | |||
| 985c8fa766 | |||
| ef380ff569 | |||
| 63b61bbc98 |
75
.drone.yml
75
.drone.yml
@@ -1,75 +0,0 @@
|
|||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: default
|
|
||||||
|
|
||||||
platform:
|
|
||||||
os: linux
|
|
||||||
arch: amd64
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: 测试服-构建部署
|
|
||||||
pull: if-not-exists
|
|
||||||
image: node:24-alpine
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- test
|
|
||||||
commands:
|
|
||||||
- npm install -g pnpm
|
|
||||||
- pnpm config set registry https://registry.npmmirror.com/
|
|
||||||
- pnpm install
|
|
||||||
- pnpm build:weapp:test:upload
|
|
||||||
- rm -rf dist.tar
|
|
||||||
|
|
||||||
- name: 正式服-构建部署
|
|
||||||
pull: if-not-exists
|
|
||||||
image: node:24-alpine
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- master
|
|
||||||
commands:
|
|
||||||
- npm install -g pnpm
|
|
||||||
- pnpm config set registry https://registry.npmmirror.com/
|
|
||||||
- pnpm install
|
|
||||||
- pnpm build:weapp:prod:upload
|
|
||||||
- rm -rf dist.tar
|
|
||||||
|
|
||||||
- name: 备用服-构建部署
|
|
||||||
pull: if-not-exists
|
|
||||||
image: node:24-alpine
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- master
|
|
||||||
commands:
|
|
||||||
- npm install -g pnpm
|
|
||||||
- pnpm config set registry https://registry.npmmirror.com/
|
|
||||||
- pnpm install
|
|
||||||
- pnpm build:weapp:reserve:upload
|
|
||||||
- rm -rf dist.tar
|
|
||||||
|
|
||||||
- name: 企业微信通知
|
|
||||||
pull: if-not-exists
|
|
||||||
image: plugins/webhook
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- test
|
|
||||||
- master
|
|
||||||
status:
|
|
||||||
- success
|
|
||||||
- failure
|
|
||||||
settings:
|
|
||||||
urls: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a2065e21-4f92-4f5b-a432-2c0cd1d965b5
|
|
||||||
content_type: application/json
|
|
||||||
template: |
|
|
||||||
{
|
|
||||||
"msgtype": "markdown",
|
|
||||||
"markdown": {
|
|
||||||
"content": "{{#success build.status}}✅ 构建成功{{else}}❌ 构建失败{{/success}}\n
|
|
||||||
**项目**: {{ repo.owner }}/{{ repo.name }} (构建 #{{build.number}})\n
|
|
||||||
**分支**: {{ build.branch }}\n
|
|
||||||
**提交**: {{ build.commit }}\n
|
|
||||||
**作者**: {{ build.author }}\n
|
|
||||||
**信息**: {{ build.message }}\n
|
|
||||||
**耗时**: {{ since build.started }} 分钟\n
|
|
||||||
**详情**: [查看构建详情]({{ build.link }})"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,4 +5,14 @@ TARO_APP_ID='wx7b3322daa2cf9c88'
|
|||||||
TARO_APP_KEY=''
|
TARO_APP_KEY=''
|
||||||
|
|
||||||
# API接口
|
# API接口
|
||||||
TARO_APP_API='https://test.wanzhuanyongcheng.cn/app'
|
TARO_APP_API='https://test.wanzhuanyongcheng.cn/app'
|
||||||
|
|
||||||
|
|
||||||
|
# 版权文字
|
||||||
|
TARO_APP_NAME='捷兑通'
|
||||||
|
TARO_APP_COP='玩赚商城版权所有'
|
||||||
|
|
||||||
|
TARO_APP_TITLE_IMG='../../../static/index/1.png'
|
||||||
|
TARO_APP_LOGO_IMG='../../../static/logo.jpg'
|
||||||
|
|
||||||
|
TARO_APP_SHOW_NEW_HOME='no'
|
||||||
@@ -5,4 +5,15 @@ TARO_APP_ID='wxdd00d46fa6f07974'
|
|||||||
TARO_APP_KEY='private.wxdd00d46fa6f07974.key'
|
TARO_APP_KEY='private.wxdd00d46fa6f07974.key'
|
||||||
|
|
||||||
# API接口
|
# API接口
|
||||||
TARO_APP_API='https://www.wanzhuanyongcheng.cn/app'
|
TARO_APP_API='https://www.wanzhuanyongcheng.cn/app'
|
||||||
|
|
||||||
|
|
||||||
|
# 版权文字
|
||||||
|
TARO_APP_NAME='捷兑通'
|
||||||
|
TARO_APP_COP='鑫瓴科技版权所有'
|
||||||
|
|
||||||
|
TARO_APP_TITLE_IMG='../../../static/index/1.png'
|
||||||
|
TARO_APP_LOGO_IMG='../../../static/logo.jpg'
|
||||||
|
|
||||||
|
|
||||||
|
TARO_APP_SHOW_NEW_HOME='no'
|
||||||
16
.env.reserve
16
.env.reserve
@@ -1,8 +1,18 @@
|
|||||||
# 正式版appid
|
# 备用版appid
|
||||||
TARO_APP_ID='wx4a9380d8bb16d9de'
|
TARO_APP_ID='wx4a9380d8bb16d9de'
|
||||||
|
|
||||||
# 正式版appkey
|
# 备用版appkey
|
||||||
TARO_APP_KEY='private.wx4a9380d8bb16d9de.key'
|
TARO_APP_KEY='private.wx4a9380d8bb16d9de.key'
|
||||||
|
|
||||||
# API接口
|
# API接口
|
||||||
TARO_APP_API='https://api.gxwzwh.com/app'
|
TARO_APP_API='https://api.gxwzwh.com/app'
|
||||||
|
|
||||||
|
# 版权文字
|
||||||
|
TARO_APP_NAME='玩赚商城'
|
||||||
|
|
||||||
|
TARO_APP_COP='玩赚商城版权所有'
|
||||||
|
|
||||||
|
TARO_APP_TITLE_IMG='../../../static/index/title.png'
|
||||||
|
TARO_APP_LOGO_IMG='../../../static/logo-1.jpg'
|
||||||
|
|
||||||
|
TARO_APP_SHOW_NEW_HOME='yes'
|
||||||
12
.env.test
12
.env.test
@@ -5,4 +5,14 @@ TARO_APP_ID='wx7b3322daa2cf9c88'
|
|||||||
TARO_APP_KEY='private.wx7b3322daa2cf9c88.key'
|
TARO_APP_KEY='private.wx7b3322daa2cf9c88.key'
|
||||||
|
|
||||||
# API接口
|
# API接口
|
||||||
TARO_APP_API='https://test.wanzhuanyongcheng.cn/app'
|
TARO_APP_API='https://test.wanzhuanyongcheng.cn/app'
|
||||||
|
|
||||||
|
|
||||||
|
# 版权文字
|
||||||
|
TARO_APP_NAME='捷兑通'
|
||||||
|
TARO_APP_COP='鑫瓴科技版权所有'
|
||||||
|
|
||||||
|
TARO_APP_TITLE_IMG='../../static/index/1.png'
|
||||||
|
TARO_APP_LOGO_IMG='../../../static/logo.jpg'
|
||||||
|
|
||||||
|
TARO_APP_SHOW_NEW_HOME='no'
|
||||||
126
.gitea/workflows/ci.yaml
Normal file
126
.gitea/workflows/ci.yaml
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
name: CI Build & Upload (WeApp)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- test
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-upload-dev:
|
||||||
|
if: ${{ gitea.ref == 'refs/heads/test' }}
|
||||||
|
runs-on: gitea_act_runner
|
||||||
|
container:
|
||||||
|
image: node:24-alpine
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
npm install -g pnpm
|
||||||
|
pnpm config set registry https://registry.npmmirror.com/
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
- name: Build & Upload (test)
|
||||||
|
run: |
|
||||||
|
pnpm build:weapp:test:upload
|
||||||
|
rm -rf dist.tar || true
|
||||||
|
|
||||||
|
- name: Notify WeCom (Dev)
|
||||||
|
if: always()
|
||||||
|
env:
|
||||||
|
WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }}
|
||||||
|
STATUS: ${{ job.status }}
|
||||||
|
REPO: ${{ gitea.repository }}
|
||||||
|
RUN_URL: ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
BRANCH: ${{ gitea.ref_name }}
|
||||||
|
COMMIT: ${{ gitea.sha }}
|
||||||
|
ACTOR: ${{ gitea.actor }}
|
||||||
|
COMMIT_MSG: ${{ gitea.event.head_commit.message }}
|
||||||
|
run: |
|
||||||
|
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --no-cache curl jq
|
||||||
|
EMOJI=$( [ "$STATUS" = "success" ] && echo "✅ 构建成功" || echo "❌ 构建失败" )
|
||||||
|
MSG="$(printf "%s\n**项目**: %s (构建 #%s)\n**分支**: %s\n**提交**: %s\n**作者**: %s\n**信息**: %s\n**详情**: [查看构建详情](%s)" \
|
||||||
|
"$EMOJI" "$REPO" "${{ gitea.run_number }}" "$BRANCH" "$COMMIT" "$ACTOR" "$(echo "$COMMIT_MSG" | tr '\n' ' ' | tr -s ' ')" "$RUN_URL")"
|
||||||
|
JSON=$(jq -n --arg content "$MSG" '{msgtype:"markdown", markdown:{content:$content}}')
|
||||||
|
curl -sS -H 'Content-Type: application/json' -d "$JSON" "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}"
|
||||||
|
|
||||||
|
build-upload-prod:
|
||||||
|
if: ${{ gitea.ref == 'refs/heads/master' }}
|
||||||
|
runs-on: gitea_act_runner
|
||||||
|
container:
|
||||||
|
image: node:24-alpine
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
npm install -g pnpm
|
||||||
|
pnpm config set registry https://registry.npmmirror.com/
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
- name: Build & Upload (prod)
|
||||||
|
run: |
|
||||||
|
pnpm build:weapp:prod:upload
|
||||||
|
rm -rf dist.tar || true
|
||||||
|
|
||||||
|
- name: Notify WeCom (Prod)
|
||||||
|
if: always()
|
||||||
|
env:
|
||||||
|
WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }}
|
||||||
|
STATUS: ${{ job.status }}
|
||||||
|
REPO: ${{ gitea.repository }}
|
||||||
|
RUN_URL: ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
BRANCH: ${{ gitea.ref_name }}
|
||||||
|
COMMIT: ${{ gitea.sha }}
|
||||||
|
ACTOR: ${{ gitea.actor }}
|
||||||
|
COMMIT_MSG: ${{ gitea.event.head_commit.message }}
|
||||||
|
run: |
|
||||||
|
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --no-cache curl jq
|
||||||
|
EMOJI=$( [ "$STATUS" = "success" ] && echo "✅ 构建成功" || echo "❌ 构建失败" )
|
||||||
|
MSG="$(printf "%s\n**项目**: %s (构建 #%s)\n**分支**: %s\n**提交**: %s\n**作者**: %s\n**信息**: %s\n**详情**: [查看构建详情](%s)" \
|
||||||
|
"$EMOJI" "$REPO" "${{ gitea.run_number }}" "$BRANCH" "$COMMIT" "$ACTOR" "$(echo "$COMMIT_MSG" | tr '\n' ' ' | tr -s ' ')" "$RUN_URL")"
|
||||||
|
JSON=$(jq -n --arg content "$MSG" '{msgtype:"markdown", markdown:{content:$content}}')
|
||||||
|
curl -sS -H 'Content-Type: application/json' -d "$JSON" "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}"
|
||||||
|
|
||||||
|
build-upload-reserve:
|
||||||
|
if: ${{ gitea.ref == 'refs/heads/master' }}
|
||||||
|
runs-on: gitea_act_runner
|
||||||
|
container:
|
||||||
|
image: node:24-alpine
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: |
|
||||||
|
npm install -g pnpm
|
||||||
|
pnpm config set registry https://registry.npmmirror.com/
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
- name: Build & Upload (reserve)
|
||||||
|
run: |
|
||||||
|
pnpm build:weapp:reserve:upload
|
||||||
|
rm -rf dist.tar || true
|
||||||
|
|
||||||
|
- name: Notify WeCom (Reserve)
|
||||||
|
if: always()
|
||||||
|
env:
|
||||||
|
WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }}
|
||||||
|
STATUS: ${{ job.status }}
|
||||||
|
REPO: ${{ gitea.repository }}
|
||||||
|
RUN_URL: ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}
|
||||||
|
BRANCH: ${{ gitea.ref_name }}
|
||||||
|
COMMIT: ${{ gitea.sha }}
|
||||||
|
ACTOR: ${{ gitea.actor }}
|
||||||
|
COMMIT_MSG: ${{ gitea.event.head_commit.message }}
|
||||||
|
run: |
|
||||||
|
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories || true
|
||||||
|
apk add --no-cache curl jq
|
||||||
|
EMOJI=$( [ "$STATUS" = "success" ] && echo "✅ 构建成功" || echo "❌ 构建失败" )
|
||||||
|
MSG="$(printf "%s\n**项目**: %s (构建 #%s)\n**分支**: %s\n**提交**: %s\n**作者**: %s\n**信息**: %s\n**详情**: [查看构建详情](%s)" \
|
||||||
|
"$EMOJI" "$REPO" "${{ gitea.run_number }}" "$BRANCH" "$COMMIT" "$ACTOR" "$(echo "$COMMIT_MSG" | tr '\n' ' ' | tr -s ' ')" "$RUN_URL")"
|
||||||
|
JSON=$(jq -n --arg content "$MSG" '{msgtype:"markdown", markdown:{content:$content}}')
|
||||||
|
curl -sS -H 'Content-Type: application/json' -d "$JSON" "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}"
|
||||||
8
.idea/.gitignore
generated
vendored
8
.idea/.gitignore
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
# 默认忽略的文件
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# 基于编辑器的 HTTP 客户端请求
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
60
.idea/codeStyles/Project.xml
generated
60
.idea/codeStyles/Project.xml
generated
@@ -1,60 +0,0 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<code_scheme name="Project" version="173">
|
|
||||||
<option name="LINE_SEPARATOR" value=" " />
|
|
||||||
<HTMLCodeStyleSettings>
|
|
||||||
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
|
||||||
</HTMLCodeStyleSettings>
|
|
||||||
<JSCodeStyleSettings version="0">
|
|
||||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
|
||||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
|
||||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
|
||||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
|
||||||
<option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
|
|
||||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
|
||||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
|
||||||
</JSCodeStyleSettings>
|
|
||||||
<TypeScriptCodeStyleSettings version="0">
|
|
||||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
|
||||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
|
||||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
|
||||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
|
||||||
<option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
|
|
||||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
|
||||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
|
||||||
</TypeScriptCodeStyleSettings>
|
|
||||||
<VueCodeStyleSettings>
|
|
||||||
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
|
||||||
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
|
||||||
</VueCodeStyleSettings>
|
|
||||||
<codeStyleSettings language="HTML">
|
|
||||||
<option name="SOFT_MARGINS" value="80" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
||||||
<option name="TAB_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JavaScript">
|
|
||||||
<option name="SOFT_MARGINS" value="80" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
||||||
<option name="TAB_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="TypeScript">
|
|
||||||
<option name="SOFT_MARGINS" value="80" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
||||||
<option name="TAB_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Vue">
|
|
||||||
<option name="SOFT_MARGINS" value="80" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
</code_scheme>
|
|
||||||
</component>
|
|
||||||
5
.idea/codeStyles/codeStyleConfig.xml
generated
5
.idea/codeStyles/codeStyleConfig.xml
generated
@@ -1,5 +0,0 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<state>
|
|
||||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
|
||||||
</state>
|
|
||||||
</component>
|
|
||||||
7
.idea/inspectionProfiles/Project_Default.xml
generated
7
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -1,7 +0,0 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<profile version="1.0">
|
|
||||||
<option name="myName" value="Project Default" />
|
|
||||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="Stylelint" enabled="true" level="ERROR" enabled_by_default="true" />
|
|
||||||
</profile>
|
|
||||||
</component>
|
|
||||||
12
.idea/jdt-user.iml
generated
12
.idea/jdt-user.iml
generated
@@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="WEB_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/jdt-user.iml" filepath="$PROJECT_DIR$/.idea/jdt-user.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/prettier.xml
generated
6
.idea/prettier.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="PrettierConfiguration">
|
|
||||||
<option name="myConfigurationMode" value="AUTOMATIC" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
2
components.d.ts
vendored
2
components.d.ts
vendored
@@ -3,7 +3,7 @@
|
|||||||
// Generated by unplugin-vue-components
|
// Generated by unplugin-vue-components
|
||||||
// Read more: https://github.com/vuejs/core/pull/3399
|
// Read more: https://github.com/vuejs/core/pull/3399
|
||||||
// biome-ignore lint: disable
|
// biome-ignore lint: disable
|
||||||
export {};
|
export {}
|
||||||
|
|
||||||
/* prettier-ignore */
|
/* prettier-ignore */
|
||||||
declare module 'vue' {
|
declare module 'vue' {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ module.exports = {
|
|||||||
env: {
|
env: {
|
||||||
NODE_ENV: '"development"',
|
NODE_ENV: '"development"',
|
||||||
},
|
},
|
||||||
defineConstants: {},
|
|
||||||
mini: {},
|
mini: {},
|
||||||
h5: {},
|
h5: {},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ const config = {
|
|||||||
},
|
},
|
||||||
sass: {
|
sass: {
|
||||||
data: `@import "@nutui/nutui-taro/dist/styles/variables.scss";`,
|
data: `@import "@nutui/nutui-taro/dist/styles/variables.scss";`,
|
||||||
|
silenceDeprecations: ['import'],
|
||||||
},
|
},
|
||||||
alias: {
|
alias: {
|
||||||
'@': join(__dirname, '..', 'src'),
|
'@': join(__dirname, '..', 'src'),
|
||||||
@@ -98,7 +99,7 @@ const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
cssModules: {
|
cssModules: {
|
||||||
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
|
enable: true, // 默认为 false,如需使用 css modules 功能,则设为 true
|
||||||
config: {
|
config: {
|
||||||
namingPattern: 'module', // 转换模式,取值为 global/module
|
namingPattern: 'module', // 转换模式,取值为 global/module
|
||||||
generateScopedName: '[name]__[local]___[hash:base64:5]',
|
generateScopedName: '[name]__[local]___[hash:base64:5]',
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ module.exports = {
|
|||||||
env: {
|
env: {
|
||||||
NODE_ENV: '"production"',
|
NODE_ENV: '"production"',
|
||||||
},
|
},
|
||||||
defineConstants: {},
|
|
||||||
mini: {},
|
mini: {},
|
||||||
h5: {
|
h5: {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "jdt-user",
|
"name": "jdt-user",
|
||||||
"version": "4.0.13",
|
"version": "4.0.18",
|
||||||
"taroConfig": {
|
"taroConfig": {
|
||||||
"version": "4.0.13"
|
"version": "4.0.18"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:weapp": "taro build --type weapp",
|
"build:weapp": "taro build --type weapp",
|
||||||
"build:test": "taro build --type weapp --mode test",
|
"build:test": "taro build --type weapp --mode reserve",
|
||||||
"build:swan": "taro build --type swan",
|
"build:swan": "taro build --type swan",
|
||||||
"build:alipay": "taro build --type alipay",
|
"build:alipay": "taro build --type alipay",
|
||||||
"build:tt": "taro build --type tt",
|
"build:tt": "taro build --type tt",
|
||||||
@@ -43,8 +43,7 @@
|
|||||||
"author": "JDT",
|
"author": "JDT",
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*.{ts,vue}": [
|
"*.{ts,vue}": [
|
||||||
"eslint --ext .ts,.vue .",
|
"eslint --ext .ts,.vue ."
|
||||||
"npx prettier --write --end-of-line lf ."
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ onlyBuiltDependencies:
|
|||||||
- core-js
|
- core-js
|
||||||
- core-js-pure
|
- core-js-pure
|
||||||
- esbuild
|
- esbuild
|
||||||
|
- less
|
||||||
- protobufjs
|
- protobufjs
|
||||||
- swiper
|
- swiper
|
||||||
- vue-demi
|
- vue-demi
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<view class="list-box">
|
<view class="list-box">
|
||||||
<view class="list">
|
<view class="list">
|
||||||
<swiper
|
<swiper
|
||||||
|
v-if="bannerList.length !== 0"
|
||||||
class="item"
|
class="item"
|
||||||
:style="{
|
:style="{
|
||||||
height: '250px',
|
height: '250px',
|
||||||
@@ -167,7 +168,7 @@ const bannerList = ref<any[]>([]);
|
|||||||
|
|
||||||
const get_banner_list = async () => {
|
const get_banner_list = async () => {
|
||||||
const { data }: any = await getBanner();
|
const { data }: any = await getBanner();
|
||||||
bannerList.value = data.data;
|
bannerList.value = data.data || [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const toPage = async (url: string) => {
|
const toPage = async (url: string) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view>
|
<view>
|
||||||
<view class="flex justify-center" v-if="storeList.length > 0">
|
<view v-if="storeList.length > 0">
|
||||||
<view
|
<view
|
||||||
class="bg-white rounded-[15px] mt-3 p-2 w-[95%] flex items-center"
|
class="bg-white rounded-[15px] mt-3 p-2 w-[95%] flex items-center"
|
||||||
v-for="(item, index) in storeList"
|
v-for="(item, index) in storeList"
|
||||||
|
|||||||
@@ -188,23 +188,22 @@ const pay = async () => {
|
|||||||
|
|
||||||
const confirmPay = async () => {
|
const confirmPay = async () => {
|
||||||
try {
|
try {
|
||||||
const res = await payOrder({
|
const { data: res } = await payOrder({
|
||||||
oid: opt.value.oid,
|
oid: opt.value.oid,
|
||||||
OrderType: payVal.value,
|
OrderType: payVal.value,
|
||||||
PayType: payVal.value,
|
PayType: payVal.value,
|
||||||
});
|
});
|
||||||
Taro.requestPayment({
|
Taro.requestPayment({
|
||||||
timeStamp: res.data.data.timeStamp,
|
timeStamp: res.data.timeStamp,
|
||||||
nonceStr: res.data.data.nonceStr,
|
nonceStr: res.data.nonceStr,
|
||||||
package: res.data.data.package,
|
package: res.data.package,
|
||||||
signType: res.data.data.signType,
|
signType: res.data.signType,
|
||||||
paySign: res.data.data.paySign,
|
paySign: res.data.paySign,
|
||||||
success: function () {
|
success: function () {
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
title: '支付成功',
|
title: '支付成功',
|
||||||
icon: 'success',
|
icon: 'success',
|
||||||
});
|
});
|
||||||
isLoading.value = false;
|
|
||||||
},
|
},
|
||||||
fail: function () {
|
fail: function () {
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
@@ -214,11 +213,10 @@ const confirmPay = async () => {
|
|||||||
},
|
},
|
||||||
complete: function () {
|
complete: function () {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
Taro.redirectTo({
|
Taro.reLaunch({
|
||||||
url: `/pages/users/order_list/index?type=0`,
|
url: `/pages/users/order_list/index?type=0`,
|
||||||
});
|
});
|
||||||
}, 2000);
|
}, 2000);
|
||||||
// isLoading.value = false;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -227,7 +225,7 @@ const confirmPay = async () => {
|
|||||||
icon: 'none',
|
icon: 'none',
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
// isLoading.value = false;
|
isLoading.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
877
src/pages/index/components/HomeNew.vue
Normal file
877
src/pages/index/components/HomeNew.vue
Normal file
@@ -0,0 +1,877 @@
|
|||||||
|
<template>
|
||||||
|
<view class="home-new">
|
||||||
|
<!-- Header & Search -->
|
||||||
|
<view class="header-fixed">
|
||||||
|
<view :style="{ paddingTop: statusBarHeight + 'px' }"></view>
|
||||||
|
<view class="header-content">
|
||||||
|
<!-- Location -->
|
||||||
|
<view class="location-bar">
|
||||||
|
<view class="location-inner" @click="getUserLocal">
|
||||||
|
<view class="iconfont icon-dizhi location-icon"></view>
|
||||||
|
<text class="location-text">{{ address }}</text>
|
||||||
|
<view class="iconfont icon-xiangxia location-arrow"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- Search Bar -->
|
||||||
|
<view class="search-container">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="请输入商家名称搜索"
|
||||||
|
class="search-input"
|
||||||
|
v-model="searchVal" />
|
||||||
|
<view class="search-icon-left">
|
||||||
|
<view class="iconfont icon-sousuo"></view>
|
||||||
|
</view>
|
||||||
|
<view class="search-btn" @click.stop="clickSearch">搜索</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- Main Content -->
|
||||||
|
<view class="main-content">
|
||||||
|
<!-- Banner / Hero -->
|
||||||
|
<view class="banner-hero">
|
||||||
|
<!-- Background Pattern Decoration -->
|
||||||
|
<view class="banner-decoration banner-decoration-top"></view>
|
||||||
|
<view class="banner-decoration banner-decoration-bottom"></view>
|
||||||
|
|
||||||
|
<view class="banner-inner">
|
||||||
|
<view class="banner-title">
|
||||||
|
玩赚积分<text class="banner-title-yellow">商城</text>
|
||||||
|
</view>
|
||||||
|
<view class="banner-subtitle-wrapper">
|
||||||
|
<view class="banner-divider"></view>
|
||||||
|
<text class="banner-subtitle">积分当钱花 · 兑换无上限</text>
|
||||||
|
<view class="banner-divider"></view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="banner-buttons">
|
||||||
|
<view class="banner-btn banner-btn-primary">
|
||||||
|
<text class="banner-btn-icon">💎</text> 积分兑换
|
||||||
|
</view>
|
||||||
|
<view class="banner-btn banner-btn-secondary">同城兑换</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- Quick Actions Grid -->
|
||||||
|
<view class="nav-grid-wrapper">
|
||||||
|
<view class="nav-grid">
|
||||||
|
<view
|
||||||
|
class="nav-item"
|
||||||
|
v-for="(item, index) in navigationList"
|
||||||
|
:key="index"
|
||||||
|
@click="toPage(item)">
|
||||||
|
<view class="nav-icon-wrapper">
|
||||||
|
<image :src="item.icon" class="nav-icon" mode="aspectFit" />
|
||||||
|
</view>
|
||||||
|
<text class="nav-label">{{ item.name }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- Store List -->
|
||||||
|
<view class="store-section">
|
||||||
|
<view class="store-header">
|
||||||
|
<view class="store-header-line"></view>
|
||||||
|
附近商家
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="store-list">
|
||||||
|
<view
|
||||||
|
class="store-item"
|
||||||
|
v-for="(item, index) in merList"
|
||||||
|
:key="index"
|
||||||
|
@click="toMerDetails(item)">
|
||||||
|
<view class="store-image-wrapper">
|
||||||
|
<image
|
||||||
|
:src="item.head_photo"
|
||||||
|
class="store-image"
|
||||||
|
mode="aspectFill" />
|
||||||
|
<!-- <view class="store-badge" v-if="index < 3">严选</view> -->
|
||||||
|
</view>
|
||||||
|
<view class="store-info">
|
||||||
|
<view class="store-name">{{ item.name }}</view>
|
||||||
|
<view class="store-rating">
|
||||||
|
<view class="rating-stars">
|
||||||
|
<text class="stars-text">★★★★★</text>
|
||||||
|
<text class="rating-score">5.0分</text>
|
||||||
|
</view>
|
||||||
|
<text class="rating-divider">|</text>
|
||||||
|
<text class="rating-sales">月售 1000+</text>
|
||||||
|
</view>
|
||||||
|
<view class="store-distance">
|
||||||
|
<text class="distance-placeholder">.</text>
|
||||||
|
<text class="distance-text">
|
||||||
|
距离我{{
|
||||||
|
calculateDistance(
|
||||||
|
userLocalNum.t,
|
||||||
|
userLocalNum.l,
|
||||||
|
Number(item.lat),
|
||||||
|
Number(item.lon),
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- Empty State -->
|
||||||
|
<view v-if="merList.length === 0" class="store-empty">
|
||||||
|
暂无附近商家
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<Popup :imgArr="imgList" />
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import Taro from '@tarojs/taro';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { getHomeList } from '@/api/home';
|
||||||
|
import { getMerList } from '@/api/goods';
|
||||||
|
import { bindParent } from '@/api/user';
|
||||||
|
import { calculateDistance } from '@/utils';
|
||||||
|
import Popup from '@/components/Popup.vue';
|
||||||
|
|
||||||
|
const statusBarHeight = Taro.getSystemInfoSync().statusBarHeight || 20;
|
||||||
|
|
||||||
|
const address = ref('获取位置中...');
|
||||||
|
const searchVal = ref('');
|
||||||
|
const navigationList = ref<any[]>([]);
|
||||||
|
const merList = ref<any[]>([]);
|
||||||
|
const pageVal = ref({
|
||||||
|
page: 1,
|
||||||
|
total: 0,
|
||||||
|
});
|
||||||
|
const userLocalNum = ref({
|
||||||
|
l: 0,
|
||||||
|
t: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
const imgList = ref([require('../../../static/zhenggai.png')]);
|
||||||
|
|
||||||
|
// Lifecycle
|
||||||
|
Taro.useLoad(() => {
|
||||||
|
getPrivacy();
|
||||||
|
getUserLocal();
|
||||||
|
getNavLists();
|
||||||
|
checkBindParent();
|
||||||
|
});
|
||||||
|
|
||||||
|
Taro.useShareAppMessage(() => ({
|
||||||
|
title: '捷兑通',
|
||||||
|
path: `/pages/index/index?scene=${Taro.getStorageSync('token')}`,
|
||||||
|
imageUrl: 'https://upload.jdt168.com/1714375021923881119_Share.jpg',
|
||||||
|
}));
|
||||||
|
|
||||||
|
Taro.useReachBottom(() => {
|
||||||
|
if (merList.value.length >= pageVal.value.total) {
|
||||||
|
if (pageVal.value.total > 0) {
|
||||||
|
Taro.showToast({ title: '没有更多了', icon: 'none' });
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pageVal.value.page += 1;
|
||||||
|
fetchMerList();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Methods
|
||||||
|
const checkBindParent = async () => {
|
||||||
|
if (Taro.getStorageSync('token') && Taro.getStorageSync('bind_id')) {
|
||||||
|
try {
|
||||||
|
const res: any = await bindParent({
|
||||||
|
uid: Taro.getStorageSync('bind_id'),
|
||||||
|
});
|
||||||
|
Taro.showToast({
|
||||||
|
title: res.msg,
|
||||||
|
});
|
||||||
|
Taro.removeStorageSync('bind_id');
|
||||||
|
} catch (error) {
|
||||||
|
Taro.removeStorageSync('bind_id');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getPrivacy = () => {
|
||||||
|
Taro.getPrivacySetting({
|
||||||
|
success: res => {
|
||||||
|
if (res.needAuthorization) {
|
||||||
|
Taro.requirePrivacyAuthorize({
|
||||||
|
success: () => console.log('用户同意授权'),
|
||||||
|
fail: () => {
|
||||||
|
console.log('用户拒绝授权');
|
||||||
|
// Taro.exitMiniProgram();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getUserLocal = () => {
|
||||||
|
Taro.getLocation({
|
||||||
|
type: 'wgs84',
|
||||||
|
success: res => {
|
||||||
|
userLocalNum.value.l = res.longitude;
|
||||||
|
userLocalNum.value.t = res.latitude;
|
||||||
|
fetchAddress(res.latitude, res.longitude);
|
||||||
|
// Refresh list with location
|
||||||
|
pageVal.value.page = 1;
|
||||||
|
merList.value = [];
|
||||||
|
fetchMerList();
|
||||||
|
},
|
||||||
|
fail: () => {
|
||||||
|
address.value = '未能获取定位';
|
||||||
|
// Load list anyway
|
||||||
|
fetchMerList();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const fetchAddress = (lat, lon) => {
|
||||||
|
Taro.request({
|
||||||
|
url: `https://api.tianditu.gov.cn/geocoder?postStr={'lon':${lon},'lat':${lat},'ver':1}&type=geocode&tk=42db4f3dfd1a18d31e73ee90aa2ce054`,
|
||||||
|
method: 'GET',
|
||||||
|
success: res => {
|
||||||
|
const { msg, result } = res.data;
|
||||||
|
if (msg === 'ok') {
|
||||||
|
address.value = `${result.addressComponent.county}${result.addressComponent.town}${result.addressComponent.address}`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getNavLists = async () => {
|
||||||
|
const defaults = [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
icon: '//p0.meituan.net/csc/f33ad2443a67e9f3474a1d5fd9d529db7504.png',
|
||||||
|
url: '/pages/users/settled_mer/index',
|
||||||
|
name: '商户入驻',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
icon: '//p0.meituan.net/csc/0403cf37dd14a6b44b22ffccaa2878f95703.png',
|
||||||
|
url: '/pages/allClassList/index',
|
||||||
|
name: '全部服务',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await getHomeList();
|
||||||
|
const apiList = res.data.data.map(item => ({
|
||||||
|
ID: item.ID,
|
||||||
|
type: 2,
|
||||||
|
icon: item.icon,
|
||||||
|
url: item.url,
|
||||||
|
name: item.name,
|
||||||
|
}));
|
||||||
|
navigationList.value = [...apiList, ...defaults];
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
navigationList.value = defaults;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const fetchMerList = async () => {
|
||||||
|
try {
|
||||||
|
const res = await getMerList({
|
||||||
|
PageNum: pageVal.value.page,
|
||||||
|
PageSize: 10,
|
||||||
|
// class_id: 0
|
||||||
|
});
|
||||||
|
pageVal.value.total = res.data.total;
|
||||||
|
if (res.data.data) {
|
||||||
|
merList.value.push(...res.data.data);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const clickSearch = () => {
|
||||||
|
if (!searchVal.value)
|
||||||
|
return Taro.showToast({ title: '请输入商家名称', icon: 'none' });
|
||||||
|
Taro.navigateTo({ url: `/pages/search/index?name=${searchVal.value}` });
|
||||||
|
searchVal.value = '';
|
||||||
|
};
|
||||||
|
|
||||||
|
const toPage = item => {
|
||||||
|
item.type !== 1
|
||||||
|
? Taro.navigateTo({
|
||||||
|
url: `/pages/search/index?id=${item.ID}&name=${item.name}`,
|
||||||
|
})
|
||||||
|
: Taro.navigateTo({ url: item.url });
|
||||||
|
};
|
||||||
|
|
||||||
|
const toMerDetails = item => {
|
||||||
|
Taro.navigateTo({ url: `/pages/mer/mer_detail/index?bid=${item.bid}` });
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
/* 所有新版样式包裹在 .home-new 作用域下 */
|
||||||
|
.home-new {
|
||||||
|
background-color: #f5f6f7;
|
||||||
|
min-height: 100vh;
|
||||||
|
/* Header Styles */
|
||||||
|
.header-fixed {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 50;
|
||||||
|
background: linear-gradient(180deg, #eff6ff 0%, #f5f6f7 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-content {
|
||||||
|
padding: 10px 20px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-size: 22px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 90%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.6);
|
||||||
|
padding: 8px 16px;
|
||||||
|
border-radius: 50px;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-icon {
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
margin-right: 8px;
|
||||||
|
color: #374151;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-text {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-arrow {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
margin-left: 8px;
|
||||||
|
color: #9ca3af;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
position: relative;
|
||||||
|
// margin: 10px auto;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input {
|
||||||
|
height: 70px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 10px 20px 10px 70px;
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-icon-left {
|
||||||
|
position: absolute;
|
||||||
|
left: 20px;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
color: #9ca3af;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-btn {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
background: linear-gradient(90deg, #fa2c19 0%, #ff5d45 100%);
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 12px 30px;
|
||||||
|
border-radius: 16px;
|
||||||
|
box-shadow: 0 4px 6px rgba(250, 44, 25, 0.2);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Content */
|
||||||
|
.main-content {
|
||||||
|
padding: 0 20px 180px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner Hero */
|
||||||
|
.banner-hero {
|
||||||
|
position: relative;
|
||||||
|
border-radius: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);
|
||||||
|
height: 280px;
|
||||||
|
margin-top: 20px;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-decoration {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-decoration-top {
|
||||||
|
top: -80px;
|
||||||
|
right: -80px;
|
||||||
|
width: 240px;
|
||||||
|
height: 240px;
|
||||||
|
background-color: rgba(255, 255, 255, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-decoration-bottom {
|
||||||
|
bottom: -60px;
|
||||||
|
left: -60px;
|
||||||
|
width: 180px;
|
||||||
|
height: 180px;
|
||||||
|
background-color: rgba(147, 197, 253, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-inner {
|
||||||
|
position: relative;
|
||||||
|
// height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
text-align: center;
|
||||||
|
padding: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-title {
|
||||||
|
font-size: 60px;
|
||||||
|
font-weight: 900;
|
||||||
|
color: #ffffff;
|
||||||
|
letter-spacing: 4px;
|
||||||
|
font-style: italic;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-title-yellow {
|
||||||
|
color: #fde047;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-subtitle-wrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
opacity: 0.95;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-divider {
|
||||||
|
width: 60px;
|
||||||
|
height: 1px;
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-subtitle {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-buttons {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 600px;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-btn {
|
||||||
|
flex: 1;
|
||||||
|
border-radius: 50px;
|
||||||
|
padding: 15px 0;
|
||||||
|
font-size: 26px;
|
||||||
|
font-weight: bold;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 8px;
|
||||||
|
pointer-events: none;
|
||||||
|
transform: scale(0.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-btn-primary {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
color: #ffffff;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-btn-secondary {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-btn-icon {
|
||||||
|
font-size: 36px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation Grid */
|
||||||
|
.nav-grid-wrapper {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 30px;
|
||||||
|
margin-top: 20px;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-icon-wrapper {
|
||||||
|
width: 88px;
|
||||||
|
height: 88px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #f9fafb;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-icon {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-label {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #374151;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Featured Section */
|
||||||
|
.featured-section {
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
height: 280px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-card {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-card-left {
|
||||||
|
flex: 1.2;
|
||||||
|
background: linear-gradient(135deg, #fff7ed 0%, #ffffff 100%);
|
||||||
|
border: 1px solid #fed7aa;
|
||||||
|
padding: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-title {
|
||||||
|
font-size: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1f2937;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-desc {
|
||||||
|
font-size: 20px;
|
||||||
|
color: #f97316;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-btn {
|
||||||
|
margin-top: 20px;
|
||||||
|
background: linear-gradient(90deg, #f97316 0%, #ef4444 100%);
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 10px 20px;
|
||||||
|
border-radius: 50px;
|
||||||
|
border: none;
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 1.5;
|
||||||
|
box-shadow: 0 2px 4px rgba(249, 115, 22, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-bg {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
opacity: 0.1;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-svg {
|
||||||
|
width: 180px;
|
||||||
|
height: 180px;
|
||||||
|
color: #ea580c;
|
||||||
|
transform: rotate(-12deg) translate(30px, 30px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-card-right {
|
||||||
|
flex: 1;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-image {
|
||||||
|
height: 67%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-overlay {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
transparent 0%,
|
||||||
|
rgba(0, 0, 0, 0.6) 100%
|
||||||
|
);
|
||||||
|
padding: 10px 15px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-overlay-title {
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-footer {
|
||||||
|
height: 33%;
|
||||||
|
padding: 0 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-footer-left {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-footer-title {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1f2937;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-footer-arrow {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #eff6ff;
|
||||||
|
color: #3b82f6;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store Section */
|
||||||
|
.store-section {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-header {
|
||||||
|
font-size: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1f2937;
|
||||||
|
padding: 0 8px 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-header-line {
|
||||||
|
width: 6px;
|
||||||
|
height: 30px;
|
||||||
|
background-color: #fa2c19;
|
||||||
|
border-radius: 50px;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-item {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 15px;
|
||||||
|
display: flex;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
border: 1px solid #f9fafb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-image-wrapper {
|
||||||
|
width: 180px;
|
||||||
|
height: 180px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
background-color: #f3f4f6;
|
||||||
|
border-radius: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-badge {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color: #eab308;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 20px;
|
||||||
|
padding: 4px 12px;
|
||||||
|
border-bottom-right-radius: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-info {
|
||||||
|
margin-left: 20px;
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 180px;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-name {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1f2937;
|
||||||
|
font-size: 30px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-rating {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 22px;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rating-stars {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stars-text {
|
||||||
|
color: #fbbf24;
|
||||||
|
font-size: 20px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rating-score {
|
||||||
|
color: #fa2c19;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rating-divider {
|
||||||
|
color: #d1d5db;
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rating-sales {
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-distance {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.distance-placeholder {
|
||||||
|
font-size: 22px;
|
||||||
|
color: transparent;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.distance-text {
|
||||||
|
font-size: 22px;
|
||||||
|
color: #9ca3af;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-empty {
|
||||||
|
text-align: center;
|
||||||
|
padding: 80px 0;
|
||||||
|
color: #9ca3af;
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfont {
|
||||||
|
font-size: inherit;
|
||||||
|
}
|
||||||
|
} /* .home-new 作用域结束 */
|
||||||
|
</style>
|
||||||
366
src/pages/index/components/HomeOld.vue
Normal file
366
src/pages/index/components/HomeOld.vue
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
<template>
|
||||||
|
<view class="home-old">
|
||||||
|
<view :style="{ marginTop: BarHeight + 'px' }"></view>
|
||||||
|
<view class="local">
|
||||||
|
<view class="iconfont icon-dizhi" style="font-size: 20px"></view>
|
||||||
|
<text class="text-[28px]">{{ address }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="search">
|
||||||
|
<view
|
||||||
|
class="iconfont icon-sousuo"
|
||||||
|
style="color: #8f8f8f; margin-right: 8px"></view>
|
||||||
|
<input placeholder="请输入商家名称搜索" v-model="searchVal" />
|
||||||
|
<view class="search-btn" @click="clickSearch">搜索</view>
|
||||||
|
</view>
|
||||||
|
<view class="banner">
|
||||||
|
<!-- <view
|
||||||
|
class="title"
|
||||||
|
:style="{
|
||||||
|
backgroundImage: `url('${titleImgPath}')`,
|
||||||
|
}"></view> -->
|
||||||
|
<image class="title" :src="titleImgPath"></image>
|
||||||
|
<view class="jf-btn" hover-class="none"></view>
|
||||||
|
<!-- <view class="footer">
|
||||||
|
<navigator
|
||||||
|
hover-class="none"
|
||||||
|
class="btn-1"
|
||||||
|
url="/pages/fastBuy/index?type=1"></navigator>
|
||||||
|
<navigator
|
||||||
|
hover-class="none"
|
||||||
|
openType="switchTab"
|
||||||
|
url="/pages/game/gamehome/index"
|
||||||
|
class="btn-2"></navigator>
|
||||||
|
<navigator
|
||||||
|
hover-class="none"
|
||||||
|
class="btn-3"
|
||||||
|
url="/pages/fastBuy/index?type=2"></navigator>
|
||||||
|
</view> -->
|
||||||
|
</view>
|
||||||
|
<view class="navigation">
|
||||||
|
<view
|
||||||
|
class="item"
|
||||||
|
v-for="(item, index) in navigationList"
|
||||||
|
:key="index"
|
||||||
|
@click="toPage(item)">
|
||||||
|
<image class="icon" :src="item.icon" />
|
||||||
|
<view class="text">{{ item.name }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- <navigator
|
||||||
|
class="ad"
|
||||||
|
url="/pages/marketing/yq/index"
|
||||||
|
open-type="navigate"
|
||||||
|
hover-class="none">
|
||||||
|
</navigator> -->
|
||||||
|
<MerList :get-user-location="getUserLocal" />
|
||||||
|
<Popup :imgArr="imgList" />
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import Taro from '@tarojs/taro';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { getHomeList } from '@/api/home';
|
||||||
|
import { bindParent } from '@/api/user';
|
||||||
|
import MerList from '@/components/MerList.vue';
|
||||||
|
import Popup from '@/components/Popup.vue';
|
||||||
|
|
||||||
|
const statusBarHeight = Taro.getSystemInfoSync().statusBarHeight;
|
||||||
|
const BarHeight = ref((statusBarHeight as number) + 7);
|
||||||
|
|
||||||
|
const titleImgPath = require(process.env.TARO_APP_TITLE_IMG as string);
|
||||||
|
|
||||||
|
interface navigationType {
|
||||||
|
ID?: number;
|
||||||
|
type: number;
|
||||||
|
icon: string;
|
||||||
|
name: string;
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const navigationList = ref<Array<navigationType>>([]);
|
||||||
|
|
||||||
|
const imgList = ref([
|
||||||
|
// require('../../static/popTip-1.png'),
|
||||||
|
// require('../../static/popTip.png'),
|
||||||
|
require('../../../static/zhenggai.png'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
Taro.useShareAppMessage(() => ({
|
||||||
|
title: '捷兑通',
|
||||||
|
path: `/pages/index/index?scene=${Taro.getStorageSync('token')}`,
|
||||||
|
imageUrl: 'https://upload.jdt168.com/1714375021923881119_Share.jpg',
|
||||||
|
}));
|
||||||
|
|
||||||
|
const searchVal = ref('');
|
||||||
|
|
||||||
|
const clickSearch = () => {
|
||||||
|
if (!searchVal.value)
|
||||||
|
return Taro.showToast({
|
||||||
|
title: '请输入商家名称再搜索',
|
||||||
|
icon: 'none',
|
||||||
|
});
|
||||||
|
Taro.navigateTo({
|
||||||
|
url: `/pages/search/index?name=${searchVal.value}`,
|
||||||
|
});
|
||||||
|
searchVal.value = '';
|
||||||
|
};
|
||||||
|
|
||||||
|
Taro.useLoad(() => {
|
||||||
|
Taro.getPrivacySetting({
|
||||||
|
success: res => {
|
||||||
|
if (res.needAuthorization) {
|
||||||
|
Taro.requirePrivacyAuthorize({
|
||||||
|
success: () => {
|
||||||
|
console.log('用户同意授权');
|
||||||
|
},
|
||||||
|
fail: () => {
|
||||||
|
console.log('用户拒绝授权');
|
||||||
|
Taro.exitMiniProgram();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
getNavLists();
|
||||||
|
getUserLocal();
|
||||||
|
checkBindParent();
|
||||||
|
});
|
||||||
|
|
||||||
|
const checkBindParent = async () => {
|
||||||
|
if (Taro.getStorageSync('token') && Taro.getStorageSync('bind_id')) {
|
||||||
|
try {
|
||||||
|
const res: any = await bindParent({
|
||||||
|
uid: Taro.getStorageSync('bind_id'),
|
||||||
|
});
|
||||||
|
Taro.showToast({
|
||||||
|
title: res.msg,
|
||||||
|
});
|
||||||
|
Taro.removeStorageSync('bind_id');
|
||||||
|
} catch (error) {
|
||||||
|
Taro.removeStorageSync('bind_id');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const address = ref('获取位置中......');
|
||||||
|
|
||||||
|
const getUserLocal = async () => {
|
||||||
|
Taro.getLocation({
|
||||||
|
type: 'wgs84',
|
||||||
|
success: res => {
|
||||||
|
// Taro.request({
|
||||||
|
// url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${res.latitude},${res.longitude}&key=4EJBZ-TZXCV-IHUPX-UMI2L-MK3N3-37FSQ&get_poi=1`,
|
||||||
|
// method: 'GET',
|
||||||
|
// success: res => {
|
||||||
|
// switch (res.data.status) {
|
||||||
|
// case 121:
|
||||||
|
// Taro.showToast({
|
||||||
|
// title: res.data.message,
|
||||||
|
// icon: 'none',
|
||||||
|
// });
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// const data = res.data.result.address_component;
|
||||||
|
// address.value = `${data.district}${data.street_number}`;
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
Taro.request({
|
||||||
|
url: `https://api.tianditu.gov.cn/geocoder?postStr={'lon':${res.longitude},'lat':${res.latitude},'ver':1}&type=geocode&tk=42db4f3dfd1a18d31e73ee90aa2ce054`,
|
||||||
|
method: 'GET',
|
||||||
|
success: res => {
|
||||||
|
const { msg, result } = res.data;
|
||||||
|
if (msg === 'ok') {
|
||||||
|
address.value = `${result.addressComponent.county}${result.addressComponent.town}${result.addressComponent.address}`;
|
||||||
|
} else {
|
||||||
|
Taro.showToast({
|
||||||
|
title: msg,
|
||||||
|
icon: 'none',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getNavLists = async () => {
|
||||||
|
navigationList.value = [
|
||||||
|
// {
|
||||||
|
// type: 1,
|
||||||
|
// icon: '//p0.meituan.net/csc/5c770748f0028c63741c5ec14df3cc386715.png',
|
||||||
|
// url: '',
|
||||||
|
// name: '活动商家',
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// type: 1,
|
||||||
|
// icon: '//p0.meituan.net/csc/4868c06b99008ff7d5f81e6514858c8a7950.png',
|
||||||
|
// url: '',
|
||||||
|
// name: '兑换商家',
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
icon: '//p0.meituan.net/csc/f33ad2443a67e9f3474a1d5fd9d529db7504.png',
|
||||||
|
url: '/pages/users/settled_mer/index',
|
||||||
|
name: '商户入驻',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
icon: '//p0.meituan.net/csc/0403cf37dd14a6b44b22ffccaa2878f95703.png',
|
||||||
|
url: '/pages/allClassList/index',
|
||||||
|
name: '全部服务',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const res = await getHomeList();
|
||||||
|
res.data.data.forEach(item => {
|
||||||
|
navigationList.value.unshift({
|
||||||
|
ID: item.ID,
|
||||||
|
type: 2,
|
||||||
|
icon: item.icon,
|
||||||
|
url: item.url,
|
||||||
|
name: item.name,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const toPage = item => {
|
||||||
|
item.type !== 1
|
||||||
|
? Taro.navigateTo({
|
||||||
|
url: `/pages/search/index?id=${item.ID}&name=${item.name}`,
|
||||||
|
})
|
||||||
|
: Taro.navigateTo({
|
||||||
|
url: item.url as string,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
/* 旧版样式 - 所有样式包裹在 .home-old 作用域下 */
|
||||||
|
page {
|
||||||
|
background-image: url('//p0.meituan.net/csc/aaaccd28594119e4b838d07d30739471440261.png');
|
||||||
|
background-size: 100% 57%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
box-sizing: border-box;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
.home-old {
|
||||||
|
.local {
|
||||||
|
margin-left: 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search {
|
||||||
|
margin: 30px auto;
|
||||||
|
display: flex;
|
||||||
|
border-radius: 18px;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 10px 15px;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
width: 730px;
|
||||||
|
|
||||||
|
input {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-btn {
|
||||||
|
background-color: #f83d3d;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 10px;
|
||||||
|
width: 100px;
|
||||||
|
height: 60px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 60px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner {
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
.title {
|
||||||
|
width: 600px;
|
||||||
|
height: 90px;
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jf-btn {
|
||||||
|
margin: 15px auto;
|
||||||
|
background-image: url('//p1.meituan.net/csc/e125184432dc591137c24a26abe5796a25262.png');
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 350px;
|
||||||
|
height: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 15px;
|
||||||
|
|
||||||
|
.btn-1 {
|
||||||
|
background-image: url('//p0.meituan.net/csc/7708348ee250eae910328bb7c12197f029562.png');
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 200px;
|
||||||
|
height: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-2 {
|
||||||
|
// background-image: url('//p1.meituan.net/csc/8cc2b518031eb7424b184d90a583d805146287.png');
|
||||||
|
background-image: url('../../../static/game_banner.png');
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 300px;
|
||||||
|
height: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-3 {
|
||||||
|
background-image: url('//p0.meituan.net/csc/31bd1f5c791c95557758dfa5c96e001529545.png');
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 200px;
|
||||||
|
height: 220px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigation {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
grid-gap: 40px;
|
||||||
|
margin: 20px;
|
||||||
|
height: auto;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding: 32px 0;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 90px;
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
color: #333333;
|
||||||
|
font-size: 26px;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ad {
|
||||||
|
// background-image: url('https://jdt168.oss-cn-guangzhou.aliyuncs.com/ad.png');
|
||||||
|
background-image: url('https://pic.imgdb.cn/item/6697aa0dd9c307b7e95c94d9.png');
|
||||||
|
background-size: 100% 100%;
|
||||||
|
height: 180px;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
page {
|
|
||||||
background-image: url('//p0.meituan.net/csc/aaaccd28594119e4b838d07d30739471440261.png');
|
|
||||||
background-size: 100% 57%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.local {
|
|
||||||
margin-left: 15px;
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-end;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
margin: 30px auto;
|
|
||||||
display: flex;
|
|
||||||
border-radius: 18px;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 15px;
|
|
||||||
background: rgba(255, 255, 255, 0.8);
|
|
||||||
width: 730px;
|
|
||||||
|
|
||||||
input {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-btn {
|
|
||||||
background-color: #f83d3d;
|
|
||||||
color: #fff;
|
|
||||||
border-radius: 10px;
|
|
||||||
width: 100px;
|
|
||||||
height: 60px;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 60px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.banner {
|
|
||||||
.title {
|
|
||||||
background-image: url('//p0.meituan.net/csc/542112fc072d4687b437848bc29b0a1730495.png');
|
|
||||||
background-size: 100% 100%;
|
|
||||||
width: 600px;
|
|
||||||
height: 90px;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jf-btn {
|
|
||||||
margin: 15px auto;
|
|
||||||
background-image: url('//p1.meituan.net/csc/e125184432dc591137c24a26abe5796a25262.png');
|
|
||||||
background-size: 100% 100%;
|
|
||||||
width: 350px;
|
|
||||||
height: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-end;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 0 15px;
|
|
||||||
|
|
||||||
.btn-1 {
|
|
||||||
background-image: url('//p0.meituan.net/csc/7708348ee250eae910328bb7c12197f029562.png');
|
|
||||||
background-size: 100% 100%;
|
|
||||||
width: 200px;
|
|
||||||
height: 220px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-2 {
|
|
||||||
// background-image: url('//p1.meituan.net/csc/8cc2b518031eb7424b184d90a583d805146287.png');
|
|
||||||
background-image: url('../../static/game_banner.png');
|
|
||||||
background-size: 100% 100%;
|
|
||||||
width: 300px;
|
|
||||||
height: 220px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-3 {
|
|
||||||
background-image: url('//p0.meituan.net/csc/31bd1f5c791c95557758dfa5c96e001529545.png');
|
|
||||||
background-size: 100% 100%;
|
|
||||||
width: 200px;
|
|
||||||
height: 220px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(4, 1fr);
|
|
||||||
grid-gap: 40px;
|
|
||||||
margin: 20px;
|
|
||||||
height: auto;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 20px;
|
|
||||||
padding: 32px 0;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
background-size: 100% 100%;
|
|
||||||
width: 90px;
|
|
||||||
height: 90px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
color: #333333;
|
|
||||||
font-size: 26px;
|
|
||||||
margin-top: 6px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.ad {
|
|
||||||
// background-image: url('https://jdt168.oss-cn-guangzhou.aliyuncs.com/ad.png');
|
|
||||||
background-image: url('https://pic.imgdb.cn/item/6697aa0dd9c307b7e95c94d9.png');
|
|
||||||
background-size: 100% 100%;
|
|
||||||
height: 180px;
|
|
||||||
margin: 20px;
|
|
||||||
}
|
|
||||||
@@ -1,215 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<view>
|
<HomeNew v-if="isNewHome" />
|
||||||
<view :style="{ marginTop: BarHeight + 'px' }"></view>
|
<HomeOld v-else />
|
||||||
<view class="local">
|
|
||||||
<view class="iconfont icon-dizhi" style="font-size: 20px"></view>
|
|
||||||
<text class="text-[28px]">{{ address }}</text>
|
|
||||||
</view>
|
|
||||||
<view class="search">
|
|
||||||
<view
|
|
||||||
class="iconfont icon-sousuo"
|
|
||||||
style="color: #8f8f8f; margin-right: 8px"></view>
|
|
||||||
<input placeholder="请输入商家名称搜索" v-model="searchVal" />
|
|
||||||
<view class="search-btn" @click="clickSearch">搜索</view>
|
|
||||||
</view>
|
|
||||||
<view class="banner">
|
|
||||||
<view class="title"></view>
|
|
||||||
<view class="jf-btn" hover-class="none"></view>
|
|
||||||
<!-- <view class="footer">
|
|
||||||
<navigator
|
|
||||||
hover-class="none"
|
|
||||||
class="btn-1"
|
|
||||||
url="/pages/fastBuy/index?type=1"></navigator>
|
|
||||||
<navigator
|
|
||||||
hover-class="none"
|
|
||||||
openType="switchTab"
|
|
||||||
url="/pages/game/gamehome/index"
|
|
||||||
class="btn-2"></navigator>
|
|
||||||
<navigator
|
|
||||||
hover-class="none"
|
|
||||||
class="btn-3"
|
|
||||||
url="/pages/fastBuy/index?type=2"></navigator>
|
|
||||||
</view> -->
|
|
||||||
</view>
|
|
||||||
<view class="navigation">
|
|
||||||
<view
|
|
||||||
class="item"
|
|
||||||
v-for="(item, index) in navigationList"
|
|
||||||
:key="index"
|
|
||||||
@click="toPage(item)">
|
|
||||||
<image class="icon" :src="item.icon" />
|
|
||||||
<view class="text">{{ item.name }}</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<!-- <navigator
|
|
||||||
class="ad"
|
|
||||||
url="/pages/marketing/yq/index"
|
|
||||||
open-type="navigate"
|
|
||||||
hover-class="none">
|
|
||||||
</navigator> -->
|
|
||||||
<MerList :get-user-location="getUserLocal" />
|
|
||||||
<Popup :imgArr="imgList" />
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Taro from '@tarojs/taro';
|
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { getHomeList } from '@/api/home';
|
import HomeOld from './components/HomeOld.vue';
|
||||||
import MerList from '@/components/MerList.vue';
|
import HomeNew from './components/HomeNew.vue';
|
||||||
import Popup from '@/components/Popup.vue';
|
|
||||||
|
|
||||||
const statusBarHeight = Taro.getSystemInfoSync().statusBarHeight;
|
const isNewHome = process.env.TARO_APP_SHOW_NEW_HOME === 'yes';
|
||||||
const BarHeight = ref((statusBarHeight as number) + 7);
|
|
||||||
|
|
||||||
interface navigationType {
|
|
||||||
ID?: number;
|
|
||||||
type: number;
|
|
||||||
icon: string;
|
|
||||||
name: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const navigationList = ref<Array<navigationType>>([]);
|
|
||||||
|
|
||||||
const imgList = ref([
|
|
||||||
// require('../../static/popTip-1.png'),
|
|
||||||
require('../../static/popTip.png'),
|
|
||||||
]);
|
|
||||||
|
|
||||||
Taro.useShareAppMessage(() => ({
|
|
||||||
title: '捷兑通',
|
|
||||||
path: `/pages/index/index?scene=${Taro.getStorageSync('token')}`,
|
|
||||||
imageUrl: 'https://upload.jdt168.com/1714375021923881119_Share.jpg',
|
|
||||||
}));
|
|
||||||
|
|
||||||
const searchVal = ref('');
|
|
||||||
|
|
||||||
const clickSearch = () => {
|
|
||||||
if (!searchVal.value)
|
|
||||||
return Taro.showToast({
|
|
||||||
title: '请输入商家名称再搜索',
|
|
||||||
icon: 'none',
|
|
||||||
});
|
|
||||||
Taro.navigateTo({
|
|
||||||
url: `/pages/search/index?name=${searchVal.value}`,
|
|
||||||
});
|
|
||||||
searchVal.value = '';
|
|
||||||
};
|
|
||||||
|
|
||||||
Taro.useLoad(() => {
|
|
||||||
Taro.getPrivacySetting({
|
|
||||||
success: res => {
|
|
||||||
if (res.needAuthorization) {
|
|
||||||
Taro.requirePrivacyAuthorize({
|
|
||||||
success: () => {
|
|
||||||
console.log('用户同意授权');
|
|
||||||
},
|
|
||||||
fail: () => {
|
|
||||||
console.log('用户拒绝授权');
|
|
||||||
Taro.exitMiniProgram();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
getNavLists();
|
|
||||||
getUserLocal();
|
|
||||||
});
|
|
||||||
|
|
||||||
const address = ref('获取位置中......');
|
|
||||||
|
|
||||||
const getUserLocal = async () => {
|
|
||||||
Taro.getLocation({
|
|
||||||
type: 'wgs84',
|
|
||||||
success: res => {
|
|
||||||
// Taro.request({
|
|
||||||
// url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${res.latitude},${res.longitude}&key=4EJBZ-TZXCV-IHUPX-UMI2L-MK3N3-37FSQ&get_poi=1`,
|
|
||||||
// method: 'GET',
|
|
||||||
// success: res => {
|
|
||||||
// switch (res.data.status) {
|
|
||||||
// case 121:
|
|
||||||
// Taro.showToast({
|
|
||||||
// title: res.data.message,
|
|
||||||
// icon: 'none',
|
|
||||||
// });
|
|
||||||
// break;
|
|
||||||
// default:
|
|
||||||
// const data = res.data.result.address_component;
|
|
||||||
// address.value = `${data.district}${data.street_number}`;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
Taro.request({
|
|
||||||
url: `https://api.tianditu.gov.cn/geocoder?postStr={'lon':${res.longitude},'lat':${res.latitude},'ver':1}&type=geocode&tk=42db4f3dfd1a18d31e73ee90aa2ce054`,
|
|
||||||
method: 'GET',
|
|
||||||
success: res => {
|
|
||||||
const { msg, result } = res.data;
|
|
||||||
if (msg === 'ok') {
|
|
||||||
address.value = `${result.addressComponent.county}${result.addressComponent.town}${result.addressComponent.address}`;
|
|
||||||
} else {
|
|
||||||
Taro.showToast({
|
|
||||||
title: msg,
|
|
||||||
icon: 'none',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const getNavLists = async () => {
|
|
||||||
navigationList.value = [
|
|
||||||
// {
|
|
||||||
// type: 1,
|
|
||||||
// icon: '//p0.meituan.net/csc/5c770748f0028c63741c5ec14df3cc386715.png',
|
|
||||||
// url: '',
|
|
||||||
// name: '活动商家',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// type: 1,
|
|
||||||
// icon: '//p0.meituan.net/csc/4868c06b99008ff7d5f81e6514858c8a7950.png',
|
|
||||||
// url: '',
|
|
||||||
// name: '兑换商家',
|
|
||||||
// },
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
icon: '//p0.meituan.net/csc/f33ad2443a67e9f3474a1d5fd9d529db7504.png',
|
|
||||||
url: '/pages/users/settled_mer/index',
|
|
||||||
name: '商户入驻',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
icon: '//p0.meituan.net/csc/0403cf37dd14a6b44b22ffccaa2878f95703.png',
|
|
||||||
url: '/pages/allClassList/index',
|
|
||||||
name: '全部服务',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
const res = await getHomeList();
|
|
||||||
res.data.data.forEach(item => {
|
|
||||||
navigationList.value.unshift({
|
|
||||||
ID: item.ID,
|
|
||||||
type: 2,
|
|
||||||
icon: item.icon,
|
|
||||||
url: item.url,
|
|
||||||
name: item.name,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const toPage = item => {
|
|
||||||
item.type !== 1
|
|
||||||
? Taro.navigateTo({
|
|
||||||
url: `/pages/search/index?id=${item.ID}&name=${item.name}`,
|
|
||||||
})
|
|
||||||
: Taro.navigateTo({
|
|
||||||
url: item.url as string,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss" scoped></style>
|
||||||
@import './index.scss';
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -25,10 +25,16 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view>
|
<view class="search-page">
|
||||||
<MerList v-if="classId" v-model="classId" />
|
<MerList v-if="classId" v-model="classId" />
|
||||||
<Storelist v-else v-model="name" />
|
<Storelist v-else v-model="name" />
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss"></style>
|
<style lang="scss">
|
||||||
|
.search-page {
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f5f6f7;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -171,7 +171,7 @@
|
|||||||
|
|
||||||
<!-- 版权 -->
|
<!-- 版权 -->
|
||||||
<view class="mt-5 text-[20px] text-center">
|
<view class="mt-5 text-[20px] text-center">
|
||||||
<view class="text-[#999999]">鑫瓴科技版权所有</view>
|
<view class="text-[#999999]">{{ copText }}</view>
|
||||||
<!-- <view>v4.0.0</view> -->
|
<!-- <view>v4.0.0</view> -->
|
||||||
</view>
|
</view>
|
||||||
<!-- 登录 -->
|
<!-- 登录 -->
|
||||||
@@ -198,6 +198,8 @@ const isShowLogin = ref(false);
|
|||||||
|
|
||||||
const isLogin = ref(false);
|
const isLogin = ref(false);
|
||||||
|
|
||||||
|
const copText = process.env.TARO_APP_COP;
|
||||||
|
|
||||||
interface UserInfo {
|
interface UserInfo {
|
||||||
data?: {
|
data?: {
|
||||||
nickName?: string;
|
nickName?: string;
|
||||||
|
|||||||
@@ -3,12 +3,17 @@ import Taro from '@tarojs/taro';
|
|||||||
import UserModal from '@/components/UserModal.vue';
|
import UserModal from '@/components/UserModal.vue';
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { getPhone, login, getPersonalInfo } from '@/api/user';
|
import { getPhone, login, getPersonalInfo } from '@/api/user';
|
||||||
import logoImg from '../../../static/logo.jpg';
|
// import logoImg from '../../../static/logo.jpg';
|
||||||
import { Left, Home } from '@nutui/icons-vue-taro';
|
import { Left, Home } from '@nutui/icons-vue-taro';
|
||||||
|
|
||||||
const statusBarHeight = Taro.getSystemInfoSync().statusBarHeight;
|
const statusBarHeight = Taro.getSystemInfoSync().statusBarHeight;
|
||||||
const BarHeight = ref((statusBarHeight as number) - 7);
|
const BarHeight = ref((statusBarHeight as number) - 7);
|
||||||
|
|
||||||
|
const appName = process.env.TARO_APP_NAME;
|
||||||
|
|
||||||
|
const logoImg = require(process.env.TARO_APP_LOGO_IMG as string);
|
||||||
|
// const logoImg = process.env.TARO_APP_LOGO_IMG;
|
||||||
|
|
||||||
const isShow = ref(false);
|
const isShow = ref(false);
|
||||||
|
|
||||||
const val = ref(false);
|
const val = ref(false);
|
||||||
@@ -157,8 +162,8 @@ const clickText = (type: number, text: string) => {
|
|||||||
</view>
|
</view>
|
||||||
<image src="../../../static/wechat_login.jpg" />
|
<image src="../../../static/wechat_login.jpg" />
|
||||||
<view class="logo">
|
<view class="logo">
|
||||||
<image :src="logoImg" />
|
<image :src="logoImg"></image>
|
||||||
<view>捷兑通</view>
|
<view>{{ appName }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="center">
|
<view class="center">
|
||||||
<nut-button
|
<nut-button
|
||||||
|
|||||||
@@ -97,7 +97,11 @@ const getList = async () => {
|
|||||||
const res = await getActiveOrderList({
|
const res = await getActiveOrderList({
|
||||||
status: tabValue.value,
|
status: tabValue.value,
|
||||||
});
|
});
|
||||||
orderList.value = res.data.data;
|
if (res.data.data.length >= 2) {
|
||||||
|
orderList.value = res.data.data.slice(0, 2);
|
||||||
|
} else {
|
||||||
|
orderList.value = res.data.data;
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
title: error.msg,
|
title: error.msg,
|
||||||
|
|||||||
@@ -268,6 +268,9 @@ Taro.useLoad(options => {
|
|||||||
type.value = options.type;
|
type.value = options.type;
|
||||||
oid.value = options.orderId;
|
oid.value = options.orderId;
|
||||||
tId.value = Number(options.OrderType);
|
tId.value = Number(options.OrderType);
|
||||||
|
});
|
||||||
|
|
||||||
|
Taro.useDidShow(() => {
|
||||||
Taro.getLocation({
|
Taro.getLocation({
|
||||||
type: 'wgs84',
|
type: 'wgs84',
|
||||||
success: res => {
|
success: res => {
|
||||||
@@ -277,7 +280,7 @@ Taro.useLoad(options => {
|
|||||||
});
|
});
|
||||||
// goodInfo.value = Taro.getStorageSync('item');
|
// goodInfo.value = Taro.getStorageSync('item');
|
||||||
getOrderDetail();
|
getOrderDetail();
|
||||||
});
|
})
|
||||||
|
|
||||||
const getOrderDetail = async () => {
|
const getOrderDetail = async () => {
|
||||||
const res = await getActiveOrderDetail({
|
const res = await getActiveOrderDetail({
|
||||||
|
|||||||
BIN
src/static/index/title.png
Normal file
BIN
src/static/index/title.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
src/static/logo-1.jpg
Normal file
BIN
src/static/logo-1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.7 KiB |
BIN
src/static/zhenggai.png
Normal file
BIN
src/static/zhenggai.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 318 KiB |
@@ -2,7 +2,16 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
content: ['./src/pages/index.html', './src/**/*.{html,js,ts,jsx,tsx,vue}'],
|
content: ['./src/pages/index.html', './src/**/*.{html,js,ts,jsx,tsx,vue}'],
|
||||||
theme: {
|
theme: {
|
||||||
extend: {},
|
extend: {
|
||||||
|
colors: {
|
||||||
|
primary: '#fa2c19', // Theme Red
|
||||||
|
secondary: '#ff5d45', // Lighter Red
|
||||||
|
surface: '#ffffff',
|
||||||
|
},
|
||||||
|
boxShadow: {
|
||||||
|
'card': '0 2px 8px rgba(0, 0, 0, 0.04)',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
plugins: [],
|
plugins: [],
|
||||||
corePlugins: {
|
corePlugins: {
|
||||||
|
|||||||
Reference in New Issue
Block a user