Quellcode durchsuchen

宅基地申请 证书 公示

wulanhaote
zhao vor 3 Jahren
Ursprung
Commit
882269ce23
30 geänderte Dateien mit 5970 neuen und 29 gelöschten Zeilen
  1. +101
    -0
      src/api/onlineHome/homestead/application.js
  2. +61
    -0
      src/api/onlineHome/homestead/houseAnnounce.js
  3. +143
    -0
      src/api/onlineHome/homestead/houseProposer.js
  4. +37
    -0
      src/api/onlineHome/homestead/license.js
  5. +8
    -0
      src/api/system/config.js
  6. +105
    -0
      src/components/form/FieldCalender.vue
  7. +88
    -0
      src/components/form/FieldCheckbox.vue
  8. +132
    -0
      src/components/form/FieldDatePicker.vue
  9. +106
    -0
      src/components/form/FieldRadio.vue
  10. +169
    -0
      src/components/form/FieldSelect.vue
  11. +340
    -0
      src/components/house/CommonMap.vue
  12. +270
    -0
      src/components/house/HouseApplyUploadComp.vue
  13. +155
    -0
      src/components/house/HouseLocationPlanComp.vue
  14. +75
    -0
      src/components/house/RawImageCarousel.vue
  15. +54
    -0
      src/router/index.js
  16. +3
    -0
      src/store/getters.js
  17. +17
    -2
      src/store/modules/user.js
  18. +54
    -7
      src/views/onlineHome/done.vue
  19. +5
    -3
      src/views/onlineHome/homestead/flowChart/index.vue
  20. +50
    -8
      src/views/onlineHome/homestead/homeApplication/applicationList.vue
  21. +254
    -0
      src/views/onlineHome/homestead/homeApplication/houseAnnounce.vue
  22. +195
    -0
      src/views/onlineHome/homestead/homeApplication/houseLicense.vue
  23. +395
    -0
      src/views/onlineHome/homestead/homeApplication/houseLicenseDetail.vue
  24. +141
    -0
      src/views/onlineHome/homestead/homeApplication/licensePermitEdit.vue
  25. +189
    -0
      src/views/onlineHome/homestead/homeApplication/licenseRatificationEdit.vue
  26. +2812
    -0
      src/views/onlineHome/homestead/homeApplication/proposerLite.vue
  27. +1
    -1
      src/views/onlineHome/mailList.vue
  28. +1
    -1
      src/views/onlineHome/my.vue
  29. +5
    -5
      src/views/onlineHome/workbench.vue
  30. +4
    -2
      src/views/onlineHomeLogin.vue

+ 101
- 0
src/api/onlineHome/homestead/application.js Datei anzeigen

@@ -121,3 +121,104 @@ export function getHouseMembers(id){
method:'get'
})
}

//获取申请单明细 WLHT
export function allInformationWLHT(id){
return request({
url:'/house/allinformation/getAllInformation/'+id,
method:'get',
})
}

// 查询文件配置树
export function getAttachmentConfigTree(query) {
return request({
url: '/system/attachmentConfig/getAttachmentConfigTree',
method: 'get',
params: query
})
}

// 新增地房申请-申请人
export function addProposer(data) {
return request({
url: '/house/custom/saveHouseBaseInfo',
method: 'post',
data: data
})
}

//检查是否重复建房
export function checkDuplicateBuilding(query) {
return request({
url: '/house/custom/checkDuplicateBuilding',
method: 'get',
params: query
})
}

//查询宅地信息
export function checkDuplicateBuildingQuery(query) {
return request({
url: '/house/custom/checkDuplicateBuildingQuery',
method: 'get',
params: query
})
}

//乌兰浩特申请单人操作
export function customSubmitWLHT(id) {
return request({
url: '/house/custom/submitWLHT/' + id,
method: 'post'
})
}
// 新增地房申请-开工申请
export function submitStartWLHT(id) {
return request({
url: '/house/start/submitWLHT/'+id,
method: 'post',
})
}

// 修改地房申请-开工申请
export function updateStart(data) {
return request({
url: '/house/start/edit',
method: 'post',
data: data
})
}

// 修改地房申请-验收意见
export function updateEnd(data) {
return request({
url: '/house/end/edit',
method: 'post',
data: data
})
}

// 提交地房申请-验收意见(乌兰浩特 简化流程)
export function submitEndWLHT(id) {
return request({
url: '/house/end/submitWLHT/'+id,
method: 'post',
})
}

//查询当前登录账号坐标
export function getQueryLand() {
return request({
url: '/system/dept/get/current',
method: 'get'
})
}

//查询当前登录账号坐标
export function getWorkflow() {
return request({
url: '/house/custom/workflow',
method: 'get'
})
}

+ 61
- 0
src/api/onlineHome/homestead/houseAnnounce.js Datei anzeigen

@@ -0,0 +1,61 @@
import request from '@/utils/request'

// 查询地房申请-村组公示列表
export function listAnnounce(query) {
return request({
url: '/house/announce/list',
method: 'get',
params: query
})
}

// 查询地房申请-村组公示详细
export function getAnnounce(id) {
return request({
url: '/house/announce/get/' + id,
method: 'get'
})
}

// 新增地房申请-村组公示
export function addAnnounce(data) {
return request({
url: '/house/announce/add',
method: 'post',
data: data
})
}

// 修改地房申请-村组公示
export function updateAnnounce(data) {
return request({
url: '/house/announce/edit',
method: 'post',
data: data
})
}

// 删除地房申请-村组公示
export function delAnnounce(id) {
return request({
url: '/house/announce/remove/' + id,
method: 'get'
})
}

// 导出地房申请-村组公示
export function exportAnnounce(query) {
return request({
url: '/house/announce/export',
method: 'get',
params: query
})
}

// 查询地房申请-申请人详细
export function getProposer(id) {
return request({
url: '/house/proposer/get/' + id,
method: 'get'
})
}

+ 143
- 0
src/api/onlineHome/homestead/houseProposer.js Datei anzeigen

@@ -0,0 +1,143 @@
import request from '@/utils/request'

// 查询地房申请-申请人列表
export function listProposer(query) {
return request({
url: '/house/proposer/list',
method: 'get',
params: query
})
}

// 查询地房申请-申请人列表
export function queryAdmin(query) {
return request({
url: '/house/proposer/queryAdmin',
method: 'get',
params: query
})
}


// 查询地房申请-申请人详细
export function getProposer(id) {
return request({
url: '/house/proposer/get/' + id,
method: 'get'
})
}

// 新增地房申请-申请人
export function addProposer(data) {
return request({
url: '/house/custom/saveHouseBaseInfo',
method: 'post',
data: data
})
}

// 修改地房申请-申请人
export function updateProposer(data) {
return request({
url: '/house/proposer/edit',
method: 'post',
data: data
})
}

// 删除地房申请-申请人
export function delProposer(id) {
return request({
url: '/house/proposer/remove/' + id,
method: 'get'
})
}

// 导出地房申请-申请人
export function exportProposer(query) {
return request({
url: '/house/proposer/export',
method: 'get',
params: query
})
}

// 导出地房申请-申请人
export function exportAdmin(query) {
return request({
url: '/house/proposer/exportAdmin',
method: 'get',
params: query
})
}

// 查询地房申请-申请人详细
export function selectProposer(id, data) {
return request({
url: '/house/allinformation/' + id,
method: 'get',
params: data
})
}


// 查询地房申请-申请人详细
export function selectAllLicense(id) {
return request({
url: '/house/allinformation/license/' + id,
method: 'get'
})
}


//申请单人操作
export function customSubmit(id) {
return request({
url: '/house/custom/submit/' + id,
method: 'post'
})
}

//模糊查询申请人
export function getHouseMembers(query) {
return request({
url: '/house/custom/getHouseMembers',
method: 'get',
params: query
})
}

//检查是否重复建房
export function checkDuplicateBuilding(query) {
return request({
url: '/house/custom/checkDuplicateBuilding',
method: 'get',
params: query
})
}

//查询宅地信息
export function checkDuplicateBuildingQuery(query) {
return request({
url: '/house/custom/checkDuplicateBuildingQuery',
method: 'get',
params: query
})
}

//乌兰浩特申请单人操作
export function customSubmitWLHT(id) {
return request({
url: '/house/custom/submitWLHT/' + id,
method: 'post'
})
}

// 查询地房申请-申请人详细
export function selectProposerWLHT(id, data) {
return request({
url: '/house/allinformation/getAllInformation/' + id,
method: 'get',
params: data
})
}

+ 37
- 0
src/api/onlineHome/homestead/license.js Datei anzeigen

@@ -0,0 +1,37 @@
import request from '@/utils/request'

// 新增地房申请-规划许可证
export function addPermit(data) {
return request({
url: '/house/permit/add',
method: 'post',
data: data
})
}

// 修改地房申请-规划许可证
export function updatePermit(data) {
return request({
url: '/house/permit/edit',
method: 'post',
data: data
})
}

// 新增地房申请-宅基地批准书
export function addRatification(data) {
return request({
url: '/house/ratification/add',
method: 'post',
data: data
})
}

// 修改地房申请-宅基地批准书
export function updateRatification(data) {
return request({
url: '/house/ratification/edit',
method: 'post',
data: data
})
}

+ 8
- 0
src/api/system/config.js Datei anzeigen

@@ -7,3 +7,11 @@ export function getGeoServerConfigKey() {
method: 'get'
})
}

// 附件地址前缀
export function getSystemAttachmentUrl() {
return request({
url: '/system/config/configKey/system.attachment.url',
method: 'get'
})
}

+ 105
- 0
src/components/form/FieldCalender.vue Datei anzeigen

@@ -0,0 +1,105 @@
<template>
<!-- !!!注: 不支持逝去的日子, 以`FieldDatePicker`代替 !!! -->
<div>
<van-field
:readonly="true"
:clickable="!readonly"
:name="name"
:value="visibleValue"
:label="label"
:placeholder="placeholder"
@click="openPopup"
input-align="right"
right-icon="arrow-down"
:rules="rules"
:required="required"
:label-width="labelWidth || 'auto'"
>
<!-- <template #button>
<van-icon name="notes-o" size="20"/>
</template>-->
</van-field>
<van-calendar
ref="calender"
v-model="popupVisible"
:title="label"
:default-date="internalValue"
:readonly="readonly"
@confirm="onConfirm" />
</div>
</template>

<script>

import { formatDate } from "element-ui/src/utils/date-util.js"

export default {
name: "FieldCalender",
props: [
'name', 'readonly', 'value', 'label', 'placeholder', 'required', 'rules', 'formatter', 'labelWidth'
],
watch: {
value: function (newVal, oldVal) {
this.visibleValue = newVal;
this.internalValue = new Date(newVal);
},
},
created() {
if(this.value)
{
this.visibleValue = this.value;
this.internalValue = new Date(this.value);
}
},
data() {
return {
popupVisible: false,
internalValue: new Date(this.value || Date.now()),
visibleValue: this.value,
loading: false,
};
},
methods: {
openPopup() {
if(!this.readonly)
{
this.popupVisible = true;
this.$nextTick(() => {
this.$refs.calender.scrollToDate(this.internalValue);
})
}
},
closePopup() {
this.popupVisible = false;
},
onConfirm(data) {
this.syncValue(data);
this.$emit('input', this.visibleValue);
this.$emit('confirm', this.visibleValue, this.internalValue);
this.closePopup();
},
onCancel() {
this.closePopup();
this.$emit('cancel');
},
getValue(data) {
let type = typeof(this.formatter);
if(type === 'function')
return this.formatter(data);
else if(type === 'string')
return formatDate(data, this.formatter);
else
return data;
},
syncValue(data) {
this.internalValue = data;
this.visibleValue = this.getValue(data);
console.log(this.internalValue, this.visibleValue);
},
},
}
</script>

<style scoped>

</style>

+ 88
- 0
src/components/form/FieldCheckbox.vue Datei anzeigen

@@ -0,0 +1,88 @@
<template>
<div>
<van-field
:readonly="true"
:clickable="!readonly"
:name="name"
:label="label"
:placeholder="placeholder"
input-align="right"
:required="required"
:label-width="labelWidth || 'auto'"
@click="toggle"
>
<template #right-icon>
<van-checkbox v-model="checked"
:disabled="readonly"
shape="square"
></van-checkbox>
</template>
</van-field>
</div>
</template>

<script>

export default {
name: "fieldCheckbox",
props: [
'name', 'readonly', 'value', 'label', 'placeholder', 'required', 'rules',
'trueLabel', 'falseLabel', 'labelWidth'
],
watch: {
value: function (newVal, oldVal) {
this.parseValue(newVal);
},
checked: function (newVal, oldVal) {
if(newVal !== undefined)
this.onChanged(newVal);
},
},
created() {
this.parseValue(this.value);
},
data() {
return {
internalValue: this.value,
remoteColumns: null,
remoteResponse: null,
checked: false,
};
},
methods: {
onChanged(data) {
let trueLabel = this.getTrueLabel();
let falseLabel = this.getFalseLabel();
let res = data ? trueLabel : falseLabel;
if(res != this.internalValue)
{
this.internalValue = res;
this.$emit('change', this.internalValue);
this.$emit("input", this.internalValue);
}
},
getFalseLabel() {
return this.falseLabel !== undefined ? this.falseLabel : false;
},
getTrueLabel() {
return this.trueLabel !== undefined ? this.trueLabel : true;
},
parseValue(data) {
let trueLabel = this.getTrueLabel();
let falseLabel = this.getFalseLabel();
let res = data == trueLabel;
this.internalValue = res ? trueLabel : falseLabel;
this.checked = res;
},
toggle() {
console.log(123);
if(!this.readonly)
this.checked = !this.checked;
},
},
}
</script>

<style scoped>

</style>

+ 132
- 0
src/components/form/FieldDatePicker.vue Datei anzeigen

@@ -0,0 +1,132 @@
<template>
<div>
<van-field
:readonly="true"
:clickable="!readonly"
:name="name"
:value="visibleValue"
:label="label"
:placeholder="placeholder"
@click="openPopup"
input-align="right"
right-icon="arrow-down"
:rules="rules"
:required="required"
:label-width="labelWidth || 'auto'"
>
<!-- <template #button>
<van-icon name="notes-o" size="20"/>
</template>-->
</van-field>
<van-popup v-model="popupVisible" position="bottom">
<van-datetime-picker
ref="picker"
v-model="internalValue"
:type="type || 'date'"
:readonly="readonly"
:title="label"
@confirm="onConfirm"
@cancel="onCancel"
@change="onChanged"
/>
</van-popup>
</div>
</template>

<script>

import { formatDate } from "element-ui/src/utils/date-util.js"

export default {
name: "fieldDatePicker",
props: [
'name', 'readonly', 'value', 'label', 'placeholder', 'required', 'rules', 'formatter', 'labelWidth',
'type', // datetime date time year-month month-day datehour
],
watch: {
value: function (newVal, oldVal) {
this.visibleValue = newVal;
this.internalValue = new Date(newVal);
},
},
created() {
if(this.value)
{
this.visibleValue = this.value;
this.internalValue = new Date(this.value);
}
// 默认当前
/* else {
this.syncValue(new Date);
}*/
},
data() {
return {
popupVisible: false,
internalValue: new Date(this.value || Date.now()),
visibleValue: this.value,
loading: false,
};
},
methods: {
openPopup() {
if(!this.readonly)
{
console.log(this.internalValue);
this.popupVisible = true;
this.$nextTick(() => {
try
{
if(1)
{
let values = (this.visibleValue || this.getValue(new Date)).split(/\D+/); //TODO: 按非数字符号粗略分割解析初始值, 仅对于类似yyyy-MM-dd
console.log(values);
this.$refs.picker.getPicker().setValues(values);
}
else {
//TODO: 打开时保存初始值, 取消或点击遮罩未确定的时候恢复该初始值到v-model
}
}
catch (e)
{
console.error(e);
}
})
}
},
closePopup() {
this.popupVisible = false;
},
onConfirm(data) {
this.syncValue(data);
this.$emit('input', this.visibleValue);
this.$emit('confirm', this.visibleValue, this.internalValue);
this.closePopup();
},
onCancel() {
this.closePopup();
this.$emit('cancel');
},
onChanged(data) {
this.$emit('change', this.getValue(data), data);
},
getValue(data) {
let type = typeof(this.formatter);
if(type === 'function')
return this.formatter(data);
else if(type === 'string')
return formatDate(data, this.formatter);
else
return data;
},
syncValue(data) {
this.internalValue = data;
this.visibleValue = this.getValue(data);
},
},
}
</script>

<style scoped>

</style>

+ 106
- 0
src/components/form/FieldRadio.vue Datei anzeigen

@@ -0,0 +1,106 @@
<template>
<div>
<van-field
:readonly="true"
:name="name"
:label="label"
:placeholder="placeholder"
input-align="right"
:required="required"
:label-width="labelWidth || 'auto'"
>
<template #right-icon>
<van-radio-group :disabled="readonly" @change="onChanged" v-model="internalValue" direction="horizontal" :rules="rules">
<van-radio v-for="(item, index) in (columns ? columns : remoteColumns)" :name="getValue(item)" :key="index">{{getLabel(item)}}</van-radio>
</van-radio-group>
</template>
</van-field>
</div>
</template>

<script>
import request from "@/utils/request";

export default {
name: "fieldRadio",
props: [
'name', 'readonly', 'value', 'label', 'placeholder', 'required', 'rules', 'columns',
'valueKey', 'dataKey', 'remoteUrl', 'onRemoteResponse', 'labelWidth'
],
watch: {
value: function (newVal, oldVal) {
this.internalValue = newVal;
},
columns: function (newVal, oldVal) {
},
remoteUrl: function (newVal, oldVal) {
this.requestRemote();
},
onRemoteResponse: function (newVal, oldVal) {
this.parseRemote();
}
},
created() {
if(this.remoteUrl)
this.requestRemote();
},
data() {
return {
internalValue: this.value,
remoteColumns: null,
remoteResponse: null,
};
},
methods: {
onChanged(data) {
this.$emit("input", this.internalValue);
this.$emit('change', this.internalValue);
},
getValue(data) {
return typeof(data) === 'object' && this.dataKey ? data[this.dataKey] : data;
},
getLabel(data) {
return typeof(data) === 'object' && this.valueKey ? data[this.valueKey] : data;
},
getColumns() {
return this.columns ? this.columns : this.remoteColumns;
},
requestRemote() {
if(!this.remoteUrl)
return;
this.remoteColumns = [];
let promise = typeof(this.remoteUrl) === 'function' ? this.remoteUrl() : (this.remoteUrl instanceof Promise ? this.remoteUrl : request(this.remoteUrl));
promise.then((resp) => {
this.remoteResponse = resp;
this.parseRemote();
}).catch((e) => {
console.error(e);
}).finally(() => {
})
},
parseRemote() {
if(!this.remoteResponse)
return;
let type = typeof(this.onRemoteResponse);
if(type === 'function')
this.remoteColumns = this.onRemoteResponse(this.remoteResponse);
else if(type === 'string')
{
let arr = this.onRemoteResponse.split('.');
let ptr = this.remoteResponse;
for(let i in arr)
{
ptr = this.remoteResponse[arr[i]];
}
this.remoteColumns = ptr;
}
else
this.remoteColumns = this.remoteResponse;
},
},
}
</script>

<style scoped>

</style>

+ 169
- 0
src/components/form/FieldSelect.vue Datei anzeigen

@@ -0,0 +1,169 @@
<template>
<div>
<van-field
:readonly="true"
:clickable="!readonly"
:name="name"
:value="visibleValue"
:label="label"
:placeholder="placeholder"
@click="openPopup"
input-align="right"
right-icon="arrow-down"
:rules="rules"
:required="required"
:label-width="labelWidth || 'auto'"
>
</van-field>
<van-popup v-model="popupVisible" position="bottom">
<van-picker
ref="picker"
:title="label"
show-toolbar
:columns="columns ? columns : remoteColumns"
:readonly="readonly"
:value-key="valueKey"
:loading="loading"
@confirm="onConfirm"
@cancel="onCancel"
@change="onChanged"
/>
</van-popup>
</div>
</template>

<script>
import request from "@/utils/request";

export default {
name: "fieldSelect",
props: [
'name', 'readonly', 'value', 'label', 'placeholder', 'required', 'rules', 'columns',
'valueKey', 'dataKey', 'remoteUrl', 'onRemoteResponse', 'labelWidth'
],
watch: {
value: function (newVal, oldVal) {
this.internalValue = newVal;
this.visibleValue = newVal;
this.syncIndex();
},
columns: function (newVal, oldVal) {
this.syncIndex();
},
remoteUrl: function (newVal, oldVal) {
this.requestRemote();
},
onRemoteResponse: function (newVal, oldVal) {
this.parseRemote();
}
},
created() {
if(this.remoteUrl)
this.requestRemote();
},
data() {
return {
popupVisible: false,
internalValue: this.value,
visibleValue: '',
defaultIndex: 0,
remoteColumns: null,
loading: false,
remoteResponse: null,
};
},
methods: {
openPopup() {
if(!this.readonly)
{
this.popupVisible = true;
this.$nextTick(() => {
this.$refs.picker.setIndexes([this.defaultIndex]);
})
}
},
closePopup() {
this.popupVisible = false;
},
onChanged(data) {
this.$emit('change', data);
},
onConfirm(data) {
this.syncValue(data);
this.$emit('input', this.internalValue);
this.$emit('confirm', this.internalValue);
this.closePopup();
},
onCancel() {
this.closePopup();
this.$emit('cancel');
},
getValue(data) {
return typeof(data) === 'object' && this.dataKey ? data[this.dataKey] : data;
},
getLabel(data) {
return typeof(data) === 'object' && this.valueKey ? data[this.valueKey] : data;
},
syncValue(data) {
this.internalValue = this.getValue(data);
this.visibleValue = this.getLabel(data);
},
syncIndex() {
let columns = this.getColumns();
if(!columns)
return 0;
for(let i in columns)
{
if(this.getValue(columns[i]) == this.internalValue) {
this.defaultIndex = i;
this.visibleValue = this.getLabel(columns[i]);
break;
}
}
return 0;
},
getColumns() {
return this.columns ? this.columns : this.remoteColumns;
},
requestRemote() {
if(!this.remoteUrl)
return;
this.loading = true;
this.remoteColumns = [];
let promise = typeof(this.remoteUrl) === 'function' ? this.remoteUrl() : (this.remoteUrl instanceof Promise ? this.remoteUrl : request(this.remoteUrl));
promise.then((resp) => {
this.remoteResponse = resp;
this.parseRemote();
this.syncIndex();
}).catch((e) => {
console.error(e);
}).finally(() => {
this.loading = false;
})
},
parseRemote() {
if(!this.remoteResponse)
return;
let type = typeof(this.onRemoteResponse);
if(type === 'function')
this.remoteColumns = this.onRemoteResponse(this.remoteResponse);
else if(type === 'string')
{
let arr = this.onRemoteResponse.split('.');
let ptr = this.remoteResponse;
for(let i in arr)
{
ptr = this.remoteResponse[arr[i]];
}
this.remoteColumns = ptr;
}
else
this.remoteColumns = this.remoteResponse;
},
},
}
</script>

<style scoped>

</style>

+ 340
- 0
src/components/house/CommonMap.vue Datei anzeigen

@@ -0,0 +1,340 @@
<template>
<div class="mapBox">
<div :id="'map-element' + elementId" class="map-element" style="width: 100%; height: 100%;"></div>
<div :id="'draw-toolbar' + elementId" class="mapBox_button" v-if="allowDraw">
<van-button :id="'drawPolygon' + elementId" native-type="button" icon="../../../static/images/icon/icon_ht.png" type="default" block round size="small"></van-button>
<van-button :id="'drawRemove' + elementId" native-type="button" icon="cross" type="default" block round size="small" style="margin-top: 0.2rem"></van-button>
</div>
</div>
</template>

<script>
import $ from "jquery";

const COMMON_MAP_DRAW_LAYER_NAME = '_Draw_layer';

export default {
name: "CommonMap",
props: {
minMapZoom: {
type: Number,
default: 16,
},
maxMapZoom: {
type: Number,
default: 18.9,
},
allowDraw: {
type: Boolean,
default: false,
},
coord: {
type: Array,
default: function() {
return [115.452752, 31.789033];
},
},
},
data() {
return {
isInited: false,
mapObject: null,
userLayers: [],
drawResult: null,
elementId: ('_' + Math.random()).replaceAll('.', ''),
};
},
created() {
},
mounted() {
this.init();
},
methods: {
init() {
if(this.isInited)
return;
this.createMap();
this.setDraw(true);
this.isInited = true;
},
destroyMap() {
if(!this.mapObject)
return;
delete this.mapObject;
document.getElementById("map-element" + this.elementId).innerHTML = '';
this.mapObject = null;
},
createMap() {
if(this.mapObject)
return;

let projection = new ol.proj.Projection({
//地图投影类型
code: "EPSG:3857",
units: "degrees",
//extent:extent
});
let aerial = new ol.layer.Tile({
source: new ol.source.XYZ({
url: "http://t0.tianditu.gov.cn/img_w/wmts?" +
"SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
"&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=cc4aba6e967096098249efa069733067",
}),
isGroup: true,
name: "卫星影像图",
});

let yingxzi = new ol.layer.Tile({
source: new ol.source.XYZ({
url: "https://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=cc4aba6e967096098249efa069733067",
}),
isGroup: true,
name: "天地图文字标注--卫星影像图",
});

//加载地图
let map = new ol.Map({
// interactions: ol.interaction.DragPan({
// onFocusOnly: false
// }),
controls: ol.control.defaults({attribution: false, zoom: false, rotate: false}).extend([]), //隐藏放大缩小按钮
layers: [aerial, yingxzi],
projection: projection,
target: "map-element" + this.elementId,
logo: 'false',
view: new ol.View({
center: ol.proj.fromLonLat(this.coord),
//zoom: false,
zoom: 17.9,
minZoom: this.minMapZoom, //地图缩小限制
maxZoom: this.maxMapZoom, //地图放大限制
}),
});

this.mapObject = map;
//(map);
//console.log(map.getProperties());
},
setCoord(lng, lat) {
if(!this.mapObject)
return false;
this.mapObject.getView().setCenter(ol.proj.fromLonLat([lng, lat]));
//console.log('setCoord', lng, lat,this.mapObject);
},
getProjection() {
if(!this.mapObject)
return null;
return this.mapObject.get('view').getProjection();
},
pushLayer(name, layer) {
if(!this.mapObject)
return false;
if(this.checkNameExists(name))
{
console.error(name + ' is dup!');
return false;
}
this.userLayers.push({
name: name,
layer: layer,
visible: true,
});
this.mapObject.addLayer(layer);
//console.log(name, layer);
return true;
},
checkNameExists(name) {
if(this.userLayers.length === 0)
return false;
let res = this.userLayers.findIndex((x) => {
return x.name === name;
});
return res !== -1;
},
findLayer(name = null) {
if(this.userLayers.length === 0)
return null;
if(name) {
for(let i in this.userLayers) {
if(this.userLayers[i].name == name) {
return this.userLayers[i];
}
}
}
else {
let last = this.userLayers.length - 1;
return this.userLayers[last];
}
return null;
},
takeLayer(name = null) {
if(this.userLayers.length === 0)
return null;
if(name) {
for(let i in this.userLayers) {
if(this.userLayers[i].name == name) {
let layer = this.userLayers[i];
this.userLayers.splice(i, 1);
return layer;
}
}
}
else {
let last = this.userLayers.length - 1;
let layer = this.userLayers[last];
this.userLayers.splice(last, 1);
return layer;
}
return null;
},
popLayer(name = null) {
let layer = this.takeLayer(name);
if(layer)
this.mapObject.removeLayer(layer.layer);
},
setLayerVisible(name, on) {
let layer = this.findLayer(name);
//console.log(layer.layer);
if(!layer)
return false;
layer.layer.setVisible(on);
return true;
},
hideLayer(name = null) {
return this.setLayerVisible(name, false);
},
showLayer(name = null) {
return this.setLayerVisible(name, true);
},
setDraw(on) {
if(!this.mapObject)
return;
/* if(this.allowDraw === on)
return;*/
if(on) {
let self = this;
let draw;

// 不要使用 $('DOM-selector').click(function), 动态加载按钮时手机端会失效
$(document).on('click', "#drawPolygon" + this.elementId, function () {
self.drawResult = null;
self.$emit("drawStarted");

self.popLayer(COMMON_MAP_DRAW_LAYER_NAME);
let drawLayer = new ol.layer.Vector({
source: new ol.source.Vector(),
});

self.pushLayer(COMMON_MAP_DRAW_LAYER_NAME, drawLayer);
draw = new ol.interaction.Draw({
source: drawLayer.getSource(),
type: "Polygon"
});
draw.on('drawend', function (evt) {
if(self.drawInsert != null){
$("#drawRemove" + self.elementId).trigger('click');
}
let feature = evt.feature;
let geometry = feature.getGeometry();
let coordinate = geometry.getCoordinates();
self.drawResult = coordinate;
self.$emit("drawFinished", coordinate);
});
self.mapObject.addInteraction(draw);
//console.log("drawPolygon");
});
//清除画图鼠标点击事件
$(document).on('click', "#drawRemove" + this.elementId, function () {
self.drawInsert = null;
self.mapObject.removeInteraction(draw);
self.popLayer(COMMON_MAP_DRAW_LAYER_NAME);
//console.log("drawRemove");
});
//还原之前图层
/*$("#drawReset" + this.elementId).click(function () {
self.popLayer(COMMON_MAP_DRAW_LAYER_NAME);
self.drawResult = null;
self.$emit("drawReseted");
//console.log("drawReset");
});*/
}
else
{
self.popLayer(COMMON_MAP_DRAW_LAYER_NAME);
self.drawResult = null;
}
},

setLayer(name, theGeom = null) {
this.popLayer(name);
if(theGeom)
this.addLayer(name, theGeom);
},
addLayer(name, theGeom) {
if(!this.mapObject)
return false;

//地图只加载一次
//加载地图编辑
//图层查询定位开始 ---------start
let hc_land = new ol.layer.Vector({
title: name,
source: new ol.source.Vector({
projection: this.getProjection(),
features: new ol.format.GeoJSON().readFeatures("{\n" +
" \"type\": \"Feature\",\n" +
" \"geometry\":" + theGeom + "}"),
}),
style: new ol.style.Style({
fill: new ol.style.Fill({
//矢量图层填充颜色,以及透明度
color: "rgba(204, 255, 204,0.3)",
}),
stroke: new ol.style.Stroke({
//边界样式
color: "#47c68f",
width: 3,
}),
}),
});
if(!this.pushLayer(name, hc_land))
return false;
var maxXMap = hc_land.values_.source.featuresRtree_.rbush_.data.maxX;
var maxYMap = hc_land.values_.source.featuresRtree_.rbush_.data.maxY;
var minXMap = hc_land.values_.source.featuresRtree_.rbush_.data.minX;
var minYMap = hc_land.values_.source.featuresRtree_.rbush_.data.minY;
//定位查询位置
var center = ol.extent.getCenter([maxXMap, maxYMap, minXMap, minYMap]); //获取边界区域的中心位置
this.mapObject.getView().animate({
// 只设置需要的属性即可
center: center, // 中心点
zoom: 17.9, // 缩放级别
rotation: undefined, // 缩放完成view视图旋转弧度
duration: 1000, // 缩放持续时间,默认不需要设置
});
return true;
},
update() {
if(!this.mapObject)
return;
this.mapObject.updateSize();
},
}
}
</script>

<style scoped lang="scss">

.map-element {
width: 100%;
height: 100%;
}
.mapBox{
position: relative;
.mapBox_button{
position: absolute;
top: 0.2rem;
right: 2%;
}
}
</style>

+ 270
- 0
src/components/house/HouseApplyUploadComp.vue Datei anzeigen

@@ -0,0 +1,270 @@
<template>
<div v-if="this.attachmentList.length !== 0">
<p class="main_title">当前节点所需上传文件</p>
<van-steps direction="vertical" :active="active">
<van-step
v-for="(item, index) in attachmentList"
:key="index">
<van-collapse :accordion="true" v-model="item.collapse">
<van-collapse-item :title="item.fileTypeName + '(' + item.fileList.length + ')'" :name="0">
<van-uploader
v-model="item.fileList"
:after-read="(file, detail) => { handleUploadSuccess(file, detail, item); }"
:readonly="disabled || !item.current"
:disabled="disabled || !item.current"
:show-upload="!disabled && item.current"
:before-delete="handleRemove"
>
<!-- accept=".jpg,.png,.gif,.pdf,.doc,.docx,.xlsx,.xls" 设置了无法拉起相机/下载 -->
</van-uploader>
</van-collapse-item>
</van-collapse>
</van-step>
</van-steps>

</div>
</template>

<script>
import { treeSingleProcessView , attach , removeFile , getAttachmentConfigTree, attachmentFind } from "@/api/onlineHome/homestead/application";
import {getToken} from "@/utils/auth";
import request from '@/utils/request'
/** 导入JS方法 */

export default {
name: "houseApplyUploadComp",
components: {},
props: ["businessType", "proposerId", "houseApplyStatus", "processKey", "tableName", "readonly", 'full'],
data() {
return {
disabled: this.readonly,
loading: false,
attachmentList: [],
uploadImg: {
//上传图片配置
uploadImgUrl: "/common/attach",
},
newAttachments: [],
active: -1,
has: false,
}
},
watch: {
proposerId: function (newVal, oldVal) {
this.showAttachmentComp(this.businessType, newVal, this.houseApplyStatus, this.processKey, this.tableName, this.full);
},
readonly: function (newVal, oldVal) {
this.disabled = newVal;
},
},
created() {
if (this.businessType !== null && this.proposerId == -1) {
this.showAttachmentComp(this.businessType, this.proposerId, this.houseApplyStatus, this.processKey, this.tableName, this.full)
}
},
methods: {
handleUploadSuccess(file, detail, item) {
this.setFileStatus(file, 'uploading', '文件上传中...');
let formData = new FormData;
formData.set('file', file.file);
request({
url: this.uploadImg.uploadImgUrl,
method: "post",
params: item.postData,
data: formData,
}).then((resp) => {
file.response = resp;
console.log(resp);
file.fileList = item.fileList;
this.onFileListChanged("ADD", resp.id);
this.setFileStatus(file, 'done', '文件上传成功');
this.$emit('onUploadSuccess', file);
}).catch((e) => {
this.setFileStatus(file, 'fail', '文件上传失败!');
});
return true;
},
handleRemove(file, detail) {
console.log(file, detail);
this.setFileStatus(file, 'uploading', '文件删除中...');
let id = file.id || file.response.id;
removeFile(id).then(resp => {
if(this.proposerId != -1 && false) // 不刷新
this.showAttachmentComp(this.businessType, this.proposerId, this.houseApplyStatus, this.processKey, this.tableName, this.full)
/* else // 新增时
{
let fileList = file.fileList;
//console.log(fileList);
fileList.splice(fileList.indexOf(file), 1);
}*/
this.setFileStatus(file, 'done', '文件删除成功');
this.onFileListChanged("REMOVE", id);
}).catch((e) => {
this.setFileStatus(file, 'fail', '文件删除失败!');
}).finally(() => {
//loading.close();
});
return true;
},
showAttachmentComp(businessType, proposerId, houseApplyStatus, processKey, tableName, full) {
this.attachmentList = [];
this.active = -1;
this.has = false;
if(!full && 0)
{
this.getCurrentFiles(businessType, proposerId, houseApplyStatus, processKey, tableName);
}
else
{
this.getHistoryFiles(businessType, proposerId, houseApplyStatus, processKey, tableName);
}
},
formatFile(list) {
if (list !== null && list !== undefined) {
const baseImgUrl = this.$store.getters.baseRoutingUrl;
let UfileList = []; //上传图片列表
list.forEach((value, index) => {
UfileList.push({
name: value.fileName,
fileUrl: value.fileUrl,
url: baseImgUrl + value.fileUrl,
id: value.id,
fileList: UfileList,
});
});
return UfileList;
}
},
onFileListChanged(type, id) {
if(this.proposerId != -1) return;
if(type === "ADD")
{
this.newAttachments.push(id);
}
else if(type === "REMOVE")
{
let index = this.newAttachments.indexOf(id);
if(index !== -1)
this.newAttachments.splice(index, 1);
}
console.log(this.newAttachments);
this.$emit('uploadFinished', this.newAttachments);
},
getCurrentFiles(businessType, proposerId, houseApplyStatus, processKey, tableName) {
this.loading = true;
treeSingleProcessView({
businessType: businessType,
houseApplyStatus: houseApplyStatus,
processKey: processKey,
tableName: tableName,
}).then(res => {
this.handleResponse(res.rows, proposerId, houseApplyStatus, tableName);
if(this.attachmentList.length === 0)
{
this.disabled = true;
this.getHistoryFiles(businessType, proposerId, houseApplyStatus, processKey, tableName);
}
}).finally(() => {
this.loading = false;
});
},
getHistoryFiles(businessType, proposerId, houseApplyStatus, processKey, tableName) {
this.loading = true;
getAttachmentConfigTree({
businessType: businessType,
nodeStatus: houseApplyStatus,
processKey: processKey,
nodeStatusSort: '1,32,2,3,33,31,4,5,34,6,7,8,9,10,'
+ '12,13,14,15,16,17,28,19,18,'
+ '20,21,22,23,24,25,30,29,26,27'
,
}).then(resp => {
//console.log(resp);
try {
if(!resp.data || resp.data.length === 0)
return;
let rows = resp.data[0].params.children;
rows.forEach((value, index) => {
if (!value.params.children)
return;
this.handleResponse(value.params.children, proposerId, houseApplyStatus, tableName);
});
}
catch (e)
{
console.error(e);
}
}).finally(() => {
this.loading = false;
});
},
handleResponse(rows, proposerId, houseApplyStatus, tableName) {
rows.forEach((value, index) => {
let obj = {
fileTypeName: value.fileTypeName,
tableId: proposerId,
tableName: tableName,
fileList: [],
fileType: value.fileType,
postData: {
tableId: proposerId,
tableName: tableName,
bizPath: tableName,
fileType: value.fileType,
},
current: value.nodeStatus == houseApplyStatus,
collapse: this.disabled || value.nodeStatus == houseApplyStatus ? 0 : '',
};
if(value.nodeStatus != houseApplyStatus && !this.has)
this.active++;
if(value.nodeStatus == houseApplyStatus)
{
if(!this.has)
this.active++;
this.has = true;
}
this.attachmentList.push(obj);
});
if (proposerId !== -1) {
this.attachmentList.forEach((value, index) => {
attachmentFind(value).then(resp => {
let list = this.formatFile(resp.data);
this.$set(this.attachmentList[index], "fileList", list);
});
});
}
},
setFileStatus(file, status, message) {
file.status = status;
file.message = message;
},
}
};
</script>
<style scoped>
.my_class >>> .el-upload--picture-card {
width: 72px;
height: 72px;
line-height: 78px;
}

.my_class >>> .el-upload-list__item {
width: 72px;
height: 72px;
}

.my_class >>> .el-upload-list__item-preview {
width: 20px;
}

.my_class >>> .el-upload-list__item-delete {
width: 20px;
}

.main_title{
font-size: 0.4rem;
color: #1D6FE9;
margin: 0.2rem 6%;
position: relative;
}
</style>

+ 155
- 0
src/components/house/HouseLocationPlanComp.vue Datei anzeigen

@@ -0,0 +1,155 @@
<template>
<div>
<van-uploader
ref="pictureUpload"
:disabled="uploadDisabled"
:readonly="uploadDisabled"
:deletable="!uploadDisabled"
:show-upload="!uploadDisabled"
:data="uploadImg.locationplanPostData"
:before-delete="handleRemove"
v-model="uploadImg.fileList"
:after-read="onUploadChanged"
>
<!-- :accept="uploadImg.accept"-->
</van-uploader>
</div>
</template>

<script>
import {getToken} from "@/utils/auth";
import request from "@/utils/request";

export default {
name: "HouseLocationPlanComp",
props: ["uploadDisabled", 'jsonData', 'proposerId', 'tableName'],
watch: {
jsonData: {
handler: function (newVal, oldVal) {
this.reset();
this.uploadImg.fileList = this.makeUploadFileList(newVal);
},
immediate: true,
},
proposerId: function (newVal, oldVal) {
this.reset();
this.uploadImg.locationplanPostData.tableId = newVal;
console.log(newVal);
},
},
created() {
},
data() {
return {
uploadImg: {
//上传图片配置
uploadLocationPlanFiles: "/house/custom/uploadLocationPlanFiles",
uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/attachs",
uploadImgHeaders: {
Authorization: "Bearer " + getToken(),
},
accept: '.jpg,.png,.gif,.jpeg',
fileList: [],
locationplanPostData: {
tableId: this.proposerId,
tableName: this.tableName,
bizPath: 't_house_apply_proposer',
fileType: '0',
},
uploadFileList: [],
removeFileList: [],
},
}
},
methods: {
reset() {
this.uploadImg.uploadFileList = [];
this.uploadImg.removeFileList = [];
},
onUploadChanged(file, detail) {
console.log(file, detail);
this.uploadImg.uploadFileList = [];
this.uploadImg.fileList.forEach((item, key, index) => {
if(!item.hasOwnProperty('_Data'))
this.uploadImg.uploadFileList.push(item.file);
});
this.$emit('uploadFileChanged', this.uploadImg.uploadFileList);
return true;
},
//删除平面位置图
handleRemove(file, detail) {
console.log(file, detail);
if(file.hasOwnProperty('_Data')) // from server
{
this.uploadImg.removeFileList.push(file._Data.id);
this.$emit('removeFileChanged', this.uploadImg.removeFileList);
}
else
{
//this.onUploadChanged(file, this.uploadImg.fileList);
}
return true;
},
// 图片上传尺寸大小检验
beforeUpload(file) {
const isLt50M = file.size / 1024 / 1024 < 30;
if (!isLt50M) {
this.$message({
message: "上传文件大小不能超过 30MB!",
type: "error",
});
return false;
} else if (file.name.length > 100) {
// 图片上传文件名长度检验(配合后台上传方法的验证,否则上传不成功但是前台无提示)
this.$message({
message: "上传文件的文件名长度不能超过 100个字符!",
type: "error",
});
return false;
}
return isLt50M;
},
makeUploadFileList(json) {
if(!json) return [];
const Host = this.$store.getters.baseRoutingUrl;
let fileList = JSON.parse(json);
let res = [];
fileList.forEach((x) => {
let item = {
name: x.fileName,
url: Host + x.fileUrl,
id: x.id,
_Data: x,
fileList: res,
};
console.log(item);
res.push(item);
});
return res;
},
updatePlanFiles() {
console.log('新增', this.uploadImg.uploadFileList);
console.log('移除', this.uploadImg.removeFileList);
// 手动上传
let formData = new FormData;
this.uploadImg.uploadFileList.forEach((x) => {
formData.append('file', x);
});
formData.append('removeIds', this.uploadImg.removeFileList);
return request({
url: this.uploadImg.uploadLocationPlanFiles + '/' + this.uploadImg.locationplanPostData.tableId,
method: "post",
params: this.uploadImg.locationplanPostData,
data: formData,
});
},
isValid() {
return(this.uploadImg.uploadFileList.length > 0 || this.uploadImg.removeFileList.length > 0);
},
}
}
</script>

<style scoped>

</style>

+ 75
- 0
src/components/house/RawImageCarousel.vue Datei anzeigen

@@ -0,0 +1,75 @@
<template>
<div style="display: flex; align-items: center; justify-content: center;" @click="next">
<img style="width: 100%;" :src="currentImage.url" :alt="currentImage.name"/>
</div>
</template>

<script>
export default {
name: "RawImageCarousel",
props: ['images', 'nameLabel', 'urlLabel'],
watch: {
images: {
deep: true,
handler: function (newVal, oldVal) {
if(this.internalImages !== newVal)
this.index = 0;
this.getCurrentImage();
},
}
},
created() {
this.getCurrentImage();
},
data() {
return {
index: 0,
internalImages: null,
currentImage: {
name: '',
url: '',
},
};
},
methods: {
next() {
this.index++;
if(this.index >= this.images.length)
this.index = 0;
this.getCurrentImage();
},
getCurrentImage() {
let img = this.index >= this.images.length ? null : this.images[this.index];
if(img)
{
if(typeof(img) === 'object')
{
this.currentImage.url = this.getValue(img, this.urlLabel);
this.currentImage.name = this.getValue(img, this.nameLabel);
}
else
this.currentImage.url = img;
}
else
{
this.currentImage.url = '';
}
},
getValue(obj, field) {
switch (typeof field)
{
case 'string':
return obj[field] || '';
case 'function':
return field(obj) || '';
default:
return obj || '';
}
}
}
}
</script>

<style scoped>

</style>

+ 54
- 0
src/router/index.js Datei anzeigen

@@ -2374,6 +2374,60 @@ export const constantRoutes = [
},
component: (resolve) => require(['@/views/homesteadSurvey/settle'], resolve)
},
{
path: '/houseAnnounce',
name: 'houseAnnounce',
meta: {
title: '公示查询',
hidden: true,
},
component: (resolve) => require(['@/views/onlineHome/homestead/homeApplication/houseAnnounce'], resolve)
},
{
path: '/houseLicense',
name: 'houseLicense',
meta: {
title: '证书查看',
hidden: true,
},
component: (resolve) => require(['@/views/onlineHome/homestead/homeApplication/houseLicense'], resolve)
},
{
path: '/houseLicenseDetail',
name: 'houseLicenseDetail',
meta: {
title: '证书查看',
hidden: true,
},
component: (resolve) => require(['@/views/onlineHome/homestead/homeApplication/houseLicenseDetail'], resolve)
},
{
path: '/licensePermitEdit',
name: 'licensePermitEdit',
meta: {
title: '修改许可证',
hidden: true,
},
component: (resolve) => require(['@/views/onlineHome/homestead/homeApplication/licensePermitEdit'], resolve)
},
{
path: '/licenseRatificationEdit',
name: 'licenseRatificationEdit',
meta: {
title: '修改批准书',
hidden: true,
},
component: (resolve) => require(['@/views/onlineHome/homestead/homeApplication/licenseRatificationEdit'], resolve)
},
{
path: '/proposerLite',
name: 'proposerLite',
meta: {
title: '农村宅基地申请(简)',
hidden: true,
},
component: (resolve) => require(['@/views/onlineHome/homestead/homeApplication/proposerLite'], resolve)
},

];



+ 3
- 0
src/store/getters.js Datei anzeigen

@@ -6,5 +6,8 @@ const getters = {
roles: state => state.user.roles,
permissions: state => state.user.permissions,
bookName: state => state.user.bookName,

nickName: state => state.user.nickName,
baseRoutingUrl: state => state.user.baseRoutingUrl,
}
export default getters

+ 17
- 2
src/store/modules/user.js Datei anzeigen

@@ -1,6 +1,7 @@
import { login, logout, getInfo, smsLogin } from '@/api/login';
import { registerOn } from "@/api/register";
import { getToken, setToken, removeToken } from '@/utils/auth'
import { getSystemAttachmentUrl } from '@/api/system/config'

const user = {
state: {
@@ -9,7 +10,10 @@ const user = {
avatar: '',
roles: [],
permissions: [],
bookName: ''
bookName: '',

nickName: '',
baseRoutingUrl: '',
},

mutations: {
@@ -39,7 +43,13 @@ const user = {
},
SET_BOOKNAME: (state, bookName) => {
state.bookName = bookName
}
},
SET_NICKNAME: (state, nickName) => {
state.nickName = nickName
},
SET_baseRoutingUrl: (state, baseRoutingUrl) => {
state.baseRoutingUrl = baseRoutingUrl
},
},

actions: {
@@ -113,6 +123,11 @@ const user = {
commit('SET_LOGINBOOKID', user.loginBookId)
commit('SET_DEPTNAME', user.deptName)
commit('SET_AVATAR', avatar)
commit('SET_NICKNAME', user.nickName);

getSystemAttachmentUrl().then((resp) => {
commit('SET_baseRoutingUrl', resp.msg);
});
resolve(res)
}).catch(error => {
reject(error)


+ 54
- 7
src/views/onlineHome/done.vue Datei anzeigen

@@ -2,16 +2,26 @@
<div>
<van-nav-bar
title="我的事项"
fixed
placeholder
left-arrow
@click-left="goOnlineHomeIndex"
/>
<van-tabs v-model="activeName" title-active-color="#1D6FE9" color="#1D6FE9" line-width="20px" swipeable @click="getList">
<van-tabs v-model="activeName" title-active-color="#1D6FE9" color="#1D6FE9" line-width="20px" swipeable @click="getList(0)">
<van-tab title="待办" name="1" >
</van-tab>
<van-tab title="已办" name="2">
</van-tab>
</van-tabs>
<van-cell-group @click="goDetail(item)" v-for="(item,index) in taskList" :key="index" style="width: 96%;margin:2%;border-radius: 6px;overflow: hidden;padding-top: 10px;padding-bottom: 10px;box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.16);">
<van-pull-refresh v-model="refreshing" @refresh="getList(0)">
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
:immediate-check="false"
@load="getList('+1')"
>
<van-cell-group @click="goDetail(item)" v-for="(item,index) in taskList" :key="index" style="width: 96%;margin:2%;border-radius: 6px;overflow: hidden;padding-top: 10px;padding-bottom: 10px;box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.16);">
<van-cell>
<template #title>
<van-row style="">
@@ -43,6 +53,8 @@
</template>
</van-cell>
</van-cell-group>
</van-list>
</van-pull-refresh>
</div>
</template>

@@ -65,6 +77,9 @@
pageSize: 100,
},
activityBusinessTypeOptions:[],
refreshing: false,
loading: false,
finished: false,
}
},
created() {
@@ -81,12 +96,28 @@
goOnlineHomeIndex(){
this.$router.push({name:'onlineHomeWorkbench'})
},
getList() {
this.taskList = []
this.$set(this.queryParams, "systemType", '4');
getList(target) {
if(!target)
{
this.refreshing = true;
this.finished = false;
this.queryParams.pageNum = 1;
this.taskList = []
}
else if(typeof(target) === 'number')
this.queryParams.pageNum = target;
else {
this.queryParams.pageNum = eval(this.queryParams.pageNum + target.toString())
}
this.$set(this.queryParams, "systemType", '11'); // 4
if(this.activeName=='1'){
ListTodo(this.queryParams).then((response) => {
console.log(response)
if(response.rows.length === 0)
{
this.finished = true;
return;
}
response.rows.map(res => {
if(res.tableName?res.tableName.indexOf('house')>0:""){
res.tableName = '来自农村宅基地管理系统'
@@ -104,10 +135,18 @@
});
}
})
})
}).finally(() => {
this.loading = false;
this.refreshing = false;
});
}else{
ListDone(this.queryParams).then((response) => {
console.log(response)
if(response.rows.length === 0)
{
this.finished = true;
return;
}
response.rows.map(res => {
if(res.tableName?res.tableName.indexOf('house')>0:""){
res.tableName = '来自农村宅基地管理系统'
@@ -125,7 +164,10 @@
});
}
})
})
}).finally(() => {
this.loading = false;
this.refreshing = false;
});
}
},
goDetail(item){
@@ -136,6 +178,11 @@
case 'landscope':
case 'accepting':
this.$router.push({name:'approvalForm',query: {id:item.formData.id,taskId:item.taskId,instanceId:item.formData.instanceId,type:item.type}})
break;
case 'baseApplyWLHT':
case 'landscopeWLHT':
case 'acceptingWLHT':
this.$router.push({name:'proposerLite',query: {id:item.formData.applyProposerId || item.formData.id,taskId:item.taskId,instanceId:item.formData.instanceId,type:item.type, processKey: item.formData.processKey}})
break;
case 'yinnong_transfer':
this.$router.push({name:'approvalApproval',query: {id:item.formData.id,taskId:item.taskId,type:item.type}})


+ 5
- 3
src/views/onlineHome/homestead/flowChart/index.vue Datei anzeigen

@@ -35,23 +35,25 @@
</template>

<script>
import { allInformation } from "@/api/onlineHome/homestead/application";
import { allInformation, allInformationWLHT } from "@/api/onlineHome/homestead/application";
export default {
name: "flowChart",
data() {
return {
applicationDetail:[],
id:''
id:'',
processKey: '',
};
},
created() {
this.id = this.$route.query.id;
this.processKey = this.$route.query.processKey;
this.getDetail();
},
methods: {
//获取数据集合
getDetail(){
allInformation(this.id).then(response => {
(this.processKey && this.processKey.endsWith('WLHT') ? allInformationWLHT : allInformation)(this.id).then(response => {
console.log(response)
this.applicationDetail = response.data;
});


+ 50
- 8
src/views/onlineHome/homestead/homeApplication/applicationList.vue Datei anzeigen

@@ -5,7 +5,7 @@
fixed
placeholder
@click-left="$router.back(-1)"
@click-right="goAdd()"
@click-right="goAddLite()"
>
<template #title>
<p style="font-weight: bold;">宅基地申请</p>
@@ -15,14 +15,15 @@
</template>
</van-nav-bar>

<van-list
<van-pull-refresh v-model="refreshing" @refresh="refresh">
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="getList"
>
<van-swipe-cell v-for="(item,index) in applicationList" :key="index">
<van-cell :title="item.ywh" :value="item.houseApplyStatus" center :to="{name:'applicationForm', query: {id:item.id,type:'modify'}}">
<van-cell :title="item.ywh" :value="item.houseApplyStatusName" center @click="viewItem(item)">
<template #icon>
<van-icon name="../../../static/images/onlineHome/icon_zjd1.png" size="30" color="#539FFD" style="margin-right: 10px;" />
</template>
@@ -33,20 +34,25 @@
<template #right>
<van-row>
<van-col>
<van-button square text="修改" type="info" v-if="item.houseApplyStatus=='申请草稿'" :to="{name:'applicationForm', query: {id:item.id}}" class="delete-button" />
<van-button square text="提交" type="primary" v-if="item.houseApplyStatusName=='申请草稿'" @click="submitApplyProposer(item)" class="delete-button" />
</van-col>
<van-col>
<van-button square text="删除" type="danger" v-if="item.houseApplyStatus=='申请草稿'" @click="deleteList(item.id,index)" class="delete-button" />
<van-button square text="修改" type="info" v-if="item.houseApplyStatusName=='申请草稿'" :to="{name:'proposerLite', query: {id:item.id, type: 'modify'}}" class="delete-button" />
</van-col>
<van-col>
<van-button square text="删除" type="danger" v-if="item.houseApplyStatusName=='申请草稿'" @click="deleteList(item.id,index)" class="delete-button" />
</van-col>
</van-row>
</template>
</van-swipe-cell>
</van-list>
</van-pull-refresh>
</div>
</template>

<script>
import { getList , removeList } from "@/api/onlineHome/homestead/application";
import { customSubmit, customSubmitWLHT} from "@/api/onlineHome/homestead/application";
export default {
name: "applicationList",
data() {
@@ -55,6 +61,7 @@ export default {
houseApplyStatus:[],
loading: false,
finished: false,
refreshing: false,
queryParams:{
pageNum:1,
pageSize:10,
@@ -73,13 +80,26 @@ export default {
goAdd(){
window.location = 'applicationAdd';
},
goAddLite(){
//window.location = 'applicationAdd';
window.location = 'proposerLite?type=add';
},
viewItem(row){
let type = /*row.houseApplyStatus == '1' // 申请草稿
||*/ row.houseApplyStatus == '10' // 申请通过
|| row.houseApplyStatus == '12' // 开工草稿
|| row.houseApplyStatus == '18' // 开工通过
|| row.houseApplyStatus == '20' // 验收草稿
? 'modify' : 'view';
window.location = 'proposerLite?type=' + type + '&id=' + row.id;
},
getList(){
setTimeout(() => {
getList(this.queryParams).then(response => {
console.log(response)
for (var i = 0; i < response.rows.length; i++) {
var houseApplyStatus = this.selectDictLabel(this.houseApplyStatus, response.rows[i].houseApplyStatus);
response.rows[i].houseApplyStatus = houseApplyStatus;
var houseApplyStatusName = this.selectDictLabel(this.houseApplyStatus, response.rows[i].houseApplyStatus);
response.rows[i].houseApplyStatusName = houseApplyStatusName;
this.applicationList.push(response.rows[i]);
}
console.log(this.applicationList.length >= response.total)
@@ -90,6 +110,9 @@ export default {
this.loading = false;
this.queryParams.pageNum += 1 ;
}
}).finally(() => {
this.loading = false;
this.refreshing = false;
});
}, 1000);
},
@@ -109,7 +132,26 @@ export default {
.catch(() => {
// on cancel
});
}
},
refresh() {
this.refreshing = true;
this.finished = false;
this.applicationList = []
},
submitApplyProposer(item) {
this.$dialog.confirm({
message: '您确认提交申请草稿?',
}).then(() => {
let func = 1 || item.processKey.endsWith('WLHT') ? customSubmitWLHT : customSubmit; //TODO: 总是走简化流程
func(item.id).then((resp) => {
this.$toast.success("提交成功");
this.refresh();
this.getList();
}).catch((e) => {
this.$toast.fail("提交失败!");
});
}).catch(() => {});
},
},
}
</script>


+ 254
- 0
src/views/onlineHome/homestead/homeApplication/houseAnnounce.vue Datei anzeigen

@@ -0,0 +1,254 @@
<template>
<div>
<van-nav-bar
left-arrow
title="公示查询"
fixed
placeholder
@click-left="$router.back()"
>
<template #right>
<van-icon name="@/../static/images/icon/icon_flow.png" size="20" @click="openFilter"/>
</template>
</van-nav-bar>

<van-search
v-model="queryParams.memberName"
placeholder="请输入姓名"
shape="round"
@search="getList(0)"
/>

<van-pull-refresh v-model="refreshing" @refresh="getList()">
<van-list
v-model="loading"
:finished="finished"
:immediate-check="false"
finished-text="没有更多了"
@load="getList('+1')"
>
<van-swipe-cell v-for="(item,index) in list" :key="index" class="delegate">
<van-cell :title="item.projectName" center @click="viewItem(item)">
<template #icon>
<van-icon :name="{
'1': '@/../static/images/onlineHome/icon_zjd8.png',
'2': '@/../static/images/onlineHome/icon_zjd8.png',
'3': '@/../static/images/onlineHome/icon_zjd8.png',
'4': '@/../static/images/onlineHome/icon_zjd8.png',
}[item.announceStatus]" size="30" color="#539FFD" style="margin-right: 10px;" />
</template>
<template #label>
<p style="font-weight: bold;">{{formatDict(options.announce_type, item.announceType)}}&nbsp;&nbsp;&nbsp;&nbsp;{{item.startDate}} - {{item.endDate}}</p>
</template>
<template #title>
<p style="font-weight: bold;">{{item.projectName}}</p>
</template>
<template #right-icon>
<p :style="{'font-weight': 'bold',
color: {
'1': '#000000',
'2': '#0066FF',
'3': 'orange',
'4': '#33cc33',
}[item.announceStatus],
}">{{formatDict(options.announce_status, item.announceStatus)}}</p>
</template>
</van-cell>
<template #right>
<van-row style="height: 100%;">
<van-col style="height: 100%;">
<van-button square text="二维码" type="info" style="height: 100%;" @click="openQrCodePreview(item.id)"/>
</van-col>
</van-row>
</template>
</van-swipe-cell>
</van-list>
</van-pull-refresh>

<onlineHomeIndex :current="1"></onlineHomeIndex>

<van-popup
v-model="filterVisible"
closeable
position="top"
:close-on-click-overlay="true"
:lazy-render="false"
>
<van-form>
<van-cell title="筛选查询"></van-cell>
<field-select
v-model="queryParams.announceStatus"
label="公示状态"
value-key="dictLabel"
data-key="dictValue"
placeholder="公示状态筛选"
:columns="options.announce_status"
/>
<field-select
v-model="queryParams.announceType"
label="公示类型"
value-key="dictLabel"
data-key="dictValue"
placeholder="公示类型筛选"
:columns="options.announce_type"
/>
<field-date-picker
v-model="queryParams.startDate"
label="起始日期"
formatter="yyyy-MM-dd"
placeholder="起始日期"
/>
<field-date-picker
v-model="queryParams.endDate"
label="结束日期"
formatter="yyyy-MM-dd"
placeholder="结束日期"
/>
<div style="margin: 0.2rem; text-align: right;">
<van-button type="info" native-type="submit" size="small" @click="resetQuery"> 重置 </van-button>
<van-button type="primary" native-type="submit" size="small" @click="getList(0)"> 查询 </van-button>
</div>
</van-form>
</van-popup>
</div>
</template>

<script>
import {listAnnounce, getProposer} from "@/api/onlineHome/homestead/houseAnnounce";
import FieldSelect from "@/components/form/FieldSelect";
import { formatDate } from "element-ui/src/utils/date-util.js"
import { ImagePreview } from 'vant';
import onlineHomeIndex from "@/views/onlineHomeIndex";
import FieldDatePicker from "@/components/form/FieldDatePicker";

export default {
components: {FieldSelect, onlineHomeIndex, FieldDatePicker},
name: "HouseAnnounce",
data() {
return {
list: [],
total: 0,
// ?pageNum=1&pageSize=10&orderByColumn=createTime&isAsc=desc&startDate=2022-04-13&endDate=2022-04-12&announceStatus=2
queryParams: {
pageNum: 1,
pageSize: 10,
orderByColumn: 'createTime',
isAsc: 'desc',
startDate: '',
endDate: '',
announceStatus: null,
memberName: '',
announceType: null,
},
refreshing: false,
loading: false,
finished: false,
options: {
announce_status: [],
announce_type: [],
},
filterVisible: false,
}
},
created() {
this.initOptions();
this.getList();
},
methods: {
getList(target) {
let type = typeof (target);
console.log(type, target);
if (target === 0) {
this.refreshing = true;
this.finished = false;
this.total = 0;
this.queryParams.pageNum = 1;
this.list = [];
this.filterVisible = false;
}
else if (type === 'number')
this.queryParams.pageNum = target;
else if (type === 'string') {
this.queryParams.pageNum = eval(this.queryParams.pageNum + target)
}
else
{
this.refreshing = true;
this.finished = false;
this.resetQuery();
this.total = 0;
this.queryParams.pageNum = 1;
this.list = []
}
listAnnounce(this.queryParams).then((response) => {
console.log(response)
if (response.rows.length === 0) {
this.finished = true;
return;
}
response.rows.forEach((e) => {
this.list.push(e);
});
this.total += response.rows.length;
if (this.total >= response.total) {
this.finished = true;
}
}).finally(() => {
this.loading = false;
this.refreshing = false;
});
},
viewItem(item) {
window.location = 'proposerLite?type=view&id=' + item.applyProposerId;
},
initOptions() {
for(let k in this.options)
{
this.houseGetDicts(k).then((res) => {
this.options[k] = res.data;
});
}
},
formatDict(dict, value) {
return this.selectDictLabel(dict, value);
},
openFilter() {
this.filterVisible = true;
},
onDatePickerConfirm(data) {
if(data)
{
this.queryParams.startDate = formatDate(data[0], 'yyyy-MM-dd');
this.queryParams.endDate = formatDate(data[1], 'yyyy-MM-dd');
}
else {
this.queryParams.startDate = '';
this.queryParams.endDate = '';
}
},
resetQuery() {
this.onDatePickerConfirm();
this.queryParams.announceStatus = null;
this.queryParams.announceType = null;
},
openQrCodePreview(id) {
getProposer(id).then((resp) => {
console.log(this.$store.getters.baseRoutingUrl + resp.data.qrCodeUrl);
ImagePreview([this.$store.getters.baseRoutingUrl + resp.data.qrCodeUrl]);
}).catch((e) => {
this.$toast.fail('获取二维码失败!');
});
},
},
}
</script>

<style scoped>
.delegate {
width: 96%;
margin: 3% 2% 3% 2%;
border-radius: 0.18rem;
overflow: hidden;
box-shadow: 0.1rem 0.1rem 0.15rem 0.02rem rgba(0,0,0,0.16);
}
</style>

+ 195
- 0
src/views/onlineHome/homestead/homeApplication/houseLicense.vue Datei anzeigen

@@ -0,0 +1,195 @@
<template>
<div>
<van-nav-bar
left-arrow
title="证书查看"
fixed
placeholder
@click-left="$router.back()"
>
<template #right>
<van-icon name="@/../static/images/icon/icon_flow.png" size="20" @click="openFilter"/>
</template>
</van-nav-bar>

<van-pull-refresh v-model="refreshing" @refresh="getList()">
<van-list
v-model="loading"
:finished="finished"
:immediate-check="false"
finished-text="没有更多了"
@load="getList('+1')"
>
<van-swipe-cell v-for="(item,index) in list" :key="index" class="delegate">
<van-cell :label="item.idcard" center>
<template #icon>
<van-icon name="@/../static/images/onlineHome/icon_zjd7.png" size="30" color="#539FFD" style="margin-right: 10px;" />
</template>
<template #title>
<p style="font-weight: bold;">{{item.projectName}}</p>
</template>
<template #right-icon>
<van-button plain type="info" style="border: 0; font-weight: bold;" @click="openLicense(item)">查看证书</van-button>
</template>
</van-cell>
<template #right>
<van-row style="height: 100%;">
<van-col style="height: 100%;">
<van-button square text="查看申请" type="primary" style="height: 100%;" @click="viewItem(item)"/>
</van-col>
<van-col style="height: 100%;">
<van-button square text="许可证修改" type="info" style="height: 100%;" @click="editLicensePermit(item)"/>
</van-col>
<van-col style="height: 100%;">
<van-button square text="批准书修改" type="info" style="height: 100%;" @click="editLicenseRatification(item)"/>
</van-col>
</van-row>
</template>
</van-swipe-cell>
</van-list>
</van-pull-refresh>

<onlineHomeIndex :current="1"></onlineHomeIndex>

<van-popup
v-model="filterVisible"
closeable
position="top"
:close-on-click-overlay="true"
:lazy-render="false"
>
<van-form>
<van-cell title="筛选查询"></van-cell>
<van-field v-model="queryParams.memberName" label="申请户主" placeholder="申请户主" input-align="right"/>
<van-field v-model="queryParams.phone" label="联系电话" placeholder="联系电话" input-align="right"/>
<div style="margin: 0.2rem; text-align: right;">
<van-button type="info" native-type="submit" size="small" @click="resetQuery"> 重置 </van-button>
<van-button type="primary" native-type="submit" size="small" @click="getList(0)"> 查询 </van-button>
</div>
</van-form>
</van-popup>
</div>
</template>

<script>
import {listProposer, getProposer} from "@/api/onlineHome/homestead/houseProposer";
import FieldSelect from "@/components/form/FieldSelect";
import { ImagePreview } from 'vant';
import onlineHomeIndex from "@/views/onlineHomeIndex";

export default {
components: {FieldSelect, onlineHomeIndex},
name: "HouseLicense",
data() {
return {
list: [],
total: 0,
// ?pageNum=1&pageSize=10&orderByColumn=createTime&isAsc=desc&printLicense=Y
queryParams: {
pageNum: 1,
pageSize: 10,
printLicense: 'Y',
orderByColumn: 'createTime',
isAsc: 'desc',
phone: '',
memberName: '',
},
refreshing: false,
loading: false,
finished: false,
options: {
},
filterVisible: false,
}
},
created() {
this.initOptions();
this.getList();
},
methods: {
getList(target) {
let type = typeof (target);
console.log(type, target);
if (target === 0) {
this.refreshing = true;
this.finished = false;
this.total = 0;
this.queryParams.pageNum = 1;
this.list = [];
this.filterVisible = false;
}
else if (type === 'number')
this.queryParams.pageNum = target;
else if (type === 'string') {
this.queryParams.pageNum = eval(this.queryParams.pageNum + target)
}
else
{
this.refreshing = true;
this.finished = false;
this.resetQuery();
this.total = 0;
this.queryParams.pageNum = 1;
this.list = []
}
listProposer(this.queryParams).then((response) => {
console.log(response)
if (response.rows.length === 0) {
this.finished = true;
return;
}
response.rows.forEach((e) => {
this.list.push(e);
});
this.total += response.rows.length;
if (this.total >= response.total) {
this.finished = true;
}
}).finally(() => {
this.loading = false;
this.refreshing = false;
});
},
viewItem(item) {
window.location = 'proposerLite?type=view&id=' + item.id;
},
initOptions() {
for(let k in this.options)
{
this.houseGetDicts(k).then((res) => {
this.options[k] = res.data;
});
}
},
formatDict(dict, value) {
return this.selectDictLabel(dict, value);
},
openFilter() {
this.filterVisible = true;
},
resetQuery() {
this.queryParams.phone = '';
this.queryParams.memberName = '';
},
openLicense(item) {
location.href = '/houseLicenseDetail?id=' + item.id;
},
editLicensePermit(item) {
window.location = 'licensePermitEdit?id=' + item.id;
},
editLicenseRatification(item) {
window.location = 'licenseRatificationEdit?id=' + item.id;
},
},
}
</script>

<style scoped>
.delegate {
width: 96%;
margin: 3% 2% 3% 2%;
border-radius: 0.18rem;
overflow: hidden;
box-shadow: 0.1rem 0.1rem 0.15rem 0.02rem rgba(0,0,0,0.16);
}
</style>

+ 395
- 0
src/views/onlineHome/homestead/homeApplication/houseLicenseDetail.vue Datei anzeigen

@@ -0,0 +1,395 @@
<template>
<div>
<van-nav-bar
left-arrow
title="证书查看"
fixed
placeholder
@click-left="$router.back()"
>
</van-nav-bar>


<van-tabs color="#1D6FE9" :lazy-render="false" v-model="activeName">
<van-tab title="规划许可证" key="0">
<div class="planningPermit-wrap wrap-root">
<div class="planningPermit-first">
<div class="permit-main section">
<div class="details_first_main part">
<div class="details_first_title title">中华人民共和国</div>
<div class="details_first_title title">乡村建设规划许可证</div>
<div class="details_first_page no-label">乡字第 <i class="no">{{this.licenseForm.licensePermit.licenseKey}}</i> 号</div>
<div class="details_first_cont content">根据《中华人民共和国土地管理法》《中华人民共和国城乡规划法》和国家有关规定,经审核,本建设工程符合国土空间规划和用途管制要求,颁发此证。</div>
<div class="licence_first_jg label" style="padding-top: 3.5rem;">填发机关:&nbsp;&nbsp;&nbsp;{{this.licenseForm.licensePermit.issuingAuthority}}</div>
<div class="licence_first_time label">日 期:&nbsp;&nbsp;&nbsp;{{this.licenseForm.licensePermit.issueDate}}</div>
</div>
</div>

<div class="details_page section">
<div class="details_page_main part">
<table>
<tr>
<td style="width: 2.6rem;">建设单位(个人)</td> <td >{{this.licenseForm.licensePermit.constructionUnit}}</td>
</tr>
<tr>
<td>建设项目名称</td> <td>{{this.licenseForm.licensePermit.constructionUnit}}</td>
</tr>
<tr>
<td>建设位置</td> <td>{{this.licenseForm.licensePermit.constructionLocation}}</td>
</tr>
<tr>
<td>建设规模</td> <td>{{ this.licenseForm.licensePermit.constructionScale }}</td>
</tr>
<!-- <tr>
<td>{{ this.licenseForm.licenseRatification.west }}</td><td>{{ this.licenseForm.licenseRatification.north }}</td>
</tr>-->
<tr>
<td>附图及附件名称</td>
<td>
<ul class="list">
<li v-for="file in attachmentList" class="list__item-content">
{{file.fileName}}
</li>
</ul>
</td>
</tr>
</table>
<div class="details_first_title title" style="text-align: left; padding-top: 0.2rem; padding-bottom: 0.2rem; font-size: 0.52rem; line-height: 0.8rem;">遵守事项</div>
<ul class="list" style="padding: 0.1rem 0.1rem; font-size: 0.35rem; line-height: 0.6rem;">
<li>一、 本证是经自然资源主管部门依法审核,在乡、村庄规划区内有关建设工程符合国土空间规划和用途管制要求的法律凭证。</li>
<li>二、 依法应当取得本证,但未取得本证或违反本证规定的,均属违法行为。</li>
<li>三、 未经发证机关审核同意,本证的各项规定不得随意变更。</li>
<li>四、 自然资源主管部门依法有权查验本证,建设单位(个人)有责任提交查验。</li>
<li>五、 本证所需附图及附件由发证机关依法确定,与本证具有同等法律效力。</li>
</ul>
</div>
</div>
</div>

<div class="planningPermit-two" style="display: block; overflow: hidden;">
<div class="details_page">
<table>
<tr>
<td style="width: 1rem; height: 12rem;">宅<br />基<br />地<br />坐<br />落<br />平<br />面<br />位<br />置<br />图</td>
<td>
<RawImageCarousel :images="locationPlanList" url-label="url" name-label="fileName" style="width: 100%; height: 100%;" v-if="locationPlanList.length > 0"></RawImageCarousel>
</td>
</tr>
<tr>
<td>备注</td>
<td>图中需载明宅基地的具体位置、长宽、四至,并标明与永久性参照物的具体距离。</td>
</tr>
</table>
<ul class="list" style="padding: 0.6rem 0.1rem 0.1rem; width: 92%; margin:0 auto;">
<li>填写说明:</li>
<li>1.编号规则:编号数字共16位,前6位数字按照《中华人民共和国行政区划代码》(详见民政部网站www.mca.gov.cn)执行;7-9位数字表示街道(地区)办事处、镇、乡(苏木),按GB/T10114的规定执行;10-13位数字代表证书发放年份;14-16位数字代表证书发放序号。</li>
<li>2.批准书有效期:指按照本省(区、市)宅基地管理有关规定,宅基地申请批准后农户必须开工建设的时间。</li>
</ul>
</div>
</div>
</div>
</van-tab>

<van-tab title="宅基地批准书" key="1">
<div class="licenceAround-wrap wrap-root">
<div class="licence_first_page section" style="padding-top: 0.5rem;">
<div class="details_first_title title">农村宅基地批准书</div>
<div class="number-title no-sub-label" >
农宅字 <i class="no">{{this.licenseForm.licenseRatification.approvalNumber}}</i>号
</div>
<div class="licence_first_main" style="border:1px solid #000000; padding: 2rem 0.4rem;">
<div class="content">
根据《中华人民共和国土地管理法》规定,本项农村村民宅基地用地 业经有权机关批准,特发此书。
请严格按照本批准书要求使用宅基地。
</div>
<div class="ft_jg label" style="padding-top: 2.5rem;">填发机关:&nbsp;&nbsp;&nbsp;{{this.licenseForm.licenseRatification.issuingAuthority}}</div>
<div class="ft_time label">填发时间:&nbsp;&nbsp;&nbsp;{{this.licenseForm.licenseRatification.issueDate}}</div>
</div>
</div>

<div class="licence_two_page section" style="margin-top: 0.5rem;">
<div class="details_first_title title">农村宅基地批准书(存根)</div>
<div class="number-title no-sub-label">
农宅字 <i class="no">{{this.licenseForm.licenseRatification.approvalNumber}}</i> 号
</div>
<div class="licence_two_main">
<table>
<tr>
<td style="width: 2.6rem;">申请人姓名</td> <td colspan="8">{{this.licenseForm.licenseRatification.memberName}}</td>
</tr>
<tr>
<td>批准用地面积</td> <td colspan="8">{{this.licenseForm.licenseRatification.landArea}} 平方米</td>
</tr>
<tr>
<td>其中:房基占地</td> <td colspan="8">{{this.licenseForm.licenseRatification.fjzdmj}} 平方米</td>
</tr>
<tr>
<td>土地所有权人</td> <td colspan="8">{{this.licenseForm.licenseRatification.landOwner}}</td>
</tr>
<tr>
<td>土地用途</td> <td colspan="8">{{ formatDict(options.land_use, licenseForm.licenseRatification.landUse) }}</td>
</tr>
<tr>
<td>土地坐落<br/>(详见附图)</td> <td colspan="8">{{ this.licenseForm.licenseRatification.location }}</td>
</tr>
<tr>
<td rowspan="2">四 至</td>
<td style="width: 1.2rem;">东</td><td colspan="3">{{ this.licenseForm.licenseRatification.east }}</td>
<td style="width: 1.2rem;">南</td><td colspan="3">{{ this.licenseForm.licenseRatification.south }}</td>
</tr>
<tr>
<td style="width: 1.2rem;">西</td><td colspan="3">{{ this.licenseForm.licenseRatification.west }}</td>
<td style="width: 1.2rem;">北</td><td colspan="3">{{ this.licenseForm.licenseRatification.north }}</td>
</tr>
<tr>
<td>批准书有效期</td><td colspan="8">{{this.licenseForm.licenseRatification.startTime +'至'+this.licenseForm.licenseRatification.endTime }}</td>
</tr>
<tr style="height: 2rem;" >
<td colspan="9" style="text-align: left;">备注:</td>
</tr>
</table>
</div>
</div>

<div class="licence_three_page section" style="margin-top: 0.5rem;">
<div class="number-title no-sub-label">
农宅字 <i class="no">{{this.licenseForm.licenseRatification.approvalNumber}}</i> 号
</div>
<table>
<tr>
<td style="width: 2.6rem;">申请人姓名</td> <td colspan="8">{{this.licenseForm.licenseRatification.memberName}}</td>
</tr>
<tr>
<td>批准用地面积</td> <td colspan="8">{{this.licenseForm.licenseRatification.landArea}} 平方米</td>
</tr>
<tr>
<td>房基占地面积</td> <td colspan="8">{{this.licenseForm.licenseRatification.fjzdmj}} 平方米</td>
</tr>
<tr>
<td>土地所有权人</td> <td colspan="8">{{this.licenseForm.licenseRatification.landOwner}}</td>
</tr>
<tr>
<td>土地用途</td> <td colspan="8">{{ formatDict(options.land_use, licenseForm.licenseRatification.landUse) }} </td>
</tr>
<tr>
<td>土地坐落<br/>(详见附图)</td> <td colspan="8">{{ this.licenseForm.licenseRatification.location }}</td>
</tr>
<tr>
<td rowspan="2">四 至</td>
<td style="width: 1.2rem;">东</td><td colspan="3">{{ this.licenseForm.licenseRatification.east }}</td>
<td style="width: 1.2rem;">南</td><td colspan="3">{{ this.licenseForm.licenseRatification.south }}</td>
</tr>
<tr>
<td style="width: 1.2rem;">西</td><td colspan="3">{{ this.licenseForm.licenseRatification.west }}</td>
<td style="width: 1.2rem;">北</td><td colspan="3">{{ this.licenseForm.licenseRatification.north }}</td>
</tr>
<tr>
<td>批准书有效期</td><td colspan="8">{{this.licenseForm.licenseRatification.startTime +'至'+this.licenseForm.licenseRatification.endTime }}</td>
</tr>
<tr style="height: 2rem;">
<td colspan="9" style="text-align: left;">备注:</td>
</tr>
</table>
</div>
</div>
</van-tab>
</van-tabs>

<onlineHomeIndex :current="1"></onlineHomeIndex>
</div>
</template>

<script>
import {selectAllLicense} from "@/api/onlineHome/homestead/houseProposer";
import onlineHomeIndex from "@/views/onlineHomeIndex";
import { attachmentFind } from "@/api/onlineHome/homestead/application";
import RawImageCarousel from "@/components/house/RawImageCarousel";

export default {
components: {onlineHomeIndex, RawImageCarousel},
name: "HouseLicenseDetail",
data() {
return {
proposerId: null,
licenseForm:{
"licensePermit": {
"searchValue": null,
"createBy": "",
"createTime": "",
"updateBy": "",
"updateTime": null,
"proposerId": null,
"applyProposerId": null,
"year": "",
"licenseKey": "",
"issuingAuthority": "",
"issueDate": "",
"constructionUnit": "",
"constructionItem": "",
"constructionLocation": "",
"constructionScale": "",
"locationPlan": null
},
"licenseRatification": {
"searchValue": null,
"createBy": "",
"createTime": '',
"updateBy": "",
"updateTime": null,
"proposerId": '',
"applyProposerId": '',
"year": "2021",
"approvalNumber": "",
"issuingAuthority": "",
"issueDate": "",
"memberName": "",
"landArea": 0,
"landOwner": "",
"landUse": "",
"location": "",
"east": "",
"west": "",
"south": "",
"north": "",
"startTime": "",
"endTime": "",
"remark": '',
'fjzdmj': 0, // 房基占地面积
},
},
activeName: 0,
options: {
land_use: [],
},
attachmentList: [],
locationPlanList: [],
}
},
created() {
this.proposerId = this.$route.query.id;
this.initOptions();
this.getDetail();
},
methods: {
getDetail() {
selectAllLicense(this.proposerId).then((response) => {
this.licenseForm = response.data;
if(this.licenseForm.licensePermit.locationPlan)
{
const Host = this.$store.getters.baseRoutingUrl;
let list = JSON.parse(this.licenseForm.licensePermit.locationPlan);
this.locationPlanList = list.map((x) => {
x.url = Host + x.fileUrl;
return x;
})
}
this.getAttachments();
}).catch((e) => {
this.$toast.fail('获取证书失败!');
});
},
initOptions() {
for(let k in this.options)
{
this.houseGetDicts(k).then((res) => {
this.options[k] = res.data;
});
}
},
formatDict(dict, value) {
return this.selectDictLabel(dict, value);
},
getAttachments() {
this.attachmentList = [];
let cond = {
tableId: this.proposerId,
tableName: 't_house_apply_proposer',
fileType: 13,
};
attachmentFind(cond).then(resp => {
this.attachmentList = resp.data;
});
},
},
}
</script>

<style scoped lang="scss">
table {
line-height: 2rem;
text-align: center;
border-collapse: collapse;
width: 96%;
margin: 0 auto;
}
td {
line-height: 1rem;
border: 1px solid #000000;
border-collapse: collapse;
font-size: 0.35rem;
}
.planningPermit-two{
//margin-top: 30px;
}
.wrap-root {
color: #606266;
.title {
font-size: 0.55rem;
font-weight: bold;
text-align: center;
line-height: 0.8rem;
}
.no-label {
text-align: right;
font-size: 0.45rem;
line-height: 0.6rem;
padding: 0.5rem 0 0.5rem;
}
.no-sub-label {
text-align: right;
font-size: 0.4rem;
line-height: 0.5rem;
padding: 0.2rem 0.1rem 0.2rem;
}
.no {
text-decoration: underline;
font-style:oblique;
}
.content {
font-size: 0.45rem;
line-height: 0.8rem;
}
.label {
font-size: 0.45rem;
text-align: right;
line-height: 0.8rem;
padding-right: 0.3rem;
}

.section {
width: 96%;
margin: auto;
.part {
width: 100%;
padding: 1.5rem 0.35rem;
margin: 0.5rem 0rem;
border:1px solid #000000;
}
}

.list {
list-style: none;
text-align: start;
font-size: 0.35rem;
line-height: 0.6rem;

.list__item-content {
font-size: 0.4rem;
line-height: 0.6rem;
word-break: break-all;
padding: 0.1rem 0.2rem;
text-align: left;
}
}
}
</style>

+ 141
- 0
src/views/onlineHome/homestead/homeApplication/licensePermitEdit.vue Datei anzeigen

@@ -0,0 +1,141 @@
<template>
<div>
<van-nav-bar
title="修改许可证"
left-arrow
fixed
placeholder
@click-left="$router.back()"
z-index="998"
>
</van-nav-bar>

<div>
<van-form ref="form">
<van-field v-model="licenseForm.licensePermit.year" required label="年度" placeholder="年度" input-align="right" type="digit" label-width="auto" :rules="[{ pattern: /^\d+$/ }]"/>
<van-field v-model="licenseForm.licensePermit.licenseKey" required label="许可证号" placeholder="许可证号" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licensePermit.issuingAuthority" required label="发证机关" placeholder="发证机关" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<field-date-picker
v-model="licenseForm.licensePermit.issueDate"
label="发证日期"
placeholder="发证日期"
:rules="[{ required: true }]"
formatter="yyyy-MM-dd"
required
/>
<van-field v-model="licenseForm.licensePermit.constructionUnit" required label="建设单位" placeholder="建设单位" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licensePermit.constructionItem" required label="建设项目名称" placeholder="建设项目名称" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licensePermit.constructionLocation" required label="建设位置" placeholder="建设位置" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licensePermit.constructionScale" required label="建设规模" placeholder="建设规模" input-align="left" :rules="[{required: true}]"
rows="2"
:autosize="true"
type="textarea"/>
</van-form>
</div>

<van-goods-action style="z-index: 999;">
<van-goods-action-button type="info" text="关闭" @click="close()"/>
<van-goods-action-button type="primary" text="保存" @click="submit()"/>
</van-goods-action>
</div>
</template>

<script>
import {updateRatification, updatePermit} from "@/api/onlineHome/homestead/license";
import {selectAllLicense} from "@/api/onlineHome/homestead/houseProposer";
import FieldDatePicker from "@/components/form/FieldDatePicker";
import {Notify} from "vant";

export default {
name: "licensePermitEdit",
components: {FieldDatePicker},
props: ['id'],
data() {
return {
proposerId: null,
licenseForm:{
"licensePermit": {
"searchValue": null,
"createBy": "",
"createTime": "",
"updateBy": "",
"updateTime": null,
"proposerId": null,
"applyProposerId": null,
"year": null,
"licenseKey": null,
"issuingAuthority": null,
"issueDate": null,
"constructionUnit": null,
"constructionItem": null,
"constructionLocation": null,
"constructionScale": null,
"locationPlan": null
},
"licenseRatification": {
"searchValue": null,
"createBy": "",
"createTime": null,
"updateBy": "",
"updateTime": null,
"proposerId": null,
"applyProposerId": null,
"year": null,
"approvalNumber": null,
"issuingAuthority": null,
"issueDate": null,
"memberName": null,
"landArea": 0,
"landOwner": null,
"landUse": null,
"location": null,
"east": null,
"west": null,
"south": null,
"north": null,
"startTime": null,
"endTime": null,
"remark": null,
'fjzdmj': 0, // 房基占地面积
},
},
options: {
},
};
},
created() {
this.proposerId = this.$route.query.id;
this.getDetail();
},
methods: {
getDetail() {
selectAllLicense(this.proposerId).then((response) => {
this.licenseForm = response.data;
}).catch((e) => {
this.$toast.fail('获取证书失败!');
});
},
close() {
this.$router.back();
},
submit() {
this.$refs.form.validate().then(() => {
updatePermit(this.licenseForm.licensePermit).then(response => {
this.notify('保存成功', 'success');
this.$router.back();
}).catch((e) => {
this.notify('保存失败!', 'danger');
});
});
},
notify(message, type) {
Notify.clear();
Notify({ type: type || 'primary', message: message });
},
},
}
</script>

<style scoped>

</style>

+ 189
- 0
src/views/onlineHome/homestead/homeApplication/licenseRatificationEdit.vue Datei anzeigen

@@ -0,0 +1,189 @@
<template>
<div>
<van-nav-bar
title="修改批准书"
left-arrow
fixed
placeholder
@click-left="$router.back()"
z-index="998"
>
</van-nav-bar>

<div style="padding-bottom: 1.33rem;">
<van-form ref="form">

<van-divider>基本信息</van-divider>

<van-field v-model="licenseForm.licenseRatification.year" required label="年度" placeholder="年度" input-align="right" type="digit" label-width="auto" :rules="[{ pattern: /^\d+$/ }]"/>
<van-field v-model="licenseForm.licenseRatification.approvalNumber" required label="批准书号" placeholder="批准书号" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licenseRatification.issuingAuthority" required label="填发机关" placeholder="填发机关" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<field-date-picker
v-model="licenseForm.licenseRatification.issueDate"
label="发证日期"
placeholder="发证日期"
:rules="[{ required: true }]"
formatter="yyyy-MM-dd"
required
/>
<van-field v-model="licenseForm.licenseRatification.memberName" required label="申请人姓名" placeholder="申请人姓名" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licenseRatification.landArea" required label="批准用地面积" placeholder="批准用地面积" input-align="right" label-width="auto" :rules="[{required: true}]" type="number"><template #right-icon>㎡</template></van-field>
<van-field v-model="licenseForm.licenseRatification.landOwner" required label="土地所有权人" placeholder="土地所有权人" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<field-select
v-model="licenseForm.licenseRatification.landUse"
label="土地用途"
value-key="dictLabel"
data-key="dictValue"
placeholder="选择土地用途"
:rules="[{ required: true }]"
required
remote-url="/system/dict/data/type/land_use"
:on-remote-response="'data'"
/>

<van-divider>房屋位置</van-divider>

<van-field v-model="licenseForm.licenseRatification.location" required label="位置" placeholder="位置" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licenseRatification.east" required label="东至" placeholder="东至" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licenseRatification.west" required label="西至" placeholder="西至" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licenseRatification.south" required label="南至" placeholder="南至" input-align="right" label-width="auto" :rules="[{required: true}]"/>
<van-field v-model="licenseForm.licenseRatification.north" required label="北至" placeholder="北至" input-align="right" label-width="auto" :rules="[{required: true}]"/>

<van-divider>其他信息</van-divider>

<field-date-picker
v-model="licenseForm.licenseRatification.startTime"
label="开始时间"
placeholder="开始时间"
:rules="[{ required: true }]"
formatter="yyyy-MM-dd"
required
/>
<field-date-picker
v-model="licenseForm.licenseRatification.endTime"
label="结束时间"
placeholder="结束时间"
:rules="[{ required: true }]"
formatter="yyyy-MM-dd"
required
/>
<van-field v-model="licenseForm.licenseRatification.remark" required label="备注" placeholder="备注" input-align="left" :rules="[{required: true}]"
rows="2"
:autosize="true"
type="textarea"/>
</van-form>
</div>

<van-goods-action style="z-index: 999;">
<van-goods-action-button type="info" text="关闭" @click="close()"/>
<van-goods-action-button type="primary" text="保存" @click="submit()"/>
</van-goods-action>
</div>
</template>

<script>
import {updateRatification, updatePermit} from "@/api/onlineHome/homestead/license";
import {selectAllLicense} from "@/api/onlineHome/homestead/houseProposer";
import FieldDatePicker from "@/components/form/FieldDatePicker";
import FieldSelect from "@/components/form/FieldSelect";
import {Notify} from "vant";

export default {
name: "licenseRatificationEdit",
components: {FieldDatePicker, FieldSelect},
props: ['id'],
data() {
return {
proposerId: null,
licenseForm:{
"licensePermit": {
"searchValue": null,
"createBy": "",
"createTime": "",
"updateBy": "",
"updateTime": null,
"proposerId": null,
"applyProposerId": null,
"year": null,
"licenseKey": null,
"issuingAuthority": null,
"issueDate": null,
"constructionUnit": null,
"constructionItem": null,
"constructionLocation": null,
"constructionScale": null,
"locationPlan": null
},
"licenseRatification": {
"searchValue": null,
"createBy": "",
"createTime": null,
"updateBy": "",
"updateTime": null,
"proposerId": null,
"applyProposerId": null,
"year": null,
"approvalNumber": null,
"issuingAuthority": null,
"issueDate": null,
"memberName": null,
"landArea": 0,
"landOwner": null,
"landUse": null,
"location": null,
"east": null,
"west": null,
"south": null,
"north": null,
"startTime": null,
"endTime": null,
"remark": null,
'fjzdmj': 0, // 房基占地面积
},
},
options: {
},
};
},
created() {
this.proposerId = this.$route.query.id;
this.getDetail();
},
methods: {
getDetail() {
selectAllLicense(this.proposerId).then((response) => {
this.licenseForm = response.data;
}).catch((e) => {
this.$toast.fail('获取证书失败!');
});
},
close() {
this.$router.back();
},
submit() {
this.$refs.form.validate().then(() => {
updateRatification(this.licenseForm.licenseRatification).then(response => {
this.notify('保存成功', 'success');
this.$router.back();
}).catch((e) => {
this.notify('保存失败!', 'danger');
});
});
},
notify(message, type) {
Notify.clear();
Notify({ type: type || 'primary', message: message });
},
},
}
</script>

<style scoped lang="scss">
.van-divider {
margin: 0;
padding: 0.2rem;
color: #1989fa;
border-color: #1989fa;
background-color: #FFFFFF;
}
</style>

+ 2812
- 0
src/views/onlineHome/homestead/homeApplication/proposerLite.vue
Datei-Diff unterdrückt, da er zu groß ist
Datei anzeigen


+ 1
- 1
src/views/onlineHome/mailList.vue Datei anzeigen

@@ -7,7 +7,7 @@
/>
<van-row style="margin-top: 20px">
<van-col span="16" :offset="2">
<h3>张村村民联系方式</h3>
<h3>{{this.$store.state.user.deptName}}村民联系方式</h3>
</van-col>
</van-row>
<van-cell-group style="width: 96%;margin:2%;border-radius: 6px;overflow: hidden;padding-top: 10px;padding-bottom: 10px;box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.16);">


+ 1
- 1
src/views/onlineHome/my.vue Datei anzeigen

@@ -119,7 +119,7 @@
this.nickName = response.user.nickName
this.deptName = response.user.dept.deptName
this.userId = response.user.userId
this.avatar = location.protocol+"//"+location.host+request.defaults.baseURL+response.user.avatar
this.avatar = this.$store.getters.baseRoutingUrl + response.user.avatar
});
},
methods: {


+ 5
- 5
src/views/onlineHome/workbench.vue Datei anzeigen

@@ -7,7 +7,7 @@
<template #left>
<van-icon name="location" color="3A80FB" size="16"/>
<p style="color: #878787;margin-left: 5px" @click="selectDept">{{deptName}}</p>
<van-popup v-model="villageVisbile" round position="bottom">
<van-popup v-model="villageVisbile" round position="bottom" style="bottom: 2rem;">
<van-cascader
v-model="villageValue"
title="请选择所在村"
@@ -207,7 +207,7 @@
<van-row class="indexCard">
<van-cell style="border-radius: 6px;">
<template #title>
<p style="font-weight: bold;font-size: 18px;display: inline-block">农村产权交易管理</p>
<p style="font-weight: bold;font-size: 18px;display: inline-block">宅基地信息平台</p>
</template>
</van-cell>
<van-grid :border="false">
@@ -217,15 +217,15 @@
</div>
<p style="margin-top: 5px;color: #666666;">宅基地申请</p>
</van-grid-item>
<van-grid-item text="证书打印" >
<van-grid-item text="证书查看" :to="{name:'houseLicense'}">
<div slot="default">
<div class="icon" style="background:#7790FE;">
<img src="../../../static/images/onlineHome/icon12.png" style="width: 25px" alt />
</div>
</div>
<p style="margin-top: 5px;color: #666666;">证书打印</p>
<p style="margin-top: 5px;color: #666666;">证书查看</p>
</van-grid-item>
<van-grid-item text="公示查询" >
<van-grid-item text="公示查询" :to="{name:'houseAnnounce'}">
<div slot="default">
<div class="icon" style="background:#C5685F;">
<img src="../../../static/images/onlineHome/icon11.png" style="width: 25px;" alt />


+ 4
- 2
src/views/onlineHomeLogin.vue Datei anzeigen

@@ -24,6 +24,7 @@
center
clearable
label="验证码"
:rules="[{ required: true, }]"
placeholder="图形验证码"
>
<template #button>
@@ -333,7 +334,7 @@ export default {
message: '密码不能为空',
});
return false;
} else if (this.formData.code == "") {
} else if (!this.formData.code) {
this.$dialog.alert({
message: '图片验证码不能为空',
});
@@ -341,7 +342,8 @@ export default {
}
this.$store
.dispatch("Login", this.formData)
.then(() => {
.then((resp) => {
console.log(resp);
this.$router.push({ path: "/onlineHome/workbench" }).catch(() => {});
})
.catch((error) => {


Laden…
Abbrechen
Speichern