Commit 4301acf2 authored by xinzhedeai's avatar xinzhedeai

Merge branch 'remind' into gaoqucodecheck

parents 2d002608 a832148a
...@@ -272,6 +272,7 @@ body { ...@@ -272,6 +272,7 @@ body {
} }
.check-module { .check-module {
position: relative;
width: 3rem; width: 3rem;
height: 1.8rem; height: 1.8rem;
padding: 0.2rem; padding: 0.2rem;
......
...@@ -26,6 +26,76 @@ ...@@ -26,6 +26,76 @@
display: none; display: none;
} }
</style> </style>
<style>
/* 新增提醒模块样式 */
.info-reminder {
width: 6.9rem;
height: 2.54rem;
background: #FFFFFF;
border-radius: 0.2rem;
margin: 0.3rem auto;
padding: 0.24rem 0.3rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.reminder-item {
position: relative;
width: 2.2rem;
height: 100%;
text-align: center;
}
.new-badge{
position: absolute;
top: 0.15rem;
right: 0.1rem;
min-width: .8rem;
text-align: left;
text-indent: .16rem;
height: 0.36rem;
line-height: 0.36rem;
font-size: 0.2rem;
color: #FFFFFF;
background-image: url(image/code/home/tip.png);
background-size: contain;
background-repeat: no-repeat;
}
.reminder-badge {
position: absolute;
top: -0.15rem;
right: 0.2rem;
min-width: 0.4rem;
height: 0.4rem;
line-height: 0.4rem;
padding: 0 0.12rem;
border-radius: 0.2rem;
font-size: 0.24rem;
color: #FFFFFF;
background: #00AEF1;
}
.reminder-badge1{
background: #00AEF1; /* 默认 蓝色 */
}
.reminder-badge2 {
background: #FF9C01; /* 橙黄色 */
}
.reminder-badge2 {
background: #FF4D4F; /* 红色 */
}
.reminder-img {
width: 1.2rem;
height: 1.2rem;
margin-bottom: 0.16rem;
}
.reminder-text {
font-size: 0.28rem;
color: #333333;
line-height: 1.2;
}
</style>
<!-- 在 includeHead.js 之后添加环境判断 --> <!-- 在 includeHead.js 之后添加环境判断 -->
<script src="./sdk/includeHead.js"></script> <script src="./sdk/includeHead.js"></script>
</head> </head>
...@@ -181,6 +251,37 @@ ...@@ -181,6 +251,37 @@
</div> </div>
</div> </div>
<!-- 第三层统计信息之后新增提醒模块(商户专属) -->
<div class="info-reminder" v-if="showShop">
<!-- 第一个提醒项:整改未通过 -->
<div class="reminder-item" v-for="item in remindStatistic" @click="navTo(`${item.name}`)">
<div class="reminder-badge" :class="`reminder-badge${item.icon}`">{{item.num}}</div>
<img :src="`./image/code/home/icon${item.icon}.png`" class="reminder-img" alt="整改未通过">
<p class="reminder-text">{{item.title}}</p>
</div>
<!-- <div class="reminder-item" @click="navTo('nopass')">
<div class="reminder-badge">3</div>
<img src="./image/code/home/icon1.png" class="reminder-img" alt="整改未通过">
<p class="reminder-text">整改未通过</p>
</div>
<div class="reminder-item" @click="navTo('willExpire')">
<div class="reminder-badge orange-badge">5</div>
<img src="./image/code/home/icon2.png" class="reminder-img" alt="整改未通过">
<p class="reminder-text">即将超期</p>
</div>
<div class="reminder-item" @click="navTo('expired')">
<div class="reminder-badge red-badge">2</div>
<img src="./image/code/home/icon3.png" class="reminder-img" alt="整改未通过">
<p class="reminder-text">整改超期</p>
</div> -->
</div>
<!-- 原第三层统计信息 -->
<div class="third-layer" v-cloak>
<!-- ... 原有统计内容保持不变 ... -->
</div>
<!-- 第四层:检查专区 --> <!-- 第四层:检查专区 -->
<div <div
class="fourth-layer" class="fourth-layer"
...@@ -197,6 +298,7 @@ ...@@ -197,6 +298,7 @@
> >
<p>{{item.title}} <van-icon name="arrow" /></p> <p>{{item.title}} <van-icon name="arrow" /></p>
<p class="module-intro">{{item.remark}}</p> <p class="module-intro">{{item.remark}}</p>
<div class="new-badge" v-if="item.msgFlag"></div>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -62,7 +62,7 @@ window.onload = function () { ...@@ -62,7 +62,7 @@ window.onload = function () {
className: 'jiancha', className: 'jiancha',
title: '检查记录', title: '检查记录',
remark: '', remark: '',
navTo: 'checkrecord', navTo: 'checkrecord-all',
}, },
{ {
className: 'yinhuan', className: 'yinhuan',
...@@ -101,6 +101,7 @@ window.onload = function () { ...@@ -101,6 +101,7 @@ window.onload = function () {
page: 1, // 页码 page: 1, // 页码
size: 10, // 每页显示的数量 size: 10, // 每页显示的数量
accessType: 'manage', // 访问类型 shop商家 saoma 扫码 manage 管理 accessType: 'manage', // 访问类型 shop商家 saoma 扫码 manage 管理
remindStatistic: []
} }
}, },
mounted() { mounted() {
...@@ -110,6 +111,30 @@ window.onload = function () { ...@@ -110,6 +111,30 @@ window.onload = function () {
}, },
computed: {}, computed: {},
methods: { methods: {
getRemindStatistic(){
http2.post(
{
serviceId: API_KEY_MAP['no-page']['id'],
interfacePublicKey: API_KEY_MAP['no-page']['publicKey'],
interfacePrivateKey: API_KEY_MAP['no-page']['privateKey'],
reqParams: {
sign: 23, // 商户首页统计
},
},
(res) => {
if (!res) {
// 中台返回为undefined 重新请求
setTimeout(() => {
this.getRemindStatistic()
}, 0)
return
}
if (res) {
var result = JSON.parse(res)
this.remindStatistic = result.data
}
}
)},
openDebug(){ // 双击开启debugg模式,再次双击则关闭 openDebug(){ // 双击开启debugg模式,再次双击则关闭
console.log('开启关闭debug') console.log('开启关闭debug')
if(localStorage.getItem('debug')=='Y'){ if(localStorage.getItem('debug')=='Y'){
...@@ -117,7 +142,6 @@ window.onload = function () { ...@@ -117,7 +142,6 @@ window.onload = function () {
}else{ }else{
localStorage.setItem('debug', 'Y') localStorage.setItem('debug', 'Y')
} }
}, },
scanCode(toData) { scanCode(toData) {
if (toData === false) { if (toData === false) {
...@@ -152,7 +176,7 @@ window.onload = function () { ...@@ -152,7 +176,7 @@ window.onload = function () {
// } // }
let param = { let param = {
accessType: this.accessType, accessType: this.accessType,
merId: this.userInfo.merId, merId: this.userInfo.merId||'',
unitName: this.userInfo.unitName, unitName: this.userInfo.unitName,
smallPlaceTypeName: this.userInfo.smallPlaceTypeName, smallPlaceTypeName: this.userInfo.smallPlaceTypeName,
} }
...@@ -176,8 +200,13 @@ window.onload = function () { ...@@ -176,8 +200,13 @@ window.onload = function () {
// gemhoUtil.navigatePage(`src/_${toData}.html`) // gemhoUtil.navigatePage(`src/_${toData}.html`)
} }
}, },
navTo(url) { navTo(type) { // 消息统计跳转
// gemhoUtil.nav2asd(url) const param = {
type,
merId: this.userInfo.merId
};
let url = gemhoUtil.setParameter(`./src/_yh_check.html`, param)
gemhoUtil.navigatePage(url, '跳转中...')
}, },
gotoPage(stringifyUrl) { gotoPage(stringifyUrl) {
let url = gemhoUtil.setParameter(`src/_${stringifyUrl}.html`) let url = gemhoUtil.setParameter(`src/_${stringifyUrl}.html`)
...@@ -267,6 +296,7 @@ window.onload = function () { ...@@ -267,6 +296,7 @@ window.onload = function () {
if (this.userInfo.userType === 'shop') { // 2025年5月14日新增消费者逻辑 if (this.userInfo.userType === 'shop') { // 2025年5月14日新增消费者逻辑
this.showOrg = false //是否显示组织 this.showOrg = false //是否显示组织
this.showShop = true //是否显示店铺 this.showShop = true //是否显示店铺
this.getRemindStatistic() // 2025年6月9日 新增珊瑚提醒
} else if (['admin', 'common', 'industry', 'street', 'wgy'].includes(this.userInfo.userType)) { } else if (['admin', 'common', 'industry', 'street', 'wgy'].includes(this.userInfo.userType)) {
this.showOrg = true //是否显示组织 this.showOrg = true //是否显示组织
...@@ -298,11 +328,15 @@ window.onload = function () { ...@@ -298,11 +328,15 @@ window.onload = function () {
return return
} else */ } else */
if (this.userInfo.userType === 'shop') { // if (this.userInfo.userType === 'shop') {
this.defaultMenuList[1].navTo = 'checkrecord' // this.defaultMenuList[1].navTo = 'checkrecord'
} else { // } else {
this.defaultMenuList[1].navTo = 'shanghu_list' // this.defaultMenuList[1].navTo = 'shanghu_list'
} // }
// 2025年6月9日 跳转检查记录 统一跳转新页面。
this.defaultMenuList[1].navTo = 'checkrecord-all'
// 生成最终菜单列表 // 生成最终菜单列表
this.menuList = (result.data.modules || []).map( this.menuList = (result.data.modules || []).map(
(moduleItem) => ({ (moduleItem) => ({
......
...@@ -17,12 +17,26 @@ axios.defaults.headers.post['Content-Type'] = 'application/json' ...@@ -17,12 +17,26 @@ axios.defaults.headers.post['Content-Type'] = 'application/json'
// 商户token // 商户token
axios.defaults.headers.common['Authorization'] =
'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTcyMTAzMTg4NiIsImxvZ2luX3VzZXJfa2V5IjoiNGJjY2JjYzUtNmY0Yy00ZDhlLWJiYzEtZjYzMzVlZDBlZTgwIn0.j3jEfHzeu3kklm60kKCirwwyKaWD51ABicOzxEnuFOfGe63FFqYOQ122ojAhukbInnKj4try3DjrST6wNDVjVQ'
// 凯丽
// axios.defaults.headers.common['Authorization'] =
// 'Bearer eyJhbGciOiJlUzUxMiJ9.eyJzdWlioilxNZ92MZAzMDl00SlslmxyZ2luX3VzZXJfa2V5ljoiMEONTM1NzktNTJiMSO0N2QwLTkzNmEtMmViNWFhYzMzMTI1In0.EG_EwS7xS1jgi29Ly7WXOJBCW4DcAyOtLD4he06sV8b4i70kknNQqVAx063NpcDa5kmTFdZ6zEfPHYPfVR4dEO'
// admin账号token
// axios.defaults.headers.common['Authorization'] =
// 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiOTFmMDY4MGYtODA0My00ZTE3LTk4YmUtOGI2NWM0MzI2NGZiIn0.ygF-ObL1f-ZirqG6m7Vrrs_dXLVz-zLEcLMxUP1XVoW2Dek86THn07tzZHTMCgT5ufPNjSSGkaV9Ii4SCZ3qtw'
// wgy账号token
// axios.defaults.headers.common['Authorization'] =
// 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLlrZnmgJ3lv40iLCJsb2dpbl91c2VyX2tleSI6ImU0Y2Q2YzQ2LWEyMTAtNGIyMi1hZjAxLTliNjFiMWUyMzcxZiJ9.6IYwYIgsCV2RnnxOrtphRJIcko05AVlqyYGba3KuYE9NzKJlXcgOI-1C0tjXUg2YkJDl1YVDzLKntXEwoUSjCw'
// axios.defaults.headers.common['Authorization'] = // axios.defaults.headers.common['Authorization'] =
// 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTcyMTAzMTg4NiIsImxvZ2luX3VzZXJfa2V5IjoiNGJjY2JjYzUtNmY0Yy00ZDhlLWJiYzEtZjYzMzVlZDBlZTgwIn0.j3jEfHzeu3kklm60kKCirwwyKaWD51ABicOzxEnuFOfGe63FFqYOQ122ojAhukbInnKj4try3DjrST6wNDVjVQ' // 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTcyMTAzMTg4NiIsImxvZ2luX3VzZXJfa2V5IjoiNGJjY2JjYzUtNmY0Yy00ZDhlLWJiYzEtZjYzMzVlZDBlZTgwIn0.j3jEfHzeu3kklm60kKCirwwyKaWD51ABicOzxEnuFOfGe63FFqYOQ122ojAhukbInnKj4try3DjrST6wNDVjVQ'
// admin账号token // admin账号token
axios.defaults.headers.common['Authorization'] = // axios.defaults.headers.common['Authorization'] =
'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiOTEyODc0N2ItNGE4NC00MWRjLTg0ZGUtZTY1ODNkMzBiNDcwIn0.w_JRlifng-sUQqvGnuRFH5-wiL-1tfwI1cF7E97gjaOZ37bvRQld3120Myf9MYqLtVHUVX_vhlcBj7Kmg9exZw' // 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiOTEyODc0N2ItNGE4NC00MWRjLTg0ZGUtZTY1ODNkMzBiNDcwIn0.w_JRlifng-sUQqvGnuRFH5-wiL-1tfwI1cF7E97gjaOZ37bvRQld3120Myf9MYqLtVHUVX_vhlcBj7Kmg9exZw'
// 请求拦截器 // 请求拦截器
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
if (window.env == 'dev') { if (window.env == 'dev') {
axios.defaults.baseURL = 'http://192.168.2.37:8080' axios.defaults.baseURL = 'http://192.168.2.37:8080'
// 消费者token // 消费者token
...@@ -15,9 +14,13 @@ if (window.env == 'dev') { ...@@ -15,9 +14,13 @@ if (window.env == 'dev') {
axios.defaults.headers.common['Authorization'] = axios.defaults.headers.common['Authorization'] =
'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLlvKDlrZ3lvakiLCJsb2dpbl91c2VyX2tleSI6IjNjMmRiMWFiLWIyZGMtNDBjYi04YjM5LWRiNTJmM2VmYzNkYyJ9.sfZyPP-COShNCjwxKR26zGDsPHXss97gu7JEpaMapIZyMQEsxzMigVickcqdhaqDwTRcfr0IxAj64vnrriS9Cw' 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLlvKDlrZ3lvakiLCJsb2dpbl91c2VyX2tleSI6IjNjMmRiMWFiLWIyZGMtNDBjYi04YjM5LWRiNTJmM2VmYzNkYyJ9.sfZyPP-COShNCjwxKR26zGDsPHXss97gu7JEpaMapIZyMQEsxzMigVickcqdhaqDwTRcfr0IxAj64vnrriS9Cw'
// 凯丽
// axios.defaults.headers.common['Authorization'] =
// 'Bearer eyJhbGciOiJlUzUxMiJ9.eyJzdWlioilxNZ92MZAzMDl00SlslmxyZ2luX3VzZXJfa2V5ljoiMEONTM1NzktNTJiMSO0N2QwLTkzNmEtMmViNWFhYzMzMTI1In0.EG_EwS7xS1jgi29Ly7WXOJBCW4DcAyOtLD4he06sV8b4i70kknNQqVAx063NpcDa5kmTFdZ6zEfPHYPfVR4dEO'
// admin账号token // admin账号token
axios.defaults.headers.common['Authorization'] = // axios.defaults.headers.common['Authorization'] =
'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiOTEyODc0N2ItNGE4NC00MWRjLTg0ZGUtZTY1ODNkMzBiNDcwIn0.w_JRlifng-sUQqvGnuRFH5-wiL-1tfwI1cF7E97gjaOZ37bvRQld3120Myf9MYqLtVHUVX_vhlcBj7Kmg9exZw' // 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiOTEyODc0N2ItNGE4NC00MWRjLTg0ZGUtZTY1ODNkMzBiNDcwIn0.w_JRlifng-sUQqvGnuRFH5-wiL-1tfwI1cF7E97gjaOZ37bvRQld3120Myf9MYqLtVHUVX_vhlcBj7Kmg9exZw'
}else{ }else{
axios.defaults.baseURL = 'https://gqyjpt.weihai.cn/prod-api' axios.defaults.baseURL = 'https://gqyjpt.weihai.cn/prod-api'
......
html,
body {
letter-spacing: .01rem;
background: #F5F6FA;
}
.wrapper {}
.header {
background-color: #fff;
}
.header .title {
font-weight: bold;
font-size: 0.32rem;
color: #000000;
display: flex;
justify-content: start;
align-items: center;
gap: 0.2rem;
padding: 0.3rem 0.3rem;
}
.header .title img {
width: 0.51rem;
height: 0.52rem;
}
.detail {
width: 6.5rem;
background: #F5F6FA;
border-radius: 0.01rem;
margin: 0 auto;
padding: 0.2rem;
margin-bottom: 0.2rem;
display: flex;
align-items: start;
flex-direction: column;
justify-content: space-around;
}
.detail .van-col {
font-family: PingFang SC;
font-weight: 500;
font-size: 0.28rem;
color: #737373;
}
.detail span {
font-family: PingFang SC;
font-weight: 500;
font-size: 0.28rem;
color: #737373;
}
/* 添加以下样式 */
.van-tabs__line {
background-color: #1989fa;
}
.blue-text {
color: #1989fa;
font-weight: 500;
}
.van-list {
background: #F5F6FA;
border-radius: 8px;
margin: 0.2rem 0.2rem;
}
.van-list .van-cell {
margin-bottom: .2rem;
}
.van-tab {
color: #000;
}
.van-tab__text {
font-weight: bold;
font-size: 0.3rem;
/* color: #000; */
}
.van-tab--active {
color: #1081E3;
}
.van-field__label {
font-weight: bold;
}
.van-field__control {
color: #737373;
}
.tab1-row1{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 8px;
}
.bold{
color: #333;
font-size: 0.3rem;
font-weight: bold;
}
.tab1-row2{
display: flex; justify-content: space-between; color: #666; font-size: 0.28rem; margin-bottom: 8px;
}
.tab1-row2 span{
display: inline-block; width: 50%;
}
.reminder-badge {
position: absolute;
top: 0.15rem;
right: 0.1rem;
min-width: .8rem;
text-align: left;
text-indent: .16rem;
height: 0.36rem;
line-height: 0.36rem;
font-size: 0.2rem;
color: #FFFFFF;
background-image: url(../image/code/home/tip.png);
background-size: contain;
background-repeat: no-repeat;
}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0, viewprot-fit:cover">
<title>高区“码”上</title>
<script type="text/javascript" src="../sdk/includeHead.js"></script>
</head>
<div id="app">
<div class="wrapper" v-cloak>
<!-- 商户头部信息 -->
<div class="header">
<van-search v-model="merName" show-action placeholder="请输入商家关键词" @search="onSearch">
<template #action>
<div @click="onSearch"></div>
</template>
</van-search>
<!-- Tab栏 -->
<van-tabs v-model:active="activeTab" @click="tabChange" title-active-color="#1989fa" line-height="2px"
style="margin-bottom: 15px;">
<van-tab title="检查记录" name="1"></van-tab>
<van-tab title="自查记录" name="2"></van-tab>
</van-tabs>
</div>
<van-list v-model:loading="loading" :offset="10" :finished="finished" finished-text="没有更多了" @load="getList" :immediate-check="false">
<van-cell v-for="item in hazardList" :key="item.id" @click="viewDetail(item.id)">
<div style="width: 100%;position: relative;" v-if="activeTab=='1'">
<div class="reminder-badge" v-if="item.msgFlag"></div>
<!-- 第一行:商户名称 -->
<div class="tab1-row1 bold">{{ item.merName }}</div>
<!-- 第二行:场所类型 + 检查单位(两列) -->
<div class="tab1-row1">
<span>场所类型:{{ item.placeType }}</span>
</div>
<!-- 第三行:监察人 + 检查日期(两列) -->
<div class="tab1-row2">
<span>检查人:{{ item.checkPeopleName }}</span>
<span>检查日期:{{ item.checkDate && item.checkDate.split(' ')[0] }}</span>
</div>
<div class="tab1-row1">
<span>检查单位:{{ item.checkUnit }}</span>
</div>
<!-- 第四行:未整改数 + 隐患数(两列) -->
<div class="tab1-row2">
<span>未整改数:{{ item.notRectifiedCount }}处</span>
<span>隐患数:{{ item.hiddenCount }}处</span>
</div>
</div>
<div style="width: 100%;" v-if="activeTab=='2'">
<!-- 第一行:隐患描述 -->
<div style="
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #333;
font-size: 0.3rem;
font-weight: bold;
font-family: PingFang SC;
">九小场所消防安全检查清单</div>
<!-- ">{{ item.remark }}</div> -->
<!-- 第二行:状态和时间 -->
<div style="display: flex; justify-content: start; gap: .34rem; margin: 8px 0;">
<span style="color: #737373; font-size: 0.28rem;">检查时间:{{ item.checkDate }}</span>
</div>
<!-- 第三行:商家和箭头 -->
<div style="display: flex; justify-content: start; gap: .4rem; align-items: center;">
<span>检查人:{{item.checkPeopleName}}</span>
<span>隐患数:{{item.hiddenCount}}</span>
<span>未整改:{{item.notRectifiedCount}}</span>
</div>
</div>
</van-cell>
</van-list>
</div>
</body>
</html>
\ No newline at end of file
var VUE = null
window.addEventListener('load', function () {
VUE = new Vue({
el: '#app',
data() {
return {
merName: '',
// 新增子Tab数据
activeTab: '1',
hazardList: [
{
id: 1,
merchantName: '福源便利店', // 商户名称
smallPlaceTypeName: '零售店铺', // 场所类型
checkUnit: '高区消防救援大队', // 检查单位
checkPeopleName: '王建军', // 监察人
checkDate: '2024-07-12', // 检查日期
notRectifiedCount: 3, // 未整改数
hiddenCount: 7 // 隐患数
},
{
id: 2,
merchantName: '美味家火锅店',
smallPlaceTypeName: '餐饮场所',
checkUnit: '高区市场监督管理局',
checkPeopleName: '李雪晴',
checkDate: '2024-07-14',
notRectifiedCount: 0,
hiddenCount: 2
},
{
id: 3,
merchantName: '阳光网吧',
smallPlaceTypeName: '娱乐场所',
checkUnit: '高区应急管理局',
checkPeopleName: '张卫国',
checkDate: '2024-07-15',
notRectifiedCount: 1,
hiddenCount: 5
},
{
id: 4,
merchantName: '康旭药店',
smallPlaceTypeName: '医疗场所',
checkUnit: '高区消防救援大队',
checkPeopleName: '陈雨桐',
checkDate: '2024-07-16',
notRectifiedCount: 4,
hiddenCount: 9
}
],
// 新增以下数据
userInfo: {},
userData: {
checkCount: 0, //检查数
checkSelfCount: 0, //自查数
hiddenCount: 0, //隐患数
hiddenNoReCount: 0, //未整改数
},
loading: false,
finished: false,
page: 1,
size: 10,
total: 0,
merId: null, // 商户id
unitName: '', // 单位名称
smallPlaceTypeName: '', // 场所类型
}
},
created() {
let urlParams = gemhoUtil.getUrlParams()
this.merId = urlParams.merId
this.unitName = urlParams.unitName
this.smallPlaceTypeName = urlParams.smallPlaceTypeName
this.init()
},
computed: {},
methods: {
reset() {
this.page = 1
this.size = 10
this.total = 0
this.hazardList = []
},
onSearch() {
console.log('xxxx', this.merName)
this.init()
},
//初始化页面
init() {
this.reset()
this.getList()
},
tabChange() {
this.init()
},
getList() {
// 更多示例数据...
vant.Toast.loading({
message: '正在加载...',
forbidClick: true,
loadingType: 'spinner',
})
setTimeout(() => {
http2.post(
{
serviceId: API_KEY_MAP['page']['id'],
interfacePublicKey: API_KEY_MAP['page']['publicKey'],
interfacePrivateKey: API_KEY_MAP['page']['privateKey'],
reqParams: {
sign: 1,
type: this.activeTab,
merId: this.merId,
pageNum: this.page++, // 每次请求增加下一页
pageSize: this.size,
sort: 'lawId,desc',
merName: this.merName,
},
},
(res) => {
if (!res) {
// 中台返回为undefined 重新请求
vant.Toast.clear()
this.page = this.page - 1 // 重新请求后,分页数恢复上一次请求的值
setTimeout(() => {
this.getList()
}, 0)
return
}
if (res) {
var result = JSON.parse(res)
console.log('接口信息', result)
if (result.code !== 200 && result.data == null) {
return
}
this.hazardList.push(...result.rows)
this.total = result.total
if (this.page * this.size >= this.total) {
this.finished = true // 下滑不在刷新数据
}
}
this.loading = false
setTimeout(() => {
this.$nextTick(() => {
vant.Toast.clear()
})
}, 0)
this.$nextTick(() => {
// 滚动条跳转位置
window.scrollTo(0, gemhoUtil.getCookie('scrollPosition'))
})
}
)
}, 0)
},
viewDetail(id) {
let urlParams = gemhoUtil.getUrlParams()
let param = {
...urlParams,
id: id,
flag: 'JC_XQ',
pageName: '_checkrecord-all',
}
let url = gemhoUtil.setParameter('_check_info.html', param)
gemhoUtil.navigatePage(url, '跳转中...')
// 这里添加跳转逻辑
},
},
})
})
...@@ -485,7 +485,7 @@ ...@@ -485,7 +485,7 @@
<!-- 消费者安全建议列表 --> <!-- 消费者安全建议列表 -->
<div v-if="activeTab==2"> <div v-if="activeTab==2">
<van-list> <van-list v-model:loading="loading" :offset="10" :finished="finished" finished-text="没有更多了" @load="getList" :immediate-check="false">
<van-cell <van-cell
v-for="(item, index) in consumerSuggestList" v-for="(item, index) in consumerSuggestList"
:key="item.id" :key="item.id"
......
...@@ -95,3 +95,27 @@ body { ...@@ -95,3 +95,27 @@ body {
position: absolute; position: absolute;
right: 0; right: 0;
} }
/* 在现有样式中添加以下CSS */
.float-read-btn {
position: fixed; /* 固定定位 */
right: 0.3rem; /* 右侧距离 */
bottom: 0.3rem; /* 底部距离 */
width: 1.07rem; /* 宽度 */
height: 1.07rem; /* 高度 */
background: #40A6FF; /* 背景色 */
border-radius: 50%; /* 圆角 */
display: flex; /* 弹性布局 */
flex-direction: column; /* 垂直排列 */
justify-content: center; /* 垂直居中 */
align-items: center; /* 水平居中 */
z-index: 999; /* 层级保证不被遮挡 */
cursor: pointer; /* 手型光标 */
}
.float-read-btn .btn-text {
font-size: 0.28rem; /* 文字大小 */
color: #FFFFFF; /* 文字颜色 */
line-height: 1.2; /* 行高 */
}
\ No newline at end of file
...@@ -18,30 +18,38 @@ ...@@ -18,30 +18,38 @@
v-model="shanghuName" v-model="shanghuName"
show-action show-action
placeholder="请输入商家关键词" placeholder="请输入商家关键词"
@search="onSearch" @search="onSearch()"
v-show="showSearch" v-show="showSearch"
> >
<template #action> <template #action>
<div @click="onSearch"></div> <div @click="onSearch()"></div>
</template> </template>
</van-search> </van-search>
</div> </div>
<!-- Tab栏 --> <!-- Tab栏 -->
<van-tabs v-model:active="activeTab" title-active-color="#1989fa" line-height="2px" <van-tabs v-model:active="activeTab" title-active-color="#1989fa" line-height="2px" @change="tabChange"
style="margin-bottom: 15px;"> style="margin-bottom: 15px;">
<van-tab title="全部" name=""></van-tab> <!-- <div v-for="item in tabList""> -->
<van-tab title="待审核" ></van-tab> <van-tab :title="item.title" :badge="item.msgNum||null" v-for="item in remindStatistic"></van-tab>
<!-- </div> -->
<!-- <van-tab title="全部" name=""></van-tab>
<van-tab title="待审核" badge="5"></van-tab>
<van-tab title="待整改" ></van-tab> <van-tab title="待整改" ></van-tab>
<van-tab title="已整改" ></van-tab> <van-tab title="已整改" ></van-tab>
<van-tab title="整改逾期" ></van-tab> <van-tab title="整改逾期" ></van-tab> -->
</van-tabs> </van-tabs>
<!-- 隐患列表 --> <!-- 隐患列表 -->
<van-list> <van-list v-model:loading="loading" :offset="10" :finished="finished" finished-text="没有更多了" @load="getList" :immediate-check="false">
<van-cell v-for="item in filteredHazards" :key="item.id" class="list-item" @click="viewDetail(item)" > <van-cell v-for="item in hazardList" :key="item.id" class="list-item" @click="viewDetail(item)">
<div style="width: 100%;"> <div style="width: 100%;">
<!-- 第一行:隐患描述 --> <!-- 第一行:隐患描述 -->
<div style=" <div style="
position: relative; /* 新增:相对定位容器 */
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
...@@ -49,15 +57,36 @@ ...@@ -49,15 +57,36 @@
font-size: 0.3rem; font-size: 0.3rem;
font-weight: bold; font-weight: bold;
font-family: PingFang SC; font-family: PingFang SC;
">{{ item.description }}</div> ">
{{ item.description }}
<!-- 新增:未读标记 -->
<span
v-show="!item.msgFlag"
style="
position: absolute;
top: 50%;
right: 0.15rem;
transform: translateY(-50%);
width: 0.1rem;
height: 0.1rem;
background: #FF4D4F;
border-radius: 50%;
"
></span>
</div>
<!-- 第二行:状态和时间 --> <!-- 第二行:状态和时间 -->
<div style="display: flex; justify-content: start; gap: .34rem; margin: 8px 0;"> <div style="display: flex; justify-content: start; gap: .34rem; margin: 8px 0;">
<van-tag :type="statusTagType(item.rectificationStatusName)"> <van-tag :type="statusTagType(item.rectificationStatusName)">
{{ item.rectificationStatusName }} {{ item.rectificationStatusName }}
</van-tag> </van-tag>
<span <span v-show="item.rectificationStatus == 2"
style="color: #737373; font-size: 0.28rem;margin-left: -1.6rem;">检查时间:{{ item.checkDate }}</span> style="color: #737373; font-size: 0.28rem;">整改时间:{{ item.rectificationDate || '-' }}</span>
<span v-show="item.rectificationStatus == 0 || item.rectificationStatus == 3"
style="color: #737373; font-size: 0.28rem;">整改截止时间:{{ item.rectificationDeadline || '-'}}</span>
<span v-show="item.rectificationStatus == 1"
style="color: #737373; font-size: 0.28rem;">检查时间:{{ item.checkDate || '-' }}</span>
<van-icon name="arrow" class="navToBtn" @click="viewDetail(item)" /> <van-icon name="arrow" class="navToBtn" @click="viewDetail(item)" />
</div> </div>
...@@ -68,6 +97,12 @@ ...@@ -68,6 +97,12 @@
</div> </div>
</van-cell> </van-cell>
</van-list> </van-list>
<!-- 新增悬浮按钮 -->
<div class="float-read-btn" @click="markAllAsRead">
<span class="btn-text">全部</span>
<span class="btn-text">已读</span>
</div>
</div> </div>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -11,19 +11,26 @@ window.addEventListener('load', function () { ...@@ -11,19 +11,26 @@ window.addEventListener('load', function () {
// 更多示例数据... // 更多示例数据...
], ],
activeTab: '', activeTab: '',
status: '',
merId: '', merId: '',
showSearch: false, // 控制搜索框的显示和隐藏 showSearch: false, // 控制搜索框的显示和隐藏
// 整改状态 0:待整改 1:已整改 2:待审核 3:整改逾期
tabList: [
{ name: '', title: '全部', msgNum: 0, },
{ name: '2', title: '待审核', msgNum: 0, },
{ name: '0', title: '待整改', msgNum: 0, },
{ name: '1', title: '已整改', msgNum: 0, },
{ name: '3', title: '整改逾期', msgNum: 0, },
],
loading: false,
finished: false,
page: 0,
size: 6,
total: 0,
remindStatistic: []
} }
}, },
computed: { computed: {
filteredHazards() {
const statusMap = ['全部', '待审核', '待整改', '已整改', '整改逾期']
return this.hazardList.filter((item) =>
this.activeTab === ''
? true
: item.rectificationStatusName === statusMap[this.activeTab]
)
},
}, },
created() { created() {
let merId = gemhoUtil.getParameter('merId') let merId = gemhoUtil.getParameter('merId')
...@@ -32,56 +39,103 @@ window.addEventListener('load', function () { ...@@ -32,56 +39,103 @@ window.addEventListener('load', function () {
} else { } else {
this.merId = '' this.merId = ''
} }
// 2025年6月7日 新增首页(信息统计跳转)类别区分逻辑。
let type = gemhoUtil.getParameter('type')
if (type === 'nopass') {
this.activeTab = 2
} else if (type === 'willExpire') { // 即将超期待整改
this.activeTab = 2
} else if (type === 'expired') { // 超期 整改逾期
this.activeTab = 4
}
if (gemhoUtil.getCookie('userType') !== 'shop') { if (gemhoUtil.getCookie('userType') !== 'shop') {
this.showSearch = true this.showSearch = true
} }
this.init() this.init()
this.getRemindStatistic()
}, },
methods: { methods: {
init() { markAllAsRead() { // 全部标记为已读
this.getHazardList() http2.post(
{
serviceId: API_KEY_MAP['no-page']['id'],
interfacePublicKey: API_KEY_MAP['no-page']['publicKey'],
interfacePrivateKey: API_KEY_MAP['no-page']['privateKey'],
reqParams: {
sign: 24, // 隐患tab
}, },
onSearch() { },
// 这里添加搜索逻辑 (res) => {
// 这里添加获取数据的逻辑 if (!res) {
vant.Toast.loading({ // 中台返回为undefined 重新请求
message: '正在加载...',
forbidClick: true,
loadingType: 'spinner',
})
setTimeout(() => { setTimeout(() => {
this.markAllAsRead()
}, 0)
return
}
if (res) {
var result = JSON.parse(res)
this.remindStatistic = result.data
}
}
)
},
getRemindStatistic() {
http2.post( http2.post(
{ {
serviceId: API_KEY_MAP['page']['id'], serviceId: API_KEY_MAP['no-page']['id'],
interfacePublicKey: API_KEY_MAP['page']['publicKey'], interfacePublicKey: API_KEY_MAP['no-page']['publicKey'],
interfacePrivateKey: API_KEY_MAP['page']['privateKey'], interfacePrivateKey: API_KEY_MAP['no-page']['privateKey'],
reqParams: { reqParams: {
sign: 3, sign: 24, // 隐患tab
// merId: this.merId ? this.merId : '',
merName: this.shanghuName,
pageNum: this.page++, // 每次请求增加下一页
pageSize: this.size,
sort: 'lawId,desc',
}, },
}, },
(res) => { (res) => {
if (!res) { if (!res) {
// 中台返回为undefined 重新请求 // 中台返回为undefined 重新请求
vant.Toast.clear()
this.page = this.page - 1 // 重新请求后,分页数恢复上一次请求的值
setTimeout(() => { setTimeout(() => {
// this.getList() this.getRemindStatistic()
}, 0) }, 0)
return return
} }
if (res) { if (res) {
var result = JSON.parse(res) var result = JSON.parse(res)
this.hazardList = result.rows console.log('tab', result.data)
console.log(result) this.tabList = result.data
} }
} }
) )
}, 0) },
reset() {
this.page = 0
this.size = 6
this.total = 0
this.hazardList = []
},
yhstatus() { // tab值对应的隐患状态码装欢
if (this.activeTab === 0) {
return ''
} else if (this.activeTab === 1) {
return ~~'2'
} else if (this.activeTab === 2) {
return ~~'0'
} else if (this.activeTab === 3) {
return ~~'1'
} else if (this.activeTab === 4) {
return ~~'3'
}
},
tabChange(title) {
console.log('tab 切换', title)
this.reset()
this.getList()
},
init() {
this.getList()
},
onSearch() {
this.reset()
this.getList()
}, },
// 新增选择确认方法 // 新增选择确认方法
onConfirmType(value) { onConfirmType(value) {
...@@ -110,13 +164,7 @@ window.addEventListener('load', function () { ...@@ -110,13 +164,7 @@ window.addEventListener('load', function () {
// 这里添加跳转逻辑 // 这里添加跳转逻辑
}, },
//获取隐患列表数据 //获取隐患列表数据
getHazardList() { getList() {
// http
// .get('/gq/hiddenDanger/list?merId=1&status=' + this.activeTab)
// .then((res) => {
// console.log(res)
// })
// 这里添加获取数据的逻辑 // 这里添加获取数据的逻辑
vant.Toast.loading({ vant.Toast.loading({
message: '正在加载...', message: '正在加载...',
...@@ -132,10 +180,11 @@ window.addEventListener('load', function () { ...@@ -132,10 +180,11 @@ window.addEventListener('load', function () {
reqParams: { reqParams: {
sign: 3, sign: 3,
// merId: this.merId ? this.merId : '', // merId: this.merId ? this.merId : '',
status: this.activeTab, merName: this.shanghuName,
pageNum: this.page++, // 每次请求增加下一页 pageNum: this.page++, // 每次请求增加下一页
pageSize: this.size, pageSize: this.size,
sort: 'lawId,desc', sort: 'lawId,desc',
status: this.yhstatus()
}, },
}, },
(res) => { (res) => {
...@@ -150,10 +199,23 @@ window.addEventListener('load', function () { ...@@ -150,10 +199,23 @@ window.addEventListener('load', function () {
} }
if (res) { if (res) {
var result = JSON.parse(res) var result = JSON.parse(res)
this.hazardList = result.rows console.log(result, 'result')
console.log(result) this.loading = false; // 加载状态结束
this.hazardList.push(...result.rows);
this.total = result.total
if (this.page * this.size >= this.total) {
this.finished = true; // 下滑不在刷新数据
} }
} }
this.loading = false
setTimeout(() => {
this.$nextTick(() => {
vant.Toast.clear()
})
}, 0);
}
) )
}, 0) }, 0)
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment