This commit is contained in:
yanran200730
2022-04-08 17:25:16 +08:00
32 changed files with 2348 additions and 438 deletions

View File

@@ -9,29 +9,39 @@
</template>
<template #right>
<el-input size="small" placeholder="搜索名称" v-model="search.name" clearable
@clear="page.current = 1,search.name = '', getTableData()"
@clear="page.current = 1,search.name = '', getTableData()"
v-throttle="() => {page.current = 1, getTableData()}"/>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getTableData" :col-configs="colConfigs">
<el-table-column type="expand" slot="expand">
<template slot-scope="{row}">
<ai-wrapper>
<ai-info-item labelWidth="200px" v-for="op in desConfigs" :key="op.prop" :value="row[op.prop]"
v-bind="op"/>
</ai-wrapper>
</template>
</el-table-column>
<el-table-column slot="status" align="center" label="状态" width="150">
<template v-slot="{ row }">
<el-switch v-model="row.status" @change="onChange(row)" active-value="1" inactive-value="0"
active-color="#5088FF" inactive-color="#D0D4DC"></el-switch>
</template>
</el-table-column>
<el-table-column slot="miniappStatus" align="center" label="状态" width="150">
<el-table-column slot="miniappStatus" align="center" label="小程序状态" width="150">
<template v-slot="{ row }">
<el-switch v-model="row.miniappStatus" @change="onMiniappStatusChange(row)" active-value="1" inactive-value="0"
<el-switch v-model="row.miniappStatus" @change="onMiniappStatusChange(row)" active-value="1"
inactive-value="0"
active-color="#5088FF" inactive-color="#D0D4DC"></el-switch>
</template>
</el-table-column>
<el-table-column slot="options" align="center" label="操作" fixed="right" width="200px">
<el-table-column slot="options" align="center" label="操作" width="400">
<el-row type="flex" justify="center" align="middle" slot-scope="{row}">
<el-button type="text" @click="detail(row)">详情</el-button>
<el-button type="text" @click="del(row)">删除</el-button>
<el-button type="text" @click="handleSystemInfo(row.id)">系统信息</el-button>
<el-button type="text" @click="handlePush(row.id)">推送随手拍样式</el-button>
</el-row>
</el-table-column>
</ai-table>
@@ -109,11 +119,11 @@
</el-radio-group>
</el-form-item>
<el-form-item label="系统配置信息" prop="systemInfo">
<el-input type="textarea" :rows="2" placeholder="请输入系统配置信息" v-model="dialogForm.systemInfo" maxlength="200"></el-input>
<el-input type="textarea" :rows="2" placeholder="请输入系统配置信息" v-model="dialogForm.systemInfo"
maxlength="200"></el-input>
</el-form-item>
</el-form>
</ai-dialog>
<ai-dialog title="地图" :visible.sync="showMap" @opened="initMap" width="800px" class="mapDialog"
@onConfirm="selectMap">
<div id="map"></div>
@@ -124,7 +134,8 @@
</el-input>
<div id="searchPlaceOutput"/>
</ai-dialog>
<ai-dialog title="系统信息设置" :visible.sync="sysInfoDialog" width="600px" @onConfirm="submitSystemInfo" @closed="sysInfo={}">
<ai-dialog title="系统信息设置" :visible.sync="sysInfoDialog" width="600px" @onConfirm="submitSystemInfo"
@closed="sysInfo={}">
<el-form size="small" label-width="140px">
<el-form-item label="页签标题">
<el-input v-model="sysInfo.title" placeholder="请输入..." clearable/>
@@ -172,22 +183,31 @@ export default {
...mapState(['user']),
colConfigs() {
return [
{prop: "name", label: "名称", width: 150},
{slot: 'expand'},
{prop: "name", label: "名称"},
{prop: "corpId", label: "企业微信ID", width: 180},
{slot: "status",},
{slot: "miniappStatus"},
{prop: "createTime", label: "创建时间"},
{slot: "options"},
]
},
desConfigs() {
let isLine = true
return [
{prop: "corpAddressBookSecret", label: "企业微信通讯录SECRET", width: 200},
{prop: "corpAgentId", label: "企业微信AGENTID", width: 150},
{prop: "corpSecret", label: "企业微信SECRET", width: 200},
{prop: "corpSecret", label: "企业微信SECRET", isLine},
{prop: "corpToken", label: "企业微信TOKEN", width: 150},
{prop: "corpAeskey", label: "企业微信AESKEY", width: 150},
{prop: "miniappAppid", label: "小程序APPID", width: 150},
{prop: "miniappSecret", label: "小程序SECRET", width: 150},
{prop: "areaId", label: "地区编码", width: 150, isLine},
{prop: "lat", label: "纬度", width: 100},
{prop: "lng", label: "经度", width: 100},
{prop: "address", label: "中心点", width: 100},
{slot: "status",},
{slot: "miniappStatus",},
{prop: "createTime", label: "创建时间", width: 150},
{slot: "options"},
{prop: "address", label: "中心点", width: 100, isLine},
{prop: "webUrl", label: "管理端地址", width: 100},
{prop: "dvcpUrl", label: "企微端地址", width: 100},
]
},
rules() {
@@ -309,7 +329,7 @@ export default {
}
})
},
add() {
this.dialogForm = {};
this.dialog = true;
@@ -388,6 +408,13 @@ export default {
this.sysInfoDialog = false
}
})
},
handlePush(id) {
this.instance.post("/app/appclapeventinfo/setAppWorkbench", null, {params: {id}}).then(res => {
if (res?.code == 0) {
this.$message.success("推送成功!")
}
})
}
},
created() {

View File

@@ -1,3 +1,5 @@
{
"AppCodeGeneration": "动态表单"
"AppCodeGeneration": "动态表单",
"AppGigscreenViewer": "大屏预览组件",
"AppDesigner": "大屏设计"
}

View File

@@ -0,0 +1,54 @@
<template>
<section class="AppGroupShareholders">
<keep-alive :include="['List']">
<component ref="component" :is="component" :instance="instance" :params="params" :dict="dict" @change="onChange"/>
</keep-alive>
</section>
</template>
<script>
import List from "./components/List.vue";
import Add from "./components/Add.vue";
export default {
name: "AppGroupShareholders",
label: "集体经济股权",
props: {
instance: Function,
dict: Object,
},
components: {Add, List},
data() {
return {
component: "List",
params: {},
include: [],
}
},
methods: {
onChange(data) {
if (data.type === "Add") {
this.component = "Add";
this.params = data.params;
}
if (data.type === "List") {
this.component = "List";
this.params = data.params;
this.$nextTick(() => {
if (data.isRefresh) {
this.$refs.component.getTableData();
}
});
}
},
},
}
</script>
<style lang="scss" scoped>
.AppGroupShareholders {
height: 100%;
}
</style>

View File

@@ -0,0 +1,297 @@
<template>
<section class="Add">
<ai-detail v-if="!id || isEdit==true">
<template #title>
<ai-title :title="params.id ? '编辑集体经济股权登记' : '新增集体经济股权登记'" :isShowBack="true" :isShowBottomBorder="true" @onBackClick="cancel(false)"></ai-title>
</template>
<template #content>
<ai-card title="基本信息">
<template #right v-if="params.id">
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="isEdit==true" @click="isEdit=false">取消</span>
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="isEdit==true" @click="confirm()">保存</span>
</template>
<template #content>
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="150px">
<el-row type="flex">
<el-col :span="20">
<el-form-item label="集体经济组织" prop="organizationName">
<el-input v-model="form.organizationName" placeholder="请输入集体经济组织名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="统一社会信用代码" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入统一社会信用代码" maxlength="18"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="所在地区" prop="areaId">
<ai-area-select clearable always-show :instance="instance" @fullname="v=>form.areaName = v" v-model="form.areaId" :disabled-level="disabledLevel" :value-level="4"></ai-area-select>
</el-form-item>
<el-row type="flex">
<el-col :span="12">
<el-form-item label="股权证编号" prop="stockCertificateCode">
<el-input v-model="form.stockCertificateCode" placeholder="请输入股权证编号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="权证照片" prop="fileList">
<ai-uploader v-model="form.fileList" :instance="instance" :limit="9" isShowTip/>
</el-form-item>
</el-form>
</template>
</ai-card>
<ai-card title="家庭持股情况">
<template #right>
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="!id || isEdit==true" @click="sysInfoDialog = true">+添加股权人</span>
</template>
<template #content>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getDetail" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" align="center" v-if="!id || isEdit==true">
<template slot-scope="{row,$index}">
<el-button type="text" @click="editBtn(row,$index)">编辑</el-button>
<el-button type="text" @click="deleteBtn(row,$index)">删除</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
</template>
<template slot="footer" class="footer">
<el-button class="delete-btn footer-btn" @click="cancel(false)">取消</el-button>
<el-button class="footer-btn" type="primary" @click="confirm()">保存</el-button>
</template>
</ai-detail>
<ai-detail class="add" v-if="params.id && !isEdit">
<template slot="title">
<ai-title title="集体经济股权登记详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title>
</template>
<template slot="content">
<ai-card title="基本信息">
<template #right>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit=true,form=data">修改</span>
</template>
<template #content>
<ai-wrapper>
<ai-info-item label="集体经济组织" :value="data.organizationName"></ai-info-item>
<ai-info-item label="统一社会信用代码" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="所在地区" :value="data.areaName"></ai-info-item>
<ai-info-item label="股权证编号" :value="data.stockCertificateCode"></ai-info-item>
<ai-info-item label="股权总数" :value="data.totalEquity"></ai-info-item>
<ai-info-item label="股金总额(元)" :value="data.totalAmount"></ai-info-item>
<ai-info-item label="权证照片" isLine>
<ai-uploader v-model="data.fileList" :instance="instance" :limit="9" disabled/>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<ai-card title="家庭持股情况">
<template #right>
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="!id || isEdit==true" @click="sysInfoDialog = true">+添加股权人</span>
</template>
<template #content>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getDetail" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" align="center" v-if="!id || isEdit==true">
<template slot-scope="{row,$index}">
<el-button type="text" @click="editBtn(row, $index)">编辑</el-button>
<el-button type="text" @click="deleteBtn(row, $index)">删除</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
</template>
</ai-detail>
<!-- 弹框 -->
<ai-dialog title="股权结构" :visible.sync="sysInfoDialog" width="600px" @onConfirm="onConfirm"
@closed="table={},isEditSys=false">
<el-form size="small" label-width="140px" :rules="dialogRules" ref="dialogForm" :model="table">
<el-form-item label="股权人姓名" prop="name">
<el-input v-model="table.name" placeholder="请输入股权人姓名" clearable/>
</el-form-item>
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model="table.idNumber" placeholder="请输入身份证号" clearable/>
</el-form-item>
<el-form-item label="与户主关系" prop="householdRelation">
<ai-select v-model="table.householdRelation" placeholder="请选择" :selectList="$dict.getDict('householdRelation')" />
</el-form-item>
<el-form-item label="持股数量" prop="shareholdingNumber">
<el-input v-model="table.shareholdingNumber" placeholder="请输入持股数量" clearable/>
</el-form-item>
<el-form-item label="持股金额(元)" prop="shareholdingAmount">
<el-input v-model="table.shareholdingAmount" placeholder="请输入持股金额" clearable/>
</el-form-item>
</el-form>
</ai-dialog>
</section>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: "Add",
props: {
instance: Function,
dict: Object,
permissions: Function,
params: Object,
},
data() {
return {
id: '',
form: {
organizationName: '',
areaId: '',
areaName: '',
unifiedCode: '',
stockCertificateCode: '',
fileList: [],
},
table: {},
isEdit: false,
radioFrom: '',
page: {current: 1, size: 10, total: 0},
tableData: [],
disabledLevel: 3,
page: {current: 1, size: 10, total: 0},
sysInfoDialog: false,
data: {},
isEditSys: false,
sysIndex: ''
}
},
computed: {
rules() {
return {
organizationName: [{required: true, message: '请输入集体经济组织名称', trigger: 'blur'}],
unifiedCode: [{required: true, message: '请输入18位统一社会信用代码', trigger: 'blur'},
{min: 18, message: '请输入18位统一社会信用代码', trigger: 'blur'}],
areaId: [
{required: true, message: '请选择所在地区', trigger: 'blur'},
{pattern: /[^0]0{0,2}$/,message:'所在地区必须选择到村',trigger: 'blur'}
],
stockCertificateCode: [{required: true, message: '请输入股权证编号', trigger: 'blur'}],
fileList: [{required: true, message: '请上传图片', trigger: 'blur'}],
}
},
dialogRules() {
return {
name: [{required: true, message: '请输入股权人姓名', trigger: 'blur'}],
idNumber: [{required: true, message: '请输入身份证号', trigger: 'blur'}],
householdRelation: [{required: true, message: '请选择与户主关系', trigger: 'blur'}],
shareholdingNumber: [{required: true, message: '请输入持股数量', trigger: 'blur'}],
}
},
...mapState(['user']),
colConfigs() {
return [
{ prop: "name", label: '股权人姓名', align: "center", width: "150px", },
{ prop: "householdRelation", label: '与户主关系', align: "center", width: "200px", dict: 'householdRelation'},
{ prop: "idNumber", label: '身份证', align: "center", width: "200px", },
{ prop: "shareholdingNumber", label: '持股数量', align: "center", width: "200px", },
{ prop: "shareholdingAmount", label: '金额', align: "center", width: "200px", },
{ slot: "options" ,},
]
}
},
created() {
this.$dict.load('householdRelation')
if (this.params && this.params.id) {
this.id = this.params.id
this.getDetail(this.params.id)
}
this.form.areaId = this.user.info.areaId
},
methods: {
cancel(isRefresh) {
this.$emit('change', {
type: 'List',
isRefresh: !!isRefresh,
})
},
deleteBtn(row, index) {
console.log(row);
if(row.householdRelation == 11) {
return '不可以删除户主'
}
this.tableData.splice(index, 1)
},
getDetail(id) {
this.instance.post(`/appcollectiveeconomyequity/queryDetailById`,null, {
params: {
id: id,
...this.page,
}
}).then(res => {
if (res.code === 0) {
this.data = res.data,
this.tableData = res.data.shareholderList
this.page.total = res.data.shareholderList.length
}
})
},
onConfirm() {
this.$refs.dialogForm.validate((valid) => {
if(valid) {
if(this.isEditSys) { //编辑
// this.tableData[this.sysIndex] = this.table
this.tableData.splice(this.sysIndex, 1, this.table)
}else{//新增
this.tableData.push(this.table)
}
this.sysInfoDialog = false
this.$forceUpdate()
}
})
},
confirm() {
this.$refs.form.validate((valid) => {
if (valid) {
this.instance.post(`/appcollectiveeconomyequity/addOrUpdate`, {
...this.form,
id: this.params.id || '',
shareholderList: this.tableData,
}).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
setTimeout(() => {
this.cancel(true)
}, 600)
}
})
}
})
},
editBtn(row, index) {
console.log(index)
this.table = JSON.parse(JSON.stringify(row))
this.sysInfoDialog = true
this.isEditSys = true
this.sysIndex = index
}
},
}
</script>
<style lang="scss" scoped>
.Add {
height: 100%;
background: #f3f4f5;
::v-deep .ai-detail .ai-detail__footer {
background: #FFF;
}
}
</style>

View File

@@ -0,0 +1,109 @@
<template>
<section class="List">
<ai-list>
<!-- :instance="instance" isShowArea v-model="search.areaId" @change="changeArea" -->
<ai-title slot="title" title="集体经济组织股权管理" isShowBottomBorder />
<template #content>
<ai-search-bar>
<template #left>
<el-button type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button>
</template>
<template #right>
<el-input size="small" placeholder="组织名称/持证人/身份证号/股权证编号" v-model="search.executionCode" clearable @clear="page.current = 1, search.executionCode = '',getTableData()"
suffix-icon="iconfont iconSearch" v-throttle="() => {(page.current = 1), getTableData();}"/>
<!-- 导入导出 -->
<ai-import :instance="instance" :dict="dict" importUrl="/appcollectiveeconomyequity/import" url="/appcollectiveeconomyequity/downloadTemplate" name="集体经济组织股权管理信息" @success="getTableData(), $message.success('导入成功!')">
<el-button size="small">导入</el-button>
</ai-import>
<ai-download :instance="instance" url="/appcollectiveeconomyequity/export" :params="search" fileName="集体经济组织股权管理信息"
:disabled="tableData.length == 0">
<el-button size="small">导出</el-button>
</ai-download>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getTableData" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" align="center">
<template slot-scope="{ row }">
<el-button type="text" @click="toAdd(row.id)">详情</el-button>
<el-button type="text" @click="handleDelete(row.id)">删除</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</section>
</template>
<script>
export default {
name: "List",
props: {
instance: Function,
dict: Object,
permissions: Function
},
data() {
return {
search: {executionCode: "",areaId:''},
page: {current: 1, size: 10, total: 0},
tableData: [],
areaId: '',
}
},
computed: {
colConfigs() {
return [
{ prop: "organizationName", label: '集体经济组织名称', align: "center", width: "200px", },
{ prop: "name", label: '持证人(户主)', align: "center", width: "200px", },
{ prop: "idNumber", label: '身份证号', align: "center", width: "200px", },
{ prop: "stockCertificateCode", label: '股权编号', align: "center", width: "200px", },
{ prop: "totalEquity", label: '股权总数', align: "center", width: "200px", },
{ prop: "totalAmount", label: '股金总额(元)', align: "center", width: "200px", },
{ prop: "areaName", label: '所在地区', align: "center", width: "200px", },
{ slot: "options" ,},
]
}
},
created() {
this.getTableData()
},
methods: {
getTableData() {
this.instance.post("/appcollectiveeconomyequity/list", null, {
params: {...this.page, ...this.search,...this.select}
}).then(res => {
if (res?.data) {
this.tableData = res.data?.records
this.page.total = res.data.total
}
})
},
toAdd(id) {
this.$emit('change', {
type: 'Add',
params: {
id: id || ''
}
})
},
handleDelete(id) {
this.$confirm("是否要删除?").then(() => {
this.instance.post(`/appcollectiveeconomyequity/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success("删除成功")
this.getTableData()
}
})
})
},
}
}
</script>
<style lang="scss" scoped>
.List {
height: 100%;
background: #f3f4f5;
}
</style>

View File

@@ -11,51 +11,53 @@
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="isEdit==true" @click="confirm()">保存</span>
</template>
<template #content>
<!-- <ai-bar :title="params.id ? '编辑宅基地所有权信息' : '宅基地所有权信息'"></ai-bar> -->
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="150px">
<el-form-item label="使用证书" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入宅基地使用证书号"></el-input>
<el-form-item label="使用证书" prop="useCertificate">
<el-input v-model="form.useCertificate" placeholder="请输入宅基地使用证书号"></el-input>
</el-form-item>
<el-form-item label="所在地区" prop="unifiedCode">
<ai-area-select v-model="areaId" provinceAction="/api/area/queryProvinceListContainCity" always-show clearable :instance="$request" :areaLevel="5" @fullname="(name) => (this.formJobWant.employmentAreaName = name)"></ai-area-select>
<el-form-item label="所在地区" prop="areaId">
<ai-area-select clearable always-show :instance="instance" @fullname="v=>form.areaName = v" v-model="form.areaId" :disabled-level="disabledLevel" :value-level="4"></ai-area-select>
</el-form-item>
<el-row type="flex">
<el-col :span="20">
<el-form-item label="使用人" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入使用人姓名"></el-input>
<el-form-item label="使用人" prop="usePerson">
<el-input v-model="form.usePerson" placeholder="请输入使用人姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="家庭人口" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入使用人家庭人口"></el-input>
<el-form-item label="家庭人口" prop="houseNumber">
<el-input type="number" v-model="form.houseNumber" placeholder="请输入使用人家庭人口"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex">
<el-col :span="20">
<el-form-item label="身份证号" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入使用人身份证号"></el-input>
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model="form.idNumber" placeholder="请输入使用人身份证号"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="土地所有权" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地所有权人/组织名称"></el-input>
<el-form-item label="土地所有权" prop="landOwnership">
<el-input v-model="form.landOwnership" placeholder="请输入土地所有权人/组织名称"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex">
<el-col :span="12">
<el-form-item label="土地面积/㎡" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地面积"></el-input>
<el-form-item label="土地面积/㎡" prop="landArea">
<el-input v-model="form.landArea" placeholder="请输入土地面积"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="土地四至" prop="unifiedCode">
<el-input type="textarea" v-model="form.unifiedCode" placeholder="请说明宅基地的地块名称地界四至" maxlength="500" show-word-limit :rows="5" />
<el-form-item label="土地四至" prop="landFourTo">
<el-input type="textarea" v-model="form.landFourTo" placeholder="请说明宅基地的地块名称地界四至" maxlength="500" show-word-limit :rows="5" />
</el-form-item>
<el-form-item label="使用情况" prop="unifiedCode">
<el-input type="textarea" v-model="form.unifiedCode" placeholder="请说明宅基地的使用情况" maxlength="500" show-word-limit :rows="5" />
<el-form-item label="使用情况" prop="useSituation">
<el-input type="textarea" v-model="form.useSituation" placeholder="请说明宅基地的使用情况" maxlength="500" show-word-limit :rows="5" />
</el-form-item>
<el-form-item label="权证照片" prop="fileList">
<ai-uploader v-model="form.fileList" :instance="instance" :limit="9" isShowTip/>
</el-form-item>
</el-form>
</template>
</ai-card>
@@ -72,20 +74,22 @@
<template slot="content">
<ai-card title="合同信息">
<template #right>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit=true,forms=data">修改</span>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit=true,form=data">修改</span>
</template>
<template #content>
<ai-wrapper>
<ai-info-item label="使用证书" :value="data.taxpayer"></ai-info-item>
<ai-info-item label="所在地区" :value="data.taxpayerNumber"></ai-info-item>
<ai-info-item label="使用人" :value="data.taxpayerNumber"></ai-info-item>
<ai-info-item label="家庭人口" :value="data.taxYear"></ai-info-item>
<ai-info-item label="身份证号" :value="data.taxpayerNumber"></ai-info-item>
<ai-info-item label="土地所有权">{{ dict.getLabel('taxInfoLevel', data.taxLevel) }}</ai-info-item>
<ai-info-item label="土地面积/㎡" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="土地四至" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="土地面积" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="使用情况" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="使用证书" :value="data.useCertificate" isLine></ai-info-item>
<ai-info-item label="所在地区" :value="data.areaName" isLine></ai-info-item>
<ai-info-item label="使用人" :value="data.usePerson"></ai-info-item>
<ai-info-item label="家庭人口" :value="data.houseNumber"></ai-info-item>
<ai-info-item label="身份证号" :value="data.idNumber"></ai-info-item>
<ai-info-item label="土地所有权" :value="data.landOwnership">{{ dict.getLabel('landOwnership', data.landOwnership) }}</ai-info-item>
<ai-info-item label="土地面积/㎡" :value="data.landArea"></ai-info-item>
<ai-info-item label="土地四至" :value="data.landFourTo" isLine></ai-info-item>
<ai-info-item label="使用情况" :value="data.useSituation" isLine></ai-info-item>
<ai-info-item label="权证照片" isLine>
<ai-uploader v-model="data.fileList" :instance="instance" :limit="9" disabled/>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
@@ -108,26 +112,51 @@ export default {
return {
id: '',
form: {
unifiedCode: '',
useCertificate: '',
areaId: '',
areaName: '',
usePerson: '',
houseNumber: '',
idNumber: '',
landOwnership: '',
landArea: '',
landFourTo: '',
useSituation: '',
fileList: [],
},
isEdit: false,
radioFrom: ''
radioFrom: '',
disabledLevel: 3,
data: {},
}
},
computed: {
rules() {
return {
unifiedCode: [{required: true, message: '请输入', trigger: 'blur'}]
useCertificate: [{required: true, message: '请输入使用证书', trigger: 'blur'}],
areaId: [
{required: true, message: '请选择所在地区', trigger: 'blur'},
{pattern: /[^0]0{0,2}$/,message:'所在地区必须选择到村',trigger: 'blur'}
],
usePerson: [{required: true, message: '请输入使用人', trigger: 'blur'}],
houseNumber: [{required: true, message: '请输入家庭人口', trigger: 'blur'},
{pattern: /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/, message: '请输入正整数',trigger: 'blur'}],
idNumber: [{required: true, message: '请输入身份证号', trigger: 'blur'}],
landOwnership: [{required: true, message: '请输入土地所有权', trigger: 'blur'}],
landArea: [{required: true, message: '请输入土地面积', trigger: 'blur'}],
landFourTo: [{required: true, message: '请输入土地四至', trigger: 'blur'}],
useSituation: [{required: true, message: '请输入使用情况', trigger: 'blur'}],
fileList: [{required: true, message: '请上传图片', trigger: 'blur'}],
}
},
...mapState(['user'])
...mapState(['user']),
},
created() {
if (this.params && this.params.id) {
this.id = this.params.id
this.getDetail(this.params.id)
}
this.areaId = this.user.info.areaId
this.form.areaId = this.user.info.areaId
},
methods: {
cancel(isRefresh) {
@@ -137,28 +166,28 @@ export default {
})
},
getDetail(id) {
// this.instance.post(`/appcreditadminstrativelicense/queryDetailById?id=${id}`).then(res => {
// if (res.code === 0) {
// this.data = res.data
// }
// })
this.instance.post(`/apphomesteadinfo/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.data = res.data
}
})
},
confirm() {
// this.$refs.form.validate((valid) => {
// if (valid) {
// this.instance.post(`/appcreditadminstrativelicense/addOrUpdate`, {
// ...this.forms,
// id: this.params.id || '',
// }).then(res => {
// if (res.code == 0) {
// this.$message.success('提交成功')
// setTimeout(() => {
// this.cancel(true)
// }, 600)
// }
// })
// }
// })
this.$refs.form.validate((valid) => {
if (valid) {
this.instance.post(`/apphomesteadinfo/addOrUpdate`, {
...this.form,
id: this.params.id || '',
}).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
setTimeout(() => {
this.cancel(true)
}, 600)
}
})
}
})
},
},
}

View File

@@ -1,16 +1,24 @@
<template>
<section class="List">
<ai-list>
<!-- :disabledLevel="disabledLevel" -->
<ai-title slot="title" title="宅基地管理" isShowBottomBorder :instance="instance" isShowArea v-model="search.areaId" @change="changeArea"/>
<!-- :instance="instance" isShowArea v-model="search.areaId" @change="changeArea" -->
<ai-title slot="title" title="宅基地管理" isShowBottomBorder />
<template #content>
<ai-search-bar>
<template #left>
<el-button type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button>
</template>
<template #right>
<el-input size="small" placeholder="查询证书号/使用人/使用人身份证" v-model="search.executionCode" clearable @clear="page.current = 1, search.executionCode = '',getTableData()"
<el-input size="small" placeholder="查询证书号/使用人/使用人身份证" v-model="search.useCertificate" clearable @clear="page.current = 1, search.useCertificate = '',getTableData()"
suffix-icon="iconfont iconSearch" v-throttle="() => {(page.current = 1), getTableData();}"/>
<!-- 导入导出 -->
<ai-import :instance="instance" :dict="dict" importUrl="/apphomesteadinfo/import" url="/apphomesteadinfo/downloadTemplate" name="宅基地管理信息模板" @success="getTableData(), $message.success('导入成功!')">
<el-button size="small">导入</el-button>
</ai-import>
<ai-download :instance="instance" url="/apphomesteadinfo/export" :params="search" fileName="宅基地管理信息"
:disabled="tableData.length == 0">
<el-button size="small">导出</el-button>
</ai-download>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@@ -38,7 +46,7 @@ export default {
},
data() {
return {
search: {executionCode: "",areaId:''},
search: {useCertificate: ""},
page: {current: 1, size: 10, total: 0},
tableData: [],
areaId: '',
@@ -48,25 +56,25 @@ export default {
...mapState(['user']),
colConfigs() {
return [
{ prop: "executionCode", label: '使用证书号', align: "center", width: "200px", },
{ prop: "executionTime", label: '使用人', align: "center", width: "200px", },
{ prop: "enterpriseName", label: '身份证号', align: "center", width: "200px", },
{ prop: "unifiedCode", label: '家庭人口', align: "center", width: "200px", },
{ prop: "dishonestFact", label: '面积/㎡', align: "center", width: "200px", },
{ prop: "createTime", label: '土地四至', align: "center", width: "200px", },
{ prop: "createUserName", label: '土地所有权', align: "center", width: "200px", },
{ prop: "useCertificate", label: '使用证书号', align: "center", width: "200px", },
{ prop: "usePerson", label: '使用人', align: "center", width: "200px", },
{ prop: "idNumber", label: '身份证号', align: "center", width: "200px", },
{ prop: "houseNumber", label: '家庭人口', align: "center", width: "200px", },
{ prop: "landArea", label: '面积/㎡', align: "center", width: "200px", },
{ prop: "landFourTo", label: '土地四至', align: "center", width: "200px", },
{ prop: "landOwnership", label: '土地所有权', align: "center", width: "200px", },
{ slot: "options" ,},
]
}
},
created() {
this.search.areaId = this.user.info.areaId
// this.search.areaId = this.user.info.areaId
this.getTableData()
},
methods: {
changeArea() {},
getTableData() {
this.instance.post("/appcreditdishonestperson/list", null, {
this.instance.post("/apphomesteadinfo/list", null, {
params: {...this.page, ...this.search,...this.select}
}).then(res => {
if (res?.data) {
@@ -85,7 +93,7 @@ export default {
},
handleDelete(id) {
this.$confirm("是否要删除?").then(() => {
this.instance.post(`/appcreditdishonestperson/delete?ids=${id}`).then(res => {
this.instance.post(`/apphomesteadinfo/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success("删除成功")
this.getTableData()

View File

@@ -51,7 +51,7 @@ export default {
</script>
<style lang="scss" scoped>
.AppDishonestExecutee {
.AppLandTransfer {
height: 100%;
}
</style>

View File

@@ -12,109 +12,76 @@
</template>
<template #content>
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="150px">
<el-form-item label="土地流出方" prop="unifiedCode">
<el-radio-group v-model="radioFrom">
<el-radio :label="1">企业组织</el-radio>
<el-radio :label="2">个人农户</el-radio>
</el-radio-group>
</el-form-item>
<el-row type="flex" v-if="radioFrom == 1">
<el-row type="flex">
<el-col :span="20">
<el-form-item label="单位名称" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地流出方单位名称"></el-input>
<el-form-item label="土地流出方" prop="landOutflowName">
<el-input v-model="form.landOutflowName" placeholder="请输入土地流出方名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="信用代码" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地流出方统一社会信用代码"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" v-if="radioFrom == 2">
<el-col :span="20">
<el-form-item label="人员姓名" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地流出方人员姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="身份证号" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地流出方身份证号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="土地承接方" prop="unifiedCode">
<el-radio-group v-model="radioTo">
<el-radio :label="1">企业组织</el-radio>
<el-radio :label="2">个人农户</el-radio>
</el-radio-group>
</el-form-item>
<el-row type="flex" v-if="radioTo == 1">
<el-col :span="20">
<el-form-item label="单位名称" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地承接方单位名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="信用代码" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地承接方统一社会信用代码"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" v-if="radioTo == 2">
<el-col :span="20">
<el-form-item label="人员姓名" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地承接方人员姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="身份证号" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入土地承接方人员身份证号"></el-input>
<el-form-item label="土地流出方证件号码" prop="landOutflowNumber">
<el-input v-model="form.landOutflowNumber" placeholder="请输入土地流出方证件号码"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex">
<el-col :span="20">
<el-form-item label="合同编号" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入合同编号"></el-input>
</el-form-item>
<el-form-item label="土地承接方" prop="landUndertakeName">
<el-input v-model="form.landUndertakeName" placeholder="请输入土地承接方名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="流转形式" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入流转形式"></el-input>
<el-form-item label="土地承接方证件号码" prop="landUndertakeNumber">
<el-input v-model="form.landUndertakeNumber" placeholder="请输入土地承接方证件号码"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex">
<el-col :span="20">
<el-form-item label="土地面积/㎡" prop="unifiedCode">
<ai-select v-model="form.unifiedCode" placeholder="请选择" :selectList="$dict.getDict('')"></ai-select>
<el-form-item label="合同编号" prop="contractNo">
<el-input v-model="form.contractNo" placeholder="请输入合同编号"></el-input>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="每亩年租金" prop="unifiedCode">
<el-input v-model="form.unifiedCode" placeholder="请输入"></el-input>
<el-form-item label="流转形式" prop="circulateType">
<ai-select v-model="form.circulateType" placeholder="请选择" :selectList="$dict.getDict('landCirculateType')"></ai-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex">
<el-col :span="20">
<el-form-item label="土地面积/㎡" prop="landArea">
<el-input v-model="form.landArea" placeholder="请输入土地面积" />
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="每亩年租金(元)" prop="yearRent">
<el-input v-model="form.yearRent" placeholder="请输入"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex">
<el-col :span="20">
<el-form-item label="开始日期" prop="unifiedCode">
<el-date-picker v-model="form.unifiedCode" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" style="width:375px">
<el-form-item label="开始日期" prop="startDate">
<el-date-picker v-model="form.startDate" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" style="width:410px">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="截止日期" prop="unifiedCode">
<el-date-picker v-model="form.unifiedCode" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" style="width:375px">
<el-form-item label="截止日期" prop="endDate">
<el-date-picker v-model="form.endDate" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" style="width:410px">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="土地信息" prop="unifiedCode">
<el-input type="textarea" v-model="form.unifiedCode" placeholder="请说明土地流转的地块名称地界四至" maxlength="500" show-word-limit :rows="5" />
<el-form-item label="土地信息" prop="landInfo">
<el-input type="textarea" v-model="form.landInfo" placeholder="请说明土地流转的地块名称地界四至" maxlength="500" show-word-limit :rows="5" />
</el-form-item>
<el-form-item label="土地用途" prop="unifiedCode">
<el-input type="textarea" v-model="form.unifiedCode" placeholder="请说明流转土地的用途" maxlength="500" show-word-limit :rows="5" />
<el-form-item label="土地用途" prop="landUse">
<el-input type="textarea" v-model="form.landUse" placeholder="请说明流转土地的用途" maxlength="500" show-word-limit :rows="5" />
</el-form-item>
<el-form-item label="权证照片" prop="fileList">
<ai-uploader v-model="form.fileList" :instance="instance" :limit="9" isShowTip/>
</el-form-item>
</el-form>
</template>
@@ -125,31 +92,29 @@
<el-button class="footer-btn" type="primary" @click="confirm()">保存</el-button>
</template>
</ai-detail>
<ai-detail class="add" v-if="id && !isEdit">
<ai-detail class="add" v-if="params.id && !isEdit">
<template slot="title">
<ai-title title="详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title>
</template>
<template slot="content">
<ai-card title="基本信息">
<template #right>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit=true,forms=data">修改</span>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit=true,form=data">修改</span>
</template>
<template #content>
<ai-wrapper>
<ai-info-item label="土地流出方" :value="data.taxpayer"></ai-info-item>
<ai-info-item label="信用代码" :value="data.taxpayerNumber"></ai-info-item>
<ai-info-item label="身份证" :value="data.taxpayerNumber"></ai-info-item>
<ai-info-item label="土地承接方" :value="data.taxYear"></ai-info-item>
<ai-info-item label="信用代码" :value="data.taxpayerNumber"></ai-info-item>
<ai-info-item label="身份证号">{{ dict.getLabel('taxInfoLevel', data.taxLevel) }}</ai-info-item>
<ai-info-item label="流转形式" :value="data.enterpriseName"></ai-info-item>
<ai-info-item label="土地面积" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="每亩年租金" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="土地面积" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="开始日期" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="截止日期" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="土地信息" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="土地用途" :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="土地流出方" :value="data.landOutflowName" ></ai-info-item>
<ai-info-item label="土地流出方证件号码" :value="data.landOutflowNumber"></ai-info-item>
<ai-info-item label="土地承接方" :value="data.landUndertakeName"></ai-info-item>
<ai-info-item label="土地承接方证件号码" :value="data.contractNo"></ai-info-item>
<ai-info-item label="合同编号" :value="data.landUndertakeNumber"></ai-info-item>
<ai-info-item label="流转形式">{{ $dict.getLabel('landCirculateType',data.circulateType) }}</ai-info-item>
<ai-info-item label="土地面积" :value="data.landArea"></ai-info-item>
<ai-info-item label="每亩年租金(元)" :value="data.yearRent"></ai-info-item>
<ai-info-item label="开始日期" :value="data.startDate"></ai-info-item>
<ai-info-item label="截止日期" :value="data.endDate"></ai-info-item>
<ai-info-item label="土地信息" :value="data.landInfo"></ai-info-item>
<ai-info-item label="土地用途" :value="data.landUse"></ai-info-item>
</ai-wrapper>
</template>
</ai-card>
@@ -172,7 +137,19 @@ export default {
radioTo: '',
radioFrom: '',
form: {
unifiedCode: '',
landOutflowName: '',
landOutflowNumber: '',
landUndertakeName: '',
landUndertakeNumber: '',
contractNo: '',
circulateType: '',
landArea: '',
yearRent: '',
startDate: '',
endDate:'' ,
landInfo: '',
landUse: '',
fileList: [],
},
data: {},
isEdit: false,
@@ -182,12 +159,25 @@ export default {
computed: {
rules() {
return {
unifiedCode: [{required: true, message: "请输入名称", trigger: "blur"}],
landOutflowName: [{required: true, message: "请输入土地流出方名称", trigger: "blur"}],
landOutflowNumber: [{required: true, message: "请输入土地流出方证件号码", trigger: "blur"}],
landUndertakeName: [{required: true, message: "请输入土地承接方名称", trigger: "blur"}],
landUndertakeNumber: [{required: true, message: "请输入土地承接方证件号码", trigger: "blur"}],
contractNo: [{required: true, message: "请输入合同编号", trigger: "blur"}],
circulateType: [{required: true, message: "请选择流转形式", trigger: "blur"}],
landArea: [{required: true, message: "请输入土地面积", trigger: "blur"}],
// yearRent: [{required: true, message: "请输入每亩年租金", trigger: "blur"}],
startDate: [{required: true, message: "请选择开始日期", trigger: "blur"}],
// endDate: [{required: true, message: "请选择截止日期", trigger: "blur"}],
landInfo: [{required: true, message: "请输入土地信息", trigger: "blur"}],
// landUse: [{required: true, message: "请输入土地用途", trigger: "blur"}],
fileList: [{required: true, message: "请上传图片", trigger: "blur"}],
}
},
},
created() {
this.$dict.load('landCirculateType')
if(this.params && this.params.id) {
this.id = this.params.id
this.getDetail(this.params.id)
@@ -201,28 +191,28 @@ export default {
})
},
getDetail(id) {
// this.instance.post(`/appcreditadminstrativelicense/queryDetailById?id=${id}`).then(res => {
// if (res.code === 0) {
// this.data = res.data
// }
// })
this.instance.post(`/applandcirculateinfo/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.data = res.data
}
})
},
confirm() {
// this.$refs.forms.validate((valid) => {
// if (valid) {
// this.instance.post(`/appcreditadminstrativelicense/addOrUpdate`, {
// ...this.forms,
// id: this.params.id || '',
// }).then(res => {
// if (res.code == 0) {
// this.$message.success('提交成功')
// setTimeout(() => {
// this.cancel(true)
// }, 600)
// }
// })
// }
// })
this.$refs.form.validate((valid) => {
if (valid) {
this.instance.post(`/applandcirculateinfo/addOrUpdate`, {
...this.form,
id: this.params.id || '',
}).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
setTimeout(() => {
this.cancel(true)
}, 600)
}
})
}
})
},
},
}
@@ -231,11 +221,14 @@ export default {
<style lang="scss" scoped>
.Add {
height: 100%;
// background: #f3f4f5;
background: #f3f4f5;
.footer {
::v-deep .footer {
background: #FFF !important;
}
background: #FFF;
::v-deep .ai-info-item label {
width: 130px;
}
}
</style>

View File

@@ -1,17 +1,24 @@
<template>
<section class="List">
<ai-list>
<ai-title slot="title" title="土地流转经营" isShowBottomBorder :isShowArea="true" v-model="areaId"/>
<ai-title slot="title" title="土地流转经营" isShowBottomBorder/>
<template #content>
<ai-search-bar>
<template #left>
<el-button type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button>
<ai-select v-model="readType" @change="onChange" placeholder="流转形式" :selectList="$dict.getDict('readType')"></ai-select>
<ai-select v-model="readType" @change="onChange" placeholder="经营状态" :selectList="$dict.getDict('readType')"></ai-select>
<ai-select v-model="circulateType" @change="onChange" placeholder="流转形式" :selectList="$dict.getDict('landCirculateType')"></ai-select>
</template>
<template #right>
<el-input size="small" placeholder="查询合同编号/流出方/承接方/证件号码" v-model="search.name" clearable @clear="page.current = 1, searchObj.name = '',getTableData()"
<el-input size="small" placeholder="查询合同编号/流出方/承接方/证件号码" v-model="search.contractNo" clearable @clear="page.current = 1, search.contractNo = '',getTableData()"
suffix-icon="iconfont iconSearch" v-throttle="() => {(page.current = 1), getTableData();}"/>
<!-- 导入导出 -->
<ai-import :instance="instance" :dict="dict" importUrl="/applandcirculateinfo/import" url="/applandcirculateinfo/downloadTemplate" name="土地流转经营信息" @success="getTableData(), $message.success('导入成功!')">
<el-button size="small">导入</el-button>
</ai-import>
<ai-download :instance="instance" url="/applandcirculateinfo/export" :params="search" fileName="土地流转经营信息"
:disabled="tableData.length == 0">
<el-button size="small">导出</el-button>
</ai-download>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@@ -19,7 +26,6 @@
<el-table-column slot="options" label="操作" align="center">
<template slot-scope="{ row }">
<el-button type="text" @click="toAdd(row.id)">详情</el-button>
<el-button type="text" @click="toAdd(row.id)">编辑</el-button>
<el-button type="text" @click="handleDelete(row.id)">删除</el-button>
</template>
</el-table-column>
@@ -40,7 +46,8 @@ export default {
},
data() {
return {
search: {name: ""},
search: {contractNo: ""},
select: {circulateType: ''},
page: {current: 1, size: 10, total: 0},
tableData: [],
readType:'',
@@ -50,26 +57,26 @@ export default {
computed: {
colConfigs() {
return [
{ prop: "executionCode", label: '土地流出方', align: "center", width: "200px", },
{ prop: "executionTime", label: '土地面积/㎡', align: "center", width: "200px", },
{ prop: "enterpriseName", label: '流转形式', align: "center", width: "200px", },
{ prop: "unifiedCode", label: '土地承接方', align: "center", width: "200px", },
{ prop: "dishonestFact", label: '承接方证件号码', align: "center", width: "200px", },
{ prop: "createTime", label: '有效期限', align: "center", width: "200px", },
{ prop: "createUserName", label: '经营状态', align: "center", width: "200px", },
{ prop: "landOutflowName", label: '土地流出方', align: "center", width: "200px", },
{ prop: "landArea", label: '土地面积/㎡', align: "center", width: "200px", },
{ prop: "circulateType", label: '流转形式', align: "center", width: "200px", dict: "landCirculateType" },
{ prop: "landUndertakeName", label: '土地承接方', align: "center", width: "200px", },
{ prop: "landUndertakeNumber", label: '承接方证件号码', align: "center", width: "200px", },
{ prop: "contractNo", label: '合同编号', align: "center", width: "200px", },
{ prop: "endDate", label: '有效期限', align: "center", width: "200px", },
{ slot: "options" ,},
]
},
...mapState(['user'])
},
created() {
this.$dict.load('readType')
this.$dict.load('landCirculateType')
this.getTableData()
this.areaId = this.user.info.areaId
},
methods: {
getTableData() {
this.instance.post("/appcreditdishonestperson/list", null, {
this.instance.post("/applandcirculateinfo/list", null, {
params: {...this.page, ...this.search,...this.select}
}).then(res => {
if (res?.data) {
@@ -78,7 +85,11 @@ export default {
}
})
},
onChange() {},
onChange(v) {
this.tableData = []
this.select.circulateType = v;
this.getTableData()
},
toAdd(id) {
this.$emit('change', {
type: 'Add',
@@ -89,7 +100,7 @@ export default {
},
handleDelete(id) {
this.$confirm("是否要删除?").then(() => {
this.instance.post(`/appcreditdishonestperson/delete?ids=${id}`).then(res => {
this.instance.post(`/applandcirculateinfo/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success("删除成功")
this.getTableData()

View File

@@ -116,7 +116,8 @@ export default {
data() {
return {
detail: {},
menuList: ['基本信息','股权结构'],
menuList: ['基本信息'],
// menuList: ['基本信息','股权结构'],
index: 0,
tableData: [],
page: {current: 1, size: 10, total: 0},

View File

@@ -0,0 +1,54 @@
<template>
<section class="AppPublicArrearage">
<keep-alive :include="['List']">
<component ref="component" :is="component" :instance="instance" :params="params" :dict="dict" @change="onChange"/>
</keep-alive>
</section>
</template>
<script>
import List from "./components/List.vue";
import Add from "./components/Add.vue";
export default {
name: "AppPublicArrearage",
label: "公共事业欠费",
props: {
instance: Function,
dict: Object,
},
components: {Add, List},
data() {
return {
component: "List",
params: {},
include: [],
}
},
methods: {
onChange(data) {
if (data.type === "Add") {
this.component = "Add";
this.params = data.params;
}
if (data.type === "List") {
this.component = "List";
this.params = data.params;
this.$nextTick(() => {
if (data.isRefresh) {
this.$refs.component.getTableData();
}
});
}
},
},
}
</script>
<style lang="scss" scoped>
.AppPublicArrearage {
height: 100%;
}
</style>

View File

@@ -0,0 +1,234 @@
<template>
<section class="Add">
<ai-detail class="add" v-if="isEdit == true || !id">
<template #title>
<ai-title :title="params.id ? '编辑公共事业欠费信息' : '新增公共事业欠费信息'" :isShowBack="true" :isShowBottomBorder="true" @onBackClick="cancel(false)" />
</template>
<template slot="content">
<ai-card title="基本信息">
<template #right v-if="params.id">
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="isEdit==true" @click="isEdit=false">取消</span>
<span style="color:#2266FF;margin-left: 16px;cursor: pointer;font-size: 12px;" v-if="isEdit==true" @click="confirm()">保存</span>
</template>
<template #content>
<el-form ref="forms" :model="forms" :rules="formRules" size="small" label-width="180px">
<el-form-item label="欠费金额(万元)" prop="executionCode">
<el-input v-model="forms.executionCode" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="欠费类型名称" prop="executionCourt">
<ai-select v-model="forms.executionSituation" placeholder="请选择文档类型" :selectList="$dict.getDict('dishonestPersonSituation')"></ai-select>
</el-form-item>
<el-form-item label="欠费主体" prop="executionTime">
<el-input v-model="forms.executionCode" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="失信严重程度" prop="executionSituation">
<ai-select v-model="forms.executionSituation" placeholder="请选择文档类型" :selectList="$dict.getDict('dishonestPersonSituation')"></ai-select>
</el-form-item>
<el-form-item label="统一信用代码" prop="enterpriseName">
<el-input v-model="forms.enterpriseName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="认定日期" prop="unifiedCode">
<el-date-picker v-model="forms.executionTime" type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="失信行为有效期" prop="enterpriseName">
<el-date-picker v-model="forms.executionTime" type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="欠费统计截止日期" prop="unifiedCode">
<el-date-picker v-model="forms.executionTime" type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="数据来源机构" prop="enterpriseName">
<el-input v-model="forms.enterpriseName" placeholder="请输入"></el-input>
</el-form-item>
</el-form>
</template>
</ai-card>
</template>
<template slot="footer" class="footer">
<el-button class="delete-btn footer-btn" @click="cancel(false)">取消</el-button>
<el-button class="footer-btn" type="primary" @click="confirm()">保存</el-button>
</template>
</ai-detail>
<ai-detail class="add" v-if="id && !isEdit">
<template slot="title">
<ai-title title="失信被执行人信息详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title>
</template>
<template slot="content">
<ai-card title="基本信息">
<template #right>
<span style="color:#2266FF;cursor: pointer;font-size: 12px;" class="iconfont iconEdit" v-if="isEdit==false" @click="isEdit=true,forms=data">修改</span>
</template>
<template #content>
<ai-wrapper>
<ai-info-item label="执行案号" :value="data.executionCode"></ai-info-item>
<ai-info-item label="执行法院" :value="data.executionCourt"></ai-info-item>
<ai-info-item label="执行时间" :value="data.executionTime"></ai-info-item>
<ai-info-item label="履行情况" :value="data.executionSituation">{{ dict.getLabel('dishonestPersonSituation',data.executionSituation) }}</ai-info-item>
<ai-info-item label="失信被执行主体" :value="data.enterpriseName"></ai-info-item>
<ai-info-item label="统一信用代码" isLine :value="data.unifiedCode"></ai-info-item>
<ai-info-item label="失信事实" isLine :value="data.dishonestFact"></ai-info-item>
</ai-wrapper>
</template>
</ai-card>
</template>
</ai-detail>
</section>
</template>
<script>
export default {
name: "Add",
props: {
instance: Function,
dict: Object,
permissions: Function,
params: Object,
},
computed: {
formRules() {
return {
executionCode: [{required: true,message:"请输入执行编号",trigger: "blur"}],
executionCourt: [{required: true,message:"请输入执行法院",trigger: "blur"}],
executionTime: [{required: true,message:"请输入执行时间",trigger: "blur"}],
executionSituation: [{required: true,message:"请选择履行情况",trigger: "blur"}],
enterpriseName: [{required: true,message:"请输入失信被执行主体",trigger: "blur"}],
unifiedCode: [{required: true,message:"请输入统一信用代码",trigger: "blur"},
{ min: 18, max: 18, message: '长度为18个字符', trigger: 'blur' }],
dishonestFact: [{required: true,message:"请输入失信事实",trigger: "blur"}],
}
}
},
created() {
this.$dict.load('dishonestPersonSituation')
if (this.params && this.params.id) {
this.id = this.params.id
this.getDetail(this.params.id)
}
},
data() {
return {
forms: {
executionCode: '',
executionCourt: '',
executionTime: '',
executionSituation: '',
enterpriseName: '',
unifiedCode: '',
dishonestFact: '',
},
data: {},
isEdit: false,
id: '',
}
},
methods: {
cancel(isRefresh) {
this.$emit('change', {
type: 'List',
isRefresh: !!isRefresh,
})
},
getDetail(id) {
this.instance.post(`/appcreditdishonestperson/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.data = res.data
}
})
},
confirm( ) {
this.$refs.forms.validate((valid) => {
if (valid) {
this.instance.post(`/appcreditdishonestperson/addOrUpdate`, {
...this.forms,
id: this.params.id || '',
}).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
setTimeout(() => {
this.cancel(true)
}, 600)
}
})
}
})
},
},
}
</script>
<style lang="scss" scoped>
.Add {
height: 100%;
overflow: hidden;
background: #f2f4f6 !important;
.add-form__item {
display: flex;
align-items: center;
}
::v-deep .el-form-item__label {
padding-right: 40px;
}
::v-deep .ai-detail__footer {
background: #fff !important;
}
::v-deep .ai-info-item label {
width: 100px;
}
::v-deep .ai-detail__content--active {
padding: 20px;
.ai-detail__content--wrapper {
width: 100%;
}
.aibar {
padding: 0 16px;
}
.el-form {
padding: 0 96px 20px 50px;
}
.add-form {
background: #fff;
}
}
::v-deep .ai-wrapper {
align-items: inherit !important;
}
.user-wrapper {
display: flex;
justify-content: space-between;
}
.avatar {
width: 100px;
height: 100px;
object-fit: contain;
border-radius: 10px;
}
.footer-btn {
width: 130px;
}
.el-form {
padding-bottom: 80px;
}
::v-deep .el-form-item {
width: 50%;
float: left;
}
}
</style>

View File

@@ -0,0 +1,107 @@
<template>
<section class="List">
<ai-list>
<ai-title slot="title" title="公共事业欠费信息" isShowBottomBorder/>
<template #content>
<ai-search-bar>
<template #left>
<el-button type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button>
</template>
<template #right>
<el-input size="small" placeholder="欠费主题/统一信用社会代码" v-model="search.executionCode" clearable @clear="page.current = 1, search.executionCode = '',getTableData()"
suffix-icon="iconfont iconSearch" v-throttle="() => {(page.current = 1), getTableData();}"/>
<ai-import :instance="instance" :dict="dict" importUrl="/appcreditdishonestperson/import" url="/appcreditdishonestperson/downloadTemplate" name="失信被执行人信息" @success="getTableData(), $message.success('导入成功!')">
<el-button size="small">导入</el-button>
</ai-import>
<ai-download :instance="instance" url="/appcreditdishonestperson/export" :params="search" fileName="公共事业欠费信息"
:disabled="tableData.length == 0">
<el-button size="small">导出</el-button>
</ai-download>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getTableData" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" align="center">
<template slot-scope="{ row }">
<el-button type="text" @click="toAdd(row.id)">详情</el-button>
<el-button type="text" @click="handleDelete(row.id)">删除</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</section>
</template>
<script>
export default {
name: "List",
props: {
instance: Function,
dict: Object,
permissions: Function
},
data() {
return {
search: {executionCode: ""},
page: {current: 1, size: 10, total: 0},
tableData: [],
}
},
computed: {
colConfigs() {
return [
{ prop: "executionCode", label: '欠费主体', align: "center", width: "200px", },
{ prop: "executionTime", label: '统一信用代码', align: "center", width: "120px", },
{ prop: "enterpriseName", label: '欠费类型名称', align: "center", width: "120px", },
{ prop: "unifiedCode", label: '欠费金额(万元)', align: "center", width: "100px", },
{ prop: "dishonestFact", label: '失信严重程度', align: "center", width: "120px", },
{ prop: "createTime", label: '认定日期', align: "center", width: "100px", },
{ prop: "createTime", label: '更新时间', align: "center", width: "100px", },
{ prop: "createUserName", label: '操作人', align: "center", width: "100px", },
{ slot: "options" ,},
]
}
},
created() {
this.getTableData()
},
methods: {
getTableData() {
this.instance.post("/appcreditdishonestperson/list", null, {
params: {...this.page, ...this.search,...this.select}
}).then(res => {
if (res?.data) {
this.tableData = res.data?.records
this.page.total = res.data.total
}
})
},
toAdd(id) {
this.$emit('change', {
type: 'Add',
params: {
id: id || ''
}
})
},
handleDelete(id) {
this.$confirm("是否要删除?").then(() => {
this.instance.post(`/appcreditdishonestperson/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success("删除成功")
this.getTableData()
}
})
})
},
}
}
</script>
<style lang="scss" scoped>
.List {
height: 100%;
background: #f3f4f5;
}
</style>

View File

@@ -68,9 +68,11 @@ export default {
tableData: []
}
},
created() {
this.getInfo()
this.getList()
mounted() {
this.$dict.load(['atWillReportType']).then(() => {
this.getInfo()
this.getList()
});
},
computed: {
colConfigs() {
@@ -81,10 +83,12 @@ export default {
align: 'left'
},
{
prop: 'doType',
prop: "bizType",
label: "类型",
width: 160,
align: 'center',
label: '类型',
dict:"integralDetailType",
formart: (bizType) =>
this.dict.getLabel("integralDetailType", bizType),
},
{
prop: 'changeIntegral',
@@ -116,7 +120,7 @@ export default {
getList() {
let {id: portalUserId} = this.$route.query
this.instance.post(`/appvillagerintegraldetail/list`, null, {
params: {...this.page, portalUserId}
params: {...this.page, portalUserId, bizType: this.doType}
}).then(res => {
if (res?.data) {
this.tableData = res.data.records

View File

@@ -32,7 +32,8 @@
<el-table-column label="操作" slot="options" fixed="right" align="center" width="180">
<template v-slot="{row}">
<div class="table-options">
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralfamily_detail')" title="详情"
<!-- :disabled="!$permissions('app_appvillagerintegralfamily_detail')" -->
<el-button type="text" title="详情"
@click="goDetail(row)">详情
</el-button>
</div>

View File

@@ -8,56 +8,64 @@
<ai-search-bar bottomBorder>
<template slot="left">
<ai-select
v-model="search.classification"
@change="search.current = 1, getList()"
placeholder="请选择分类"
:selectList="dict.getDict('atWillReportType')">
v-model="search.classification"
@change="search.current = 1, getList()"
placeholder="请选择分类"
:selectList="dict.getDict('atWillReportType')">
</ai-select>
<!-- <ai-select-->
<!-- v-model="search.integralType"-->
<!-- @change="search.current = 1, getList()"-->
<!-- placeholder="请选择类型"-->
<!-- :selectList="dict.getDict('integralIntegralType')">-->
<!-- </ai-select>-->
<ai-select
v-model="search.integralType"
@change="search.current = 1, getList()"
placeholder="请选择类型"
:selectList="dict.getDict('integralIntegralType')">
</ai-select>
<ai-select
v-model="search.ruleStatus"
@change="search.current = 1, getList()"
placeholder="请选择状态"
:selectList="dict.getDict('integralRuleStatus')">
v-model="search.ruleStatus"
@change="search.current = 1, getList()"
placeholder="请选择状态"
:selectList="dict.getDict('integralRuleStatus')">
</ai-select>
</template>
<template slot="right">
</template>
</ai-search-bar>
<ai-search-bar style="margin-top: 16px;">
<template #left>
<el-button type="primary" icon="iconfont iconAdd" @click="addRule">添加</el-button>
</template>
</ai-search-bar>
<!-- <ai-search-bar style="margin-top: 16px;">-->
<!-- <template #left>-->
<!-- <el-button type="primary" icon="iconfont iconAdd" @click="addRule">添加</el-button>-->
<!-- </template>-->
<!-- </ai-search-bar>-->
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
ref="aitableex"
:current.sync="search.current"
:size.sync="search.size"
@getList="getList">
<el-table-column slot="integral" label="分值" align="center">
<template slot-scope="{ row }">
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
ref="aitableex"
:current.sync="search.current"
:size.sync="search.size"
@getList="getList">
<el-table-column slot="integral" label="分值" align="center">
<template slot-scope="{ row }">
<span
v-if="row.integralValueType == 1">
{{ row.integralStart > 0 ? '+' + row.integralStart : row.integralStart }} ~ {{ row.integralEnd > 0 ? '+' + row.integralEnd : row.integralEnd }}
v-if="row.integralValueType == 1">
{{
row.integralStart > 0 ? '+' + row.integralStart : row.integralStart
}} ~ {{ row.integralEnd > 0 ? '+' + row.integralEnd : row.integralEnd }}
</span>
<span v-else>{{ row.integral > 0 ? '+' : '' }}{{ row.integral }}</span>
</template>
</el-table-column>
<span v-else>{{ row.integral > 0 ? '+' : '' }}{{ row.integral }}</span>
</template>
</el-table-column>
<el-table-column slot="options" label="操作" align="center" fixed="right" width="200">
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_edit')" @click="changeStatus(row.id, 0)" v-if="row.ruleStatus == 1">停用</el-button>
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_edit')" @click="changeStatus(row.id, 1)" v-else >启用</el-button>
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_edit')" @click="toEdit(row)">编辑</el-button>
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_del')" @click="remove(row.id)">删除</el-button>
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_edit')"
@click="changeStatus(row.id, 0)" v-if="row.ruleStatus == 1">停用
</el-button>
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_edit')"
@click="changeStatus(row.id, 1)" v-else>启用
</el-button>
<el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_edit')"
@click="toEdit(row)">编辑
</el-button>
<!-- <el-button type="text" :disabled="!$permissions('app_appvillagerintegralrule_del')" @click="remove(row.id)">删除</el-button>-->
</div>
</template>
</el-table-column>
@@ -66,72 +74,54 @@
</ai-list>
<ai-dialog
:title="dialog.title"
:visible.sync="dialog.visible"
:customFooter="true"
:destroyOnClose="true"
@close="init('ruleForm')"
width="520px">
:title="dialog.title"
:visible.sync="dialog.visible"
:customFooter="true"
:destroyOnClose="true"
@close="init('ruleForm')"
width="520px">
<div class="form_div">
<el-form
ref="ruleForm"
:model="dialogInfo"
:rules="formRules"
size="small"
label-suffix=""
label-width="100px">
ref="ruleForm"
:model="dialogInfo"
:rules="formRules"
size="small"
label-suffix=""
label-width="120px">
<el-form-item label="类别" prop="classification">
<ai-select
size="small"
v-model="dialogInfo.classification"
placeholder="请选择..."
:selectList="dict.getDict('atWillReportType')">
</ai-select>
<ai-select v-model="dialogInfo.classification" :selectList="dict.getDict('atWillReportType')"
:disabled="!!dialogInfo.id"/>
</el-form-item>
<el-form-item label="事项" prop="ruleName">
<el-input placeholder="请输入…" v-model="dialogInfo.ruleName"></el-input>
<el-form-item label="获得积分" prop="integral">
<el-input placeholder="请输入自然数" v-model.number="dialogInfo.integral" clearable/>
</el-form-item>
<el-form-item label="规则说明" prop="ruleDescription">
<el-input
type="textarea"
:rows="3"
maxlength="500"
show-word-limit
placeholder="请输入…"
v-model="dialogInfo.ruleDescription">
</el-input>
</el-form-item>
<el-form-item label="类型" prop="integralType">
<el-radio-group v-model="dialogInfo.integralType">
<el-radio label="1">加分</el-radio>
<el-radio label="0">扣分</el-radio>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="分值" prop="integralValueType">
<el-radio-group v-model="dialogInfo.integralValueType" @change="numTypeChange">
<el-radio label="0">固定分值</el-radio>
<el-radio label="1">区间分值</el-radio>
</el-radio-group>
</el-form-item> -->
<!-- <el-form-item label="积分" required v-if="dialogInfo.integralValueType == '1'">
<el-col :span="7" style="width: 30%;">
<el-form-item prop="integralStart">
<el-input placeholder="请输入整数" v-model="dialogInfo.integralStart"></el-input>
</el-form-item>
</el-col>
<el-col class="line" :span="1" style="width: 4%;text-align:center;">-</el-col>
<el-col :span="7" style="width: 30%;">
<el-form-item prop="integralEnd">
<el-input placeholder="请输入整数" v-model="dialogInfo.integralEnd"></el-input>
</el-form-item>
</el-col>
<el-col class="line" :span="9" style="width: 36%;"></el-col>
</el-form-item> -->
<el-form-item label="积分" required v-if="dialogInfo.integralValueType == '0'">
<el-form-item prop="integral">
<el-input placeholder="请输入自然数" v-model="dialogInfo.integral"></el-input>
</el-form-item>
<el-form-item label="每天获取次数" prop="upperLimit">
<el-input placeholder="请输入自然数" v-model.number="dialogInfo.upperLimit" clearable/>
</el-form-item>
<!-- <el-form-item label="事项" prop="ruleName">-->
<!-- <el-input placeholder="请输入…" v-model="dialogInfo.ruleName"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="规则说明" prop="ruleDescription">-->
<!-- <el-input-->
<!-- type="textarea"-->
<!-- :rows="3"-->
<!-- maxlength="500"-->
<!-- show-word-limit-->
<!-- placeholder="请输入…"-->
<!-- v-model="dialogInfo.ruleDescription">-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="类型" prop="integralType">-->
<!-- <el-radio-group v-model="dialogInfo.integralType">-->
<!-- <el-radio label="1">加分</el-radio>-->
<!-- <el-radio label="0">扣分</el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="积分" required v-if="dialogInfo.integralValueType == '0'">-->
<!-- <el-form-item prop="integral">-->
<!-- <el-input placeholder="请输入自然数" v-model="dialogInfo.integral"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form-item>-->
</el-form>
</div>
<div class="dialog-footer" slot="footer">
@@ -152,7 +142,7 @@ export default {
},
data() {
var integralPass = (rule, value, callback) => {
let integralPass = (rule, value, callback) => {
if (value) {
if ((/(^[0-9]\d*$)/.test(value))) {
callback();
@@ -163,7 +153,7 @@ export default {
callback(new Error("请输入积分"));
}
};
var integralStartPass = (rule, value, callback) => {
const integralStartPass = (rule, value, callback) => {
if (value) {
if ((/(^[1-9]\d*$)/.test(value))) {
callback();
@@ -174,7 +164,7 @@ export default {
callback(new Error("请输入积分"));
}
};
var integralEndPass = (rule, value, callback) => {
const integralEndPass = (rule, value, callback) => {
if (value) {
if ((/(^[1-9]\d*$)/.test(value))) {
if (Number(value) < Number(this.dialogInfo.integralStart)) {
@@ -204,18 +194,9 @@ export default {
formart: (classification) =>
this.dict.getLabel("atWillReportType", classification),
},
{prop: "ruleName", label: "事项", "show-overflow-tooltip": true, width: 260},
{prop: "ruleDescription", label: "规则说明", width: 390},
{
prop: "integralType",
label: "类型",
width: 60,
formart: (integralType) =>
this.dict.getLabel("integralIntegralType", integralType),
},
{prop: "upperLimit", label: "每天获取次数",align: 'center'},
{slot: "integral", label: "分值", width: 70},
{prop: "doTime", label: "最后编辑时间", width: 160},
{prop: "doUserName", label: "操作人", width: 120},
{
prop: "ruleStatus",
label: "状态",
@@ -232,10 +213,11 @@ export default {
);
},
},
{prop: "doTime", label: "最后编辑时间", width: 160},
{prop: "doUserName", label: "操作人", width: 120},
{slot: "options", label: "操作", align: "center"},
],
tableData: [],
dialog: {
title: "",
visible: false,
@@ -271,6 +253,9 @@ export default {
integral: [
{required: true, validator: integralPass, trigger: "change"},
],
upperLimit: [
{required: true, message: "请输入每天获取次数"},
],
integralStart: [
{required: true, validator: integralStartPass, trigger: "change"},
],
@@ -302,7 +287,6 @@ export default {
}
});
},
toEdit(row) {
this.dialog.title = "编辑积分规则";
this.dialog.visible = true;
@@ -311,24 +295,20 @@ export default {
this.dialogInfo.integralEnd = Math.abs(this.dialogInfo.integralEnd)
this.dialogInfo.integral = Math.abs(this.dialogInfo.integral)
},
remove(id) {
this.$confirm("删除后不可恢复,是否要删除该事项?", {
type: 'error'
}).then(() => {
this.instance
.post(`/app/appvillagerintegralrule/delete?ids=${id}`)
.then((res) => {
if (res.code == 0) {
this.instance.post(`/app/appvillagerintegralrule/delete?ids=${id}`).then(res => {
if (res?.code == 0) {
this.$message.success("删除成功!");
this.getList();
}
});
});
},
changeStatus(id, status) {
var text = status == 1 ? '启用' : '停用'
const text = status == 1 ? '启用' : '停用';
this.$confirm(`确定${text}该条规则?`).then(() => {
this.instance
.post(`/app/appvillagerintegralrule/enableOrDisable?id=${id}`)

View File

@@ -39,6 +39,12 @@
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="客户经理姓名" prop="bankCounterpart">
<el-input type="text" v-model="form.bankCounterpart" placeholder="客户经理姓名" clearable maxlength="6"/>
</el-form-item>
<el-form-item label="客户经理电话" prop="consultationTelephone">
<el-input type="text" v-model="form.consultationTelephone" placeholder="客户经理电话" clearable maxlength="11"/>
</el-form-item>
</template>
</ai-card>
<ai-card title="适用范围">
@@ -117,6 +123,8 @@ export default {
applyCondition: [{required: true, message: "请输入申请条件", trigger: 'blur'}],
needMaterial: [{required: true, message: "请输入所需材料", trigger: 'blur'}],
productFeatures: [{required: true, message: "请输入产品特色", trigger: 'blur'}],
bankCounterpart: [{required: true, message: "请输入客户经理姓名", trigger: 'change'}],
consultationTelephone: [ {required: true, message: "请输入客户经理电话", trigger: 'change'}],
}
}
},

View File

@@ -27,6 +27,8 @@
</el-form-item>
</el-row>
<el-form-item label="担保方式">{{ detail.guaranteeModeLabel }}</el-form-item>
<el-form-item label="客户经理姓名">{{ detail.bankCounterpart }}</el-form-item>
<el-form-item label="客户经理电话">{{ detail.consultationTelephone }}</el-form-item>
</template>
</ai-card>
<ai-card title="适用范围">

View File

@@ -24,7 +24,7 @@ export default {
}
},
created() {
this.dict.load("productRepaymentTimeline", "financialFundPurpose", "enterpriseAuditStatus", "financialLoanApplyStatus")
this.dict.load("productRepaymentTimeline", "financialFundPurpose", "enterpriseAuditStatus", "financialLoanApplyStatus","financialOrganizationType")
}
}
</script>

View File

@@ -28,7 +28,7 @@
<el-row type="flex">
{{ detail.enterpriseName }}
<el-link type="primary"
@click="$router.push({name:'973f0339e5904d99bc8afe86b8cf4e9c',query:{id:detail.enterpriseId}})">
@click="isShow=true">
企业详情
</el-link>
</el-row>
@@ -90,6 +90,81 @@
</el-form-item>
</el-form>
</ai-dialog>
<ai-dialog
class="dialog"
:title="info.enterpriseName"
:visible.sync="isShow"
@close="isShow = false"
@onConfirm="isShow = false"
width="1200px">
<div class="top">
<div class="top-left">{{ info.subEnterpriseName }}</div>
<div class="top-right">
<div class="top-right__top">
<h2>{{ info.enterpriseName }}</h2>
<!-- <div class="right">
<span>下载报告</span>
</div> -->
</div>
<div class="top-right__bottom">
<ai-wrapper
label-width="130px">
<ai-info-item label="法人姓名:"><span style="color: #1890FF;">{{ info.legalPersonName }}</span></ai-info-item>
<ai-info-item label="企业类型:" :value="$dict.getLabel('enterpriseType', info.enterpriseType)"></ai-info-item>
<ai-info-item label="统一社会信用代码:" :value="info.unifiedCode"></ai-info-item>
<ai-info-item label="地址:" isLine :value="info.areaName + info.address"></ai-info-item>
<ai-info-item label="经营范围:" isLine :value="info.businessScope"></ai-info-item>
</ai-wrapper>
</div>
</div>
</div>
<div class="bottom">
<div class="tab">
<span :class="[currIndex === 0 ? 'active' : '']" @click="currIndex = 0">行政许可</span>
<span :class="[currIndex === 1 ? 'active' : '']" @click="currIndex = 1">行政处罚</span>
<span :class="[currIndex === 2 ? 'active' : '']" @click="currIndex = 2">良好信息</span>
<span :class="[currIndex === 3 ? 'active' : '']" @click="currIndex = 3">失信信息</span>
</div>
<div class="table">
<ai-table
v-show="currIndex === 0"
:tableData="info.adminstrativeLicenseList"
:col-configs="colConfigs1"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
<ai-table
v-show="currIndex === 1"
:tableData="info.administrativeSanctionList"
:col-configs="colConfigs2"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
<ai-table
v-show="currIndex === 2"
:tableData="info.taxInfoList"
:col-configs="colConfigs3"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
<ai-table
v-show="currIndex === 3"
:tableData="info.dishonestPersonList"
:col-configs="colConfigs4"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
</div>
</div>
</ai-dialog>
</section>
</template>
@@ -126,7 +201,43 @@ export default {
auditLifespan: [{required: true, message: "请选择 使用期限"}],
loanDate: [{required: true, message: "请选择 放款日期"}],
auditDescription: [{required: true, message: "请输入 审批意见"}],
}
},
info: {},
currIndex: 0,
isShow: false,
colConfigs1: [
{ prop: 'licenseCode', label: '行政许可决定文书号' },
{ prop: 'decisionDate', align: 'center', label: '许可决定日期' },
{ prop: 'endDate', align: 'center', label: '许可有效期至' },
{ prop: 'licenseOrganization', align: 'center', label: '许可机关' },
{ prop: 'licenseContent', align: 'center', label: '许可内容' },
{ prop: 'createTime', align: 'center', label: '数据更新时间' }
],
colConfigs2: [
{ prop: 'sanctionCode', width: '190', label: '行政处罚决定文书号' },
{ prop: 'sanctionDate', align: 'center', label: '处罚决定日期' },
{ prop: 'sanctionType', align: 'center', label: '处罚类型', formart: v => this.$dict.getLabel('administrativeSanctionType', v) },
{ prop: 'sanctionContent', align: 'center', label: '处罚内容' },
{ prop: 'sanctionBasis', align: 'center', label: '处罚依据' },
{ prop: 'sanctionOrganization', align: 'center', label: '处罚机关' },
{ prop: 'createTime', align: 'center', label: '数据更新时间' }
],
colConfigs3: [
{ prop: 'taxpayer', label: '纳税人名称' },
{ prop: 'taxpayerNumber', align: 'center', label: '纳税人识别号' },
{ prop: 'taxLevel', align: 'center', label: '纳税人等级' },
{ prop: 'taxYear', align: 'center', label: '年份' },
{ prop: 'evaluationUnit', align: 'center', label: '评价单位' },
{ prop: 'createTime', align: 'center', label: '数据更新时间' }
],
colConfigs4: [
{ prop: 'executionCode', label: '执行案号' },
{ prop: 'executionTime', align: 'center', label: '执行时间' },
{ prop: 'dishonestFact', align: 'center', label: '失信事实' },
{ prop: 'executionSituation', align: 'center', label: '履行情况', formart: v => this.$dict.getLabel('dishonestPersonSituation', v) },
{ prop: 'executionCourt', align: 'center', label: '执行法院' },
{ prop: 'executionTime', align: 'center', label: '数据更新时间' }
],
}
},
methods: {
@@ -137,6 +248,19 @@ export default {
}).then(res => {
if (res?.data) {
this.detail = res.data
if(this.detail.enterpriseId) {
this.getCompanyInfo()
}
}
})
},
getCompanyInfo() {
this.instance.post(`/appportaluserenterprise/queryCreditEnterpriseDetailById?id=${this.detail.enterpriseId}`, null, {
withoutToken: true
}).then(res => {
if (res.code === 0) {
this.info = res.data
this.info.subEnterpriseName = res.data.enterpriseName.substr(0, 4)
}
})
},
@@ -158,7 +282,7 @@ export default {
}
},
created() {
this.dict.load("auditStatus")
this.dict.load("auditStatus", "productRepaymentTimeline", "financialFundPurpose", "enterpriseAuditStatus", "financialLoanApplyStatus","financialOrganizationType")
this.getDetail()
}
}
@@ -183,5 +307,115 @@ export default {
.el-date-editor {
width: 100%;
}
.dialog {
.top {
display: flex;
margin-bottom: 20px;
padding: 34px 30px 16px;
border: 1px solid #EEEEEE;
border-radius: 4px;
.top-left {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 1;
width: 88px;
height: 87px;
line-height: 1.3;
margin-right: 31px;
padding: 0 16px;
text-align: justify;
background: #8CA3CD;
color: #FFFFFF;
font-size: 22px;
letter-spacing: 6px;
border-radius: 8px;
}
.top-right {
flex: 1;
.top-right__top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 27px;
h2 {
color: #333333;
font-size: 22px;
}
.right {
display: flex;
align-items: center;
justify-content: center;
width: 97px;
height: 32px;
background: #E8F4FF;
border: 1px solid #A3D3FF;
border-radius: 3px;
color: #1890FF;
font-size: 13px;
cursor: pointer;
&:hover {
opacity: 0.6;
}
}
}
.top-right__bottom {
padding: 16px 10px 10px 0;
background: #F6FBFF;
}
}
}
.bottom {
padding-bottom: 20px;
border: 1px solid #DCDFE6;
border-radius: 4px;
.tab {
display: flex;
align-items: center;
height: 60px;
margin-bottom: 15px;
background: #FAFAFA;
border-radius: 4px;
span {
flex: 1;
height: 100%;
line-height: 60px;
text-align: center;
color: #555555;
font-size: 16px;
cursor: pointer;
border-bottom: 1px solid #DCDFE6;
border-right: 1px solid #DCDFE6;
transition: all ease 0.3s;
user-select: none;
&:last-child {
border-right: none;
}
&.active {
border-bottom: 1px solid transparent;
background: #fff;
color: #1890FF;
}
}
}
.table {
padding: 0 16px;
}
}
}
}
</style>

View File

@@ -1,44 +1,46 @@
<template>
<section class="loanList">
<ai-detail>
<ai-title slot="title" title="贷款审核" isShowBottomBorder/>
<template #content>
<el-row type="flex">
<div class="staCard fill" v-for="(op,label) in sta" :key="label">
<h2 v-text="op"/>
<span v-text="label"/>
</div>
</el-row>
<ai-card hideTitle>
<template #content>
<ai-search-bar class="mar-t8">
<template #left>
<ai-select v-model="search.status" :selectList="dict.getDict('financialLoanApplyStatus')"
placeholder="审批状态"
@change="page.current=1,getTableData()"/>
<ai-search label="申请时间">
<el-date-picker size="small" v-model="search.applyTime" type="daterange"
@change="handleFilterApplyTime"
:default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss"/>
</ai-search>
<ai-list tabs>
<ai-title slot="title" title="贷款审核"/>
<template #tabs>
<el-tabs>
<el-tab-pane label="信贷审核">
<ai-card hideTitle class="mar-t16">
<template #content>
<ai-search-bar class="mar-t8">
<template #left>
<ai-select placeholder="机构类型" :selectList="dict.getDict('financialOrganizationType')"
v-model="search.organizationType" @change="page.current=1,getTableData()"/>
<ai-select placeholder="审批状态" :selectList="dict.getDict('financialLoanApplyStatus')"
v-model="search.status" @change="page.current=1,getTableData()"/>
<ai-search label="申请时间">
<el-date-picker size="small" v-model="search.applyTime" type="daterange"
@change="handleFilterApplyTime" start-placeholder="开始时间" end-placeholder="结束时间"
:default-time="['00:00:00','23:59:59']" value-format="yyyy-MM-dd HH:mm:ss"/>
</ai-search>
</template>
<template #right>
<el-input size="small" placeholder="搜索产品名称、身份证、企业、贷款机构" v-model="search.enterpriseName" clearable
@change="page.current=1,getTableData()"/>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getTableData" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" fixed="right" align="center">
<template slot-scope="{row}">
<el-button type="text" @click="showDetail(row.id)">详情</el-button>
</template>
</el-table-column>
</ai-table>
</template>
<template #right>
<el-input size="small" placeholder="搜索产品名称、企业主体、贷款银行" v-model="search.enterpriseName" clearable
@change="page.current=1,getTableData()"/>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getTableData" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" fixed="right" align="center">
<template slot-scope="{row}">
<el-button type="text" @click="showDetail(row.id)">详情</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
</ai-card>
</el-tab-pane>
<el-tab-pane label="信贷统计" lazy>
</el-tab-pane>
</el-tabs>
</template>
</ai-detail>
</ai-list>
</section>
</template>
@@ -53,25 +55,28 @@ export default {
permissions: Function
},
computed: {
...mapState(['user'])
...mapState(['user']),
colConfigs() {
return [
{label: "产品名称", prop: "productName"},
{label: "联系人", prop: "name"},
{label: "联系方式", prop: "phone"},
{label: "身份证号", render: (h, {row}) => h('p', this.idCardNoUtil.hideId(row.idNumber)), width: 160},
{label: "企业主体", prop: "enterpriseName"},
{label: "贷款金额(万)", prop: "loanAmount"},
{label: "申请时间", prop: "createTime",width: 160},
{label: "贷款机构", prop: "organizationName"},
{label: "机构类型", prop: "organizationType", dict: "financialOrganizationType"},
{label: "状态", prop: "status", align: "center", dict: "financialLoanApplyStatus"},
{slot: "options"}
]
}
},
data() {
return {
search: {name: ""},
page: {current: 1, size: 10, total: 0},
tableData: [],
colConfigs: [
{label: "产品名称", prop: "productName"},
{label: "企业主体", prop: "enterpriseName"},
{label: "贷款金额(万)", prop: "loanAmount"},
{label: "申请时间", prop: "createTime"},
{label: "联系人", prop: "name"},
{label: "联系方式", prop: "phone"},
{label: "贷款银行", prop: "organizationName"},
{label: "状态", prop: "status", align: "center", dict: "financialLoanApplyStatus"},
{slot: "options"}
],
sta: {}
tableData: []
}
},
methods: {
@@ -94,17 +99,9 @@ export default {
this.search.applyEndDate = this.search.applyTime?.[1].substring(0, 10)
this.getTableData()
},
getStaData() {
this.instance.post("/appfinancialloanapply/staticFinancialLoanApply").then(res => {
if (res?.data) {
this.sta = res.data
}
})
}
},
created() {
this.getTableData()
this.getStaData()
}
}
</script>
@@ -117,14 +114,22 @@ export default {
margin-top: 8px;
}
.mar-t16 {
margin-top: 16px;
}
.staCard {
text-align: center;
margin: 0 8px 16px;
margin: 0 16px 16px 0;
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
border-radius: 4px;
padding: 16px;
box-sizing: border-box;
background: #fff;
&:last-of-type {
margin-right: 0;
}
}
}
</style>

View File

@@ -1,6 +1,20 @@
<template>
<section class="AppFinancingNeeds">
<component :is="currentComponent" :instance="instance" :dict="dict" :permissions="permissions"/>
<ai-list v-if="showList">
<template slot="title">
<ai-title slot="title" title="融资需求" :isShowBottomBorder="false" :isShowArea="currIndex == 1 && showList" v-model="areaId" :instance="instance" @change="changeArea"/>
</template>
<template slot="tabs">
<el-tabs class="tabs-page" v-model="currIndex">
<el-tab-pane v-for="(tab,i) in tabs" :key="i" :label="tab.label" :name="String(i)">
<component :is="tab.comp" v-if="currIndex==i" :ref="currIndex" :instance="instance" :dict="dict"
:permissions="permissions" :listType="tab.value" @goPage="goPage"/>
</el-tab-pane>
</el-tabs>
</template>
</ai-list>
<component v-if="!showList" :is="currentPage" :instance="instance" :dict="dict"
:permissions="permissions" :row="detail" @goBack="goBack"></component>
</section>
</template>
@@ -8,6 +22,7 @@
import NeedsDetail from "./needsDetail";
import NeedsList from "./needsList";
import NeedsStatistics from "./needsStatistics";
export default {
name: "AppFinancingNeeds",
@@ -18,13 +33,55 @@ export default {
dict: Object,
permissions: Function
},
provide() {
return {
need: this
}
},
data() {
return {
currIndex: '0',
showList: true,
currentPage: "",
detail: {},
areaId: ''
}
},
computed: {
currentComponent() {
return !!this.$route.query.id ? NeedsDetail : NeedsList
tabs() {
return [
{
label: "融资需求", name: "NeedsList", value: "0", comp: NeedsList, detail: NeedsDetail,
permission: ""
},
{
label: "融资统计", name: "NeedsStatistics", value: "1", comp: NeedsStatistics,
permission: ""
}
]
},
currentTab() {
return this.tabs[this.currIndex] || {}
}
},
created() {
this.dict.load("productRepaymentTimeline", "financialFundPurpose","financingDemandApplyType")
this.dict.load("productRepaymentTimeline", "financialFundPurpose","financingDemandApplyType", "enterpriseType", "dishonestPersonSituation", "administrativeSanctionType")
},
methods: {
goPage(obj) {
this.currentPage = this.tabs[Number(this.currIndex)][obj.key];
obj.row && (this.detail = obj.row)
this.showList = false;
},
goBack() {
this.showList = true;
this.$nextTick(() => {
this.$refs[this.currIndex][0].getTableData();
})
},
changeArea() {
this.$refs[this.currIndex][0].getTableData();
}
}
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<section class="needsDetail">
<ai-detail>
<ai-title slot="title" title="融资详情" isShowBottomBorder isShowBack @onBackClick="back">
<ai-title slot="title" title="融资详情" isShowBottomBorder isShowBack @onBackClick="back()">
<template #rightBtn>
<el-button v-if="isFinanceUser" type="primary" @click="handleGrab">抢单</el-button>
<el-button v-else type="danger" @click="handleCancel">取消发布</el-button>
@@ -27,7 +27,7 @@
<el-row type="flex">
{{ detail.enterpriseName }}
<el-link type="primary"
@click="$router.push({name:'973f0339e5904d99bc8afe86b8cf4e9c',query:{id:detail.enterpriseId}})">
@click="isShow=true">
企业详情
</el-link>
</el-row>
@@ -43,7 +43,83 @@
</template>
</ai-card>
</el-form>
<ai-dialog
class="dialog"
:title="info.enterpriseName"
:visible.sync="isShow"
@close="isShow = false"
@onConfirm="isShow = false"
width="1200px">
<div class="top">
<div class="top-left">{{ info.subEnterpriseName }}</div>
<div class="top-right">
<div class="top-right__top">
<h2>{{ info.enterpriseName }}</h2>
<!-- <div class="right">
<span>下载报告</span>
</div> -->
</div>
<div class="top-right__bottom">
<ai-wrapper
label-width="130px">
<ai-info-item label="法人姓名:"><span style="color: #1890FF;">{{ info.legalPersonName }}</span></ai-info-item>
<ai-info-item label="企业类型:" :value="$dict.getLabel('enterpriseType', info.enterpriseType)"></ai-info-item>
<ai-info-item label="统一社会信用代码:" :value="info.unifiedCode"></ai-info-item>
<ai-info-item label="地址:" isLine :value="info.areaName + info.address"></ai-info-item>
<ai-info-item label="经营范围:" isLine :value="info.businessScope"></ai-info-item>
</ai-wrapper>
</div>
</div>
</div>
<div class="bottom">
<div class="tab">
<span :class="[currIndex === 0 ? 'active' : '']" @click="currIndex = 0">行政许可</span>
<span :class="[currIndex === 1 ? 'active' : '']" @click="currIndex = 1">行政处罚</span>
<span :class="[currIndex === 2 ? 'active' : '']" @click="currIndex = 2">良好信息</span>
<span :class="[currIndex === 3 ? 'active' : '']" @click="currIndex = 3">失信信息</span>
</div>
<div class="table">
<ai-table
v-show="currIndex === 0"
:tableData="info.adminstrativeLicenseList"
:col-configs="colConfigs1"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
<ai-table
v-show="currIndex === 1"
:tableData="info.administrativeSanctionList"
:col-configs="colConfigs2"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
<ai-table
v-show="currIndex === 2"
:tableData="info.taxInfoList"
:col-configs="colConfigs3"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
<ai-table
v-show="currIndex === 3"
:tableData="info.dishonestPersonList"
:col-configs="colConfigs4"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}">
</ai-table>
</div>
</div>
</ai-dialog>
</template>
</ai-detail>
</section>
</template>
@@ -56,7 +132,8 @@ export default {
props: {
instance: Function,
dict: Object,
permissions: Function
permissions: Function,
row: Object,
},
computed: {
...mapState(['user']),
@@ -67,16 +144,65 @@ export default {
data() {
return {
detail: {},
info: {},
currIndex: 0,
isShow: false,
colConfigs1: [
{ prop: 'licenseCode', label: '行政许可决定文书号' },
{ prop: 'decisionDate', align: 'center', label: '许可决定日期' },
{ prop: 'endDate', align: 'center', label: '许可有效期至' },
{ prop: 'licenseOrganization', align: 'center', label: '许可机关' },
{ prop: 'licenseContent', align: 'center', label: '许可内容' },
{ prop: 'createTime', align: 'center', label: '数据更新时间' }
],
colConfigs2: [
{ prop: 'sanctionCode', width: '190', label: '行政处罚决定文书号' },
{ prop: 'sanctionDate', align: 'center', label: '处罚决定日期' },
{ prop: 'sanctionType', align: 'center', label: '处罚类型', formart: v => this.$dict.getLabel('administrativeSanctionType', v) },
{ prop: 'sanctionContent', align: 'center', label: '处罚内容' },
{ prop: 'sanctionBasis', align: 'center', label: '处罚依据' },
{ prop: 'sanctionOrganization', align: 'center', label: '处罚机关' },
{ prop: 'createTime', align: 'center', label: '数据更新时间' }
],
colConfigs3: [
{ prop: 'taxpayer', label: '纳税人名称' },
{ prop: 'taxpayerNumber', align: 'center', label: '纳税人识别号' },
{ prop: 'taxLevel', align: 'center', label: '纳税人等级' },
{ prop: 'taxYear', align: 'center', label: '年份' },
{ prop: 'evaluationUnit', align: 'center', label: '评价单位' },
{ prop: 'createTime', align: 'center', label: '数据更新时间' }
],
colConfigs4: [
{ prop: 'executionCode', label: '执行案号' },
{ prop: 'executionTime', align: 'center', label: '执行时间' },
{ prop: 'dishonestFact', align: 'center', label: '失信事实' },
{ prop: 'executionSituation', align: 'center', label: '履行情况', formart: v => this.$dict.getLabel('dishonestPersonSituation', v) },
{ prop: 'executionCourt', align: 'center', label: '执行法院' },
{ prop: 'executionTime', align: 'center', label: '数据更新时间' }
],
}
},
methods: {
getDetail() {
let {id} = this.$route.query
let {id} = this.row
this.instance.post("/appfinancingdemand/queryDetailById", null, {
params: {id}
}).then(res => {
if (res?.data) {
this.detail = res.data
if(this.detail.enterpriseId) {
this.getCompanyInfo()
}
}
})
},
getCompanyInfo() {
this.instance.post(`/appportaluserenterprise/queryCreditEnterpriseDetailById?id=${this.detail.enterpriseId}`, null, {
withoutToken: true
}).then(res => {
if (res.code === 0) {
this.info = res.data
this.info.subEnterpriseName = res.data.enterpriseName.substr(0, 4)
}
})
},
@@ -103,11 +229,13 @@ export default {
}).catch(() => 0)
},
back() {
this.$router.push({query: {}})
this.$emit('goBack')
}
},
created() {
this.getDetail()
this.dict.load("productRepaymentTimeline", "financialFundPurpose","financingDemandApplyType", "enterpriseType", "dishonestPersonSituation", "administrativeSanctionType").then(() => {
this.getDetail()
})
}
}
</script>
@@ -123,5 +251,115 @@ export default {
width: 50%;
}
}
.dialog {
.top {
display: flex;
margin-bottom: 20px;
padding: 34px 30px 16px;
border: 1px solid #EEEEEE;
border-radius: 4px;
.top-left {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 1;
width: 88px;
height: 87px;
line-height: 1.3;
margin-right: 31px;
padding: 0 16px;
text-align: justify;
background: #8CA3CD;
color: #FFFFFF;
font-size: 22px;
letter-spacing: 6px;
border-radius: 8px;
}
.top-right {
flex: 1;
.top-right__top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 27px;
h2 {
color: #333333;
font-size: 22px;
}
.right {
display: flex;
align-items: center;
justify-content: center;
width: 97px;
height: 32px;
background: #E8F4FF;
border: 1px solid #A3D3FF;
border-radius: 3px;
color: #1890FF;
font-size: 13px;
cursor: pointer;
&:hover {
opacity: 0.6;
}
}
}
.top-right__bottom {
padding: 16px 10px 10px 0;
background: #F6FBFF;
}
}
}
.bottom {
padding-bottom: 20px;
border: 1px solid #DCDFE6;
border-radius: 4px;
.tab {
display: flex;
align-items: center;
height: 60px;
margin-bottom: 15px;
background: #FAFAFA;
border-radius: 4px;
span {
flex: 1;
height: 100%;
line-height: 60px;
text-align: center;
color: #555555;
font-size: 16px;
cursor: pointer;
border-bottom: 1px solid #DCDFE6;
border-right: 1px solid #DCDFE6;
transition: all ease 0.3s;
user-select: none;
&:last-child {
border-right: none;
}
&.active {
border-bottom: 1px solid transparent;
background: #fff;
color: #1890FF;
}
}
}
.table {
padding: 0 16px;
}
}
}
}
</style>

View File

@@ -1,7 +1,6 @@
<template>
<section class="needsList">
<ai-list>
<ai-title slot="title" title="融资需求" isShowBottomBorder/>
<template #content>
<ai-search-bar>
<template #right>
@@ -13,7 +12,7 @@
@getList="getTableData" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="操作" fixed="right" align="center">
<template slot-scope="{row}">
<el-button type="text" @click="showDetail(row.id)">详情</el-button>
<el-button type="text" @click="goTo('detail',row)">详情</el-button>
</template>
</el-table-column>
</ai-table>
@@ -63,9 +62,9 @@ export default {
}
})
},
showDetail(id) {
this.$router.push({query: {id}})
}
goTo(key = '', row) {
this.$emit('goPage', {key, row});
},
},
created() {
this.getTableData()

View File

@@ -0,0 +1,455 @@
<template>
<section class="needsStatistics">
<ai-search-bar>
<template #left>
<ai-select v-model="search.messageType" placeholder="金融机构" clearable :selectList="$dict.getDict('dlbResourceType')" @change="getTableData()"></ai-select>
</template>
</ai-search-bar>
<div class="col-row">
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
<div class="item">
<p>累计发布需求</p>
<h2>20</h2>
</div>
</div>
<div class="chart-flex">
<div class="circle-chart chart-content">
<div class="title">融资需求发布主体占比</div>
<div class="cir-flex">
<div class="total-num">
<h2>108</h2>
<p>总数</p>
</div>
<div id="circleChart"></div>
<div class="cir-text">
<div class="info">
<p><span class="tips-bg" style="background: #2891FF;"></span>企业融资</p>
<div>65</div>
</div>
<div class="info">
<p><span class="tips-bg" style="background: #FFB865;"></span>个人融资</p>
<div>65</div>
</div>
</div>
</div>
</div>
<div class="line-chart chart-content">
<div class="title">交易趋势</div>
<p class="header-title"><span class="tips-bg" style="background: #2891FF;"></span>申请笔数<span class="tips-bg" style="background: #26D52B;"></span>放款笔数</p>
<div id="lineChart"></div>
</div>
</div>
<div class="chart-column chart-content">
<div class="title">机构融资对接量TOP10</div>
<p class="header-title"><span class="tips-bg" style="background: #2891FF;"></span>申请笔数<span class="tips-bg" style="background: #26D52B;"></span>放款笔数</p>
<div id="columnChart"></div>
</div>
<div class="table-content chart-content">
<div class="title">交易记录</div>
<ai-search-bar style="padding:20px 20px 0 20px;">
<template #left>
<ai-select v-model="search.messageType" placeholder="金融机构" clearable :selectList="$dict.getDict('dlbResourceType')" @change="getTableData()"></ai-select>
<ai-search label="申请时间">
<el-date-picker size="small" placeholder="请选择" type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 258px;"
value-format="yyyy-MM-dd"
v-model="stuTime"
@change="page.current=1,getList()"/>
</ai-search>
</template>
<template #right>
<el-input size="small" placeholder="搜索企业名称" v-model="search.messageType" clearable @change="getList()"/>
<ai-download :instance="instance" url="/app/appcommunityhouseresident/listExport" :params="search"
fileName="人口信息">
<el-button icon="iconfont iconExported">导出</el-button>
</ai-download>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="getList" :col-configs="colConfigs" :dict="dict" style="padding:0 20px 20px 20px;">
<el-table-column slot="options" label="状态" fixed="right" width="100">
<template slot-scope="{row}">
<el-button type="text">详情</el-button>
</template>
</el-table-column>
</ai-table>
</div>
</section>
</template>
<script>
import {mapState} from "vuex";
import * as echarts from 'echarts'
export default {
name: "needsStatistics",
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
...mapState(['user'])
},
data() {
return {
search: {messageType: ''},
page: {current: 1, total: 10},
circleChart: null,
lineChart: null,
columnChart: null,
tableData: [],
colConfigs: [
{label: "产品名称", width: '200', prop: "enterpriseName"},
{label: "联系人", width: '100', prop: "areaName"},
{label: "联系方式", width: '140', prop: "loanAmount"},
{label: "身份证号", width: '180', prop: "createTime"},
{label: "企业主体", width: '200', prop: "name"},
{label: "贷款金额(万)", width: '120', prop: "phone"},
{label: "申请时间", width: '180', prop: "remark"},
{label: "贷款机构", width: '200', prop: "remark"},
{label: "机构类型", width: '200', prop: "remark"},
{slot: "options"}
],
}
},
methods: {
getTableData() {
this.circleChartInit()
this.lineChartInit()
this.columnChartInit()
this.getList()
},
getList() {
this.instance.post("/appfinancingdemand/list", null, {
params: {...this.page, ...this.search, status: 0}
}).then(res => {
if (res?.data) {
this.tableData = res.data?.records
this.page.total = res.data.total
}
})
},
circleChartInit() {
this.circleChart = echarts.init(document.getElementById('circleChart'))
if (!this.circleChart) {
return this.circleChart.dispose();
}
var option = {
color: ['#2891FF', '#FFB865'],
series: [
{
type: 'pie',
radius: ['80%', '90%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
},
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: false,
fontSize: '12',
}
},
data: [
{ value: 180},
{ value: 20},
]
}
]
};
this.circleChart.setOption(option)
},
lineChartInit() {
this.lineChart = echarts.init(document.getElementById('lineChart'))
if (!this.lineChart) {
return this.lineChart.dispose();
}
var option = option = {
tooltip: {
trigger: 'axis'
},
grid: {
top: '3%',
left: '3%',
right: '4%',
bottom: '0%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['2020-07', '2020-08', '2020-09', '2020-10', '2020-11']
},
yAxis: {
type: 'value'
},
series: [
{
name: '申请笔数',
type: 'line',
data: [120, 132, 101, 134, 90, 230, 210],
itemStyle: {
normal: {
lineStyle:{
color:'#2891FF'
}
}
}
},
{
name: '放款笔数',
type: 'line',
stack: 'Total',
data: [220, 182, 191, 234, 290, 330, 310],
itemStyle: {
normal: {
lineStyle:{
color:'#26D52B'
}
}
}
},
]
};
this.lineChart.setOption(option)
},
columnChartInit() {
this.columnChart = echarts.init(document.getElementById('columnChart'))
if (!this.columnChart) {
return this.columnChart.dispose();
}
var option = {
color: ['#2891FF', '#26D52B'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
top: '10%',
left: '2%',
right: '2%',
bottom: '2%',
containLabel: true
},
xAxis: [{
type: 'category',
axisTick: {
show: false
},
data: ['重庆银行秀山支行', '哈尔滨银行秀山支行', '重庆银行五岳广场支行', '重庆秀山北银村镇银行']
}],
yAxis: [{
type: 'value'
}],
series: [{
name: '申请数量',
type: 'bar',
barGap: 0,
data: [100, 80, 90, 100, 60],
barWidth: 10,
},
{
name: '放款数量',
type: 'bar',
barGap: 0,
data: [100, 80, 90, 100, 60],
barWidth: 10,
}]
};
this.columnChart.setOption(option)
}
},
mounted() {
this.getTableData()
}
}
</script>
<style lang="scss" scoped>
::v-deep .ai-list .ai-list__content--right-wrapper{
background: none!important;
box-shadow: none!important;
}
.needsStatistics {
padding: 20px;
box-sizing: border-box;
height: 100%;
overflow-y: scroll;
.col-row{
overflow: hidden;
.item{
display: inline-block;
padding: 16px 24px;
width: calc(25% - 15px);
float: left;
margin: 0 20px 20px 0;
background: #FFF;
box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15);
border-radius: 4px;
box-sizing: border-box;
p{
font-size: 16px;
font-family: MicrosoftYaHei-Bold, MicrosoftYaHei;
font-weight: bold;
color: #888;
line-height: 24px;
margin-bottom: 8px;
}
h2{
font-size: 24px;
font-family: Arial-BoldMT, Arial;
font-weight: normal;
color: #26F;
line-height: 32px;
}
}
.item:nth-of-type(4n) {
margin-right: 0;
}
}
.chart-flex{
display: flex;
height: 280px;
margin-bottom: 20px;
.circle-chart{
width: 440px;
margin-right: 20px;
height: 100%;
.cir-flex{
height: calc(100% - 56px);
display: flex;
padding: 20px;
box-sizing: border-box;
position: relative;
.total-num{
position: absolute;
top: 90px;
left: 70px;
width: 100px;
text-align: center;
}
#circleChart{
width: calc(100% - 150px);
height: 100%;
}
.cir-text{
width: 150px;
margin: 56px 0 0 40px;
.info{
width: 100%;
display: flex;
justify-content: space-between;
margin-bottom: 8px;
p{
width: 100px;
font-size: 14px;
font-family: MicrosoftYaHei;
color: #666;
line-height: 22px;
}
div{
width: 50px;
text-align: right;
}
}
}
}
}
.line-chart{
height: 100%;
width: calc(100% - 460px);
#lineChart{
height: calc(100% - 100px);
padding-right: 20px;
box-sizing: border-box;
}
}
}
.chart-column{
margin-bottom: 20px;
height: 320px;
#columnChart{
width: 100%;
height: 220px;
}
}
.table-content{
width: 100%;
.title{
border-bottom: 1px solid #ddd;
}
}
.tips-bg{
display: inline-block;
width: 8px;
height: 8px;
margin-right: 4px;
}
.header-title{
width: 100%;
text-align: center;
height: 20px;
font-size: 12px;
font-family: MicrosoftYaHei;
color: #333;
line-height: 20px;
.tips-bg:nth-of-type(2n) {
margin-left: 24px;
}
}
.chart-content{
background: #FFF;
box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15);
border-radius: 4px;
}
.title{
line-height: 56px;
font-size: 16px;
font-family: MicrosoftYaHeiSemibold;
color: #222;
padding-left: 16px;
}
}
</style>

View File

@@ -53,7 +53,8 @@
<div v-for="(item, index) in applyForm" :key="index">
<ai-title :title="index"></ai-title>
<el-form-item v-for="e in item" :key="e.id" :label="[e.fieldName,e.fieldNameSuffix].join('')">
<el-input :value="getFieldValue(e)" readonly style="width: 100%;" v-if="e.fieldDataType!=5"/>
<el-input :value="getFieldValue(e)" readonly style="width: 100%;" v-if="e.fieldDataType!=5 && e.fieldDataType!=10"/>
<el-input :value="getAreaName(e)" readonly style="width: 100%;" v-if="e.fieldDataType==10"/>
<el-checkbox-group v-model="!e.fieldValue ? '' : String(e.fieldValue).split(',')">
<el-checkbox :label="val.dictValue" disabled
v-for="(val,idx) in dict.getDict(e.dictionaryCode)" :key="idx">{{val.dictName}}</el-checkbox>
@@ -408,6 +409,9 @@ export default {
getFieldValue(e) {
return e.dictionaryCode ? this.dict.getLabel(e.dictionaryCode, e.fieldValue) : e.fieldValue
},
getAreaName(e) {
return e.areaValue
},
color(status) {
return ['#2EA222', '#2EA222', '#FF4466', '#2EA222', '#FF8822', '#2EA222', '#2EA222', '#FF4466', '#FF8822', '#FF8822'][+status]
},
@@ -648,7 +652,7 @@ export default {
},
created() {
this.dict.load(['nodeType', 'approvalStatus', 'hbDepartment', 'sex', 'nation', 'marital', 'education', 'yesOrNo'])
this.areaId = this.user.info.areaId.substring(0, 6) + '000000'
// this.areaId = this.user.info.areaId.substring(0, 6) + '000000'
this.searchDetail(this.detail.id);
this.searchLog(this.currentMenu)
},
@@ -700,9 +704,11 @@ export default {
background: #F7F7F7;
border: 1px solid #DDDDDD;
padding: 20px;
text-align: center;
width: 100%;
.el-image {
width: 100%;
width: 100%!important;
height: 100%;
background: #fff;
border: 1px solid #EEEEEE;
@@ -1157,6 +1163,7 @@ export default {
justify-content: flex-end;
}
}
}
</style>

View File

@@ -44,7 +44,7 @@ export default {
tabs() {
return [
{label: "网上办事", name: "configList", value: "0", comp: configList, detail: addConfig, permission: ""},
{label: "办事指南", name: "configList", value: "2", comp: configList, detail: guidance, permission: ""},
// {label: "办事指南", name: "configList", value: "2", comp: configList, detail: guidance, permission: ""},
]
},
currentTab() {

View File

@@ -37,11 +37,8 @@
</el-table-column>
<el-table-column align="center" prop="name" label="是否必填">
<template slot-scope="scope">
<el-switch
v-model="scope.row.mustFill"
active-value="0" inactive-value="1"
active-color="#D0D4DC"
inactive-color="#5088FF">
<el-switch v-model="scope.row.mustFill"
active-color="#5088FF" inactive-color="#D0D4DC" active-value="1" inactive-value="0">
</el-switch>
</template>
</el-table-column>

View File

@@ -38,10 +38,8 @@
<ai-editor v-model.trim="form.needToKnow" :instance="instance"/>
</el-form-item>
<el-form-item label="是否启用" prop="processDefStatus">
<el-switch
v-model="form.processDefStatus"
active-color="#D0D4DC"
inactive-color="#5088FF" active-value="0" inactive-value="1">
<el-switch v-model="form.processDefStatus"
active-color="#5088FF" inactive-color="#D0D4DC" active-value="1" inactive-value="0">
</el-switch>
</el-form-item>
</el-form>

View File

@@ -49,9 +49,7 @@
<template v-slot="{row}">
<el-switch
v-model="row.processDefStatus"
@change="onChange(row)" active-value="1" inactive-value="0"
active-color="#5088FF"
inactive-color="#D0D4DC">
@change="onChange(row)" active-color="#5088FF" inactive-color="#D0D4DC" active-value="1" inactive-value="0">
</el-switch>
</template>
</el-table-column>

View File

@@ -10,6 +10,7 @@
"registry": "http://192.168.1.87:4873/"
},
"dependencies": {
"dvcp-ui": "^1.42.2"
"dvcp-ui": "^1.42.2",
"dvcp-dv-ui": "^2.0.1"
}
}