You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

794 lines
27 KiB

<template>
<div class="address_edit">
<span class="tohome" @click="toEnforceHomeView"><i class="van-badge__wrapper van-icon van-icon-wap-home-o"></i></span>
<!-- 中间 -->
<div class="warp_body">
<van-form @failed="onFailed" ref="form">
<van-cell-group>
<div class="qy-name">企业信息</div>
<van-field v-if="submitData.checkCss != 3"
v-model="submitData.enterpriseName"
label="企业名称"
:rules="[{ required: true, message: '必填项' }]"
placeholder="企业名称"
readonly="true"
/>
<van-field v-if="submitData.checkCss == 3"
v-model="submitData.enterpriseName"
label="企业名称"
readonly
required
is-link
:rules="[{ required: true, message: '必填项' }]"
placeholder="企业名称"
@click="data.popupCp = true"
/>
<van-field v-model="submitData.enterpriseNumber"
readonly
label="统一社会信用代码"
:rules="[{ required: true, message: '必填项' }]"
placeholder="统一社会信用代码"
class="mult-line"
/>
</van-cell-group>
<van-divider class="divdsty"/>
<van-cell-group>
<div class="zf-name">执法信息</div>
<van-field v-model="submitData.bureauDeptName"
label="入企单位"
readonly
required
:rules="[{ required: true, message: '请加载入企单位' }]"
/>
<van-field v-model="data.lawCerUser_no"
label="入企人员"
readonly
required
:rules="[{ required: true, message: '请加载入企人员' }]"
/>
<div class="add-box">
<div v-for="(item, index) in data.lawCer" :key="index">
<van-field v-model="item.show"
label=" "
readonly
clickable
:right-icon="(data.lawCer.length - index ) == 1 ? 'add-o' : 'close'"
@click-right-icon="(data.lawCer.length - index ) == 1 ? addLawCer(index) : cancelLawCer(index)"
:rules="[{ required: true, message: '必填项' }]"
placeholder="请选择"
@click-input="showLawCerPopup(index)"
/>
</div>
</div>
<van-field v-model="submitData.lawEnforcementTypeText"
label="入企事由"
placeholder="请选择"
is-link
readonly
required
:rules="[{ required: true, message: '请选择入企类别' }]"
@click="data.popupLawTypeShow = true"
/>
<van-field v-model="submitData.lawEnforcementItemText"
label="入企事项"
required
:rules="[{ required: true, message: '请输入 入企事项' }]"
rows="2"
autosize
type="textarea"
maxlength="1000"
placeholder="请输入 入企事项"
show-word-limit
/>
<van-field v-model="submitData.lawEnforcementItem" v-show="false"/>
<div class="add-box">
<div v-for="(item, index) in data.lawBasisList" :key="index">
<van-field v-model="item.text"
readonly
label="活动依据"
placeholder="请选择"
@click-input="showLawItemPopup(index)"
rows="1"
autosize
:right-icon="(data.lawBasisList.length - index ) == 1 ? 'add-o' : 'close'"
@click-right-icon="(data.lawBasisList.length - index ) == 1 ? addLawItem(index) : cancelLawItem(index)"
/>
</div>
</div>
<van-field v-model="submitData.lawEnforcementBasis" v-show="false"/>
<view v-if="data.isNoScan == 'true'">
<van-field
v-model="submitData.reason"
label="原&nbsp; &nbsp; &nbsp; &nbsp;因"
readonly="true"
/>
</view>
<van-field v-if="submitData.checkCss == 3" v-model="submitData.enforcementTime" label="入企时间" readonly placeholder="请选择 入企时间" :rules="[{ required: true, message: '必填项' }]" @click="data.showTimePicker = true" />
<!-- 又改成不可输入, 补录才可以 - 杨老板提的 -->
<van-field v-if="submitData.checkCss != 3" v-model="submitData.enforcementTime" label="入企时间" readonly placeholder="请选择 入企时间" :rules="[{ required: true, message: '必填项' }]" />
<van-divider class="divdsty" />
<div class="file-upload">
<div class="file-upload-center"><label>附&nbsp; &nbsp; &nbsp; &nbsp;件</label> <span>(不多于 8张)</span></div>
<van-uploader v-model="data.fileListObj" :after-read="uploadFiles" :before-delete="deleteFile" multiple max-count="8" class="file">
<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" @click="submit(1)">提交</van-button>
</van-action-bar>
</van-form>
</div>
<!-- 遮罩层 -->
<van-overlay :show="data.submitWaitOver">
<div class="wrapper"><div class="block"><van-loading size="100" type="spinner" color="#1989fa"/></div></div>
</van-overlay>
<!-- 入企人员 -->
<Popup :visible="data.popupLawcerShow" :content="data.popupLawCerContent" @close="closePopup" :lawEDid="submitData.lawEnforcerId" :LawEDs="data.lawCer" @reciveData="confirmLawCer"/>
<!-- 入企类别 -->
<van-popup v-model:show="data.popupLawTypeShow" round position="bottom">
<van-picker :columns="data.lawEnforcementTypes" @cancel="data.popupLawTypeShow = false" @confirm="confirmLawType" />
</van-popup>
<!-- 活动依据 -->
<Popupzq :visible="data.popupLawBasisShow" :content="data.popupLawBasisContent" @close="closePopup" @reciveData="confirmLawItem"/>
<!-- 入企时间 -->
<van-popup v-model:show="data.showTimePicker" position="bottom" :style="{ height: '30%' }">
<van-date-picker v-if="data.showNom" type="time" v-model="data.currentDate" @confirm="onConfirm" />
<van-date-picker v-if="data.showBl" type="time" v-model="data.currentDate" :max-date="data.maxDate" :min-date="data.minDate" @confirm="onConfirm" @cancel="data.showTimePicker = false" />
</van-popup>
<!-- 企业选择 -->
<popupcp :visible="data.popupCp" :content="data.popupCpContent" @close="closePopup" @reciveData="reciveDataCp"/>
</div>
</template>
<script setup name="register">
import {nameCorrect,encryptPhone} from'@/util/fileUpload';
import {showSuccessToast, showConfirmDialog} from 'vant';
import 'vant/es/toast/style';
import { addNonEnforcementRegistration, getUserInfoAndDept } from '@/api/enforce'
import {getEnterpriseInformation} from '../../api/enterprise'
import {reactive, ref} from "vue";
import {uploadFile} from "../../util/fileUpload";
import {formattedTime} from "@/util/util";
//用户筛选弹窗
import Popup from '../enforce/userFilter.vue';
import Popupzq from '../enforce/zqyjjdmFilter.vue';
import popupcp from '../enterprise/companyFilter.vue';
import {getDict} from "../../api/Home";
const {useCommon} = $globalStore
const router = useRouter();
//路由参数
const route = useRoute();
const form = ref(null);
const data = reactive({
lawCer: [{text: "", id: ""}], // 执法人员列表
lawCerFlag: 0, // 执法人员表示选择了第几个
popupLawcerShow: false, // 执法人员弹窗标识
popupLawCerContent: '', // 入企人员弹窗内容
lawEnforcementTypes: [], // 入企类别列表
popupLawTypeShow: false, // 入企类别弹窗标识
lawBasisList: [{ text:"", id:"" }], // 活动依据列表
popupLawBasisShow: false, // 活动依据弹窗
popupLawBasisContent: '', // 活动依据弹窗内容
lawBasisFlag: 0, // 活动依据表示选择了第几个
lawCerUser_no: '', // 执法人员-执法编号展示
submitWaitOver: false, // 提交按钮等待标识
fileListObj: [], // vant组件上传照片列表
popupCp: false, // 企业选择标识
isNoScan: false,
// 时间选择器
showTimePicker: false,
showBl: false,
showNom: false,
minDate: null,
maxDate: null,
});
/** 保存参数 */
const submitData = reactive({
// 企业名称
enterpriseName: "",
// 企业统一社会信用代码
enterpriseNumber: "",
// 企业注册地址
enterpriseAddress: "",
// 执法时间
enforcementTime: formattedTime(new Date()),
// 执法人员姓名
lawEnforcer: "",
// 执法人员ID
lawEnforcerId: "",
// 执法人员联系方式
lawEnforcerTel: "",
// 其他执法人员姓名
lawEnforcerOther: "",
// 其他执法人员ID
lawEnforcerIdOther: "",
// 其他执法人员联系方式
lawEnforcerTelOther: "",
// 执法(入企)主体ID
bureauDeptId: "",
// 执法(入企)主体名称
bureauDeptName: "",
// 执法(入企)主体部门统一信用代码
creditcode: "",
// 执法(入企)类别
lawEnforcementType: "",
lawEnforcementTypeText: "",
// 执法(入企)事项
lawEnforcementItem: "",
lawEnforcementItemText: "",
// 执法(活动)依据
lawEnforcementBasis: "",
lawEnforcementBasisText: "",
//后台保存图片列表
fileList: [],
// 辅助字段
userId: useCommon.userId,
reason: "",
checkCss: "",
})
/** 执法人员弹窗事件 */
const showLawCerPopup = (flag) => {
data.lawCerFlag = flag;
data.popupLawcerShow = true;
}
/** 添加执法人员 */
const addLawCer = () => { data.lawCer.push({text: "", id: ""}); }
/** 删除执法人员 */
const cancelLawCer = (index) => { data.lawCer.splice(index, 1); }
/** 执法人员选定 */
const confirmLawCer = (item) => {
data.lawCer[data.lawCerFlag].id = item.userId;
data.lawCer[data.lawCerFlag].text = item.userName;
if(null == item.lawCertificateNum || "" == item.lawCertificateNum){
data.lawCer[data.lawCerFlag].show = nameCorrect(item.userName + " " + encryptPhone(item.decryptPhoneNum));
}else{
data.lawCer[data.lawCerFlag].show = nameCorrect(item.userName + " " + item.lawCertificateNum);
}
}
/** 入企类别初始化 */
const initLawType = () => {
data.lawEnforcementTypes = [];
getDict({"dictType":"no_check_category"}, success => {
if (success.success) {
for (var i=0; i<success.data.length; i++) {
data.lawEnforcementTypes.push(
{"text":success.data[i].dictLabel, "value":success.data[i].dictValue}
);
}
}
});
}
/** 入企类别选择 */
const confirmLawType = (item) => {
var obj = item.selectedOptions[0];
submitData.lawEnforcementType = obj.value;
submitData.lawEnforcementTypeText = obj.text;
data.popupLawTypeShow = false;
}
/** 活动依据弹窗 */
const showLawItemPopup = (flag) => {
data.lawBasisFlag = flag;
data.popupLawBasisShow = true;
}
/** 添加活动依据 */
const addLawItem = () => { data.lawBasisList.push({text: "", id: "", "show": ""}); }
/** 删除活动依据 */
const cancelLawItem = (index) => { data.lawBasisList.splice(index, 1); }
/** 活动依据选定 */
const confirmLawItem = (item) => {
data.lawBasisList[data.lawBasisFlag].id = item.id;
data.lawBasisList[data.lawBasisFlag].text = item.lawName;
}
/** 当前日期 */
const currentDate = () => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
data.currentDate = [year, month, day]
}
/** 之前的时间 */
const getBeforeDate = (num, time) => {
let n = num;
let d = '';
if (time) {
d = new Date(time);
} else {
d = new Date();
}
let year = d.getFullYear();
let mon = d.getMonth() + 1;
let day = d.getDate();
if (day <= n) {
if (mon > 1) {
mon = mon - 1;
} else {
year = year - 1;
mon = 12;
}
}
d.setDate(d.getDate() - n);
year = d.getFullYear();
mon = d.getMonth() + 1;
day = d.getDate();
let s = year + "-" + (mon < 10 ? ('0' + mon) : mon) + "-" + (day < 10 ? ('0' + day) : day);
return s;
}
/** 选择时间 */
const onConfirm = (time) => {
if (time != null) {
var times = time.selectedValues;
submitData.enforcementTime = times[0] + "-" + times[1] + "-" + times[2];
data.tempDate = times[1] + "月" + times[2] + "号";
}
data.showTimePicker = false;
}
/** 选择企业 */
const reciveDataCp = (item) => {
submitData.enterpriseName = item.enterpriseName;
submitData.enterpriseNumber = item.enterpriseNumber;
submitData.enterpriseAddress = item.enterpriseAddress;
}
/** 关闭弹窗 */
const closePopup = () => {
data.popupLawcerShow = false;
data.popupLawBasisShow = false;
data.popupCp = false;
}
/** 加载钩子 */
onMounted(() => {
nameCorrect();
submitData.enterpriseNumber = route?.query?.enterpriseNumber; //企业统一社会信用代码
submitData.checkCss = route?.query?.checkCss;
submitData.reason = route?.query?.reason;
data.isNoScan = route?.query?.isNoScan;
// 行政执法类别
initLawType();
/** 查询企业信息 */
getEnterpriseInformation(route?.query?.enterpriseNumber, success => {
if (null != success.data) {
submitData.enterpriseName = success.data.enterpriseName
submitData.enterpriseNumber = success.data.enterpriseNumber
submitData.enterpriseAddress = success.data.enterpriseAddress
}
}, error => {});
/** 查询执法部门信息 */
getUserInfoAndDept(useCommon.userId, success => {
if (null != success.data) {
if(null ==success.data.lawCertificateNum || ""==success.data.lawCertificateNum){
data.lawCerUser_no =nameCorrect(success.data.userName + " " + encryptPhone(success.data.decryptPhoneNum));
}else{
data.lawCerUser_no =nameCorrect(success.data.userName + " " + success.data.lawCertificateNum);
}
submitData.lawEnforcer = success.data.userName
submitData.lawEnforcerId = success.data.userId
// 执法主体
submitData.bureauDeptName = success.data.bureauDept.deptName;
submitData.bureauDeptId = success.data.bureauDept.deptId;
}
}, error => {})
//初始化时间
currentDate();
var a = getBeforeDate(10, new Date());
var minDate = a.split("-");
data.minDate = ref(new Date(minDate[0], minDate[1] - 1, minDate[2]));
var now = new Date();
let year = now.getFullYear();
let mon = now.getMonth() + 1;
let day = now.getDate();
mon = (mon < 10 ? ('0' + mon) : mon);
day = (day < 10 ? ('0' + day) : day);
data.maxDate = ref(new Date(year, mon - 1, day));
data.showBl = true;
// getLinkageByValueAndParentId("law_item", "100");
// getLinkageByValueAndParentId("check_item", "100");
})
const submit = () => {
if (submitData.enterpriseName.length <= 0
|| submitData.enterpriseNumber.length <= 0
|| submitData.lawEnforcer.length <= 0
|| submitData.lawEnforcerId.length <= 0
|| submitData.bureauDeptName.length <= 0
|| submitData.bureauDeptId.length <= 0
|| submitData.lawEnforcementType.length <= 0
|| submitData.lawEnforcementItemText.length <= 0
|| data.lawCer[0].id.length <= 0) {
return null;
}
data.submitWaitOver = true; // 遮罩层
// 处理回显附件
for (var k = 0; k < data.fileListObj.length; k++) {
var url = data.fileListObj[k].url;
if (null != url) {
submitData.fileList.push(url);
}
}
// 执法依据
submitData.lawEnforcementBasis = "";
submitData.lawEnforcementBasisText = "";
for (var i = 0; i < data.lawBasisList.length; i++) {
submitData.lawEnforcementBasis += data.lawBasisList[i].id + ",";
submitData.lawEnforcementBasisText += data.lawBasisList[i].text + ",";
}
submitData.lawEnforcementBasis = submitData.lawEnforcementBasis.substring(0, submitData.lawEnforcementBasis.length - 1);
submitData.lawEnforcementBasisText = submitData.lawEnforcementBasisText.substring(0, submitData.lawEnforcementBasisText.length - 1);
// 执法人员
submitData.lawEnforcerOther = "";
submitData.lawEnforcerIdOther = "";
for (var i = 0; i < data.lawCer.length; i++) {
submitData.lawEnforcerOther += data.lawCer[i].text + ",";
submitData.lawEnforcerIdOther += data.lawCer[i].id + ",";
}
submitData.lawEnforcerOther = submitData.lawEnforcerOther.substring(0, submitData.lawEnforcerOther.length - 1);
submitData.lawEnforcerIdOther = submitData.lawEnforcerIdOther.substring(0, submitData.lawEnforcerIdOther.length - 1);
form.value.validate().then(() => {
if(null != data.tempDate){
submitData.enforcementTime=submitData.enforcementTime+" 00:00:00"
}
showConfirmDialog({ message: ' 请确认信息无误 '}).then(() => {
addNonEnforcementRegistration(submitData, success => {
data.submitWaitOver = false; // 遮罩层
//跳转首页
if (success.success) {
showSuccessToast('登记成功');
router.push({path: "/enforceHome"});
}
}, error => {
console.log("登记失败");
});
}).catch(() => {data.submitWaitOver = false;});
// addNonEnforcementRegistration(submitData, success => {
// data.submitWaitOver = false; // 遮罩层
// //跳转首页
// if (success.success) {
// showSuccessToast('登记成功');
// router.push({path: "/enforceHome"});
// }
// }, error => {
// console.log("登记失败")
// })
}).catch((errors) => {
data.submitWaitOver = false; // 遮罩层
});
}
const uploadFiles = (file) => {
if(Array.isArray(file)){
file.forEach((item,index)=>{
uploadFile(item, (res) => {
submitData.fileList.push(res.url)
});
});
}else{
uploadFile(file, (res) => {
submitData.fileList.push(res.url)
});
}
}
const deleteFile = (file, index) => {
submitData.fileList.filter((item, indexs) => {
if (index.index == indexs) {
submitData.fileList.splice(indexs, 1);//splice 删除
}
});
return true;
}
// 返回首页
// const toEnforceHomeView = () => { router.push({ path: "/enforceHome" }); };
</script>
<style lang="less" scoped>
.tohome {
position: absolute;
top: 1.25%;
right: 5%;
font-size: 0.5rem;
}
.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;
margin-top: 0.15rem;
}
.qy-name, .zf-name {
margin: 0 0.27rem;
font-size: 0.42rem;
height: 1.2rem;
background-color: white;
font-weight: 600;
line-height: 3.5;
}
/* 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 {
position: relative;
min-height: 3.0rem;
max-height: 6.5rem;
padding: 1rem 0.27rem 0.27rem 0.43rem;
box-sizing: border-box;
}
.file-upload-center {
position: absolute;
top: 0.27rem;
left: 0.43rem;
width: 90%;
height: 0.65rem;
font-size: 0.37rem;
span {
font-size: 0.32rem;
color: #b9b9b9;
}
}
.file {
position: relative;
width: 100%;
height: calc(100% - 1.5rem);
}
/deep/ .van-uploader__upload, /deep/ .van-uploader__preview-image {
width: 1.95rem !important;
}
.preview-cover {
position: absolute;
bottom: 0;
box-sizing: border-box;
width: 100%;
padding: 0.13rem;
color: #fff;
font-size: 0.32rem;
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: 1px solid #1367fe;
text-align: center;
}
.van-action-bar .van-button:first-child {
background: #fff;
color: #1367fe;
/*width: 40%;*/
}
/deep/ .van-action-bar {
box-shadow: 0 0 0.27rem #e5e5e5;
}
.add-box {
position: relative;
margin-top: -1px;
}
.add-box::after {
position: absolute;
left: 0.43rem;
bottom: 0;
width: calc(100% - 0.86rem);
border-bottom: 1px solid #ebedf0;
content: "";
transform: scaleY(.5);
}
.addbtn {
margin: 3% 0;
width: 100%;
text-align: right;
}
.addbtn i {
font-size: 0.5rem;
color: #999;
}
.add-inspect {
margin: 0 0.425rem;
padding-bottom: 0.3rem;
min-height: 2rem;
font-size: 0.37rem;
color: #323233;
}
.add-inspect p {
margin: 0.1rem 0;
padding: 0.2rem 0.1rem;
//border-bottom: 1px solid #f4f5f6;
}
/*.add-inspect p:nth-child(1) {
background-color: #fff;
}*/
.add-inspect span {
display: block;
margin-right: 0.2rem;
color: #666;
line-height: 1.75;
}
.add-inspect span.add-dept {
color: #999;
font-size: 0.3rem;
line-height: 1.25;
}
.item-delete {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1% 4.5%;
width: 100%;
background: #f3f4f5;
line-height: 2.0;
font-size: 0.3rem;
color: #999;
box-sizing: border-box;
}
.item-delete a {
font-size: 0.35rem;
color: #1367fe;
}
.item-inspect {
display: flex;
justify-content: space-between;
}
.item-inspect > i {
margin: 5% 2% 0 0;
color: #dfdddd;
font-size: 0.5rem;
}
.item-inspect > i.van-icon-checked {
color: #1367fe;
}
.dept-inspect {
margin: 2% 0;
padding: 0 2%;
width: calc(100% - 1rem);
background: #f3f4f5;
color: #666;
}
.dept-inspect p {
margin: 3% 0;
padding: 0;
}
.no-inspect {
background: none;
}
.wrapper {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.block {
width: 120px;
height: 120px;
text-align: center;
}
/deep/ .mult-line .van-field__label {
padding-right: 0.5rem;
line-height: 1.25;
}
/deep/ .van-picker-column__item--selected {
background: #e5eef9;
color: #000;
font-weight: 600;
}
/deep/ .van-field .van-field__control {
color: #666;
}
/deep/ .van-field__label--required:before {
margin-left: -0.2rem;
}
</style>