Browse Source

Merge remote-tracking branch 'origin/master'

master
蟑螂恶霸 2 years ago
parent
commit
5861425ba7
  1. 9
      src/api/enterprise.js
  2. 18
      src/router/enforce.js
  3. 6
      src/router/home.js
  4. 8
      src/views/administrative/appointment.vue
  5. 30
      src/views/enforce/enforceNotice.vue
  6. 402
      src/views/enforce/enterpriseBaseInfo.vue
  7. 275
      src/views/enforce/enterpriseScanPreview.vue
  8. 345
      src/views/enforce/enterpriseWarningInfo.vue
  9. 2
      src/views/enforce/scanPage.vue
  10. 49
      src/views/enforceHome.vue
  11. 34
      src/views/enterprise/caseFilter.vue
  12. 394
      src/views/enterprise/qrCodeHistory.vue
  13. 60
      src/views/enterprise/register.vue
  14. 2
      src/views/enterprise/registrationSelectList.vue

9
src/api/enterprise.js

@ -36,3 +36,12 @@ export const getEnterpriseInformation = (id,success,error) => _get("/enterpriseI
*/
export const queryEnterpriseInfoList = (params, success, error) =>_get("/enterpriseInformation/queryList",params, success, error)
/**
* 查询企业历史二维码生成记录
* @param {*} params
* @param {*} success
* @param {*} error
* @returns
*/
export const queryHistoryQrCodeList = (params, success, error) =>_get("/enterpriseInformation/queryHistoryQrCodeList",params, success, error)

18
src/router/enforce.js

@ -11,6 +11,24 @@ const routes = [
name: "historyCheck",
component: () => import("@/views/enforce/historyCheck.vue"),
},
// 企业信息预览页
{
path: "/enterpriseScanPreview",
name: "enterpriseScanPreview",
component: () => import("@/views/enforce/enterpriseScanPreview.vue"),
},
// 企业详情信息
{
path: "/enterpriseBaseInfo",
name: "enterpriseBaseInfo",
component: () => import("@/views/enforce/enterpriseBaseInfo.vue"),
},
// 企业预警信息
{
path: "/enterpriseWarningInfo",
name: "enterpriseWarningInfo",
component: () => import("@/views/enforce/enterpriseWarningInfo.vue"),
},
// 预警列表
{
path: "/earlyWarning",

6
src/router/home.js

@ -74,6 +74,12 @@ const routes = [
name: "registrationDetail",
component: () => import("@/views/enterprise/registrationDetail.vue"),
},
// 二维码管理
{
path: "/qrCodeHistory",
name: "qrCodeHistory",
component: () => import("@/views/enterprise/qrCodeHistory.vue"),
},
];
export { routes };

8
src/views/administrative/appointment.vue

@ -18,9 +18,9 @@
required
:rules="[{ required: true, message: '必填项' }]"
readonly
@click="showPopup"
@click="showPopupCompony"
/>
<Popup :visible="popupVisible" :content="popupContent" @close="closePopup" @reciveData="reciveData" />
<Popup :visible="popupVisible" :content="popupContent" @close="closePopupCompony" @reciveData="reciveData" />
<van-field
v-model="submitData.linkMan"
label="企业联系人"
@ -345,10 +345,10 @@ export default {
}
},
methods: {
showPopup() {
showPopupCompony() {
this.popupVisible = true;
},
closePopup() {
closePopupCompony() {
this.popupVisible = false;
}
}

30
src/views/enforce/enforceNotice.vue

@ -3,11 +3,12 @@
<div class="shop app_content">
<!-- 导航栏 -->
<div class="header_body">
<header-nav
<!-- <header-nav
:leftArrow="false"
:titelText="`通知公告`"
>
</header-nav>
</header-nav> -->
<header-nav :slefBack="true" @goBack="goBack" :titelText="`通知公告`"></header-nav>
</div>
<van-search
v-model="searchParam.searchText"
@ -25,22 +26,22 @@
<div class="shop-center">
<lodding-card :isLodding="isLodding">
<div class="noticebox">
<div class="noticebox" v-for="(item, index) in data.dataList" :key="index">
<div class="notice-item"><i></i>
<div class="item-cont">
<span class="item-title">宝安区司法局</span>
<span class="item-time">2024-02-15</span>
<div class="item-text">2024年度宝安区新安街道年度行政执法检查计划</div>
<span class="item-title">{{ item.enforcementDepartment }}</span>
<span class="item-time">{{ item.createTime }}</span>
<div class="item-text">{{ item.fileObject.fileName }}</div>
</div>
</div>
<div class="notice-item"><i></i>
<!-- <div class="notice-item"><i></i>
<div class="item-cont">
<span class="item-title">龙华区司法局</span>
<span class="item-time">2024-02-15</span>
<div class="item-text">2024年度龙华区民治街道年度行政执法检查计划</div>
</div>
</div>
</div> -->
</div>
@ -49,16 +50,15 @@
</div>
<!-- 底部 -->
<div class="shop_footer_body">
<!-- <div class="shop_footer_body">
<footer-enforcement-nav></footer-enforcement-nav>
</div>
</div> -->
</div>
</template>
<script setup name="enforcementInspectionProgram">
import {queryEnforcementInspectionProgramList} from "@/api/enforce";
import { setGoodsNum } from "@/util/util";
const { useCommon, useShopCard } = $globalStore;
const { useCommon} = $globalStore;
const router = useRouter();
let allchecked = ref(false); //
@ -68,7 +68,9 @@ let searchParam = reactive({
//
searchText: ref(''),
//
searchDate: ref('')
searchDate: ref(''),
// 1
isPublish: 1
});
const data = reactive({
@ -379,7 +381,7 @@ const searchComplaint = (val) =>{
height: 0.75rem;
font-size: 0.4rem;
font-weight: 600;
line-height: 1rem;
line-height: 0.75rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

402
src/views/enforce/enterpriseBaseInfo.vue

@ -0,0 +1,402 @@
<template>
<div class="address_edit">
<!-- 导航栏 -->
<div class="header_body">
<header-nav :slefBack="true" @goBack="goBack" :titelText="`企业相关信息`"></header-nav>
</div>
<!-- 中间 -->
<div class="warp_body">
<van-form @failed="onFailed" @submit="submit">
<van-cell-group>
<div style="padding-top:10px; font-size:large" class="qy-name">企业信息</div>
<van-field
v-model="data.enterpriseInfo.enterpriseName"
label="企业名称:"
/>
<van-field
v-model="data.enterpriseInfo.enterpriseNumber"
label="统一社会信用代码:"
/>
<van-field
v-model="data.enterpriseInfo.enterpriseType"
label="企业类型:"
/>
<van-field
v-model="data.enterpriseInfo.enterpriseAddress"
label="企业地址:"
/>
<van-field
v-model="data.enterpriseInfo.legalPerson"
label="法人代表:"
/>
<van-field
v-model="data.enterpriseInfo.registeredCapital"
label="注册资本(元):"
/>
<van-field
v-model="data.enterpriseInfo.establishmentTime"
label="成立日期:"
/>
<van-field
v-model="data.enterpriseInfo.operatingTerm"
label="营业期限:"
/>
<van-field
v-model="data.enterpriseInfo.businessScope"
label="经营范围:"
/>
</van-cell-group>
<van-divider class="divdsty" />
<van-cell-group>
<div style="padding-top:10px; font-size:large" class="qy-name">案件信息</div>
<div class="search-button-list">
<span v-for="(item, index) in data?.optionList" :key="index">
<van-button plain hairline @click="searchDateType(item)" round type="primary" size="mini"
:style="item.selected == true ? 'background-color:yellow':'background-color:white'">{{item.name}}</van-button>
</span>
</div>
<div class="refresh_content" v-if="data?.checkDataList.length && data?.show == 1">
<div class="goods_box" v-for="(item, index) in data?.checkDataList" :key="index">
<van-swipe-cell class="swipe_cell">
<div class="card_box" @click="toDetailView(item.id)">
<div style="background-color: aqua; border: 2px; height: .1px;" class="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.lawEnforcementItem }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">执法部门</span> {{ item.lawEnforcement }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">执法人员</span> {{ item.lawEnforcer }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">备注</span> {{ item.remark }}</p>
</div>
</div>
</van-swipe-cell>
</div>
</div>
<div class="refresh_content" v-if="data?.punishDataList.length && data?.show == 2">
<div class="goods_box" v-for="(item, index) in data?.punishDataList" :key="index">
<van-swipe-cell class="swipe_cell">
<!-- <div class="card_box" @click="toDetailView(item.id)"> -->
<div class="card_box">
<div style="background-color: aqua; border: 2px; height: .1px;" class="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.lawEnforcementItem }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">处罚行政机关</span> {{ item.lawEnforcement }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">处罚种类</span> {{ item.lawKind }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">备注</span> {{ item.remark }}</p>
</div>
</div>
</van-swipe-cell>
</div>
</div>
<div class="refresh_content" v-if="data?.forceDataList.length && data?.show == 3">
<div class="goods_box" v-for="(item, index) in data?.forceDataList" :key="index">
<van-swipe-cell class="swipe_cell">
<!-- <div class="card_box" @click="toDetailView(item.id)"> -->
<div class="card_box">
<div style="background-color: aqua; border: 2px; height: .1px;" class="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.lawEnforcementItem }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">处罚行政</span> {{ item.lawEnforcement }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">执行时间</span> {{ item.lawDate }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">备注</span> {{ item.remark }}</p>
</div>
</div>
</van-swipe-cell>
</div>
</div>
</van-cell-group>
</van-form>
</div>
<Popup :visible="data.popupVisible" :content="data.popupContent" @close="closePopup" @reciveData="reciveData" />
<Popup :visible="data.popupVisible2" :content="data.popupContent2" @close="closePopup" @reciveData="reciveData2" />
</div>
</template>
<script setup name="register">
import { showSuccessToast } from 'vant';
import {addEnforcementRegistration,queryUserInfo,queryRegistrationList} from '../../api/enforce'
import {getEnterpriseInformation} from '../../api/enterprise'
import {getDict} from '../../api/Home'
import { reactive, ref } from "vue";
import {uploadFile} from "../../util/fileUpload";
//
import Popup from './userFilter.vue';
const { useMy } = $globalStore
const router = useRouter();
//
const route = useRoute();
let queryaddressId = ref("");
const data = reactive({
optionList:[
{name:"历史检查案件",val:1,selected:true},
{name:"历史处罚案件",val:2,selected:false},
{name:"历史强制案件",val:3,selected:false}],
show:1,
searchParam:{},
enterpriseInfo: {},
checkDataList:[],
punishDataList:[
{lawEnforcementItem:"安全生产违法",lawEnforcement:"深圳市福田区应急管理局",lawKind:"罚款",remark:"当日执行"}],
forceDataList:[
{lawEnforcementItem:"经济纠纷",lawEnforcement:"深圳市福田区应急管理局",lawDate:"2024-04-12",remark:""}],
showLawEnforcerFlag:false,
currentPage: 1,
good:"#7FFFD4",
bad:"#D3D3D3",
popupVisible: false,
popupContent: '',
popupVisible2: false,
popupContent2: '',
});
const searchDateType = (item) =>{
if(item.selected === false){
data.optionList.forEach(item=>{item.selected = false})
item.selected = true
data.show = item.val
}
}
const queryList = () =>{
queryEnforcementInspectionProgramList(searchParam,success =>{
console.log(success)
data.dataList = success.data;
freshMap.refreshLoad = false;
freshMap.listLoading = false;
freshMap.listFinished = true;
isLodding.value = false;
},error =>{
})
}
//3a0096181c184e5aa56f70923680856d$6e74ceda1463c165fd43eeeadce4f7cd
//
onMounted(() =>{
//
getEnterpriseInformation(route?.query?.enterpriseNumber,success =>{
if (null != success.data) {
data.enterpriseInfo.enterpriseName = success.data.enterpriseName
data.enterpriseInfo.enterpriseNumber = success.data.enterpriseNumber
data.enterpriseInfo.enterpriseType = success.data.enterpriseType
data.enterpriseInfo.enterpriseAddress = success.data.enterpriseAddress
data.enterpriseInfo.legalPerson = success.data.legalPerson
data.enterpriseInfo.registeredCapital = success.data.registeredCapital
data.enterpriseInfo.establishmentTime = success.data.establishmentTime
data.enterpriseInfo.operatingTerm = success.data.operatingTerm
data.enterpriseInfo.businessScope = success.data.businessScope
//
getDict({"dictType": "enterpriseType"},success =>{
if (success.data !=null) {
success.data.forEach(res =>{
if (data.enterpriseInfo.enterpriseType === res.dictValue) {
data.enterpriseInfo.enterpriseType = res.dictLabel
}
})
}
},error =>{
})
//
data.searchParam.enterpriseNumber = data.enterpriseInfo.enterpriseNumber;
queryRegistrationList(data.searchParam,success =>{
data.checkDataList = success.data;
},error =>{
})
}
},error=>{
})
})
//
const goBack = () => {
router.go(-1);
};
const toDetailView = (id) =>{
console.log(id)
router.push(
{
path: "/registrationDetail",
query: {
id: id,
}
});
}
const showPopup = () =>{
data.popupVisible = true;
}
const showPopup2 = () =>{
data.popupVisible2 = true;
}
const closePopup = () =>{
data.popupVisible = false;
data.popupVisible2 = false;
}
const reciveData = (item) =>{
submitData.lawEnforcerTwo = item.userName;
submitData.lawEnforcerIdTwo = item.userId;
}
const reciveData2 = (item) =>{
submitData.subsidiaryer = item.userName;
submitData.subsidiaryerId = item.userId;
}
</script>
<style lang="less" scoped>
.address_edit {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #ebf3fb;
}
.warp_body {
margin: 0 3%;
padding-bottom: 3rem;
width: 94%;
height: 100%;
//border-radius: 0.25rem;
background-image: linear-gradient(to bottom, #ebf3fb, #fff);
overflow-y: auto;
}
.qy-name{
font-size: large;
margin-left: 5%;
height: 34px;
margin-top: 0%;
font-weight: 600;
}
.zf-name{
font-size: 15px;
height: 33px;
background-color: white;
padding-left: 4%;
padding-top: 2%;
font-weight: 600;
}
/* vant4的 Toast 和 Popup 样式冲突,会导致 Toast 变成白底 */
.van-popup.van-toast{
background: var(--van-toast-background) !important;
box-sizing: content-box !important;
/* 下面3条css,影响不大 */
transition: all var(--van-duration-fast) !important;
width: var(--van-toast-default-width) !important;
max-width: var(--van-toast-max-width) !important;
}
.van-popup.van-toast .van-toast__icon{
font-size: var(--van-toast-icon-size) !important;
}
.divdsty {
margin: auto;
width: 100%;
height: 0.25rem;
background-color: #f4f4f4;
border: 0;
}
.file-upload{
min-height: 4.5rem;
position: relative;
}
.file-upload-center{
position: absolute;
height: 20%;
top: 10%;
left: 2%;
font-size: 0.38rem;
span {
font-size: 0.32rem;
color: rgb(221, 229, 227);
}
}
.file{
position: absolute;
bottom: 10%;
left: 2%;
}
.preview-cover {
position: absolute;
bottom: 0;
box-sizing: border-box;
width: 100%;
padding: 4px;
color: #fff;
font-size: 0.32rem;
text-align: center;
background: rgba(0, 0, 0, 0.3);
}
.goods_box {
display: flex;
background-color: #fff;
margin: 6px;
border-radius: 10px;
.swipe_cell {
width: 100%;
}
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
flex-direction: column;
.card_body {
background-color: #fff;
border-radius: 10px;
flex: 1;
}
.card_box_span{
font-size: 13px;
padding-left: 5%;
height: 35px;
align-items: center;
display: flex;
align-items: center;
}
.card_box_action{
position: absolute;
right: 4%;
}
}
}
</style>

275
src/views/enforce/enterpriseScanPreview.vue

@ -0,0 +1,275 @@
<template>
<div class="home app_content">
<!-- 导航栏 -->
<div class="header_body">
<header-nav
:slefBack="true"
@goBack="goBack"
:titelText="`企业详情查看`"
>
</header-nav>
</div>
<!-- 中间 -->
<div class="warp_body">
<div class="white-body">
<div class="carousel_box">
<div class="box-scan-one">
<span class="box-scan-text" @click="toEnterpriseBaseInfo">企业画像</span>
</div>
<div class="box-scan-two">
<span class="box-scan-text" @click="toEnterpriseWarningInfo">
<div class="card_box_span" style="padding-left: 1%;">
<van-icon v-if="data.warningInfo.warningLevel==1" name="warning" color="red" size="30" style="margin-top: 2%;" />
<van-icon v-else-if="data.warningInfo.warningLevel==2" name="warning" color="orange" size="30" style="margin-top: 2%;" />
<van-icon v-else-if="data.warningInfo.warningLevel==3" name="warning" color="#fed200" size="30" style="margin-top: 2%;" />
<van-icon v-else name="info" size="30" color="#fed200" />企业预警
</div>
</span>
</div>
</div>
<div class="boutique_box">
<div class="boutique_body">
<div class="box-qr-code" @click="toSign">
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup name="Home">
import {getEnterpriseMerchantAuthorization} from '@/api/Home';
import {queryEarlyWarning} from '../../api/enforce';
import {getEnterpriseInformation} from '../../api/enterprise'
const { useCommon } = $globalStore;
const router = useRouter();
let freshMap = reactive({
refreshLoad: false, //
listLoading: false, //
listFinished: false, //
});
const data = reactive({
enterpriseNumber:"a7cbb677c11e4dffa810b4ad3abedc09$eb020e1a24a8a19a0bdc07b191aa9ce7",
// enterpriseNumber:route?.query?.enterpriseNumber,
warningInfo:{},
searchParam:{}
});
const boutiqueAttr = reactive({
columnNum: 4,
itemClass: "boutique_item",
goodsCradclass: "boutique-crad",
}); //
const toSign = async() =>{
router.push({
path: "/sign",
query:{
enterpriseNumber: data.enterpriseNumber
}
});
};
const toEnterpriseBaseInfo = async() =>{
router.push({
path: "/enterpriseBaseInfo",
query:{
enterpriseNumber: data.enterpriseNumber
}
});
};
const toEnterpriseWarningInfo = async() =>{
router.push({
path: "/enterpriseWarningInfo",
query:{
enterpriseNumber: data.enterpriseNumber
}
});
};
const toRegistrationListView = async() =>{
router.push({
path: "/enterprise/registrationList",
});
}
const toComplaintView = async() =>{
router.push({
path: "/enterprise/complaint",
});
}
//
const onLoad = () => {
// recommendGoods(true);
};
onMounted(() => {
getEnterpriseInformation(data.enterpriseNumber,success =>{
if (null != success.data) {
data.searchParam.enterpriseNumber = success.data.enterpriseNumber;
//
queryEarlyWarning(data.searchParam,success =>{
data.warningInfo = success.data[0];
},error =>{
})
}
},error=>{
})
getEnterpriseMerchantAuthorization({merchantTel: useCommon.phonenumber},success =>{
if(!(success.data == null && success.data.length == 0)){
useCommon.SET_USER_ENTERPRISE_NUMBER(success.data[0].enterpriseNumber);
}
},error =>{
})
})
//
const goBack = () => {
router.go(-1);
};
</script>
<style lang="less" scoped>
.home {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #ebf3fb;
.warp_body {
background-image: linear-gradient(to bottom, #ebf3fb, transparent);
background-size: cover;
position: relative;
.carousel_box {
position: relative;
top: 2%;
height: 150px;
width: 100%;
background: url("/src/assets/images/scan-mean.jpg") no-repeat center center;
background-size: 60%;
opacity: 0.75;
.box-scan-one , .box-scan-two{
position: absolute;
top: 30%;
left: 15%;
height: 100px;
width: 30%;
font-size: 0.4rem;
color: #999;
.box-scan-text{
margin-top: 70%;
display: block;
width: 100%;
text-align: center
}
}
.box-scan-two{
left: auto;
right: 12.5%;
}
}
}
.boutique_box {
position: relative;
top: 10%;
z-index: 100;
width: 100%;
.boutique_body {
padding: 0px 0px 10px 0px;
display: flex;
justify-content: center;
};
.box-qr-code{
width: 52%;
text-align: right;
height: 7rem;
//background-color: var(--van-primary-color);
background: url("../../assets/images/scan-btn.jpg") no-repeat center center;
background-size: 100%;
// border-radius: 0.26667rem;
// background-size: cover;
// border-radius: 50%;
// background-image: url("@/assets/images/scan.png");
.box-qr-code-text{
margin-right: 25%;
margin-top: 70%;
display: block;
font-size: 0.45333rem;
}
img{
position: absolute;
top: 0%;
left: 34%;
}
}
.box-info{
width: 52%;
text-align: right;
height: 3.66667rem;
background-color: #ff976a;
border-radius: 10px;
background: url("@/assets/images/item_check.png");
background-size: cover;
.box-info-text{
margin-right: 3%;
margin-top: 2%;
display: block;
font-size: 17px
}
}
.box-complaint{
width: 36%;
text-align: right;
height: 3.66667rem;
background-color: #ff976a;
border-radius: 10px;
margin-left: 2%;
background: url("@/assets/images/item_complain.png");
background-size: cover;
.box-complaint-text{
margin-right: 5%;
margin-top: 3%;
display: block;
font-size: 17px
}
}
}
.recommend_box {
.recommend_body {
width: 100%;
}
}
}
.white-body {
margin: 0 4%;
width: 92%;
height: 96%;
background-color: #fff;
border-radius: 0.25rem;
}
.nocode {
width: 100%;
color: #fb7905;
font-size: 0.45rem;
text-align: center;
line-height: 3;
}
</style>

345
src/views/enforce/enterpriseWarningInfo.vue

@ -0,0 +1,345 @@
<template>
<div class="shop app_content">
<!-- 导航栏 -->
<div class="header_body">
<header-nav :leftArrow="false" titelText="企业预警信息" />
</div>
<div class="search-button-date">
<div style="border-color: black;" class="van-hairline--bottom"></div>
<van-popup v-model:show="data.showDatePicker" position="bottom">
<van-date-picker
title="选择日期"
v-model="data.currentDate"
:min-date="data.minDate"
:max-date="data.maxDate"
:columns-type="data.columnsType"
@confirm="onDateConfirm"
@cancel="cancelSelectDate"
/>
</van-popup>
</div>
<!-- 中间 -->
<div class="shop-center">
<lodding-card :isLodding="isLodding">
<refresh-list v-model:freshMap="freshMap" :classMap="classMap" @refresh="onRefresh" @onLoad="onLoad"
:resetScroll="resetScroll" class="refresh_box">
<div class="refresh_content" v-if="data?.dataList.length">
<div class="goods_box" v-for="(item, index) in data?.dataList" :key="index">
<van-swipe-cell class="swipe_cell">
<div class="card_box">
<div class="card_box_span">
<p>{{ item.createTime }}
</p>
</div>
<!-- <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa',padding: '0 5px' }" />-->
<div style="border-color: aqua; border: 2px;" class="van-hairline--bottom"></div>
<div class="card_box_span" style="padding-left: 1%;">
<van-icon v-if="item.level==1" name="warning" color="red" size="30" style="margin-top: 2%;" />
<van-icon v-else-if="item.level==2" name="warning" color="orange" size="30" style="margin-top: 2%;" />
<van-icon v-else-if="item.level==3" name="warning" color="#fed200" size="30" style="margin-top: 2%;" />
<van-icon v-else name="info" size="30" color="#fed200" style="margin-top: 2%;" />
<p style="padding-left: 15px; font-size: 16px;font-weight: bold;">{{ item.enterpriseName }}</p>
</div>
<div class="card_box_span">
<p style="padding-left: 30px;"><span class="card_box_label">预警原因</span> 本月对其行政检查{{ item.num }}</p>
</div>
<div class="card_box_span">
<p style="padding-left: 30px;"><span class="card_box_label">预警级别</span>
{{ item.level==1?"Ⅰ级 (特别严重)":item.level==2?"Ⅱ级 (严重)": item.level==3?"Ⅲ级 (较重)": "Ⅳ (一般)"}}
</p>
</div>
</div>
</van-swipe-cell>
</div>
</div>
<van-empty v-else class="no_data" description="暂无数据" />
</refresh-list>
</lodding-card>
</div>
</div>
</template>
<script setup name="registrationList">
import { showToast } from "vant";
import {queryEarlyWarning} from '../../api/enforce';
import { setGoodsNum } from "@/util/util";
const { useCommon, useShopCard } = $globalStore;
const router = useRouter();
let allchecked = ref(false); //
let refreshLoad = ref(false); //
let value = ref('')
let totalPrice = ref(0); //
let searchParam = reactive({
//
// lawEnforcementIncident:"",
//
lawEnforcement:"",
//
searchValue: ref(''),
//
dateType: null,
//
isComplaint: null,
//
enterpriseNumber: ref(useCommon.enterpriseNumber),
//
searchDate: ref()
});
const data = reactive({
cartList: [],
dataList: [],
dateSearch: ref(),
showDatePicker:false,
currentDate:ref(['2024', '01']),
minDate: new Date(2020, 0, 1),
maxDate: new Date(2125, 5, 1),
columnsType :['year', 'month'],
});
//
onMounted(() => {
// getCard();
searchParam.enterpriseNumber = useCommon.enterpriseNumber;
queryList();
data.dateSearch = nowDate(new Date());
});
const queryList = () =>{
queryEarlyWarning(searchParam,success =>{
data.dataList = success.data;
},error =>{
})
}
const onSearch = (val) => {
queryEarlyWarning(
{
"searchValue": searchParam.searchValue
}
,success =>{
data.dataList = success.data;
},error =>{
})
};
const onClickButton = () =>{
queryList();
}
const toComplaintView = (id,name) =>{
router.push(
{
path: "/enterprise/complaint",
query: {
id: id,
lawEnforcementIncident: name
}
});
}
onActivated(() => {
});
onDeactivated(() => {
});
//
const goBack = () => {
router.push({
path:"/enforceHome"
});
};
let resetScroll = ref(0); //
let isLodding = ref(true); //
let freshMap = reactive({
refreshLoad: false, //
listLoading: false, //
listFinished: false, //
});
//
const onRefresh = () => {
freshMap.listFinished = false;
freshMap.listLoading = true;
getGoodslist();
};
//
const onLoad = () => {
freshMap.listFinished = true;
getGoodslist(true);
};
//
const getGoodslist = async (onLoad) => {
// const res = await useClassify.classifyGoods();
// if (res?.code === 20000) {
// goodsList = onLoad ? goodsList.concat(res?.data) : res?.data;
// freshMap.refreshLoad = false;
// freshMap.listLoading = false;
// freshMap.listFinished = res?.listFinished;
// if (goodsList.length > 50) {
// freshMap.listFinished = true;
// }
// }
freshMap.refreshLoad = false;
freshMap.listLoading = false;
freshMap.listFinished = true;
isLodding.value = false;
};
onMounted(async () => {
queryList();
isLodding.value = false;
});
const selectDate = () =>{
data.showDatePicker = true;
console.log(data.showDatePicker)
}
const onDateConfirm = (value)=> {
console.log(value);
value.selectedValues.forEach((item,index) => {
console.log(item);
});
data.dateSearch = value.selectedValues[0] + "/" + value.selectedValues[1]
data.showDatePicker = false;
searchParam.searchDate = value.selectedValues[0] + "-" + value.selectedValues[1]
queryList();
}
const nowDate = (time) => {
var year = time.getFullYear(); //
var month = (time.getMonth() + 1).toString().padStart(2, '0'); //
var date = time.getDate().toString().padStart(2, '0'); //
var hour = time.getHours().toString().padStart(2, '0'); //
var minute = time.getMinutes().toString().padStart(2, '0'); //
var second = time.getSeconds().toString().padStart(2, '0'); //
return (
year + "/" + month
)
}
const searchDateType = (val) =>{
searchParam.dateType = val;
searchParam.isComplaint = null;
queryList();
}
const searchComplaint = (val) =>{
searchParam.isComplaint = val;
searchParam.dateType = null;
queryList();
}
</script>
<style lang="less" scoped>
.card_box_label {
color: rgba(128, 128, 128, 0.5);
}
.shop {
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
background-color: #f4f4f4;
.header_body {
height: 50px;
}
.shop-center {
flex: 1;
overflow-y: scroll;
position: relative;
.goods_box {
display: flex;
background-color: #fff;
margin: 6px;
border-radius: 10px;
.swipe_cell {
width: 100%;
}
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
flex-direction: column;
.card_body {
background-color: #fff;
border-radius: 10px;
flex: 1;
}
.card_box_span{
font-size: 13px;
padding-left: 5%;
height: 35px;
align-items: center;
display: flex;
align-items: center;
}
.card_box_action{
position: absolute;
right: 4%;
}
}
}
}
.shop_footer_body {
height: 101px;
position: relative;
.footer-one-btn {
height: 50px;
bottom: 51px;
}
}
}
.search-button-list{
height: 3%;
display: flex;
flex-direction: row;
padding-left: 10px;
margin-top: 6px;
align-items: end;
.search-button{
width: 15%;
height: 80%;
}
}
.search-button-date{
height: 3%;
display: flex;
flex-direction: row;
padding-left: 10px;
margin-top: 6px;
align-items: end;
position: relative;
.date-select{
font-size: 20px;
margin-left: 2%;
}
.search-button{
width: 15%;
height: 80%;
position: absolute;
top: 1%;
right: 1%;
}
}
</style>

2
src/views/enforce/scanPage.vue

@ -82,7 +82,7 @@ export default {
if (that.textContent) {
setTimeout(() => {
this.$router.push({
path:"/sign",
path:"/enterpriseScanPreview",
query:{
enterpriseNumber: that.textContent
}

49
src/views/enforceHome.vue

@ -8,6 +8,7 @@
<!-- 中间 -->
<div class="warp_body">
<div class="logobox"></div>
<div class="streamer" @click=""><i></i><span class="marquee"><span class="scroll-text">2024年度宝安区新安街道年度行政执法检查计划</span></span></div>
<div class="noticbox" @click="toNoticeView"><i></i><span class="new"></span>通知</div>
<!-- <refresh-list v-model:freshMap="freshMap" @refresh="onRefresh" @onLoad="onLoad"> -->
<div class="carousel_box" @onLoad="onLoad">
@ -217,26 +218,40 @@ onMounted(() => {
}
}
.noticbox {
.streamer, .noticbox {
display: flex;
position: absolute;
top: 20%;
right: 0;
top: calc(1% + 10vh);
right: 3%;
z-index: 999;
padding: 0 0.25rem;
min-width: 1rem;
width: 90%;
min-height: 1rem;
background-color: rgba(249, 238, 219, .7);
border-radius: 0.5rem 0 0 0.5rem;
background-color: rgba(249, 238, 219, .9);
border-radius: 0.5rem;
color: #ab6a05;
font-size: 0.45rem;
line-height: 1.0rem;
white-space: nowrap;
box-sizing: content-box;
}
.noticbox {
top: 42%;
right: 0;
padding: 0 0.2rem;
width: 1.85rem;
min-height: 1rem;
background-color: rgba(249, 238, 219, .7);
border-radius: 0.5rem 0 0 0.5rem;
color: #000;
}
.noticbox > i {
.streamer > i, .noticbox > i {
display: inline-block;
position: relative;
top: 0.12rem;
top: 0.18rem;
margin: 0 0.3rem 0 0;
width: 0.6rem;
height: 0.6rem;
@ -244,6 +259,24 @@ onMounted(() => {
background-size: auto 100%;
}
.streamer .marquee {
display: inline-block;
width: calc(100% - 1rem); /* 或者你想要的宽度 */
overflow: hidden;
white-space: nowrap;
}
.scroll-text {
display: inline-block;
padding-left: 100%; /* 初始时隐藏在右侧 */
animation: marquee 5s linear infinite; /* 设置动画 */
}
@keyframes marquee {
0% { transform: translateX(0); } /* 动画开始时 */
100% { transform: translateX(-100%); } /* 动画结束时,文字完全移动到左侧并重新开始 */
}
.noticbox span.new {
display: block;
position: absolute;

34
src/views/enterprise/caseFilter.vue

@ -29,10 +29,27 @@
placeholder="请选择"
clickable
is-link
@click=""
/>
<van-field
label="执法事项"
placeholder="请选择事项"
clickable
is-link
readonly
v-model="searchParam.lawEnforcementItemText"
@click="showPicker = true"
/>
</van-cell-group>
<van-popup v-model:show="showPicker" round position="bottom">
<van-picker
:columns="columns"
@cancel="showPicker = false"
@confirm="onConfirm"
/>
</van-popup>
<div class="subtitle">自定义时段</div>
<van-cell-group>
<van-field
@ -121,9 +138,16 @@ export default {
isComplaint: null,
//
enterpriseNumber: ref(useCommon.enterpriseNumber),
lawEnforcementItem: ref(""),
lawEnforcementItemText: ref(""),
beginTime: ref(),
endTime: ref()
endTime: ref(),
},
showPicker: false,
columns: [{ text: '对施工单位进场施工情况的检查', value: 'Hangzhou' },
{ text: '对生产经营场所和员工宿舍出口、疏散通道情况的检查', value: 'Ningbo' },
{ text: '对用人单位依法应当与劳动者订立无固定期限劳动合同情况的检查', value: 'Wenzhou' }],
date:{
beginTime:ref(),
endTime:ref(),
@ -185,6 +209,12 @@ export default {
},
selectEndDate (){
this.date.showEndDatePicker = true;
},
onConfirm(selectedOptions){
this.showPicker = false;
console.log(selectedOptions.selectedOptions[0].value);
this.searchParam.lawEnforcementItem = selectedOptions.selectedOptions[0].value;
this.searchParam.lawEnforcementItemText = selectedOptions.selectedOptions[0].text;
}
}

394
src/views/enterprise/qrCodeHistory.vue

@ -0,0 +1,394 @@
<template>
<div class="shop app_content">
<!-- 导航栏 -->
<div class="header_body">
<header-nav :leftArrow="false" titelText="二维码管理"></header-nav>
</div>
<van-search
v-model="searchParam.searchValue"
show-action
placeholder="请输入关键字查询"
@search="onSearch"
>
<template #action>
<div @click="onClickButton">搜索</div>
</template>
</van-search>
<!-- 顶部弹出 -->
<van-popup v-model:show="data.showTop" position="top" :style="{ height: '30%' }" >
<van-cell-group>
<van-field
v-model="searchParam.beginTime"
label="时间范围"
@click=""
readonly
/>
</van-cell-group>
</van-popup>
<!-- <div class="search-button-list">
<van-button plain hairline class="search-button" @click="searchDateType()" round type="primary" size="mini">全部</van-button>
<van-button plain hairline class="search-button" @click="searchDateType(1)" round type="primary" size="mini">本月</van-button>
<van-button plain hairline class="search-button" @click="searchDateType(2)" round type="primary" size="mini">本季度</van-button>
<van-button plain hairline class="search-button" @click="searchDateType(3)" round type="primary" size="mini">本年度</van-button>
<van-button plain hairline class="search-button" @click="searchFilter" round type="primary" size="mini">筛选</van-button>
</div> -->
<div class="search-button-date">
<span class="date-select" @click="selectDate">{{ data.dateSearch }}</span>
<div style="border-color: black;" class="van-hairline--bottom"></div>
<!-- <van-button class="search-button" type="primary" size="mini">统计分析</van-button> -->
<van-popup v-model:show="data.showDatePicker" position="bottom">
<van-date-picker
title="选择日期"
v-model="data.currentDate"
:min-date="data.minDate"
:max-date="data.maxDate"
:columns-type="data.columnsType"
@confirm="onDateConfirm"
@cancel="cancelSelectDate"
/>
</van-popup>
</div>
<!-- 中间 -->
<div class="shop-center">
<lodding-card :isLodding="isLodding">
<refresh-list v-model:freshMap="freshMap" @refresh="onRefresh" @onLoad="onLoad"
:resetScroll="resetScroll" class="refresh_box">
<div class="refresh_content" v-if="data?.dataList.length">
<div class="goods_box" v-for="(item, index) in data?.dataList" :key="index">
<van-swipe-cell class="swipe_cell">
<div class="card_box">
<div class="card_box_span">
<p>生成时间{{ item.generateTime }} <span class="card_box_action">
<!-- <van-button @click="toComplaintView(item.id,item.lawEnforcementIncident)" type="primary" size="mini">投诉</van-button> -->
</span></p>
</div>
<!-- <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa',padding: '0 5px' }" /> -->
<div style="border-color: aqua; border: 2px;" class="van-hairline--bottom"></div>
<!-- <div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.checkItem }}</p>
</div> -->
<div class="card_box_span">
<p><span class="card_box_label">变更原因</span> {{ item.reasonsChange }}</p>
</div>
</div>
</van-swipe-cell>
</div>
</div>
<van-empty v-else class="no_data" description="暂无数据" />
</refresh-list>
</lodding-card>
</div>
<!-- 底部 -->
<div class="shop_footer_body">
<footer-nav></footer-nav>
</div>
</div>
</template>
<script setup name="registrationList">
import { showToast } from "vant";
import {queryHistoryQrCodeList} from '../../api/enterprise';
import { setGoodsNum } from "@/util/util";
const { useCommon, useShopCard } = $globalStore;
const router = useRouter();
let allchecked = ref(false); //
let refreshLoad = ref(false); //
let value = ref('')
let totalPrice = ref(0); //
let searchParam = reactive({
//
lawEnforcementIncident:"",
//
lawEnforcement:"",
//
searchText: ref(''),
//
dateType: null,
//
isComplaint: null,
//
enterpriseNumber: ref(useCommon.enterpriseNumber),
//
searchDate:null,
beginTime:"",
endTime:""
});
const data = reactive({
cartList: [],
dataList: [],
dateSearch: ref(),
showDatePicker:false,
currentDate:ref(['2024', '01']),
minDate: new Date(2020, 0, 1),
maxDate: new Date(2125, 5, 1),
columnsType :['year', 'month'],
showTop:false,
});
//
onMounted(() => {
console.log(useCommon.enterpriseNumber);
// getCard();
searchParam.enterpriseNumber = useCommon.enterpriseNumber;
console.log(useCommon.enterpriseNumber)
queryList();
data.dateSearch = nowDate(new Date());
});
const queryList = () =>{
queryHistoryQrCodeList(searchParam,success =>{
console.log(success)
data.dataList = success.data;
},error =>{
})
}
const onSearch = (val) => {
queryRegistrationList(
{
"searchValue": searchParam.searchValue
}
,success =>{
console.log(success)
data.dataList = success.data;
},error =>{
})
};
const onClickButton = () =>{
console.log(searchParam.searchValue)
queryList();
}
const toDetailView = (id) =>{
console.log(id)
router.push(
{
path: "/enterprise/enterpriseInspectionDetail",
query: {
id: id,
}
});
}
onActivated(() => {
});
onDeactivated(() => {
});
//
const goBack = () => {
router.go(-1);
};
let resetScroll = ref(0); //
let isLodding = ref(true); //
let freshMap = reactive({
refreshLoad: false, //
listLoading: false, //
listFinished: false, //
});
//
const onRefresh = () => {
freshMap.listFinished = false;
freshMap.listLoading = true;
getGoodslist();
};
//
const onLoad = () => {
freshMap.listFinished = true;
getGoodslist(true);
};
//
const getGoodslist = async (onLoad) => {
// const res = await useClassify.classifyGoods();
// if (res?.code === 20000) {
// goodsList = onLoad ? goodsList.concat(res?.data) : res?.data;
// freshMap.refreshLoad = false;
// freshMap.listLoading = false;
// freshMap.listFinished = res?.listFinished;
// if (goodsList.length > 50) {
// freshMap.listFinished = true;
// }
// }
freshMap.refreshLoad = false;
freshMap.listLoading = false;
freshMap.listFinished = true;
isLodding.value = false;
};
onMounted(async () => {
// let res = await getClassify();
// if (res && res?.length) {
// classifyId = res?.[0]?.id;
// classifyId && getGoodslist();
// } else {
// isLodding.value = false;
// }
queryList();
isLodding.value = false;
});
const selectDate = () =>{
data.showDatePicker = true;
console.log(data.showDatePicker)
}
const onDateConfirm = (value)=> {
console.log(value);
value.selectedValues.forEach((item,index) => {
console.log(item);
});
data.dateSearch = value.selectedValues[0] + "/" + value.selectedValues[1];
searchParam.searchDate = value.selectedValues[0] + "-" + value.selectedValues[1];
data.showDatePicker = false;
//
queryList();
}
const nowDate = (time) => {
var year = time.getFullYear(); //
var month = (time.getMonth() + 1).toString().padStart(2, '0'); //
var date = time.getDate().toString().padStart(2, '0'); //
var hour = time.getHours().toString().padStart(2, '0'); //
var minute = time.getMinutes().toString().padStart(2, '0'); //
var second = time.getSeconds().toString().padStart(2, '0'); //
return (
year + "/" + month
)
}
const searchDateType = (val) =>{
searchParam.dateType = val;
searchParam.isComplaint = null;
queryList();
}
const searchFilter = () =>{
data.showTop = true;
queryList();
}
const searchComplaint = (val) =>{
searchParam.isComplaint = val;
searchParam.dateType = null;
queryList();
}
const cancelSelectDate = () =>{
data.showDatePicker = false;
}
</script>
<style lang="less" scoped>
.shop {
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
background-color: #f4f4f4;
.header_body {
height: 50px;
}
.shop-center {
flex: 1;
overflow-y: scroll;
position: relative;
.goods_box {
display: flex;
background-color: #fff;
margin: 6px;
border-radius: 10px;
.swipe_cell {
width: 100%;
}
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
flex-direction: column;
.card_body {
background-color: #fff;
border-radius: 10px;
flex: 1;
}
.card_box_span{
font-size: 13px;
padding-left: 5%;
height: 35px;
align-items: center;
display: flex;
align-items: center;
}
.card_box_action{
position: absolute;
right: 4%;
}
}
}
}
.shop_footer_body {
height: 101px;
position: relative;
.footer-one-btn {
height: 50px;
bottom: 51px;
}
}
}
.search-button-list{
height: 3%;
display: flex;
flex-direction: row;
padding-left: 10px;
margin-top: 6px;
align-items: end;
.search-button{
width: 15%;
height: 80%;
}
}
.search-button-date{
height: 3%;
display: flex;
flex-direction: row;
padding-left: 10px;
margin-top: 6px;
align-items: end;
position: relative;
.date-select{
font-size: 20px;
margin-left: 2%;
}
.search-button{
width: 15%;
height: 80%;
position: absolute;
top: 1%;
right: 1%;
}
}
</style>

60
src/views/enterprise/register.vue

@ -13,11 +13,15 @@
<div class="warp_body">
<van-cell-group>
<van-field
v-model="submitData.enterpriseName"
required
label="名称"
placeholder="必填 企业名称"
/>
v-model="submitData.enterpriseName"
label="企业名称"
required
placeholder="必填 企业名称"
:rules="[{ required: true, message: '必填项' }]"
readonly
@click="showPopup"
/>
<Popup :visible="popupVisible" :content="popupContent" @close="closePopup" @reciveData="reciveData" />
<van-field
v-model="submitData.enterpriseNumber"
required
@ -98,6 +102,9 @@
v-model="submitData.businessScope"
label="经营范围"
placeholder="选填 经营范围"
rows="1"
autosize
type="textarea"
/>
</van-cell-group>
<van-action-bar>
@ -241,7 +248,50 @@ onMounted(() => {
})
});
//
const reciveData = (item) =>{
console.log(item);
console.log(item.establishmentTime);
submitData.enterpriseName = item.enterpriseName;
submitData.enterpriseNumber = item.enterpriseNumber;
submitData.legalPerson = item.legalPerson;
submitData.enterpriseType = item.enterpriseType;
submitData.enterpriseAddress = item.enterpriseAddress;
submitData.registeredCapital = item.registeredCapital;
submitData.establishmentTime = item.establishmentTime;
submitData.businessScope = item.businessScope;
submitData.operatingTerm = item.operatingTerm;
data.columns.forEach(res =>{
console.log(res);
if(res.value == item.enterpriseType){
submitData.enterpriseTypeText = res.text;
}
})
}
</script>
<script>
//
import Popup from '../enterprise/companyFilter.vue';
export default {
components: {
Popup
},
data() {
return {
popupVisible: false,
popupContent: ''
}
},
methods: {
showPopup() {
this.popupVisible = true;
},
closePopup() {
this.popupVisible = false;
}
}
}
</script>
<style lang="less" scoped>
.address_edit {

2
src/views/enterprise/registrationSelectList.vue

@ -47,7 +47,7 @@
<!-- 中间 -->
<div class="shop-center">
<lodding-card :isLodding="isLodding">
<refresh-list v-model:freshMap="freshMap" :classMap="classMap" @refresh="onRefresh" @onLoad="onLoad"
<refresh-list v-model:freshMap="freshMap" @refresh="onRefresh" @onLoad="onLoad"
:resetScroll="resetScroll" class="refresh_box">
<div class="refresh_content" v-if="data?.dataList.length">
<div class="goods_box" v-for="(item, index) in data?.dataList" :key="index">

Loading…
Cancel
Save