@@ -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' | |||
}) | |||
} |
@@ -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' | |||
}) | |||
} |
@@ -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 | |||
}) | |||
} |
@@ -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 | |||
}) | |||
} |
@@ -7,3 +7,11 @@ export function getGeoServerConfigKey() { | |||
method: 'get' | |||
}) | |||
} | |||
// 附件地址前缀 | |||
export function getSystemAttachmentUrl() { | |||
return request({ | |||
url: '/system/config/configKey/system.attachment.url', | |||
method: 'get' | |||
}) | |||
} |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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) | |||
}, | |||
]; | |||
@@ -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 |
@@ -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) | |||
@@ -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}}) | |||
@@ -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; | |||
}); | |||
@@ -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> | |||
@@ -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)}} {{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> |
@@ -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> |
@@ -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;">填发机关: {{this.licenseForm.licensePermit.issuingAuthority}}</div> | |||
<div class="licence_first_time label">日 期: {{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;">填发机关: {{this.licenseForm.licenseRatification.issuingAuthority}}</div> | |||
<div class="ft_time label">填发时间: {{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> |
@@ -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> |
@@ -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> |
@@ -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);"> | |||
@@ -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: { | |||
@@ -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 /> | |||
@@ -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) => { | |||