Files
number_zj/20220330_Vote/Ewide.Web.Entry/wwwroot/html/outsidewall/index.html
2023-07-12 16:26:28 +08:00

821 lines
53 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>
宁波既有建筑外墙脱落问卷调查
</title>
<script src="../../lib/vue/vue.global.prod.min.js"></script>
<link href="../../lib/element-plus/index.min.css" rel="stylesheet" />
<script src="../../lib/element-plus/index.full.min.js"></script>
<script src="../../lib/element-plus/locale/zh-cn.min.js"></script>
<script src="../../lib/element-plus-icons-vue/global.iife.min.js"></script>
<script src="../../lib/xe-utils/dist/xe-utils.umd.min.js"></script>
<script src="../../lib/axios/axios.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div id="app">
<el-dialog v-model="pageData.dialogLoginVisible" title="请先登录" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" append-to-body width="60%">
<el-form :model="pageData.loginForm" ref="loginFormRef" label-position="top">
<el-form-item label="手机号码" label-width="80px" prop="phone" :rules="[{ required: true, trigger: 'blur', min: 11, max: 11, message: '请输入正确的手机号码' }]">
<el-input v-model="pageData.loginForm.phone" autocomplete="off" />
</el-form-item>
<el-form-item label="验证码" label-width="80px" prop="code" :rules="[{ required: true, trigger: 'blur', min: 4, max: 4, message: '请输入验证码' }]">
<el-input type="text" maxlength="4" placeholder="验证码" v-model="pageData.loginForm.code">
<template slot="append" #append>
<el-button :disabled="pageData.loginForm.disabled" @click="(v,v2)=>funHandles.getCode(v,pageData,loginFormRef)">{{ pageData.loginForm.valiBtn }}</el-button>
</template>
</el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<!--<el-button @click="dialogFormVisible = false">Cancel</el-button>-->
<el-button type="primary" @click="(v,v2)=>funHandles.verifyKey(pageData,loginFormRef)">登录</el-button>
</span>
</template>
</el-dialog>
<h3 style="text-align:center;">宁波既有建筑外墙脱落问卷调查</h3>
<el-form ref="formRef" :model="pageData.form" label-position="left" require-asterisk-position="right" label-width="160px" style="margin-top:15px;">
<el-form-item label="1.社区/小区名:" prop="communityId" :rules="[{ required: true, trigger: 'blur', message: '请选择社区/小区' }]">
<el-select v-model="pageData.communityItem" filterable clearable remote reserve-keyword :remote-method="(v,v2)=>funHandles.getCommunitys(v,pageData)" placeholder="请输入关键字后进行选择" @change="(v,v2)=>funHandles.onChangeSelectCommunity(v,pageData)" style="width:100%" no-data-text="没有这个社区">
<el-option v-for="item in pageData.communitys" :key="item.id" :label="item.name" :value="JSON.stringify(item)">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="2.小区交付年份:" prop="deliveryear" :rules="[{ required: false, trigger: 'blur', message: '请输入交付年份' }]">
<el-date-picker v-model="pageData.form.deliveryear" type="date" value-format="YYYY-MM-DD" style="width:100%" />
</el-form-item>
<!--@*<el-form-item label="物业单位:" prop="hangye">
<el-input v-model="form.hangye"></el-input>
</el-form-item>
<el-form-item label="开发商:" prop="hangye">
<el-input v-model="form.hangye"></el-input>
</el-form-item>
<el-form-item label="施工单位:" prop="hangye">
<el-input v-model="form.hangye"></el-input>
</el-form-item>
<el-form-item label="设计单位:" prop="hangye">
<el-input v-model="form.hangye"></el-input>
</el-form-item>*@-->
<el-form-item label="3.外墙结构:" prop="outsidewallstructurefiles">
<el-upload class="upload-demo" drag multiple
:action="pageData.uploadaction"
auto-upload
list-type="picture-card"
v-model:file-list="pageData.fileList"
:on-preview="(file)=>funHandles.filePreview(file,pageData.fileList)"
:on-remove="(file, fileList)=>{return funHandles.fileRemove(file, fileList)}"
:on-success="(response, file, fileList)=>{return funHandles.fileChange(response, file, fileList)}">
<!--<i class="el-icon-upload"></i>-->
<div class="el-upload__text"><em>上传外墙照片</em></div>
<div class="el-upload__tip" slot="tip">只能上传jpg/png文件且不超过500kb</div>
</el-upload>
</el-form-item>
<el-form-item label="4.楼栋数:" prop="buildcount">
<el-input-number v-model="pageData.form.buildcount"></el-input-number>
</el-form-item>
<el-form-item label="5.住户总数:" prop="householdcount" :rules="[{ required: false, trigger: 'blur', message: '请输入住户总数' }]">
<el-input-number v-model="pageData.form.householdcount"></el-input-number>
</el-form-item>
<el-form-item label="6.总建筑面积:" prop="totalfloorage" :rules="[{ required: true, trigger: 'blur', message: '请输入总建筑面积' }]">
<el-input-number v-model="pageData.form.totalfloorage" :precision="2" :step="1"></el-input-number>
</el-form-item>
<el-form-item label="7.是否存在外墙问题:" prop="isExistProblem" :rules="[{ required: true, trigger: 'blur', message: '请选择是否' }]">
<el-radio-group v-model="pageData.form.isExistProblem">
<el-radio-button label="1" border></el-radio-button>
<el-radio-button label="0" border></el-radio-button>
</el-radio-group>
<span style="margin-left: 20px; color: #909399">例如:漏水、开裂、脱落</span>
</el-form-item>
<el-form-item label="8.楼栋信息:" v-show="pageData?.form?.isExistProblem=='1'">
<el-select v-model="pageData.buildingItemId" filterable clearable remote reserve-keyword :remote-method="(v,v2)=>funHandles.getBuildings(v,pageData)" no-data-text="没有这幢" placeholder="请输入关键字后进行选择" style="width:100%" @change="(v,v2)=>funHandles.onChangeSelectBuildings(v,pageData,formRef,childFormRef)">
<el-option v-for="item in pageData.form.searchBuildings" :key="item.id" :label="item.buildingName" :value="item.id">
<span style="float: left">{{ item.buildingName }}</span>
<span style="float: right;color: var(--el-text-color-secondary);font-size: 11px;">{{ item.address }}</span>
</el-option>
</el-select>
<div v-for="buildingItem in pageData.buildings" v-show="buildingItem?.id==pageData.buildingItemId">
<el-space wrap alignment="start" style="margin:20px 0">
<div style="width:350px"><label style="color: #606266; display:inline-block;width: 80px">地址:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.address }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">幢名称:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.buildingName }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">层数:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.levelCount }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">总户数:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.houseHolds }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">建设单位:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.buildingUnit }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">设计单位:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.desingerUnit }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">施工单位:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.constructionUnit }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">监理单位:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.monitorUnit }}</div>
<div style="width:350px"><label style="color: #606266; display:inline-block;width:80px">物业单位:</label>{{ XEUtils.find(pageData.buildings, item => item.id === pageData.buildingItemId)?.wuYeUnit }}</div>
</el-space>
<el-form ref="childFormRef" :model="buildingItem" label-position="top" inline-message>
<!--<el-form-item prop="isproblem" label="是否存在问题" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择是否存在问题' }]">
<el-radio-group v-model="buildingItem.isproblem">
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form-item>-->
<el-form-item prop="curwallproblems" label="8.1 墙体问题的类型是" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择墙体问题' }]">
<el-checkbox-group v-model="buildingItem.curwallproblems">
<el-checkbox v-for="w in staticData.wallproblems" :label="w" :key="w">{{w}}</el-checkbox>
</el-checkbox-group>
<el-input type="textarea" autosize placeholder="请输入其他问题" v-model="buildingItem.curwallproblemother" v-if="XEUtils.indexOf(buildingItem.curwallproblems, '其他问题')!=-1"></el-input>
</el-form-item>
<el-form-item label="8.2 哪个问题最先开始出现?" v-if="buildingItem?.curwallproblems?.length>1">
<el-radio-group v-model="buildingItem.wallproblemsfirst">
<el-radio v-for="w in staticData.wallproblems" :label="w">{{w}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="firstproblemdate" label="8.3 第一次出现墙体问题是建成后____年" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择第一次出现墙体问题时间' }]">
<el-radio-group v-model="buildingItem.firstproblemdate">
<el-radio label="建成后0-5年">建成后0-5年</el-radio>
<el-radio label="建成后6-10年">建成后6-10年</el-radio>
<el-radio label="建成后11-15年">建成后11-15年</el-radio>
<el-radio label="建成后15年以上">建成后15年以上</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="problemfrequency" label="8.4 墙体脱落发生频率如何?" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择墙体脱落发生频率' }]">
<el-radio-group v-model="buildingItem.problemfrequency">
<el-radio label="1年1-2次">1年1-2次</el-radio>
<el-radio label="1年3-5次">1年3-5次</el-radio>
<el-radio label="1年5次以上">1年5次以上</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="problemseason" label="8.5 问题多发生在哪个季节?" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择问题发生季节' }]">
<el-checkbox-group v-model="buildingItem.problemseason">
<el-checkbox label="春" key="春"></el-checkbox>
<el-checkbox label="夏" key="夏"></el-checkbox>
<el-checkbox label="秋" key="秋"></el-checkbox>
<el-checkbox label="冬" key="冬"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item prop="wallproblemtoward" label="8.6 墙体问题发生的朝向是哪面?" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择问题发生朝向' }]">
<el-checkbox-group v-model="buildingItem.wallproblemtoward">
<el-checkbox label="东" key="东"></el-checkbox>
<el-checkbox label="西" key="西">西</el-checkbox>
<el-checkbox label="南" key="南"></el-checkbox>
<el-checkbox label="北" key="北"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="8.7 问题照片:">
<el-upload class="upload-demo" drag multiple
:action="pageData.uploadaction"
auto-upload
list-type="picture-card"
v-model:file-list="buildingItem.childFileList1"
:on-preview="(file)=>funHandles.filePreview(file,buildingItem.childFileList1)"
:on-remove="(file, fileList)=>funHandles.fileChildRemove(file, fileList,buildingItem)"
:on-success="(response, file, fileList)=>funHandles.fileChildChange(response, file, fileList, buildingItem,'东')"
style="width:100%">
<!--<i class="el-icon-upload"></i>-->
<div class="el-upload__text"><em>上传东面照片</em></div>
<div class="el-upload__tip" slot="tip">只能上传jpg/png文件且不超过500kb</div>
</el-upload>
<el-upload class="upload-demo" drag multiple
:action="pageData.uploadaction"
auto-upload
list-type="picture-card"
v-model:file-list="buildingItem.childFileList2"
:on-preview="(file)=> funHandles.filePreview(file,buildingItem.childFileList2)"
:on-remove="(file, fileList)=>funHandles.fileChildRemove(file, fileList,buildingItem)"
:on-success="(response, file, fileList)=>funHandles.fileChildChange(response, file, fileList, buildingItem,'西')"
style="width:100%">
<!--<i class="el-icon-upload"></i>-->
<div class="el-upload__text"><em>上传西面照片</em></div>
<div class="el-upload__tip" slot="tip">只能上传jpg/png文件且不超过500kb</div>
</el-upload>
<el-upload class="upload-demo" drag multiple
:action="pageData.uploadaction"
auto-upload
list-type="picture-card"
v-model:file-list="buildingItem.childFileList3"
:on-preview="(file)=> funHandles.filePreview(file,buildingItem.childFileList3)"
:on-remove="(file, fileList)=>funHandles.fileChildRemove(file, fileList,buildingItem)"
:on-success="(response, file, fileList)=>funHandles.fileChildChange(response, file, fileList, buildingItem,'南')"
style="width:100%">
<i class="el-icon-upload"></i>
<div class="el-upload__text"><em>上传南面照片</em></div>
<div class="el-upload__tip" slot="tip">只能上传jpg/png文件且不超过500kb</div>
</el-upload>
<el-upload class="upload-demo" drag multiple
:action="pageData.uploadaction"
auto-upload
list-type="picture-card"
v-model:file-list="buildingItem.childFileList4"
:on-preview="(file)=>funHandles.filePreview(file,buildingItem.childFileList4)"
:on-remove="(file, fileList)=>funHandles.fileChildRemove(file, fileList,buildingItem)"
:on-success="(response, file, fileList)=>funHandles.fileChildChange(response, file, fileList, buildingItem,'北')"
style="width:100%">
<i class="el-icon-upload"></i>
<div class="el-upload__text"><em>上传北面照片</em></div>
<div class="el-upload__tip" slot="tip">只能上传jpg/png文件且不超过500kb</div>
</el-upload>
</el-form-item>
<el-form-item prop="problemfanwei" label="8.8 发生外墙问题的范围有多大?" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择外墙问题的范围' }]">
<el-radio-group v-model="buildingItem.problemfanwei">
<el-radio label="外墙面积的25%"></el-radio>
<el-radio label="外墙面积的25-50%"></el-radio>
<el-radio label="外墙面积的50-75%"></el-radio>
<el-radio label="外墙面积的75-100%"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="problemheight" label="8.9 外墙问题发生在哪个高度?" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择外墙问题发生的高度' }]">
<el-checkbox-group v-model="buildingItem.problemheight">
<el-checkbox label="底层楼高1/3以下"></el-checkbox>
<el-checkbox label="中层"></el-checkbox>
<el-checkbox label="高层屋顶往下1/3"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item prop="diaoluowu" label="8.10 掉落物是什么?" :rules="[{ required: true, trigger: ['change', 'blur'], message: '请选择掉落物' }]">
<el-checkbox-group v-model="buildingItem.diaoluowu">
<el-checkbox label="墙皮材料"></el-checkbox>
<el-checkbox label="保温材料"></el-checkbox>
<el-checkbox label="混凝土块"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
</div>
</el-form-item>
<el-form-item prop="problemismodify" label="问题发生后是否请人修复了?" v-if="pageData?.form?.isExistProblem=='1'" :rules="[{ required: true, trigger: ['blur'], message: '请选择问题发生后是否请人修复' }]">
<el-radio-group v-model="pageData.form.problemismodify">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="请提供修复单位的名称:" v-if="pageData.form?.problemismodify=='1'">
<el-input type="textarea" autosize placeholder="请提供修复单位的名称。" v-model="pageData.form.problemmodifyunitname">
rm
</el-form-item>
<el-form-item label="修复后的部位是否再次发生问题?" v-if="pageData.form?.problemismodify=='1'">
<el-radio-group v-model="pageData.form.problemmodifyisagain">
<el-radio label="1">有再发生</el-radio>
<el-radio label="0">没有</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="">
若您愿意接受我们的现场调查,请惠赐您的联系方式。谢谢!
<el-input type="textarea" autosize placeholder="" v-model="pageData.form.contract">
</el-form-item>
<el-form-item v-if="!isshowmyinfo">
<el-button type="primary" @click.prevent="funHandles.onSubmit(formRef,childFormRef,pageData)"> 提 交 </el-button>
<!--<el-button @click.prevent="showinfo()">我的报名</el-button>-->
</el-form-item>
<el-form-item>
</el-form-item>
</el-form>
<el-image-viewer v-if="pageData.dialogImageUrl"
:zIndex="8000"
@close="() => { pageData.dialogImageUrl='' }"
:url-list="pageData.dialogImageUrls"
:initial-index="XEUtils.indexOf(pageData.dialogImageUrls, pageData.dialogImageUrl)"></el-image-viewer>
</div>
<script type="text/javascript">
const { createApp, onMounted, watch, computed, ref } = Vue
const { ElMessageBox, ElNotification, ElLoading } = ElementPlus;
const app = createApp({
setup() {
const formRef = ref();
const childFormRef = ref();
const loginFormRef = ref();
const pageData = ref({
form: {},
loginForm: {
valiBtn: '获取验证码',
disabled: false
},
//communitys: [],
//buildings: [],
//buildingItemId: '',
dialogLoginVisible: false,
uploadaction: "/gb/yjb/api/outsidewall/sysFileInfo/upload"
});
const checkPhone = (rule, value, callback) => {
const regMobile = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/;
if (regMobile.test(value)) {
callback()
}
callback(new Error("请输入正确的手机号码"))
};
const rulesCheckData = {
checkPhone: (rule, value, callback) => {
const regMobile = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/;
if (regMobile.test(value)) {
callback()
}
callback(new Error("请输入正确的手机号码"))
},
checkCode: (rule, value, callback) => {
if (value === "") {
callback(new Error("请输入验证码"))
} else if (!/^[0-9]+$/.test(value) || !/^\d{4}$/.test(value)) {
callback(new Error("请输入4位数字的验证码"))
} else {
callback()
}
},
checkNumber: (rule, value, callback) => {
if (value === "") {
callback(new Error("不能为空"))
} else if (!/^[0-9]+$/.test(value)) {
callback(new Error("必需为数字"))
} else {
callback()
}
},
checkCardNo: (rule, value, callback) => {
const regMobile = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (regMobile.test(value)) {
callback()
}
callback(new Error("请输入正确的身份证号码"))
}
};
const staticData = { wallproblems: ['漏水', '开裂', '脱落', '空鼓', '其他问题'] };
const funHandles = {
init: async (data) => {
try {
const response = await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'get',
url: `/gb/yjb/api/outsidewall/VerifyIsLogin?access_token=${window.sessionStorage.getItem('__VerifyLogin')}`,
responseType: "json",
});
window.loadingInstance?.close();
if (response.data.data != true) {
//if (!window.sessionStorage.getItem('__VerifyLogin'))
data.dialogLoginVisible = true
} else {
data.uploadaction = `/gb/yjb/api/outsidewall/sysFileInfo/upload?access_token=${window.sessionStorage.getItem('__VerifyLogin')}`
}
//do {
// data.key = await funHandles.verifyKey(data);
//} while (data.key == false);
//await funHandles.getCommunitys("", data);
} catch (error) {
window.loadingInstance?.close();
console.log(error)
//await ElMessageBox.alert(error.message, '异常', { type: 'error' });
//window.location.reload();//刷新当前页面
data.dialogLoginVisible = true
}
},
getCode(v, pageData, loginFormRef) {
loginFormRef.validate(async (valid) => {
if (valid) {
console.log('已通过')
console.log(pageData.loginForm.phone)
axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'post',
url: '/gb/yjb/api/ningbozhichun/sendcode',
data: pageData.loginForm,
responseType: "json",
}).then(async response => {
if (response.data.data != true) {
await ElMessageBox.alert("发送失败:" + response.data.message, '错误', { type: 'error' });
} else {
funHandles.tackBtn(pageData); //验证码倒数60秒
}
//_this.loading = false;
}).catch(async error => {
console.log(error)
await ElMessageBox.alert(error.message, '错误', { type: 'error' });
})
} else {
console.log('未通过')
return;
}
});
},
tackBtn(pageData) { //验证码倒数60秒
let time = 60;
let timer = setInterval(() => {
if (time == 0) {
clearInterval(timer);
pageData.loginForm.valiBtn = '获取验证码';
pageData.loginForm.disabled = false;
} else {
pageData.loginForm.disabled = true;
pageData.loginForm.valiBtn = time + '秒后重试';
time--;
}
}, 1000);
},
verifyKey: async (pageData) => {
if (pageData.loginForm?.phone?.length != 11 || pageData.loginForm?.code?.length != 4) {
return;
}
try {
window.loadingInstance = ElLoading.service({ lock: true, text: '处理中' });
const response = await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'post',
url: `/gb/yjb/api/outsidewall/VerifyLogin`,
data: pageData.loginForm,
responseType: "json",
});
window.loadingInstance?.close();
if (response.data.data.passed == true) {
window.sessionStorage.setItem('__VerifyLogin', response.data.data.token);
await funHandles.getCommunitys("", pageData);
pageData.dialogLoginVisible = false
pageData.uploadaction = `/gb/yjb/api/outsidewall/sysFileInfo/upload?access_token=${window.sessionStorage.getItem('__VerifyLogin')}`
//return response.data.data;
}
else {
await ElMessageBox.alert("验证码错误或已失效,登录失败", '登录', { type: 'error' });
}
} catch (error) {
window.loadingInstance?.close();
console.log(error)
await ElMessageBox.alert(error.message, '异常', { type: 'error' });
//window.location.reload();//刷新当前页面
}
},
getCommunitys: async (queryString, data) => {
try {
if (queryString == undefined || queryString == "")
return;
window.loadingInstance = ElLoading.service({ lock: true, text: '加载中' });
const response = await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'get',
url: `/gb/yjb/api/outsidewall/Communitys?access_token=${window.sessionStorage.getItem('__VerifyLogin')}&searchkey=${queryString ?? ''}`,
responseType: "json",
});
window.loadingInstance?.close();
data.communitys = response.data.data;
return response.data.data;
} catch (error) {
window.loadingInstance?.close();
console.log(error)
if (error.response.status == 401)
ElMessageBox.alert("请先登录", '异常', { type: 'error' });
else
ElMessageBox.alert(error.message, '异常', { type: 'error' });
}
},
onChangeSelectCommunity: async (v, data) => {
if (v) {
const { name, id } = JSON.parse(v)
try {
window.loadingInstance = ElLoading.service({ lock: true, text: '加载中' });
const response = (window.cacheCommunitysData && window.cacheCommunitysData[id]) ?? await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'get',
url: '/gb/yjb/api/outsidewall/Communitys/' + id,
responseType: "json",
});
window.loadingInstance?.close();
if (!window.cacheCommunitysData) window.cacheCommunitysData = [];
if (!window.cacheCommunitysData[id]) window.cacheCommunitysData[id] = response;
data.buildings = response.data.data;
if (!data.form) data.form = {};
data.form.communityId = id;
data.form.communityName = name;
//data.form.buildings = response.data.data?.map(x => (
// {
// id: x.id,
// address: x.address,
// buildingName: x.buildingName,
// levelCount: x.levelCount,
// houseHolds: x.houseHolds,
// buildingUnit: x.buildingUnit,
// desingerUnit: x.desingerUnit,
// constructionUnit: x.constructionUnit,
// monitorUnit: x.monitorUnit,
// wuYeUnit: x.wuYeUnit,
// }
//)) ?? [];
data.form.buildcount = data.buildings.length;//楼栋数
data.form.householdcount = data.buildings.reduce((a, key) => { return a + key.houseHolds }, 0);//住户总数
data.form.totalfloorage = data.buildings.reduce((a, key) => { return a + key.areaCount }, 0);//总建筑面积
} catch (error) {
window.loadingInstance?.close();
console.log(error)
ElMessageBox.alert(error.message, '异常', { type: 'error' });
}
} else {
data.buildings = [];
data.form = {}
}
},
getBuildings: async (v, data) => {
if (v == undefined || v == "")
return;
const response = await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'get',
url: `/gb/yjb/api/outsidewall/Community/${data.form.communityId}?querystring=${v ?? ''}`,
responseType: "json",
});
if (!window.cacheCommunitysData) window.cacheCommunitysData = [];
if (!window.cacheCommunitysData[data.form.communityId]) window.cacheCommunitysData[data.form.communityId] = response;
//data.buildings = response.data.data;
data.form.searchBuildings = response.data.data?.map(x => (
{
id: x.id,
address: x.address,
buildingName: x.buildingName,
levelCount: x.levelCount,
houseHolds: x.houseHolds,
buildingUnit: x.buildingUnit,
desingerUnit: x.desingerUnit,
constructionUnit: x.constructionUnit,
monitorUnit: x.monitorUnit,
wuYeUnit: x.wuYeUnit,
}
)) ?? [];
},
onChangeSelectBuildings: async (v, data, formEl, childFormEl) => {
if (v) {
try {
let isAllChildValid = false;
if (data?.form?.isExistProblem == '0') { isAllChildValid = true; }
else {
//验证
var waitValid = data.form?.buildingsForm?.filter(a => a.building.curwallproblems.length > 0)
if (waitValid?.length > 0) {
for (let ii = 0; ii < waitValid.length; ii++) {
let _fe = waitValid[ii]?.formEl;
const isValid = await _fe?.validate(valid => {
if (!valid) {
data.buildingItemId = waitValid[ii].building.id;
}
});
if (isValid == false) {
ElMessageBox.alert('幢信息问卷未填写完整', '提示', { type: 'warning' });
return;
}
}
isAllChildValid = true;
}
else {
//ElMessageBox.alert('存在问题请展开幢信息进行问卷填写', '提示', { type: 'warning' });
}
const fromMerges = childFormEl.map((x, ii) => ({ formEl: x, building: data.buildings[ii] }));
//let validateFroms = [].concat(data?.form.buildingsForm?.filter(x => x.building.curwallproblems?.length > 0));
//if (validateFroms.length > 0) {
// for (let ii = 0; ii < validateFroms.length; ii++) {
// let _fe = validateFroms[ii]?.formEl;
// const isValid = _fe ?? await _fe?.validate(valid => {
// if (!valid) {
// data.buildingItemId = validateFroms[ii].building.id;
// }
// });
// if (isValid == false) {
// ElMessageBox.alert('幢信息问卷未填写完整', '提示', { type: 'warning' });
// return;
// }
// }
// isAllChildValid = true;
//}
//else {
// ElMessageBox.alert('存在问题请展开幢信息进行问卷填写', '提示', { type: 'warning' });
//}
window.loadingInstance = ElLoading.service({ lock: true, text: '加载中' });
if (!data.form.buildings) {
data.form.buildings = []
}
if (!data.form.buildingsForm) {
data.form.buildingsForm = []
}
var c = window.cacheCommunitysData[data.form.communityId].data.data.filter(a => a.id == v)
data.form.buildings.push(c[0])
data.form.buildingsForm.push(fromMerges.filter(x => x.building.id == data.buildingItemId)[0])
window.loadingInstance?.close();
}
} catch (error) {
window.loadingInstance?.close();
console.log(error)
ElMessageBox.alert(error.message, '异常', { type: 'error' });
}
} else {
}
},
onSubmit: (formEl, childFormEl, data) => {
console.log('submit!');
formEl.validate(async (valid) => {
if (valid) {
let isAllChildValid = false;
if (data?.form?.isExistProblem == '0') { isAllChildValid = true; }
else {
var waitValid = data.form?.buildingsForm?.filter(a => a.building.curwallproblems.length > 0)
if (waitValid?.length > 0) {
for (let ii = 0; ii < waitValid.length; ii++) {
let _fe = waitValid[ii]?.formEl;
const isValid = await _fe?.validate(valid => {
if (!valid) {
data.buildingItemId = waitValid[ii].building.id;
}
});
if (isValid == false) {
ElMessageBox.alert('幢信息问卷未填写完整', '提示', { type: 'warning' });
return;
}
}
isAllChildValid = true;
}
else {
ElMessageBox.alert('存在问题请展开幢信息进行问卷填写', '提示', { type: 'warning' });
}
//const fromMerges = childFormEl.map((x, ii) => ({ formEl: x, building: data.form.buildings[ii] }));
////const validateFroms = [].concat(fromMerges.filter(x => x.building.id == data.buildingItemId), fromMerges.filter(x => x.building.curwallproblems?.length > 0));
//let validateFroms = [].concat(data?.form.buildings.filter(x => x.id == data.buildingItemId), data?.form.buildings.filter(x => x.curwallproblems?.length > 0));
//if (validateFroms.length > 0) {
// for (let ii = 0; ii < validateFroms.length; ii++) {
// const isValid = await validateFroms[ii].formEl.validate(valid => {
// if (!valid) {
// data.buildingItemId = validateFroms[ii].building.id;
// }
// });
// if (!isValid) {
// ElMessageBox.alert('幢信息问卷未填写完整', '提示', { type: 'warning' });
// return;
// }
// }
// isAllChildValid = true;
//}
//else {
// ElMessageBox.alert('存在问题请展开幢信息进行问卷填写', '提示', { type: 'warning' });
//}
}
if (isAllChildValid) {
ElMessageBox.confirm('确定提交吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
debugger
window.loadingInstance = ElLoading.service({ lock: true, text: '提交中...请稍候' });
try {
data.form.buildings = data.form.buildings?.filter(a => a.curwallproblems?.length > 0)
const response = await axios({
headers: { 'Content-Type': 'multipart/form-data' },
method: 'post',
url: `/gb/yjb/api/outsidewall/submit?access_token=${window.sessionStorage.getItem('__VerifyLogin')}`,
data: data.form,
responseType: "json"
});
window.loadingInstance?.close();
//debugger;
if (response.data?.success == true) {
await ElMessageBox.alert('提交成功', '成功', { type: 'success' });
window.location.reload();//刷新当前页面
} else {
ElMessageBox.alert(response.data.message, '异常', { type: 'error' });
}
} catch (error) {
console.log(error)
window.loadingInstance?.close();
ElMessageBox.alert(error.message, '异常', { type: 'error' });
}
}).catch(() => { });
}
}
else {
ElMessageBox.alert("社区信息问卷未填写完整", '提示', { type: 'warning' });
}
});
},
fileChange: (response, file, fileList) => {
if (response.success == false) {
ElMessageBox.alert('上传失败,请稍候重试', '异常', { type: 'error' });
return;
}
if (file.response) {
if (!pageData.value.form.fileList) pageData.value.form.fileList = [];
pageData.value.form.fileList.push(file.response.data);
}
},
fileRemove: async (file, fileList) => {
console.log(file, fileList);
window.loadingInstance = ElLoading.service({ lock: true, text: '处理中' });
try {
const response = await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'get',
url: '/gb/yjb/api/outsidewall/sysFileInfo/delete/' + file.response.data,
responseType: "json",
});
if (file.response && pageData.value.form.fileList) {
pageData.value.form.fileList = pageData.value.form.fileList.filter((a) => { return a != file.response.data });
}
//}
window.loadingInstance?.close();
} catch (error) {
console.log(error)
window.loadingInstance?.close();
}
},
fileChildChange: (response, file, fileList, scope, toward) => {
if (response.success == false) {
ElMessageBox.alert('上传失败,请稍候重试', '异常', { type: 'error' });
return;
}
if (file.response) {
var _pf = {
file: file.response.data,
toward: toward
}
if (!scope.problemfiles) scope.problemfiles = [];
scope.problemfiles.push(_pf)
}
},
fileChildRemove: async (file, fileList, scope) => {
console.log(file, fileList);
window.loadingInstance = ElLoading.service({ lock: true, text: '处理中' });
try {
const response = await axios({
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
method: 'get',
url: '/gb/yjb/api/outsidewall/sysFileInfo/delete/' + file.response.data,
responseType: "json",
});
if (file.response && scope.problemfiles) {
scope.problemfiles = scope.problemfiles.filter((a) => { return a.file != file.response.data });
}
window.loadingInstance?.close();
} catch (error) {
console.log(error)
window.loadingInstance?.close();
}
},
filePreview: (file, fileList) => {
pageData.value.dialogImageUrl = window.location.protocol + "//" + window.location.host + "/gb/yjb/api/outsidewall/sysFileInfo/preview/" + file.response.data;
pageData.value.dialogImageUrls = fileList.map(a => window.location.protocol + "//" + window.location.host + "/gb/yjb/api/outsidewall/sysFileInfo/preview/" + a.response.data);
},
}
onMounted(async () => {
await funHandles.init(pageData.value);
});
return {
XEUtils,
formRef,
childFormRef,
loginFormRef,
rulesCheckData,
checkPhone,
pageData,
staticData,
funHandles
}
}
});
app.use(ElementPlus, { locale: ElementPlusLocaleZhCn });
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
app.mount("#app");
</script>
<style>
.upload-demo .el-upload-dragger {
height: 100%;
border-width: 0;
padding: 20px var(--el-upload-dragger-padding-vertical);
}
</style>
</body>
</html>