Browse Source

Merge remote-tracking branch 'origin/master'

master
chenrui 2 years ago
parent
commit
abacb8d54b
  1. 1
      src/api/user.js
  2. 3
      src/config/env.js
  3. 325
      src/views/HomeWx.vue
  4. 244
      src/views/enforce/assistUserFilter.vue
  5. 1
      src/views/enforce/earlyWarning.vue
  6. 14
      src/views/enforce/enforceNotice.vue
  7. 710
      src/views/enforce/enforcementPlanAdd.vue
  8. 1
      src/views/enforce/historyCheck.vue
  9. 7
      src/views/enforce/sign.vue
  10. 25
      src/views/enterprise/complaint.vue
  11. 21
      src/views/enterprise/complaintNoScan.vue
  12. 3
      src/views/enterprise/registrationEdit.vue
  13. 4
      src/views/login.vue

1
src/api/user.js

@ -2,3 +2,4 @@ import { _get, _post,_form,_delete } from "../http/index";
//查询用户列表
export const queryUsers = (params, success, error) => _get("/app/listApp",params,success,error)
export const queryAUsers = (params, success, error) => _get("/app/listAApp",params,success,error)

3
src/config/env.js

@ -1,6 +1,7 @@
//本地环境
// let baseUrl="http://139.186.135.156:86";
let baseUrl="http://10.132.108.3:85";
// let baseUrl="http://10.132.108.3:85";
let baseUrl="http://jdm.szssfj.cn/jdmApi";
// let baseUrl="http://127.0.0.1:85";
// let wsUrl='ws://10.76.108.1:9326';
export {

325
src/views/HomeWx.vue

@ -0,0 +1,325 @@
<template>
<div class="home app_content">
<!-- 导航栏 -->
<!-- <div class="header_body">-->
<!-- <header-nav :leftArrow="false" titelText="执法监督码"></header-nav>-->
<!-- </div>-->
<!-- 中间 -->
<div class="warp_body">
<div class="logobox"></div>
<!-- <refresh-list v-model:freshMap="freshMap" @refresh="onRefresh" @onLoad="onLoad"> -->
<div class="carousel_box" @onLoad="onLoad">
<carousel-card v-if="carouselList.length" v-model:carouselList="carouselList"></carousel-card>
</div>
<div class="boutique_box">
<!-- <van-cell :border="false" title="精品" /> -->
<div class="boutique_body">
<!-- <goodsCard :goodsList="boutique" :cardAttr="boutiqueAttr"></goodsCard> -->
<div class="box-qr-code" @click="toRegisterView">
<span class="box-qr-code-text">执法监督码</span>
</div>
</div>
<div class="boutique_body">
<!-- <goodsCard :goodsList="boutique" :cardAttr="boutiqueAttr"></goodsCard> -->
<div class="box-info" @click="toRegistrationListView">
<span class="box-info-text">行政检查信息</span>
</div>
<div class="box-complaint" @click="toComplaintView">
<span class="box-complaint-text">执法投诉</span>
</div>
</div>
</div>
<!-- <div class="recommend_box">
<van-cell :border="false" title="推荐" />
<div class="recommend_body">
<goodsCard :goodsList="recommend"></goodsCard>
</div>
</div> -->
<!-- </refresh-list> -->
</div>
<!-- 底部 -->
<div class="footer_body">
<footer-nav></footer-nav>
</div>
</div>
</template>
<script setup name="Home">
import Vconsolefrom from 'vconsole';
import * as w6s from 'szient-js-sdk';
import sha1 from 'crypto-js/sha1';
import {getEnterpriseMerchantAuthorization, getSiqLoginAuth, getSiqLoginAuthTest} from '../api/Home';
import {showSuccessToast} from "vant";
import 'vant/es/toast/style';
const {useCommon} = $globalStore;
const router = useRouter();
const route = useRoute();
let carouselList = reactive([]); // 轮播列表
let freshMap = reactive({
refreshLoad: false, // 是否刷新
listLoading: false, // 是否加载中
listFinished: false, // 是否加载完成标识
});
const data = reactive({});
const boutiqueAttr = reactive({
columnNum: 4,
itemClass: "boutique_item",
goodsCradclass: "boutique-crad",
}); // 商品卡片展示
//获取轮播
const getCarousel = async () => {
// const res = await useHome.getCarousel();
// if (res?.code === 20000) {
// carouselList = res?.data;
// }
};
//精品
const boutiqueGoods = async () => {
// const res = await useHome.boutiqueGoods();
// if (res?.code === 20000) {
// boutique = res?.data;
// }
};
const toRegisterView = async () => {
if (useCommon.enterpriseNumber == null || useCommon.enterpriseNumber == "") {
router.push({path: "/enterprise/register"});
} else {
router.push({
path: "/enterprise/qrCode",
query: {
enterpriseNumber: useCommon.enterpriseNumber,
}
});
}
};
const toRegistrationListView = async () => {
router.push({
path: "/enterprise/registrationList",
});
}
const toComplaintView = async () => {
router.push({
path: "/enterprise/complaint",
query: {
isSelect: true
}
});
}
//下拉刷新
const onRefresh = () => {
freshMap.listFinished = false;
freshMap.listLoading = true;
freshMap.refreshLoad = true;
// Promise.all([getCarousel(), boutiqueGoods(), recommendGoods()]).then(() => {
// freshMap.refreshLoad = false;
// });
};
// 触底加载
const onLoad = () => {
// recommendGoods(true);
};
const generateRandomNumber = () => {
const min = 100000;
const max = 999999;
const randomNum = (Math.floor(Math.random() * (max - min + 1)) + min);
return randomNum.toString().padStart(6, '0');
}
const getEnterpriseMerchant = (phoneNumber) => {
getEnterpriseMerchantAuthorization({merchantTel: phoneNumber}, success => {
if (!(success.data == null && success.data.length == 0)) {
useCommon.SET_USER_ENTERPRISE_NUMBER(success.data[0].enterpriseNumber);
}
}, error => {
})
}
onMounted(() => {
// console.log(useCommon.phonenumber)
// useCommon.SET_USER_PHONENUMBER(success.data.phonenumber);
new Vconsolefrom();
const access_key = '6374106c5eb449a4ad6c2430f30796e6';
const access_secret = '434fec85aa5846e88bbeb8fac6cf6d7f';
// generateRandomNumber()
const nonce = generateRandomNumber();
const timestamp = `${Date.now()}`;
const str = [access_secret, nonce, timestamp]
.sort()
.reduce((str, item) => str += item, '');
// 最终还需要转成全小写
const signature = sha1(str).toString().toLowerCase();
// //深i企鉴权测试
// getSiqLoginAuthTest({userId: "1608644307579883522", userName: "汪鑫"},success =>{
// useCommon.SET_USER_ENTERPRISE_NUMBER(success.data.enterpriseNumber);
// useCommon.SET_USER_PHONENUMBER(success.data.phonenumber.toString());
// console.log("phone : "+useCommon.phonenumber);
// },error =>{})
w6s.config({
access_key: access_key,
nonce: nonce,
timestamp: timestamp,
signature: signature,
})
.then((res) => {
// 成功
console.log("鉴权", res);
})
.catch((err) => {
// 失败
// console.log(err)
console.log("鉴权", err);
// todo 临时工
getEnterpriseMerchant(useCommon.phonenumber.toString());
});
w6s.ready(() => {
w6s.szient.getAuthCode({
success: function (res) {
console.log(res)
console.log("认证", res);
console.log("code: " + res.result.result.code);
getSiqLoginAuth({code: res.result.result.code}, success => {
useCommon.SET_USER_PHONENUMBER(success.data.phonenumber.toString());
useCommon.SET_USER_ID(success.data.userId);
useCommon.SET_USER_ENTERPRISE_NUMBER(success.data.enterpriseNumber);
getEnterpriseMerchant(success.data.phonenumber.toString());
}, error => {
console.log("error : " + error)
})
},
fail: function (err) {
console.log(err)
console.log("认证", err);
},
});
});
// getEnterpriseMerchantAuthorization({merchantTel: useCommon.phonenumber},success =>{
// if(!(success.data == null && success.data.length == 0)){
// console.log("success.data[0].enterpriseNumber :" + success.data[0].enterpriseNumber)
// useCommon.SET_USER_ENTERPRISE_NUMBER(success.data[0].enterpriseNumber);
// }
// },error =>{
// })
});
</script>
<style lang="less" scoped>
.home {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #f4f4f4;
.warp_body {
position: relative;
background: url("../assets/images/bg_c.jpg");
background-size: cover;
overflow-x: hidden;
.carousel_box {
height: 150px;
width: 100%;
padding-bottom: 10px;
}
}
.boutique_box {
position: absolute;
width: 100%;
bottom: 1%;
.boutique_body {
padding: 0px 0px 10px 0px;
display: flex;
justify-content: center;
}
;
.box-qr-code {
width: 90%;
text-align: right;
height: 3.66667rem;
background-color: #ff976a;
border-radius: 10px;
background: url("../assets/images/item_code.png");
background-size: cover;
.box-qr-code-text {
margin: 0.35rem 0.5rem 0 0;
display: block;
font-size: 17px
}
}
.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: 0.35rem 0.5rem 0 0;
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: 0.35rem 0.5rem 0 0;
display: block;
font-size: 17px
}
}
}
.recommend_box {
.recommend_body {
width: 100%;
}
}
}
.logobox {
position: relative;
top: 4%;
left: 5%;
z-index: 99;
width: 82%;
height: 10vh;
background: url("../assets/images/logo.png") no-repeat;
background-size: 100% auto;
}
</style>

244
src/views/enforce/assistUserFilter.vue

@ -0,0 +1,244 @@
<template>
<div v-if="visible" class="van-overlay"></div>
<div v-if="visible" class="popup">
<div class="popup-title">用户查询</div>
<!-- 关闭按钮 -->
<label class="close-button" @click="closePopup"></label>
<!-- 弹窗的内容 -->
<div class="popup-content">
<div class="subsearch">
<input class="searchbox" v-model="searchParam.userName" placeholder="请输入用户名/执法证件号搜索" />
</div>
<div class="btnbox">
<button class='btn-reset' @click="cancel()">重置</button>
<button class='btn-search' @click="queryList()">搜索</button>
</div>
<div class="search-result">
<div class="case-item" v-for="(item, index) in dataList" :key="index" @click="selectData(item)">
<div class="case-title">姓名:{{ item.userName }}</div>
<div class="case-depart">电话:{{ item.phonenumber }}</div>
<div class="case-time">执法证件号:{{ item.lawCertificateNum }}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { ref } from 'vue'
import {queryAUsers} from '../../api/user'
const { useCommon } = $globalStore
export default {
props: {
visible: {
type: Boolean,
default: false
},
content: {
type: String,
default: ''
},
},
data(){
return{
searchParam: {
//搜索框
userName: '',
userId:'',
dataScopeId:"",
},
dataList:[]
}
},
created(){
// this.queryList()
console.log(useCommon.userId);
if(useCommon.userId == null || useCommon.userId == ''){
this.searchParam.dataScopeId = 1731;
}else{
this.searchParam.dataScopeId = useCommon.userId;
}
},
methods: {
closePopup() {
this.$emit('close');
},
queryList(){
queryAUsers(this.searchParam,success=>{
this.dataList = success.data
},error =>{})
},
cancel() {
this.searchParam.userName = '';
this.queryList()
},
selectData(item){
this.$emit("reciveData",item);
this.$emit('close');
},
}
}
</script>
<style scoped>
.popup {
position: fixed;
z-index: 999;
top: 3rem;
left: 0;
width: 100%;
height: calc(100% - 3rem);;
background: #fff;
overflow: hidden;
}
.popup-title {
margin: 0.3rem 0 0;
width: 100%;
height: 1rem;
border-bottom: 1px solid #f3f4f5;
text-align: center;
font-size: 0.42rem;
font-weight: 550;
}
.close-button {
position: absolute;
top: 0.15rem;
right: 0.1rem;
width: 0.8rem;
height: 0.8rem;
background-color: rgba(255, 255, 255, .5);
border: 0.05rem solid rgba(255, 255, 255, .7);
border-radius: 50%;
transform: rotate(45deg);
}
.close-button:before,
.close-button:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
background: #333;
border-radius: 50%;
transform: translate(-50%, -50%);
height: 0.4rem;
width: 0.02rem;
}
.close-button:after {
height: 0.02rem;
width: 0.4rem;
}
.popup-content {
margin: 0.25rem 3% 0;
padding-bottom: 3rem;
width: 94%;
height: calc(100% - 1.6rem);
overflow-y: auto;
font-size: 0.38rem;
}
.subsearch {
width: 100%;
height: 1.25rem;
}
.searchbox {
margin: 2% 3%;
padding: 0.15rem 0.3rem 0.1rem 1.15rem;
width: 94%;
height: 1.0rem;
background: #f6f7fe url(../../assets/images/icon_sou.png) no-repeat;
background-position: left 0.5rem center;
background-size: auto 50%;
box-sizing: border-box;
border: 1px solid rgba(0,0,0,.05);
border-radius: 0.5rem;
color: #999999;
outline: none;
}
.subtitle {
margin: 0.5rem 0 0.25rem;
font-size: 0.4rem;
font-weight: 600;
}
.quick-item {
display: flex;
}
.quick-item span {
display: inline-block;
margin: 1% 0 2% 3.5%;
padding: 2% 3.75%;
background: #f2f3f4;
border: 0;
border-radius: 8px;
color: #4c4c4c;
}
.quick-item span.seled {
background: #e9f2fb;
color: #1367fe;
}
.btnbox {
display: flex;
justify-content: center;
margin: 5% 2%;
width: 96%;
height: 1.0rem;
}
.btn-reset,
.btn-search {
display: inline-block;
margin: 0 2%;
padding: 0;
width: 60%;
color: #fff;
font-size: 0.35rem;
border-radius: 1rem;
background: #1367fe;
border: 1px solid #1367fe;
text-align: center;
}
.btn-reset {
width: 35%;
background-color: #fff;
border-color: rgba(19, 103, 254, .7);
color: #1367fe;
}
.search-result {
width: 100%;
padding-bottom: 2rem;
}
.case-item {
margin: 3% 2%;
padding: 2% 0;
width: 96%;
font-size: 0.3rem;
border-bottom: 1px solid #f4f4f4;
color: #999;
line-height: 2;
}
.case-title {
margin: 2% 0;
font-size: 0.38rem;
color: #333;
line-height: 1.25;
}
</style>

1
src/views/enforce/earlyWarning.vue

@ -99,6 +99,7 @@
let totalPrice = ref(0); // 总钱数
let searchParam = reactive({
"dataScopeId": useCommon.userId,
//执法事件
// lawEnforcementIncident:"",
//执法部门

14
src/views/enforce/enforceNotice.vue

@ -29,8 +29,14 @@
<div class="noticebox">
<div class="notice-item" v-for="(item, index) in data.dataList" :key="index"><i></i>
<div class="item-cont">
<span class="item-title">{{ item.enforcementDepartment }}</span>
<span class="item-time">{{ item.createTime }}</span>
<span class="item-title">{{ item.planName }}</span>
<!-- <span class="item-time"> {{ item.enforcementDepartment }} - {{ item.createTime }}</span>-->
<span class="item-time" style="width: 90%;">
<div style="display: flex; justify-content: space-between;">
<div style="color: #333333;">{{ item.enforcementDepartment }}</div>
<div>{{ item.createTime }}</div>
</div>
</span>
<div class="item-text" @click="toPdfView(null==item.fileObject?'':item.fileObject.fileUrl)"><a style="color: green; ">{{ null==item.fileObject?'':item.fileObject.fileName }}</a></div>
</div>
</div>
@ -231,11 +237,11 @@ const searchComplaint = (val) =>{
const toPdfView = (url) =>{
console.log(url)
router.push(
{
{
path: "/pdfView",
query: {
url: url
}
}
});
}
</script>

710
src/views/enforce/enforcementPlanAdd.vue

@ -1,380 +1,392 @@
<template>
<div class="address_edit">
<!-- 导航栏 -->
<div class="header_body">
<header-nav
:slefBack="true"
@goBack="goBack"
:titelText="`执法检查计划`"
>
</header-nav>
</div>
<!-- 中间 -->
<div class="warp_body">
<van-cell-group>
<van-field
v-model="submitData.planYear"
required
label="计划年度"
placeholder="必填"
readonly
:rules="[{ required: true, message: '请选择年度计划' }]"
@click="selectDate"
/>
<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>
<van-field
v-model="submitData.planName"
label="计划名称"
placeholder="请输入"
required
:rules="[{ required: true, message: '请输入计划名称' }]"
/>
<van-field
v-model="submitData.enforcementDepartment"
label="执法部门"
placeholder="请选择"
@click=""
required
readonly
:rules="[{ required: true, message: '请选择执法部门'}]"
/>
<!-- <van-field
v-model="submitData.enforcementTime"
label="执法时间"
placeholder="请选择"
clickable
is-link
readonly
required
:rules="[{ required: true, message: '请选择执法时间'}]"
@click="selectEnforcementTime"
/> -->
<van-popup v-model:show="data.showPicker" position="bottom">
<van-date-picker
title="选择日期"
v-model="data.currentDate1"
:min-date="data.minDate"
:max-date="data.maxDate"
:columns-type="data.columnsTypes"
@confirm="onEnforcementTimeConfirm"
@cancel="cancelEnforcementTime"
/>
</van-popup>
<van-field
v-model="submitData.enforcementArea"
label="执法区域"
placeholder="请输入"
required
:rules="[{ required: true, message: '请输入执法区域'}]"
/>
<div class="file-upload">
<div class="file-upload-center">
文件上传 <span>(不多于9张)</span>
</div>
<van-uploader v-model="data.fileListObj" max-count="9" class="file" :after-read="uploadFiles" multiple @oversize="onOversize" :before-delete="deleteFile" accept=".pdf">
<template #preview-cover="{ file }">
<div class="preview-cover van-ellipsis">{{ file.name }}</div>
</template>
</van-uploader>
<div class="address_edit">
<!-- 导航栏 -->
<div class="header_body">
<header-nav
:slefBack="true"
@goBack="goBack"
:titelText="`执法检查计划`"
>
</header-nav>
</div>
</van-cell-group>
<van-action-bar>
<van-action-bar-button text="提交" @click="submit" />
</van-action-bar>
</div>
</div>
<!-- 中间 -->
<div class="warp_body">
<van-form @failed="onFailed" @submit="submit">
<van-cell-group>
<van-field
v-model="submitData.planYear"
required
label="计划年度"
placeholder="必填"
readonly
:rules="[{ required: true, message: '请选择年度计划' }]"
@click="selectDate"
/>
<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>
<van-field
v-model="submitData.planName"
label="计划名称"
placeholder="请输入"
required
:rules="[{ required: true, message: '请输入计划名称' }]"
/>
<van-field
v-model="submitData.enforcementDepartment"
label="执法部门"
placeholder="请选择"
@click=""
required
readonly
:rules="[{ required: true, message: '请选择执法部门'}]"
/>
<!-- <van-field
v-model="submitData.enforcementTime"
label="执法时间"
placeholder="请选择"
clickable
is-link
readonly
required
:rules="[{ required: true, message: '请选择执法时间'}]"
@click="selectEnforcementTime"
/> -->
<van-popup v-model:show="data.showPicker" position="bottom">
<van-date-picker
title="选择日期"
v-model="data.currentDate1"
:min-date="data.minDate"
:max-date="data.maxDate"
:columns-type="data.columnsTypes"
@confirm="onEnforcementTimeConfirm"
@cancel="cancelEnforcementTime"
/>
</van-popup>
<van-field
v-model="submitData.enforcementArea"
label="执法区域"
placeholder="请输入"
required
:rules="[{ required: true, message: '请输入执法区域'}]"
/>
<div class="file-upload">
<div class="file-upload-center">
文件上传 <span>(不多于9张)</span>
</div>
<van-uploader v-model="data.fileListObj" max-count="9" class="file" :after-read="uploadFiles"
multiple @oversize="onOversize" :before-delete="deleteFile" accept=".pdf">
<template #preview-cover="{ file }">
<div class="preview-cover van-ellipsis">{{ file.name }}</div>
</template>
</van-uploader>
</div>
</van-cell-group>
<van-action-bar>
<van-button round block type="info" native-type="submit">提交</van-button>
</van-action-bar>
</van-form>
</div>
</div>
</template>
<script setup name="register">
import { showSuccessToast,showLoadingToast,closeToast } from 'vant';
import {addEnforcementInspectionProgram,queryUserInfo} from '@/api/enforce'
import {getDict} from '../../api/Home'
import {uploadFile} from '../../util/fileUpload'
import { reactive, ref } from "vue";
import { showConfirmDialog } from 'vant';
const { useCommon, useMy } = $globalStore;
import {showSuccessToast, showLoadingToast, closeToast} from 'vant';
import {addEnforcementInspectionProgram, queryUserInfo} from '@/api/enforce'
import {getDict} from '../../api/Home'
import {uploadFile} from '../../util/fileUpload'
import {reactive, ref} from "vue";
import {showConfirmDialog} from 'vant';
const {useCommon, useMy} = $globalStore;
const router = useRouter();
const route = useRoute();
let queryaddressId = ref("");
const data = reactive({
searchResult: [],
showPicker: false,
columns: [],
selectTypeValue: ref[0],
showDatePicker: ref(false),
columnsType: ['year'],
columnsTypes: ['year', 'month', 'day'],
currentDate: ref(['2024']),
minDate: new Date(2020, 0, 1),
maxDate: new Date(2125, 5, 1),
currentDate1: ref(['2024', '03', '01']),
//vant组件上传照片列表
fileListObj: [],
});
//保存参数
const submitData = reactive({
//用户id
userId: useCommon.userId,
//关联案件ID
relId: "",
//计划年度
planYear: "",
//计划名称
planName: "",
//执法部门
enforcementDepartment: "",
//执法部门ID
enforcementDepartmentId: "",
//执法时间
enforcementTime: "",
//执法区域
enforcementArea: "",
//是否发布年度执法计划
isPublish: 0,
//后台保存图片列表
fileList: [],
})
const router = useRouter();
const route = useRoute();
let queryaddressId = ref("");
const data = reactive({
searchResult: [],
showPicker: false,
columns: [],
selectTypeValue : ref[0],
showDatePicker: ref(false),
columnsType :['year'],
columnsTypes :['year','month','day'],
currentDate: ref(['2024']),
minDate: new Date(2020, 0, 1),
maxDate: new Date(2125, 5, 1),
currentDate1: ref(['2024','03','01']),
//vant组件上传照片列表
fileListObj:[],
});
//保存参数
const submitData = reactive({
//用户id
userId:useCommon.userId,
//关联案件ID
relId:"",
//计划年度
planYear:"",
//计划名称
planName:"",
//执法部门
enforcementDepartment:"",
//执法部门ID
enforcementDepartmentId:"",
//执法时间
enforcementTime:"",
//执法区域
enforcementArea:"",
//是否发布年度执法计划
isPublish:0,
//后台保存图片列表
fileList:[],
// 返回
const goBack = () => {
router.go(-1);
};
})
const submit = () => {
showConfirmDialog({
title: '公布执法计划',
message: '对外公布本部门年度执法计划',
}).then(() => {
console.log(1)
submitData.isPublish = 1
addEnforcementInspectionProgram(submitData, success => {
console.log(success)
//跳转企业二维码地址
if (success.success) {
console.log("保存成功");
showSuccessToast('保存成功');
goBack();
}
}, error => {
console.log("保存失败")
})
}).catch(() => {
console.log(0)
showSuccessToast('保存成功');
submitData.isPublish = 0
addEnforcementInspectionProgram(submitData, success => {
console.log(success)
//跳转企业二维码地址
if (success.success) {
console.log("保存成功");
showSuccessToast('保存成功');
goBack();
}
}, error => {
console.log("保存失败")
})
});
}
// 返回
const goBack = () => {
router.go(-1);
};
const onFailed = (errorInfo) => {
console.log('failed', errorInfo);
};
//消息提醒
// const toast = showLoadingToast({
// duration: 0,
// forbidClick: true,
// message: '提交成功',
// });
// let second = 3;
// const timer = setInterval(() => {
// second--;
// if (second) {
// } else {
// clearInterval(timer);
// closeToast();
// }
// }, 1000);
// 保存地址操作
const onSave = () => {
router.replace({name: "addressList"});
};
const onConfirm = (value) => {
data.showPicker = false;
console.log(value)
submitData.enforceType = value.selectedValues[0];
submitData.enforceTypeText = value.selectedOptions[0].text;
}
const selectType = () => {
data.showPicker = true;
// console.log(data)
}
const submit = () =>{
showConfirmDialog({
title: '公布执法计划',
message: '对外公布本部门年度执法计划',
}).then(() => {
console.log(1)
submitData.isPublish = 1
addEnforcementInspectionProgram(submitData,success =>{
console.log(success)
//跳转企业二维码地址
if(success.success){
console.log("保存成功");
showSuccessToast('保存成功');
goBack();
const uploadFiles = (file) => {
uploadFile(file, (res) => {
console.log(file.fileName);
submitData.fileList.push({
fileUrl: res.url,
fileName: file.file.name
})
console.log(submitData.fileList);
});
}
const deleteFile = (file, index) => {
// data.fileListObj.filter((item, indexs) => {
// if (index.index == indexs) {
// data.fileListObj.splice(indexs, 1);//splice 删除
// }
// });
submitData.fileList.filter((item, indexs) => {
if (index.index == indexs) {
submitData.fileList.splice(indexs, 1);//splice 删除
}
},error=>{
console.log("保存失败")
});
return true;
}
onMounted(() => {
console.log(route?.query?.id);
console.log(route?.query?.lawEnforcementIncident);
submitData.relId = route?.query?.id;
submitData.lawEnforcementIncident = route?.query?.lawEnforcementIncident;
getDict({"dictType": "caseType"}, success => {
console.log(success);
success.data.forEach(res => {
console.log(res)
var obj = {text: res.dictLabel, value: res.dictValue};
data.columns.push(obj)
})
}, error => {
})
}).catch(() => {
console.log(0)
showSuccessToast('保存成功');
submitData.isPublish = 0
addEnforcementInspectionProgram(submitData,success =>{
console.log(success)
//跳转企业二维码地址
if(success.success){
console.log("保存成功");
showSuccessToast('保存成功');
goBack();
}
},error=>{
console.log("保存失败")
//查询企业信息
queryUserInfo(useCommon.userId, success => {
submitData.enforcementDepartment = success.data.dept.deptName;
submitData.enforcementDepartmentId = success.data.dept.deptId;
}, error => {
})
});
}
//消息提醒
// const toast = showLoadingToast({
// duration: 0,
// forbidClick: true,
// message: '提交成功',
// });
// let second = 3;
// const timer = setInterval(() => {
// second--;
// if (second) {
// } else {
// clearInterval(timer);
// closeToast();
// }
// }, 1000);
// 保存地址操作
const onSave = () => {
router.replace({ name: "addressList" });
};
const selectDate = () => {
data.showDatePicker = true;
console.log(data.showDatePicker)
}
const onDateConfirm = (value) => {
console.log(value);
value.selectedValues.forEach((item, index) => {
console.log(item);
submitData.planYear = item;
});
// submitData.establishmentTime = "2023-04-21"
data.showDatePicker = false;
}
//取消日期选择
const cancelSelectDate = () => {
data.showDatePicker = false;
}
//取消
const cancelEnforcementTime = () => {
data.showPicker = false;
}
const selectEnforcementTime = () => {
data.showPicker = true;
}
const onConfirm = (value)=> {
data.showPicker = false;
console.log(value)
submitData.enforceType = value.selectedValues[0];
submitData.enforceTypeText = value.selectedOptions[0].text;
}
const selectType = () =>{
data.showPicker = true;
// console.log(data)
}
const onEnforcementTimeConfirm = (value) => {
console.log(value);
const uploadFiles = (file) =>{
uploadFile(file,(res) =>{
console.log(file.fileName);
submitData.fileList.push({
fileUrl:res.url,
fileName: file.file.name
})
console.log(submitData.fileList);
});
}
const deleteFile = (file,index) =>{
// data.fileListObj.filter((item, indexs) => {
// if (index.index == indexs) {
// data.fileListObj.splice(indexs, 1);//splice 删除
// }
// });
submitData.fileList.filter((item, indexs) => {
if (index.index == indexs) {
submitData.fileList.splice(indexs, 1);//splice 删除
value.selectedValues.forEach((item, index) => {
console.log(item);
});
submitData.enforcementTime = value.selectedValues[0] + "-" + value.selectedValues[1] + "-" + value.selectedValues[2] + " 00:00:00";
data.showPicker = false;
}
});
return true;
}
onMounted(() => {
console.log(route?.query?.id);
console.log(route?.query?.lawEnforcementIncident);
submitData.relId = route?.query?.id;
submitData.lawEnforcementIncident = route?.query?.lawEnforcementIncident;
getDict({"dictType": "caseType"},success =>{
console.log(success);
success.data.forEach(res =>{
console.log(res)
var obj = { text: res.dictLabel, value: res.dictValue };
data.columns.push(obj)
})
},error =>{
})
//查询企业信息
queryUserInfo(useCommon.userId,success =>{
submitData.enforcementDepartment = success.data.dept.deptName;
submitData.enforcementDepartmentId = success.data.dept.deptId;
},error=>{
})
});
</script>
<style lang="less" scoped>
.address_edit {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #f4f4f4;
}
const selectDate = () =>{
data.showDatePicker = true;
console.log(data.showDatePicker)
}
const onDateConfirm = (value)=> {
console.log(value);
value.selectedValues.forEach((item,index) => {
console.log(item);
submitData.planYear = item;
});
// submitData.establishmentTime = "2023-04-21"
data.showDatePicker = false;
}
//取消日期选择
const cancelSelectDate = () =>{
data.showDatePicker = false;
}
//取消
const cancelEnforcementTime = () =>{
data.showPicker = false;
}
/* 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;
// }
.file-upload {
height: 165px;
position: relative;
}
const selectEnforcementTime = () =>{
data.showPicker = true;
}
.file-upload-center {
position: absolute;
height: 20%;
top: 10%;
left: 2%;
font-size: 18px;
const onEnforcementTimeConfirm = (value)=> {
console.log(value);
value.selectedValues.forEach((item,index) => {
console.log(item);
});
submitData.enforcementTime = value.selectedValues[0] + "-" + value.selectedValues[1] + "-" + value.selectedValues[2] + " 00:00:00";
data.showPicker = false;
}
span {
font-size: 13px;
color: rgb(221, 229, 227);
}
}
.file {
position: absolute;
bottom: 10%;
left: 2%;
}
</script>
<style lang="less" scoped>
.address_edit {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #f4f4f4;
}
/* 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;
// }
.file-upload{
height: 165px;
position: relative;
}
.file-upload-center{
position: absolute;
height: 20%;
top: 10%;
left: 2%;
font-size: 18px;
span {
font-size: 13px;
color: rgb(221, 229, 227);
.preview-cover {
position: absolute;
bottom: 0;
box-sizing: border-box;
width: 100%;
padding: 4px;
color: #fff;
font-size: 12px;
text-align: center;
background: rgba(0, 0, 0, 0.3);
}
}
.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: 12px;
text-align: center;
background: rgba(0, 0, 0, 0.3);
}
/deep/ .van-button {
margin: 5% 3%;
padding: 0;
width: 94%;
height: 1rem;
color: #fff;
font-size: 0.4rem;
border-radius: 1rem;
background: #1367fe;
border: 0.02667rem solid #1367fe;
text-align: center;
}
/deep/ .van-button {
margin: 5% 3%;
padding: 0;
width: 94%;
height: 1rem;
color: #fff;
font-size: 0.4rem;
border-radius: 1rem;
background: #1367fe;
border: 0.02667rem solid #1367fe;
text-align: center;
}
:root {
--van-dialog-width: 600px;
}
:root {
--van-dialog-width: 600px;
}
</style>

1
src/views/enforce/historyCheck.vue

@ -106,6 +106,7 @@
let searchParam = reactive({
userId: useCommon.userId,
"dataScopeId": useCommon.userId,
//执法事件
// lawEnforcementIncident:"",
//执法部门

7
src/views/enforce/sign.vue

@ -112,9 +112,9 @@
<div class="file-upload">
<div class="file-upload-center">
<label>上传附件</label> <span>(不多于3张)</span>
<label>上传附件</label> <span>(不多于9张)</span>
</div>
<van-uploader v-model="submitData.fileListObj" class="file" multiple max-count="3" :after-read="uploadFiles" :before-delete="deleteFile">
<van-uploader v-model="submitData.fileListObj" class="file" multiple max-count="9" :after-read="uploadFiles" :before-delete="deleteFile">
<template #preview-cover="{ file }">
<div class="preview-cover van-ellipsis">{{ file.name }}</div>
</template>
@ -150,7 +150,7 @@
</div>
<Popup :visible="data.popupVisible" :content="data.popupContent" @close="closePopup" @reciveData="reciveData" />
<Popup :visible="data.popupVisible2" :content="data.popupContent2" @close="closePopup" @reciveData="reciveData2" />
<PopupA :visible="data.popupVisible2" :content="data.popupContent2" @close="closePopup" @reciveData="reciveData2" />
<van-popup v-model:show="data.showItem" position="bottom" :style="{ height: '30%' }">
@ -182,6 +182,7 @@ import {uploadFile} from "../../util/fileUpload";
import {formattedTime} from "@/util/util";
//用户筛选弹窗
import Popup from './userFilter.vue';
import PopupA from './assistUserFilter.vue';
import {getDict} from "../../api/Home";
import { queryLinkage, queryLinkageDictByValueAndParentId } from "../../api/linkage";
import {addEnterpriseLawEnforcement, getByUserIdAndZero} from "../../api/administrative";

25
src/views/enterprise/complaint.vue

@ -12,6 +12,7 @@
<!-- 中间 -->
<div class="warp_body">
<span class="rigbtn" @click="toNoScanView">入企不扫码投诉</span>
<van-form @failed="onFailed" @submit="submit">
<van-cell-group>
<view v-if="data.isSelect=='true'">
<van-field
@ -19,6 +20,8 @@
label="投诉案件"
placeholder="必填 请选择"
readonly
required
:rules="[{ required: true, message: '请选择投诉案件' }]"
clickable
is-link
@click="showPopup"
@ -30,6 +33,8 @@
label="投诉案件"
placeholder="必填 请选择"
readonly
required
:rules="[{ required: true, message: '请选择投诉案件' }]"
clickable
is-link
/>
@ -63,6 +68,8 @@
type="textarea"
maxlength="300"
placeholder="请输入"
required
:rules="[{ required: true, message: '请输入诉求内容' }]"
show-word-limit
/>
<van-divider class="divdsty"/>
@ -92,6 +99,8 @@
label="涉事地址"
type="textarea"
placeholder="请填写详细地址"
required
:rules="[{ required: true, message: '请填写详细地址' }]"
show-word-limit
/>
<van-divider class="divdsty"/>
@ -100,11 +109,15 @@
v-model="submitData.linkman"
label="联系人"
placeholder="必填 联系人"
required
:rules="[{ required: true, message: '请填写联系人' }]"
/>
<van-field
v-model="submitData.linkmanTel"
label="联系方式"
placeholder="必填 联系方式"
required
:rules="[{ validator, message: '请输入正确内容' }]"
/>
<div class="agree-box">
<span class="remsty">是否授权</span>
@ -113,8 +126,10 @@
</div>
</van-cell-group>
<van-action-bar>
<van-action-bar-button color="#1367fe" text="提交" @click="submit"/>
<!-- <van-action-bar-button color="#1367fe" text="提交" @click="submit"/>-->
<van-button round block type="info" native-type="submit">提交</van-button>
</van-action-bar>
</van-form>
</div>
</div>
</template>
@ -162,6 +177,8 @@
linkman: "",
//联系方式
linkmanTel: "",
// 是否授权
authorization: 1,
//后台保存图片列表
fileList: [],
//vant组件上传照片列表
@ -174,6 +191,11 @@
router.go(-1);
};
const validator = (val) => /^1[34578]\d{9}$/.test(val);
const onFailed = (errorInfo) => {
console.log('failed', errorInfo);
};
const submit = () => {
// console.log(submitData);
@ -225,6 +247,7 @@
// console.log(data)
}
const selectCh =(val) => {
submitData.authorization = val;
if(val == 0) {
data.isCheckedon = false;
data.isCheckedoff = true;

21
src/views/enterprise/complaintNoScan.vue

@ -11,6 +11,7 @@
</div>
<!-- 中间 -->
<div class="warp_body">
<van-form @failed="onFailed" @submit="submit">
<van-cell-group>
<!-- <van-field
v-model="submitData.lawEnforcementIncident"
@ -49,6 +50,8 @@
type="textarea"
maxlength="300"
placeholder="请输入描述"
required
:rules="[{ required: true, message: '请输入描述' }]"
show-word-limit
/>
<van-divider class="divdsty" />
@ -69,11 +72,15 @@
v-model="submitData.linkman"
label="联系人"
placeholder="必填 联系人"
required
:rules="[{ required: true, message: '请填写联系人' }]"
/>
<van-field
v-model="submitData.linkmanTel"
label="联系方式"
placeholder="必填 联系方式"
required
:rules="[{ validator, message: '请输入正确内容' }]"
/>
<div class="agree-box">
<span class="remsty">是否授权</span>
@ -82,8 +89,10 @@
</div>
</van-cell-group>
<van-action-bar>
<van-action-bar-button color="#1367fe" text="提交" @click="submit" />
<!-- <van-action-bar-button color="#1367fe" text="提交" @click="submit" />-->
<van-button round block type="info" native-type="submit">提交</van-button>
</van-action-bar>
</van-form>
</div>
</div>
</template>
@ -106,6 +115,8 @@ const data = reactive({
columns: [],
selectTypeValue : ref[0],
isSelect: false,
isCheckedon: true,
isCheckedoff: false
});
//保存参数
const submitData = reactive({
@ -128,6 +139,8 @@ const submitData = reactive({
linkman:"",
//联系方式
linkmanTel:"",
// 是否授权
authorization: 1,
//后台保存图片列表
fileList:[],
//vant组件上传照片列表
@ -140,6 +153,11 @@ const goBack = () => {
router.go(-1);
};
const validator = (val) => /^1[34578]\d{9}$/.test(val);
const onFailed = (errorInfo) => {
console.log('failed', errorInfo);
};
const submit = () =>{
// console.log(submitData);
@ -193,6 +211,7 @@ const selectType = () =>{
const selectCh =(val) => {
submitData.authorization = val;
if(val == 0) {
data.isCheckedon = false;
data.isCheckedoff = true;

3
src/views/enterprise/registrationEdit.vue

@ -134,7 +134,7 @@
</div>
<Popup :visible="data.popupVisible" :content="data.popupContent" @close="closePopup" @reciveData="reciveData" />
<Popup :visible="data.popupVisible2" :content="data.popupContent2" @close="closePopup" @reciveData="reciveData2" />
<PopupA :visible="data.popupVisible2" :content="data.popupContent2" @close="closePopup" @reciveData="reciveData2" />
<van-popup v-model:show="data.showItem" position="bottom" :style="{ height: '30%' }">
@ -166,6 +166,7 @@
import {formattedTime} from "@/util/util";
//用户筛选弹窗
import Popup from '../enforce/userFilter.vue';
import PopupA from '../enforce/assistUserFilter.vue';
import {getDict} from "../../api/Home";
import { queryLinkage, queryLinkageDictByValueAndParentId } from "../../api/linkage";
import {addEnterpriseLawEnforcement, getByUserIdAndZero} from "../../api/administrative";

4
src/views/login.vue

@ -43,8 +43,8 @@ const onSubmit = async (values) => {
// return;
userLogin(values,success=>{
console.log(success);
router.push({ name: "Home" });
// router.push({ name: "enforceHome" });
// router.push({ name: "Home" });
router.push({ name: "enforceHome" });
//设置全局变量
useCommon.SET_USER_PHONENUMBER(success.data.phonenumber.toString());
useCommon.SET_USER_ID(success.data.userId);

Loading…
Cancel
Save