| @@ -121,3 +121,104 @@ export function getHouseMembers(id){ | |||||
| method:'get' | 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' | 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) | 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, | roles: state => state.user.roles, | ||||
| permissions: state => state.user.permissions, | permissions: state => state.user.permissions, | ||||
| bookName: state => state.user.bookName, | bookName: state => state.user.bookName, | ||||
| nickName: state => state.user.nickName, | |||||
| baseRoutingUrl: state => state.user.baseRoutingUrl, | |||||
| } | } | ||||
| export default getters | export default getters | ||||
| @@ -1,6 +1,7 @@ | |||||
| import { login, logout, getInfo, smsLogin } from '@/api/login'; | import { login, logout, getInfo, smsLogin } from '@/api/login'; | ||||
| import { registerOn } from "@/api/register"; | import { registerOn } from "@/api/register"; | ||||
| import { getToken, setToken, removeToken } from '@/utils/auth' | import { getToken, setToken, removeToken } from '@/utils/auth' | ||||
| import { getSystemAttachmentUrl } from '@/api/system/config' | |||||
| const user = { | const user = { | ||||
| state: { | state: { | ||||
| @@ -9,7 +10,10 @@ const user = { | |||||
| avatar: '', | avatar: '', | ||||
| roles: [], | roles: [], | ||||
| permissions: [], | permissions: [], | ||||
| bookName: '' | |||||
| bookName: '', | |||||
| nickName: '', | |||||
| baseRoutingUrl: '', | |||||
| }, | }, | ||||
| mutations: { | mutations: { | ||||
| @@ -39,7 +43,13 @@ const user = { | |||||
| }, | }, | ||||
| SET_BOOKNAME: (state, bookName) => { | SET_BOOKNAME: (state, bookName) => { | ||||
| state.bookName = bookName | state.bookName = bookName | ||||
| } | |||||
| }, | |||||
| SET_NICKNAME: (state, nickName) => { | |||||
| state.nickName = nickName | |||||
| }, | |||||
| SET_baseRoutingUrl: (state, baseRoutingUrl) => { | |||||
| state.baseRoutingUrl = baseRoutingUrl | |||||
| }, | |||||
| }, | }, | ||||
| actions: { | actions: { | ||||
| @@ -113,6 +123,11 @@ const user = { | |||||
| commit('SET_LOGINBOOKID', user.loginBookId) | commit('SET_LOGINBOOKID', user.loginBookId) | ||||
| commit('SET_DEPTNAME', user.deptName) | commit('SET_DEPTNAME', user.deptName) | ||||
| commit('SET_AVATAR', avatar) | commit('SET_AVATAR', avatar) | ||||
| commit('SET_NICKNAME', user.nickName); | |||||
| getSystemAttachmentUrl().then((resp) => { | |||||
| commit('SET_baseRoutingUrl', resp.msg); | |||||
| }); | |||||
| resolve(res) | resolve(res) | ||||
| }).catch(error => { | }).catch(error => { | ||||
| reject(error) | reject(error) | ||||
| @@ -2,16 +2,26 @@ | |||||
| <div> | <div> | ||||
| <van-nav-bar | <van-nav-bar | ||||
| title="我的事项" | title="我的事项" | ||||
| fixed | |||||
| placeholder | |||||
| left-arrow | left-arrow | ||||
| @click-left="goOnlineHomeIndex" | @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 title="待办" name="1" > | ||||
| </van-tab> | </van-tab> | ||||
| <van-tab title="已办" name="2"> | <van-tab title="已办" name="2"> | ||||
| </van-tab> | </van-tab> | ||||
| </van-tabs> | </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> | <van-cell> | ||||
| <template #title> | <template #title> | ||||
| <van-row style=""> | <van-row style=""> | ||||
| @@ -43,6 +53,8 @@ | |||||
| </template> | </template> | ||||
| </van-cell> | </van-cell> | ||||
| </van-cell-group> | </van-cell-group> | ||||
| </van-list> | |||||
| </van-pull-refresh> | |||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| @@ -65,6 +77,9 @@ | |||||
| pageSize: 100, | pageSize: 100, | ||||
| }, | }, | ||||
| activityBusinessTypeOptions:[], | activityBusinessTypeOptions:[], | ||||
| refreshing: false, | |||||
| loading: false, | |||||
| finished: false, | |||||
| } | } | ||||
| }, | }, | ||||
| created() { | created() { | ||||
| @@ -81,12 +96,28 @@ | |||||
| goOnlineHomeIndex(){ | goOnlineHomeIndex(){ | ||||
| this.$router.push({name:'onlineHomeWorkbench'}) | 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'){ | if(this.activeName=='1'){ | ||||
| ListTodo(this.queryParams).then((response) => { | ListTodo(this.queryParams).then((response) => { | ||||
| console.log(response) | console.log(response) | ||||
| if(response.rows.length === 0) | |||||
| { | |||||
| this.finished = true; | |||||
| return; | |||||
| } | |||||
| response.rows.map(res => { | response.rows.map(res => { | ||||
| if(res.tableName?res.tableName.indexOf('house')>0:""){ | if(res.tableName?res.tableName.indexOf('house')>0:""){ | ||||
| res.tableName = '来自农村宅基地管理系统' | res.tableName = '来自农村宅基地管理系统' | ||||
| @@ -104,10 +135,18 @@ | |||||
| }); | }); | ||||
| } | } | ||||
| }) | }) | ||||
| }) | |||||
| }).finally(() => { | |||||
| this.loading = false; | |||||
| this.refreshing = false; | |||||
| }); | |||||
| }else{ | }else{ | ||||
| ListDone(this.queryParams).then((response) => { | ListDone(this.queryParams).then((response) => { | ||||
| console.log(response) | console.log(response) | ||||
| if(response.rows.length === 0) | |||||
| { | |||||
| this.finished = true; | |||||
| return; | |||||
| } | |||||
| response.rows.map(res => { | response.rows.map(res => { | ||||
| if(res.tableName?res.tableName.indexOf('house')>0:""){ | if(res.tableName?res.tableName.indexOf('house')>0:""){ | ||||
| res.tableName = '来自农村宅基地管理系统' | res.tableName = '来自农村宅基地管理系统' | ||||
| @@ -125,7 +164,10 @@ | |||||
| }); | }); | ||||
| } | } | ||||
| }) | }) | ||||
| }) | |||||
| }).finally(() => { | |||||
| this.loading = false; | |||||
| this.refreshing = false; | |||||
| }); | |||||
| } | } | ||||
| }, | }, | ||||
| goDetail(item){ | goDetail(item){ | ||||
| @@ -136,6 +178,11 @@ | |||||
| case 'landscope': | case 'landscope': | ||||
| case 'accepting': | case 'accepting': | ||||
| this.$router.push({name:'approvalForm',query: {id:item.formData.id,taskId:item.taskId,instanceId:item.formData.instanceId,type:item.type}}) | 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; | break; | ||||
| case 'yinnong_transfer': | case 'yinnong_transfer': | ||||
| this.$router.push({name:'approvalApproval',query: {id:item.formData.id,taskId:item.taskId,type:item.type}}) | this.$router.push({name:'approvalApproval',query: {id:item.formData.id,taskId:item.taskId,type:item.type}}) | ||||
| @@ -35,23 +35,25 @@ | |||||
| </template> | </template> | ||||
| <script> | <script> | ||||
| import { allInformation } from "@/api/onlineHome/homestead/application"; | |||||
| import { allInformation, allInformationWLHT } from "@/api/onlineHome/homestead/application"; | |||||
| export default { | export default { | ||||
| name: "flowChart", | name: "flowChart", | ||||
| data() { | data() { | ||||
| return { | return { | ||||
| applicationDetail:[], | applicationDetail:[], | ||||
| id:'' | |||||
| id:'', | |||||
| processKey: '', | |||||
| }; | }; | ||||
| }, | }, | ||||
| created() { | created() { | ||||
| this.id = this.$route.query.id; | this.id = this.$route.query.id; | ||||
| this.processKey = this.$route.query.processKey; | |||||
| this.getDetail(); | this.getDetail(); | ||||
| }, | }, | ||||
| methods: { | methods: { | ||||
| //获取数据集合 | //获取数据集合 | ||||
| getDetail(){ | getDetail(){ | ||||
| allInformation(this.id).then(response => { | |||||
| (this.processKey && this.processKey.endsWith('WLHT') ? allInformationWLHT : allInformation)(this.id).then(response => { | |||||
| console.log(response) | console.log(response) | ||||
| this.applicationDetail = response.data; | this.applicationDetail = response.data; | ||||
| }); | }); | ||||
| @@ -5,7 +5,7 @@ | |||||
| fixed | fixed | ||||
| placeholder | placeholder | ||||
| @click-left="$router.back(-1)" | @click-left="$router.back(-1)" | ||||
| @click-right="goAdd()" | |||||
| @click-right="goAddLite()" | |||||
| > | > | ||||
| <template #title> | <template #title> | ||||
| <p style="font-weight: bold;">宅基地申请</p> | <p style="font-weight: bold;">宅基地申请</p> | ||||
| @@ -15,14 +15,15 @@ | |||||
| </template> | </template> | ||||
| </van-nav-bar> | </van-nav-bar> | ||||
| <van-list | |||||
| <van-pull-refresh v-model="refreshing" @refresh="refresh"> | |||||
| <van-list | |||||
| v-model="loading" | v-model="loading" | ||||
| :finished="finished" | :finished="finished" | ||||
| finished-text="没有更多了" | finished-text="没有更多了" | ||||
| @load="getList" | @load="getList" | ||||
| > | > | ||||
| <van-swipe-cell v-for="(item,index) in applicationList" :key="index"> | <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> | <template #icon> | ||||
| <van-icon name="../../../static/images/onlineHome/icon_zjd1.png" size="30" color="#539FFD" style="margin-right: 10px;" /> | <van-icon name="../../../static/images/onlineHome/icon_zjd1.png" size="30" color="#539FFD" style="margin-right: 10px;" /> | ||||
| </template> | </template> | ||||
| @@ -33,20 +34,25 @@ | |||||
| <template #right> | <template #right> | ||||
| <van-row> | <van-row> | ||||
| <van-col> | <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-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-col> | ||||
| </van-row> | </van-row> | ||||
| </template> | </template> | ||||
| </van-swipe-cell> | </van-swipe-cell> | ||||
| </van-list> | </van-list> | ||||
| </van-pull-refresh> | |||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| <script> | <script> | ||||
| import { getList , removeList } from "@/api/onlineHome/homestead/application"; | import { getList , removeList } from "@/api/onlineHome/homestead/application"; | ||||
| import { customSubmit, customSubmitWLHT} from "@/api/onlineHome/homestead/application"; | |||||
| export default { | export default { | ||||
| name: "applicationList", | name: "applicationList", | ||||
| data() { | data() { | ||||
| @@ -55,6 +61,7 @@ export default { | |||||
| houseApplyStatus:[], | houseApplyStatus:[], | ||||
| loading: false, | loading: false, | ||||
| finished: false, | finished: false, | ||||
| refreshing: false, | |||||
| queryParams:{ | queryParams:{ | ||||
| pageNum:1, | pageNum:1, | ||||
| pageSize:10, | pageSize:10, | ||||
| @@ -73,13 +80,26 @@ export default { | |||||
| goAdd(){ | goAdd(){ | ||||
| window.location = 'applicationAdd'; | 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(){ | getList(){ | ||||
| setTimeout(() => { | setTimeout(() => { | ||||
| getList(this.queryParams).then(response => { | getList(this.queryParams).then(response => { | ||||
| console.log(response) | console.log(response) | ||||
| for (var i = 0; i < response.rows.length; i++) { | 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]); | this.applicationList.push(response.rows[i]); | ||||
| } | } | ||||
| console.log(this.applicationList.length >= response.total) | console.log(this.applicationList.length >= response.total) | ||||
| @@ -90,6 +110,9 @@ export default { | |||||
| this.loading = false; | this.loading = false; | ||||
| this.queryParams.pageNum += 1 ; | this.queryParams.pageNum += 1 ; | ||||
| } | } | ||||
| }).finally(() => { | |||||
| this.loading = false; | |||||
| this.refreshing = false; | |||||
| }); | }); | ||||
| }, 1000); | }, 1000); | ||||
| }, | }, | ||||
| @@ -109,7 +132,26 @@ export default { | |||||
| .catch(() => { | .catch(() => { | ||||
| // on cancel | // 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> | </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-row style="margin-top: 20px"> | ||||
| <van-col span="16" :offset="2"> | <van-col span="16" :offset="2"> | ||||
| <h3>张村村民联系方式</h3> | |||||
| <h3>{{this.$store.state.user.deptName}}村民联系方式</h3> | |||||
| </van-col> | </van-col> | ||||
| </van-row> | </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);"> | <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.nickName = response.user.nickName | ||||
| this.deptName = response.user.dept.deptName | this.deptName = response.user.dept.deptName | ||||
| this.userId = response.user.userId | 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: { | methods: { | ||||
| @@ -7,7 +7,7 @@ | |||||
| <template #left> | <template #left> | ||||
| <van-icon name="location" color="3A80FB" size="16"/> | <van-icon name="location" color="3A80FB" size="16"/> | ||||
| <p style="color: #878787;margin-left: 5px" @click="selectDept">{{deptName}}</p> | <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 | <van-cascader | ||||
| v-model="villageValue" | v-model="villageValue" | ||||
| title="请选择所在村" | title="请选择所在村" | ||||
| @@ -207,7 +207,7 @@ | |||||
| <van-row class="indexCard"> | <van-row class="indexCard"> | ||||
| <van-cell style="border-radius: 6px;"> | <van-cell style="border-radius: 6px;"> | ||||
| <template #title> | <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> | </template> | ||||
| </van-cell> | </van-cell> | ||||
| <van-grid :border="false"> | <van-grid :border="false"> | ||||
| @@ -217,15 +217,15 @@ | |||||
| </div> | </div> | ||||
| <p style="margin-top: 5px;color: #666666;">宅基地申请</p> | <p style="margin-top: 5px;color: #666666;">宅基地申请</p> | ||||
| </van-grid-item> | </van-grid-item> | ||||
| <van-grid-item text="证书打印" > | |||||
| <van-grid-item text="证书查看" :to="{name:'houseLicense'}"> | |||||
| <div slot="default"> | <div slot="default"> | ||||
| <div class="icon" style="background:#7790FE;"> | <div class="icon" style="background:#7790FE;"> | ||||
| <img src="../../../static/images/onlineHome/icon12.png" style="width: 25px" alt /> | <img src="../../../static/images/onlineHome/icon12.png" style="width: 25px" alt /> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <p style="margin-top: 5px;color: #666666;">证书打印</p> | |||||
| <p style="margin-top: 5px;color: #666666;">证书查看</p> | |||||
| </van-grid-item> | </van-grid-item> | ||||
| <van-grid-item text="公示查询" > | |||||
| <van-grid-item text="公示查询" :to="{name:'houseAnnounce'}"> | |||||
| <div slot="default"> | <div slot="default"> | ||||
| <div class="icon" style="background:#C5685F;"> | <div class="icon" style="background:#C5685F;"> | ||||
| <img src="../../../static/images/onlineHome/icon11.png" style="width: 25px;" alt /> | <img src="../../../static/images/onlineHome/icon11.png" style="width: 25px;" alt /> | ||||
| @@ -24,6 +24,7 @@ | |||||
| center | center | ||||
| clearable | clearable | ||||
| label="验证码" | label="验证码" | ||||
| :rules="[{ required: true, }]" | |||||
| placeholder="图形验证码" | placeholder="图形验证码" | ||||
| > | > | ||||
| <template #button> | <template #button> | ||||
| @@ -333,7 +334,7 @@ export default { | |||||
| message: '密码不能为空', | message: '密码不能为空', | ||||
| }); | }); | ||||
| return false; | return false; | ||||
| } else if (this.formData.code == "") { | |||||
| } else if (!this.formData.code) { | |||||
| this.$dialog.alert({ | this.$dialog.alert({ | ||||
| message: '图片验证码不能为空', | message: '图片验证码不能为空', | ||||
| }); | }); | ||||
| @@ -341,7 +342,8 @@ export default { | |||||
| } | } | ||||
| this.$store | this.$store | ||||
| .dispatch("Login", this.formData) | .dispatch("Login", this.formData) | ||||
| .then(() => { | |||||
| .then((resp) => { | |||||
| console.log(resp); | |||||
| this.$router.push({ path: "/onlineHome/workbench" }).catch(() => {}); | this.$router.push({ path: "/onlineHome/workbench" }).catch(() => {}); | ||||
| }) | }) | ||||
| .catch((error) => { | .catch((error) => { | ||||