Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/enforce/enterpriseBaseInfo.vue
master
chenrui 2 years ago
parent
commit
da1674d053
  1. 28
      package-lock.json
  2. 3
      package.json
  3. 1
      src/api/Home.js
  4. 7
      src/config/env.js
  5. 9
      src/router/enforceHome.js
  6. 6
      src/router/home.js
  7. 66
      src/views/administrative/appointmentList.vue
  8. 22
      src/views/common/analyse.vue
  9. 22
      src/views/enforce/earlyWarning.vue
  10. 16
      src/views/enforce/enforceNotice.vue
  11. 20
      src/views/enforce/enforcementPlan.vue
  12. 18
      src/views/enforce/enterpriseBaseInfo.vue
  13. 1
      src/views/enforce/enterpriseScanPreview.vue
  14. 22
      src/views/enforce/enterpriseWarningInfo.vue
  15. 55
      src/views/enforce/historyCheck.vue
  16. 251
      src/views/enforce/scanPage_szy.vue
  17. 65
      src/views/enforce/scanQrCode.vue
  18. 10
      src/views/enforce/sign.vue
  19. 7
      src/views/enforceHome.vue
  20. 484
      src/views/enterprise/complaintList.vue
  21. 26
      src/views/enterprise/enterpriseInspectionList.vue
  22. 20
      src/views/enterprise/qrCodeHistory.vue
  23. 6
      src/views/enterprise/registrationDetail.vue
  24. 50
      src/views/enterprise/registrationList.vue
  25. 34
      src/views/enterprise/registrationSelectList.vue

28
package-lock.json

@ -12,6 +12,7 @@
"axios": "^1.6.7",
"core-js": "^3.36.0",
"crypto-js": "^4.2.0",
"date-fns": "^3.6.0",
"echarts": "^5.5.0",
"html2canvas": "^1.4.1",
"jsonp": "^0.2.1",
@ -31,7 +32,8 @@
"vue-pdf": "^4.3.0",
"vue-pdf-embed": "^2.0.3",
"vue-qrcode-reader": "^5.5.3",
"vue-router": "^4.3.0"
"vue-router": "^4.3.0",
"weixin-js-sdk": "^1.6.5"
},
"devDependencies": {
"@vitejs/plugin-basic-ssl": "^1.1.0",
@ -4925,6 +4927,15 @@
"integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==",
"peer": true
},
"node_modules/date-fns": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -11923,6 +11934,11 @@
"npm": ">=3.10.0"
}
},
"node_modules/weixin-js-sdk": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
"integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@ -15572,6 +15588,11 @@
"integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==",
"peer": true
},
"date-fns": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -20906,6 +20927,11 @@
"sdp": "^3.2.0"
}
},
"weixin-js-sdk": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
"integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",

3
package.json

@ -39,7 +39,8 @@
"vue-pdf": "^4.3.0",
"vue-pdf-embed": "^2.0.3",
"vue-qrcode-reader": "^5.5.3",
"vue-router": "^4.3.0"
"vue-router": "^4.3.0",
"weixin-js-sdk": "^1.6.5"
},
"devDependencies": {
"@vitejs/plugin-basic-ssl": "^1.1.0",

1
src/api/Home.js

@ -16,5 +16,6 @@ export const getSiqLoginAuthTest = (params, success, error) => _post("/app/third
// 深圳易平台登录
export const getSzyptLoginAuth = (code, success, error) => _get("/app/thirdLogin/szyptLogin/"+code,null,success,error);
export const szyptGetToken = (params, success, error) => _get("/app/thirdLogin/szyptGetToken",params,success,error);

7
src/config/env.js

@ -1,10 +1,7 @@
//本地环境
// let baseUrl="http://192.168.110.36:85";
// let baseUrl="http://localhost:85";
let baseUrl="https://139.186.135.156:86";
// let baseUrl="http://139.186.135.156:86";
// let baseUrl="http://10.132.108.3:85";
// let baseUrl="http://192.168.1.101:85";
let baseUrl="http://10.132.108.3:85";
// let baseUrl="http://192.168.1.105:85";
// let wsUrl='ws://10.76.108.1:9326';
export {
baseUrl,

9
src/router/enforceHome.js

@ -38,6 +38,15 @@ const routes = [
isKeepAlive: false,
},
},
//执法端扫码页面-深圳易
{
path: "/enforce/scanPage_szy",
name: "scanPage",
component: () => import("@/views/enforce/scanPage_szy.vue"),
meta: {
isKeepAlive: false,
},
},
//执法端扫码页面
// {
// path: "/enforce/scanPageTest",

6
src/router/home.js

@ -57,6 +57,12 @@ const routes = [
name: "complaint",
component: () => import("@/views/enterprise/complaint.vue"),
},
//在线投诉列表
{
path: "/enterprise/complaintList",
name: "complaintList",
component: () => import("@/views/enterprise/complaintList.vue"),
},
// 执法列表
{
path: "/enterprise/enterpriseInspectionList",

66
src/views/administrative/appointmentList.vue

@ -56,9 +56,9 @@
</div>
<div @click="toDetailView(item.id)">
<!-- <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa',padding: '0 5px' }" />-->
<div style="background-color: aqua; border: 2px; height: .1px;" class="van-hairline--bottom"></div>
<div class="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.checkItem }}</p>
<p>{{ item.checkItem }}</p>
</div>
<!-- <div class="card_box_span">
<p><span class="card_box_label">登记编号:</span> {{ item.lawEnforcementCode }}</p>
@ -357,9 +357,6 @@ const formattedTime = (dateTime) =>{
</script>
<style lang="less" scoped>
.card_box_label {
color: rgba(128, 128, 128, 0.5);
}
.shop {
height: 100%;
display: flex;
@ -389,21 +386,25 @@ const formattedTime = (dateTime) =>{
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;
right: 4%;
@ -454,23 +455,30 @@ const formattedTime = (dateTime) =>{
right: 1%;
}
}
/deep/ .van-hairline--bottom {
margin: 0 0 2% 0;
height: 0;
background-color: transparent;
border: 1px;
}
margin: -1% 0 3% 0;
height: 0;
background-color: transparent;
border: 1px;
}
/deep/ .card_box_span:first-child {
color: #c1bfbf;
}
/deep/ .card_box_span:nth-child(2) p {
font-size: 0.4rem;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.card_box_label {
color: rgba(128, 128, 128, 0.65);
}
/deep/ .card_box_span:first-child {
color: #c1bfbf;
}
/deep/ .card_box_span:nth-child(2) p {
font-size: 0.4rem;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>

22
src/views/common/analyse.vue

@ -108,6 +108,24 @@ const echartInit = (data,targetId) =>{
fontWeight: 'bold'
}
},
label: {
normal: {
show: true,
position: 'outside', // 标签显示在外部
formatter: '{b}\n{c} ({d}%)', // 标签格式化,b是数据名,c是数值,d是百分比
textStyle: {
fontSize: 14,
rich: {
a: {
width: 100,
overflow: 'truncate', // 文字超出宽度时截断
textOverflow: 'ellipsis', // 文字超出宽度时显示省略号
},
},
},
},
},
// ... 其他配置项
data: data,
color: ['#0038bb','#0047eb','#1c60ff','#3f78ff','#6592ff','#8aadff'],
}
@ -123,7 +141,7 @@ const initSchedule = (dataAll,targetId) =>{
let myColor = ['#3C83FF']
var option = {
tooltip: {
trigger: 'item'
trigger: 'item',
},
grid: { // 直角坐标系内绘图网格
top: '-5%',
@ -194,7 +212,7 @@ const initSchedule = (dataAll,targetId) =>{
rich: {
a: {
fontSize: 14,
width: 100
//width: 100
},
b: {
fontSize: 14,

22
src/views/enforce/earlyWarning.vue

@ -287,21 +287,25 @@
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;
right: 4%;

16
src/views/enforce/enforceNotice.vue

@ -270,20 +270,24 @@ const toPdfView = (url) =>{
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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;
.card_box_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;

20
src/views/enforce/enforcementPlan.vue

@ -57,9 +57,9 @@
<p>发布时间:{{ item.createTime }} <span class="card_box_action"></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="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.planName }}</p>
<p>{{ item.planName }}</p>
</div>
<div class="card_box_span">
@ -319,20 +319,24 @@ const openPlanAddView = () =>{
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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;
.card_box_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;

18
src/views/enforce/enterpriseBaseInfo.vue

@ -87,10 +87,10 @@
<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">
<div class="card_box" @click="toDetailView(item.id)">
<!-- <div style="background-color: aqua; border: 2px; height: .1px;" class="van-hairline&#45;&#45;bottom"></div>-->
<!-- <div class="card_box_span">
<div class="card_box_span">
<p class="zf-name">{{ item.lawEnforcementItem }}</p>
</div> -->
<div class="card_box_span">
@ -134,9 +134,9 @@
<!-- <div class="card_box" @click="toDetailView(item.id)"> -->
<div class="card_box">
<!-- <div style="background-color: aqua; border: 2px; height: .1px;" class="van-hairline&#45;&#45;bottom"></div>-->
<!-- <div class="van-hairline&#45;&#45;bottom"></div>-->
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.lawEnforcementItem }}</p>
<p>{{ item.lawEnforcementItem }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">强制种类:</span> {{ item.lawEnforcement }}</p>
@ -266,27 +266,27 @@ onMounted(() =>{
// queryRegistrationList(data.searchParam,success =>{
// data.checkDataList = success.data;
// },error =>{
// })
//查询企业历史检查案件
queryXzjcjbxxList(data.enterpriseInfo.enterpriseNumber,success =>{
console.log("历史检查案件---",success.data)
data.checkDataList = success.data;
},error =>{
});
//查询历史强制案件
queryQZAJList(data.enterpriseInfo.enterpriseNumber,success =>{
console.log("历史强制案件---",success.data)
},error =>{
})
//查询历史强制案件
queryCFAJList(data.enterpriseInfo.enterpriseNumber,success =>{
console.log("历史处罚案件---",success.data)
},error =>{
})
}

1
src/views/enforce/enterpriseScanPreview.vue

@ -135,7 +135,6 @@ const onLoad = () => {
};
onMounted(() => {
getEnterpriseInformation(data.enterpriseNumber,success =>{
if (null != success.data) {
data.searchParam.enterpriseNumber = success.data.enterpriseNumber;

22
src/views/enforce/enterpriseWarningInfo.vue

@ -276,21 +276,25 @@
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;
right: 4%;

55
src/views/enforce/historyCheck.vue

@ -3,8 +3,8 @@
<div class="shop app_content">
<!-- 导航栏 -->
<div class="header_body">
<!-- <header-nav :slefBack="true" @goBack="goBack" :titelText="`行政检查信息查询`"/> -->
<header-nav :slefBack="true" @goBack="goBack" :titelText="`历史检查信息`"/>
<header-nav :slefBack="true" @goBack="goBack" :titelText="`行政检查信息查询`"/>
<!-- <header-nav :slefBack="true" @goBack="goBack" :titelText="`历史检查信息`"/> -->
</div>
<van-search v-model="searchParam.searchValue" show-action placeholder="执法事项/部门/人员/企业" @search="onSearch">
<template #action>
@ -49,7 +49,9 @@
<p>执法时间:{{ item.enforcementTime }}
<span class="card_box_action" v-if="item.isSubmit == 0">
<van-button @click="toEditView(item.id)" type="primary" size="mini">编辑</van-button>
</span>
<span class="remsty">未扫码</span>
</p>
</div>
<!-- <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa',padding: '0 5px' }" />-->
@ -65,7 +67,7 @@
<p><span class="card_box_label">执法人员:</span> {{ item.lawEnforcer }} , {{ item.lawEnforcerTwo }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">企业:</span> {{ item.enterpriseName }}</p>
<p><span class="card_box_label">企业名称:</span> {{ item.enterpriseName }}</p>
</div>
</div>
</div>
@ -321,9 +323,7 @@ const setLinkageItem = (id,item) => {
</script>
<style lang="less" scoped>
.card_box_label {
color: rgba(128, 128, 128, 0.5);
}
.shop {
height: 100%;
display: flex;
@ -353,21 +353,26 @@ const setLinkageItem = (id,item) => {
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
padding: 0.1rem 0 0.2rem;
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_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;
right: 4%;
@ -418,8 +423,9 @@ const setLinkageItem = (id,item) => {
right: 1%;
}
}
/deep/ .van-hairline--bottom {
margin: 0 0 2% 0;
/deep/ .van-hairline--bottom {
margin: -1% 0 3% 0;
height: 0;
background-color: transparent;
border: 1px;
@ -437,5 +443,20 @@ const setLinkageItem = (id,item) => {
text-overflow: ellipsis;
}
.card_box_label {
color: rgba(128, 128, 128, 0.65);
}
.remsty {
position: absolute;
top: 0;
right: 0;
margin: 0.25rem 0.25rem 0;
padding-left: 0.5rem;
background: url(/src/assets/images/icon_remind.png) no-repeat left center;
background-size: auto 80%;
font-size: 0.35rem;
}
</style>

251
src/views/enforce/scanPage_szy.vue

@ -0,0 +1,251 @@
<template>
<div class="page bgc-f4f4f4">
<label class="backlab" @click="back()"></label>
<div class="video-show" />
<video id="video" ref="video" class="video vjs-fluid" autoplay />
<span class="change" @click="change">
<i class="el-icon-refresh" />
</span>
</div>
</template>
<!-- import Vconsolefrom from 'vconsole'; -->
<!-- new Vconsolefrom(); -->
<script>
// 看到这个没,这个是一个小插件,能在手机上打开控制台,你打印的控制台信息和报错都能在这显示,具体方法自己百度
import Vconsole from "vconsole";
import { BrowserMultiFormatReader } from "@zxing/library";
import {szyptGetToken} from '../../api/Home';
import wx from 'weixin-js-sdk';
export default {
name: "QrCodeSearch",
components: {},
data() {
return {
loadingShow: false,
// 这个就是从@zxing/library导出来的方法,new一个实例
codeReader: new BrowserMultiFormatReader(),
// 这个,用来储存扫码得到的结果
textContent: null,
// 这个,就是当前调用的摄像头的索引,为什么是6,我会在后面说的
num: 6,
// 这个就是扫描到的摄像头的数量
videoLength: ""
};
},
created() {
// 让我们调用这个方法尝试打开摄像头
this.openScan();
// new Vconsole();
},
methods: {
// 开打开打
openScan() {
let that = this;
let fullUrl = window.location.href;
let code = fullUrl.substring(fullUrl.indexOf('code=')+5, fullUrl.indexOf('&state='));
let paramUrl = window.location.href.split("#")[0];
let param = { code: code, url: paramUrl };
szyptGetToken(param,success =>{
let resMsg = success.data;
console.log(resMsg);
wx.config({
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
debug: false,
// 必填,公众号的唯一标识
appId: resMsg.corpid,
// 必填,生成签名的时间戳
timestamp: resMsg.timestamp,
// 必填,生成签名的随机串
nonceStr: resMsg.nonceStr,
// 必填,签名,见附录1
signature: resMsg.signature,
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
jsApiList: ["scanQRCode"],
});
wx.ready(() => {
//微信扫一扫请求操作
this.ClickScan()
});
wx.error((res) => {
console.log("获取失败");
});
},error =>{});
},
ClickScan() {
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
success: (res) => {
// 页面跳转
console.log("=========== 扫码返回 ===========")
console.log(res)
this.$router.push({
path:"/enterpriseScanPreview",
query:{
enterpriseNumber: res.resultStr
}
})
},
cancel: (res) => {
console.log('err', res);
},
});
},
//这就是在openScan里调的另一个方法,传入想调用的摄像头id和摄像头数量
decodeFromInputVideoFunc(firstDeviceId, length) {
const that = this;
that.codeReader.reset(); // 重置
that.textContent = null; // 重置
// 看不懂不重要,打印出来自己琢磨琢磨
that.codeReader.decodeFromInputVideoDeviceContinuously(
firstDeviceId,
"video",
(result, err) => {
that.textContent = null;
// 扫描成功 这个result就是扫描结果,长啥样自己打印出来看看
if (result) {
that.textContent = result;
// 这里写你要对扫描结果做什么,我这里扫描出来的是个网址,写的页面跳转
if (that.textContent) {
setTimeout(() => {
this.$router.push({
path:"/enterpriseScanPreview",
query:{
enterpriseNumber: that.textContent
}
})
// 记得重置,不然在微信里用会有问题
that.textContent = null;
that.codeReader && that.codeReader.reset();
}, 100);
}
}
// 扫描失败,我这里是直接找下一个摄像头,其实可以不写
if (err && !err) {
this.num++;
setTimeout(() => {
that.tipShow = false;
}, 2000);
if (this.num <= length) {
that.openScan();
}
console.error(err);
}
}
);
},
// 点击切换前后摄像头
change() {
const that = this;
if (this.videoLength > 2) {
if (this.num < 2) {
this.num = 6;
} else {
this.num = 1;
}
that.textContent = null;
that.codeReader && that.codeReader.reset();
that.openScan();
} else {
if (that.num === 0) {
that.num = 1;
} else {
that.num = 0;
}
that.textContent = null;
that.codeReader && that.codeReader.reset();
that.openScan();
}
},
back(){
this.$router.go(-1);
},
}
};
</script>
<style scoped>
.backlab {
position: absolute;
z-index: 999999;
top: 0.5rem;
left: 0.35rem;
padding-left: 0;
width: 0.6rem;
height: 0.6rem;
background: url(../../assets/images/icon_arbw.png) no-repeat left 40% center;
background-size: auto 50%;
background-color: rgba(255, 255, 255, .2);
border: 1px solid rgba(255, 255, 255, .7);
border-radius: 50%;
}
.video {
width: 100vw;
height: 100vh;
z-index: 1;
}
.video-show {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 70vw;
height: 70vw;
z-index: 2;
background: linear-gradient(to left, #fff, #fff) left top no-repeat,
linear-gradient(to bottom, #fff, #fff) left top no-repeat,
linear-gradient(to left, #fff, #fff) right top no-repeat,
linear-gradient(to bottom, #fff, #fff) right top no-repeat,
linear-gradient(to left, #fff, #fff) left bottom no-repeat,
linear-gradient(to bottom, #fff, #fff) left bottom no-repeat,
linear-gradient(to left, #fff, #fff) right bottom no-repeat,
linear-gradient(to left, #fff, #fff) right bottom no-repeat;
background-size: 2px 20px, 20px 2px, 2px 20px, 20px 2px;
}
.tip {
width: 10vw;
height: 10vw;
background-color: rgb(45, 236, 45);
border: 1px solid #ffffff;
border-radius: 50%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 10;
}
.bgc-f4f4f4 {
background-color: #363636;
}
.page {
position: relative;
overflow-y: auto;
position: relative;
height: 100vh;
}
.change {
z-index: 100;
position: fixed;
bottom: 40px;
left: 50%;
transform: translateX(-50%);
color: #fff;
text-align: center;
background-color: #fff;
width: 50px;
height: 50px;
border-radius: 50%;
line-height: 60px;
/* align-content: center; */
}
.el-icon-refresh {
color: #000;
font-size: 25px;
}
</style>

65
src/views/enforce/scanQrCode.vue

@ -52,7 +52,10 @@
</template>
<script setup name="Home">
import Vconsole from "vconsole";
import {getEnterpriseMerchantAuthorization} from '@/api/Home';
import {szyptGetToken} from "../../api/Home";
import wx from "weixin-js-sdk";
const { useCommon } = $globalStore;
const router = useRouter();
let carouselList = reactive([]); // 轮播列表
@ -86,11 +89,64 @@ const boutiqueGoods = async () => {
// }
};
const openScan = () => {
let fullUrl = window.location.href;
let code = fullUrl.substring(fullUrl.indexOf('code=')+5, fullUrl.indexOf('&state='));
let paramUrl = window.location.href.split("#")[0];
let param = { code: code, url: paramUrl };
szyptGetToken(param,success =>{
let resMsg = success.data;
console.log(resMsg);
wx.config({
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
debug: false,
// 必填,公众号的唯一标识
appId: resMsg.corpid,
// 必填,生成签名的时间戳
timestamp: resMsg.timestamp,
// 必填,生成签名的随机串
nonceStr: resMsg.nonceStr,
// 必填,签名,见附录1
signature: resMsg.signature,
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
jsApiList: ["scanQRCode"],
});
wx.ready(() => {
//微信扫一扫请求操作
ClickScan()
});
wx.error((res) => {
console.log("获取失败");
});
},error =>{});
};
const ClickScan = () => {
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
success: (res) => {
// 页面跳转
console.log("=========== 扫码返回 ===========")
console.log(res)
router.push({
path: "/enterpriseScanPreview",
query: {
enterpriseNumber: res.resultStr
}
});
},
cancel: (res) => {
console.log('err', res);
},
});
};
const toScanPageView = async() =>{
router.push({
path: "/enforce/scanPage",
query: {}
});
openScan();
// router.push({
// path: "/enforce/scanPage_szy",
// query: {}
// });
};
const toNoScanView = async() =>{
@ -127,6 +183,7 @@ const onLoad = () => {
};
onMounted(() => {
// new Vconsole();
getEnterpriseMerchantAuthorization({merchantTel: useCommon.phonenumber},success =>{
if(!(success.data == null && success.data.length == 0)){
useCommon.SET_USER_ENTERPRISE_NUMBER(success.data[0].enterpriseNumber);

10
src/views/enforce/sign.vue

@ -45,11 +45,17 @@
:rules="[{ required: true, message: '请选择辅助人员' }]"
/>
<van-field
v-model="submitData.enforcementTime"
label="检查时间"
v-model="submitData.enforce"
label="未扫码原因"
readonly
placeholder="请选择"
/>
<van-field
v-model="submitData.enforcementTime"
label="检查时间"
readonly
placeholder="请选择"
/>
<van-field
v-model="data.lawEnforcementItemText"
required

7
src/views/enforceHome.vue

@ -126,8 +126,11 @@ const onLoad = () => {
};
onMounted(() => {
console.log("code: "+route?.query?.code);
getSzyptLoginAuth(route?.query?.code,success =>{
let fullUrl = window.location.href;
let code = fullUrl.substring(fullUrl.indexOf('code=')+5, fullUrl.indexOf('&state='));
// getSzyptLoginAuth(route?.query?.code,success =>{
getSzyptLoginAuth(code,success =>{
console.log(success.data)
},error =>{

484
src/views/enterprise/complaintList.vue

@ -0,0 +1,484 @@
<template>
<div class="shop app_content">
<!-- 导航栏 -->
<div class="header_body">
<header-nav
:slefBack="true"
@goBack="goBack"
:titelText="`投诉信息查询`"
>
</header-nav>
</div>
<van-search
v-model="searchParam.searchValue"
show-action
placeholder="请输入关键字查询"
@search="onSearch"
>
<template #action>
<div @click="onClickButton">搜索</div>
</template>
</van-search>
<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(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="searchDateType(1)" 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 item-todo">
<div class="card_box">
<div class="card_box_span">
<p>投诉时间:{{ item.createTime }} <span class="card_box_action">
</span></p>
<span class="state-text">未处理</span>
</div>
<div @click="toDetailView(item.id)">
<div class="van-hairline--bottom"></div>
<div class="card_box_span">
<p>{{ item.lawEnforcementItemText }}</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 }},{{ item.lawEnforcerTwo }}</p>
</div>
<!-- <div class="card_box_span">
<p><span class="card_box_label">企业名称:</span> {{ item.enterpriseName }}</p>
</div>-->
</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 {queryRegistrationList} from '../../api/enterprise';
import {queryLinkage, queryLinkageById, queryLinkageDictByValueAndParentId} from "@/api/linkage";
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),
//时间搜索
dateSearch:""
});
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'],
ga_columns: [],
});
// 设置初始值为当前时间
onMounted(() => {
// getCard();
searchParam.enterpriseNumber = useCommon.enterpriseNumber;
// queryList();
data.dateSearch = nowDate(new Date());
queryLinkageDictByValueAndParentId({"value": "check_item", "parentId": "100"}, success => {
getLinkageByParentIdToItem(success.id)
},error=>{});
});
const getLinkageByParentIdToItem = (parentId) => {
// 查询检查要求字典信息
queryLinkage({"parentId": parentId}, success => {
for(var i=0; i<success.length; i++) {
data.ga_columns.push({ text: success[i].title, value: success[i].id, id: success[i].id })
}
queryList();
},error=>{});
}
const queryList = () =>{
queryRegistrationList(searchParam,success =>{
console.log(success)
data.dataList = success.data;
},error =>{
})
}
const setLinkageItem = (id,item) => {
queryLinkageById({"id": id}, success => {
item.lawEnforcementItem = success.title
},error=>{});
}
const onSearch = (val) => {
queryRegistrationList(
{
"searchValue": searchParam.searchText
}
,success =>{
console.log(success)
data.dataList = success.data;
},error =>{
})
};
const onClickButton = () =>{
console.log(searchParam.searchValue)
queryList();
}
/**
* 企业投诉页面
* @param {*} id
* @param {*} name
*/
const toComplaintView = (id,name) =>{
console.log(id,name)
router.push(
{
path: "/enterprise/complaint",
query: {
id: id,
lawEnforcementIncident: name,
isSelect: false
}
});
}
/**
* 查看执法登记详情
* @param {} id
* @param {*} name
*/
const toDetailView = (id) =>{
console.log(id)
router.push(
{
path: "/registrationDetail",
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]
data.showDatePicker = false;
//搜索数据
searchParam.dateSearch = 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;
if(val == null){
searchParam.dateSearch = null;
}
queryList();
}
const searchComplaint = (val) =>{
searchParam.isComplaint = val;
searchParam.dateType = null;
queryList();
}
</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 {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.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%;
}
}
/deep/ .van-hairline--bottom {
margin: -1% 0 3% 0;
height: 0;
background-color: transparent;
border: 1px;
}
/deep/ .card_box_span:first-child {
color: #c1bfbf;
}
/deep/ .card_box_span:nth-child(2) p {
font-size: 0.4rem;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.card_box_label {
color: rgba(128, 128, 128, 0.65);
}
.state-text {
color: #999;
position: absolute;
top: 0;
right: 0;
margin: 0.4rem 0.25rem 0;
}
.goods_box .item-todo {
background-image: linear-gradient(45deg, #fbeaea, transparent);
border-left: 3px solid #e50505;
border-radius: 10px;
.state-text {
color: #e50505;
}
}
.goods_box .item-doing {
background-image: linear-gradient(45deg, #eafbf3, transparent);
border-left: 3px solid #04a920;
border-radius: 10px;
.state-text {
color: #03a159;
}
}
.goods_box .item-done {
background-image: none;
border-left: 3px solid #999;
border-radius: 10px;
.state-text {
color: #999;
}
}
</style>

26
src/views/enterprise/enterpriseInspectionList.vue

@ -68,9 +68,9 @@
</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="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.checkItem }}</p>
<p>{{ item.checkItem }}</p>
</div>
<!-- <div class="card_box_span">
@ -350,20 +350,24 @@ const cancelSelectDate = () =>{
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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;
.card_box_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;
@ -416,7 +420,7 @@ const cancelSelectDate = () =>{
}
}
/deep/ .van-hairline--bottom {
margin: 0 0 2% 0;
margin: -1% 0 3% 0;
height: 0;
background-color: transparent;
border: 1px;
@ -433,4 +437,8 @@ const cancelSelectDate = () =>{
overflow: hidden;
text-overflow: ellipsis;
}
.card_box_label {
color: rgba(128, 128, 128, 0.65);
}
</style>

20
src/views/enterprise/qrCodeHistory.vue

@ -70,9 +70,9 @@
</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="van-hairline--bottom"></div>
<!-- <div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.checkItem }}</p>
<p>{{ item.checkItem }}</p>
</div> -->
<div class="card_box_span">
@ -328,20 +328,24 @@ const cancelSelectDate = () =>{
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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;
.card_box_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;

6
src/views/enterprise/registrationDetail.vue

@ -35,6 +35,12 @@
right-icon="add-o"
@click="showPopup2"
/>
<van-field
v-model="submitData.enforce"
label="未扫码原因"
readonly
placeholder="请选择"
/>
<van-field
v-model="submitData.lawEnforcementItem"
required

50
src/views/enterprise/registrationList.vue

@ -55,15 +55,16 @@
<div class="card_box">
<div class="card_box_span">
<p>执法时间:{{ item.createTime }} <span class="card_box_action">
<van-button @click="toComplaintView(item.id,item.lawEnforcementItem)" type="primary" size="mini">投诉</van-button>
<van-button class="trbtn" @click="toComplaintView(item.id,item.lawEnforcementItem)" 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 @click="toDetailView(item.id)">
<div class="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.lawEnforcementItemText }}</p>
<p>{{ item.lawEnforcementItemText }}</p>
</div>
<div class="card_box_span">
@ -76,7 +77,7 @@
<p><span class="card_box_label">企业名称:</span> {{ item.enterpriseName }}</p>
</div>
<div class="card_box_span">
<p><span class="card_box_label">备注:</span> {{ item.remark }}</p>
<p><span class="card_box_label">备注信息:</span> {{ item.remark }}</p>
</div>
</div>
</div>
@ -357,20 +358,24 @@ const searchComplaint = (val) =>{
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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;
.card_box_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
position: absolute;
@ -423,4 +428,29 @@ const searchComplaint = (val) =>{
}
}
.trbtn {
top: -0.25rem;
height: 0.55rem;
}
/deep/ .van-hairline--bottom {
margin: -1% 0 3% 0;
height: 0;
background-color: transparent;
border: 1px;
}
/deep/ .card_box_span:first-child {
color: #c1bfbf;
}
/deep/ .card_box_span:nth-child(2) p {
font-size: 0.4rem;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.card_box_label {
color: rgba(128, 128, 128, 0.65);
}
</style>

34
src/views/enterprise/registrationSelectList.vue

@ -59,9 +59,9 @@
<p>执法时间:{{ item.createTime }} <span class="card_box_action"></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="van-hairline--bottom"></div>
<div class="card_box_span">
<p style="font-size: 16px;font-weight: bold;">{{ item.lawEnforcementIncident }}</p>
<p>{{ item.lawEnforcementIncident }}</p>
</div>
<div class="card_box_span">
@ -325,22 +325,26 @@ const oneCheckbox = (item) => {
.card_box {
display: flex;
width: 100%;
padding: 10px,0px;
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;
.card_box_span {
display: flex;
align-items: center;
margin: 2% 0;
padding-left: 3%;
font-size: 0.38rem;
line-height: 1.5;
p {
margin: 0;
}
}
.card_box_action{
.card_box_action {
position: absolute;
right: 4%;
}
@ -358,19 +362,19 @@ const oneCheckbox = (item) => {
}
}
.search-button-list{
.search-button-list {
height: 3%;
display: flex;
flex-direction: row;
padding-left: 10px;
margin-top: 6px;
align-items: end;
.search-button{
.search-button {
width: 15%;
height: 80%;
}
}
.search-button-date{
.search-button-date {
height: 3%;
display: flex;
flex-direction: row;
@ -382,7 +386,7 @@ const oneCheckbox = (item) => {
font-size: 20px;
margin-left: 2%;
}
.search-button{
.search-button {
width: 15%;
height: 80%;
position: absolute;
@ -391,12 +395,12 @@ const oneCheckbox = (item) => {
}
}
.van-checkbox{
.van-checkbox {
margin-left: 10px;
position: absolute;
top: 45%;
}
.card_box_span{
.card_box_span {
padding-left: 10% !important;
}

Loading…
Cancel
Save