Merge branch 'dev' into vite

# Conflicts:
#	examples/main.js
#	examples/router/autoRoutes.js
#	package.json
#	packages/bigscreen/designer/AppDesigner.vue
#	packages/bigscreen/designer/components/Add.vue
#	packages/bigscreen/designer/components/Layout.vue
#	packages/bigscreen/designer/components/List.vue
#	packages/bigscreen/designer/components/SourceData.vue
#	packages/bigscreen/designer/components/form/DataConfig.vue
#	packages/bigscreen/designer/config.js
#	packages/bigscreen/viewer/AppGigscreenViewer.vue
#	packages/conv/creditScore/scoreManage/scoreChange.vue
#	packages/index.js
#	project/dv/apps/AppGridDV.vue
#	project/dvui/components/AiMonitor/dhVideo.vue
#	project/dvui/components/AiSwiper.vue
#	project/dvui/layout/AiDvBackground.vue
#	project/dvui/layout/AiDvSummary/AiDvSummary.vue
#	project/dvui/layout/AiDvWrapper/AiDvWrapper.vue
#	project/dvui/package.json
#	public/index.html
#	vue.config.js
This commit is contained in:
aixianling
2022-07-07 09:01:40 +08:00
208 changed files with 14871 additions and 8799 deletions

View File

@@ -6,8 +6,16 @@
<el-form size="small" label-width="160px">
<ai-card title="基本信息">
<template #content>
<el-form-item label="用户账号">{{ detail.phone }}</el-form-item>
<el-form-item label="注册时间">{{ detail.createTime }}</el-form-item>
<el-row type="flex">
<div class="fill">
<el-form-item label="用户账号">{{ detail.phone }}</el-form-item>
<el-form-item label="姓名">{{ detail.name }}</el-form-item>
</div>
<div class="fill">
<el-form-item label="注册时间">{{ detail.createTime }}</el-form-item>
<el-form-item label="身份证号">{{ detail.idNumber }}</el-form-item>
</div>
</el-row>
</template>
</ai-card>
<ai-card title="企业信息">

View File

@@ -0,0 +1,57 @@
<template>
<section class="AppCreditReport">
<component :is="currentPage" v-bind="$props"/>
</section>
</template>
<script>
import Home from "./home";
import PersonDetail from "./personDetail";
import CompanyDetail from "./companyDetail";
export default {
name: "AppCreditReport",
components: {CompanyDetail, PersonDetail, Home},
label: "信息报告",
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
currentPage() {
const {hash} = this.$route
return hash == "#person" ? PersonDetail :
hash == "#company" ? CompanyDetail : Home
}
},
created() {
}
}
</script>
<style lang="scss" scoped>
::v-deep.AppCreditReport {
height: 100%;
.mar-t16 {
margin-top: 16px;
}
.mar-l8 {
margin-left: 8px;
}
.color-26f {
color: #26f;
}
.color-333 {
color: #333;
}
.color-666 {
color: #666;
}
}
</style>

View File

@@ -0,0 +1,34 @@
<template>
<section class="companyDetail">
<ai-detail>
<ai-title slot="title" title="企业信息报告" isShowBottomBorder>
<template #rightBtn>
<el-button @click="$router.push({})">返回信息报告</el-button>
</template>
</ai-title>
<template #content>
<enterprise-dialog slot="content" :enterpriseId="$route.query.id" v-bind="$props"/>
</template>
</ai-detail>
</section>
</template>
<script>
import EnterpriseDialog from "../../../components/enterpriseDialog";
export default {
name: "companyDetail",
components: {EnterpriseDialog},
props: {
instance: Function,
dict: Object,
permissions: Function
}
}
</script>
<style lang="scss" scoped>
.companyDetail {
height: 100%;
}
</style>

View File

@@ -0,0 +1,129 @@
<template>
<section class="home">
<ai-detail>
<ai-title slot="title" title="信息报告查询工具" isShowBottomBorder/>
<template #content>
<el-input v-model="search.param" :placeholder="placeholder" @change="page.current=1,handleSearch()" clearable>
<el-select slot="prepend" v-model="search.type" :clearable="false" @change="search.param=''">
<el-option v-for="op in types" :key="op.dictValue" :value="op.dictValue" :label="op.dictName"/>
</el-select>
<el-button slot="append" type="text" @change="page.current=1,handleSearch()">搜索</el-button>
</el-input>
<ai-card v-if="hasResult" title="查询结果" class="mar-t16">
<el-row type="flex" slot="right" class="color-666">秀兴通为您找到<p class="color-26f" v-text="page.total"/>个结果</el-row>
<template #content>
<ai-table :tableData="results" :total="page.total" :current.sync="page.current" :size.sync="page.size"
@getList="handleSearch" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="name" :label="nameLabel">
<template slot-scope="{row}">
<el-row type="flex" align="middle">
<el-avatar :src="row.avatar">
<div v-text="defaultAvatar(row.name)"/>
</el-avatar>
<div class="mar-l8" v-text="row.name"/>
</el-row>
</template>
</el-table-column>
<el-table-column slot="options" label="操作" align="center" width="100px">
<template slot-scope="{row}">
<el-button type="text" @click="showDetail(row.id)">详情</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
<ai-empty v-else>暂无查询结果</ai-empty>
</template>
</ai-detail>
</section>
</template>
<script>
export default {
name: "home",
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
placeholder() {
const texts = {
0: "搜索个人姓名/身份证号",
1: "搜索企业名称/法人姓名",
}
return texts[this.search.type]
},
hasResult: v => v.results?.length > 0,
isCompany: v => v.search.type == 1,
nameLabel: v => v.isCompany ? "企业名称" : "姓名",
colConfigs() {
const configs = {
0: [
{slot: "name"},
{prop: "idNumber", label: "身份证号", width: 180},
],
1: [
{slot: "name"},
{prop: "legalPersonName", label: "法人姓名", width: 80},
{prop: "idNumber", label: "统一社会信用代码", width: 180},
{prop: "address", label: "地址"},
],
}
return configs[this.search.type]
},
},
data() {
return {
search: {type: "0", param: null},
types: [
{dictValue: "0", dictName: "个人"},
{dictValue: "1", dictName: "企业"},
],
page: {current: 1, size: 10, total: 0},
results: []
}
},
methods: {
handleSearch() {
this.instance.post("/appcreditreport/listForWeb", null, {
params: {...this.search, ...this.page}
}).then(res => {
if (res?.data) {
this.results = res.data.records
this.page.total = res.data.total
}
})
},
showDetail(id) {
const hash = this.isCompany ? "#company" : "#person"
this.$router.push({hash, query: {id}})
},
defaultAvatar(name) {
return name?.substring(0, 1) || "无"
}
},
}
</script>
<style lang="scss" scoped>
.home {
::v-deep .el-input-group__prepend {
width: 100px;
}
::v-deep .el-input-group__append {
width: 100px;
padding: 0;
background: #26f;
color: #fff;
border-color: #26f;
.el-button {
width: 100%;
height: 100%;
margin: 0;
}
}
}
</style>

View File

@@ -0,0 +1,34 @@
<template>
<section class="personDetail">
<ai-detail>
<ai-title slot="title" title="个人信息报告" isShowBottomBorder>
<template #rightBtn>
<el-button @click="$router.push({})">返回信息报告</el-button>
</template>
</ai-title>
<template #content>
<person-credit-report slot="content" :personId="$route.query.id" v-bind="$props"/>
</template>
</ai-detail>
</section>
</template>
<script>
import PersonCreditReport from "../../../components/personCreditReport";
export default {
name: "personDetail",
components: {PersonCreditReport},
props: {
instance: Function,
dict: Object,
permissions: Function
}
}
</script>
<style lang="scss" scoped>
.personDetail {
height: 100%;
}
</style>

View File

@@ -0,0 +1,36 @@
<template>
<section class="AppCreditReportApply">
<component :is="currentPage" v-bind="$props"/>
</section>
</template>
<script>
import List from "./list";
import Add from "./add";
export default {
name: "AppCreditReportApply",
components: {Add, List},
label: "信息报告申请",
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
currentPage() {
let {hash} = this.$route
return hash == "#add" ? Add : List
}
},
created() {
this.dict.load('creditReportType')
}
}
</script>
<style lang="scss" scoped>
.AppCreditReportApply {
height: 100%;
}
</style>

View File

@@ -0,0 +1,92 @@
<template>
<section class="add">
<ai-detail>
<ai-title slot="title" :title="pageTitle" isShowBottomBorder/>
<template #content>
<el-tabs tabPosition="left">
<el-tab-pane label="申请信息">
<el-form ref="AddForm" :model="form" size="small" label-width="120px">
<ai-card title="申请信息">
<template #content>
<el-row type="flex">
<div class="fill">
<el-form-item label="信用主体" prop="objName">{{ form.objName }}</el-form-item>
<el-form-item label="证件号码" prop="idNumber">{{ form.idNumber }}</el-form-item>
</div>
<div class="fill">
<el-form-item label="申请类型" prop="type">{{ dict.getLabel('creditReportType', form.type) }}</el-form-item>
<el-form-item label="联系方式" prop="createUserPhone">{{ form.createUserPhone }}</el-form-item>
</div>
</el-row>
<el-form-item label="申请时间" prop="createTime">{{ form.createTime }}</el-form-item>
<el-form-item label="证明材料" prop="files">
<el-image class="cpImage" v-for="(item,i) in form.files" :key="i" :src="item.url" :preview-src-list="[item.url]"/>
</el-form-item>
</template>
</ai-card>
</el-form>
</el-tab-pane>
<el-tab-pane label="信息报告" lazy>
<component :is="creditReport" v-bind="cpParams"/>
</el-tab-pane>
</el-tabs>
</template>
</ai-detail>
</section>
</template>
<script>
import PersonCreditReport from "../../../components/personCreditReport";
import EnterpriseDialog from "../../../components/enterpriseDialog";
export default {
name: "add",
components: {EnterpriseDialog, PersonCreditReport},
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
isEdit: v => !!v.$route.query.id,
pageTitle: () => "报告申请详情",
cpParams: v => ({...v.$props, personId: v.form.objId, enterpriseId: v.form.objId}),
creditReport: v => v.form.type == 1 ? EnterpriseDialog : PersonCreditReport
},
data() {
return {
form: {},
}
},
methods: {
getDetail() {
let {id} = this.$route.query
id && this.instance.post("/app/appcreditreport/applyInfot", null, {
params: {id}
}).then(res => {
if (res?.data) {
this.form = res.data
}
})
},
back() {
this.$router.push({})
}
},
created() {
this.getDetail()
}
}
</script>
<style lang="scss" scoped>
.add {
height: 100%;
.cpImage {
width: 120px;
height: 120px;
margin: 0 8px 8px 0;
}
}
</style>

View File

@@ -0,0 +1,71 @@
<template>
<section class="list">
<ai-list>
<ai-title slot="title" title="信息报告申请" isShowBottomBorder/>
<template #content>
<ai-search-bar>
<template #right>
<el-input size="small" placeholder="搜索信用主体/证件号码/信用代码" v-model="search.objName" 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" width="300">
<template slot-scope="{row}">
<el-button type="text" @click="handleAdd(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: {objName: ""},
page: {current: 1, size: 10, total: 0},
tableData: [],
colConfigs: [
{prop: "createUserPhone", label: "联系方式"},
{prop: "createUserName", label: "申请人"},
{prop: "idNumber", label: "证件号码"},
{prop: "objName", label: "信用主体"},
{prop: "type", label: "申请类型", dict: "creditReportType"},
{prop: "createTime", label: "申请时间"}],
}
},
methods: {
getTableData() {
this.instance.post("/app/appcreditreport/applyList", null, {
params: {...this.page, ...this.search}
}).then(res => {
if (res?.data) {
this.tableData = res.data.records
this.page.total = res.data.total
}
})
},
handleAdd(id) {
this.$router.push({hash: "#add", query: {id}})
},
},
created() {
this.getTableData()
}
}
</script>
<style lang="scss" scoped>
.list {
height: 100%;
}
</style>

View File

@@ -69,24 +69,7 @@
<span class="form_value">{{ dialogInfo.changeIntegral >= 0 ? '增加' : '减少' }}<span
style="color:#2266FF">{{ Math.abs(dialogInfo.changeIntegral) }}</span></span>
</div>
<!-- <div>
<span class="form_label">途径</span>
<span class="form_value">{{dict.getLabel("integralDetailBizType", dialogInfo.bizType)}}</span>
</div> -->
</div>
<!-- <div class="form_info">
<span class="form_label">{{dialogInfo.bizType == 1 ? '申诉' : '申报'}}说明</span>
<span
class="form_value"
>{{dialogInfo.description}}</span>
</div>
<div class="form_info">
<span class="form_label">照片</span>
<span class="form_value" v-if="dialogInfo.fileList && dialogInfo.fileList.length">
<ai-uploader :disabled="true" :instance="instance" v-model="dialogInfo.fileList" :limit="9" ></ai-uploader>
</span>
<span class="form_value" v-else>-</span>
</div> -->
</div>
<div class="dialog-footer" slot="footer">
<el-button @click="dialog.visible=false" size="medium">关闭</el-button>
@@ -160,7 +143,6 @@ export default {
"integralDoType",
"integralDeclareDoType",
"integralDetailType",
"integralDetailBizType",
).then(() => {
this.getList();
});

View File

@@ -11,7 +11,7 @@
</div>
<div class="detail-info__item">
<h2>获取积分</h2>
<span style="color: #2266FF;">{{ info.personalIntegral || 0 }}</span>
<span style="color: #2266FF;">{{ (info.personalIntegral + info.personalUsedIntegral) || 0 }}</span>
</div>
<div class="detail-info__item">
<h2>已用积分</h2>
@@ -32,7 +32,6 @@
:total="page.total"
:current.sync="page.current"
:size.sync="page.size"
:isShowPagination="false"
tableSize="small"
:border="true"
:dict="dict"

View File

@@ -87,9 +87,10 @@ export default {
label: '用户账号',
},
{
prop: 'personalIntegral',
// prop: 'personalIntegral',
align: 'center',
label: '获取积分',
render: (h, {row}) => h('span',null, row.personalIntegral + row.personalUsedIntegral)
},
{
prop: 'personalUsedIntegral',
@@ -97,9 +98,10 @@ export default {
label: '已用积分',
},
{
prop: 'personalIntegral',
align: 'center',
label: '剩余积分',
render: (h, {row}) => h('span', null, row.personalIntegral - row.personalUsedIntegral)
// render: (h, {row}) => h('span', null, row.personalIntegral - row.personalUsedIntegral)
}
]
},

View File

@@ -29,7 +29,7 @@ export default {
},
created() {
this.dict.load("productGuaranteeMode", "productRepaymentMethod", "productRepaymentTimeline", "productStatus", "productFaceUser",
"enterpriseAuditStatus", "yesOrNo", "financialOrganizationType")
"enterpriseAuditStatus", "yesOrNo", "financialOrganizationType", "financialProductChannels")
}
}
</script>

View File

@@ -86,6 +86,16 @@
</el-form-item>
</template>
</ai-card>
<ai-card title="办理渠道">
<template #content>
<el-form-item label="业务办理渠道" prop="handlingChannels">
<ai-select v-model="form.handlingChannels" :selectList="dict.getDict('financialProductChannels')" @change="form.zwspId=null"/>
</el-form-item>
<el-form-item v-if="form.handlingChannels==1" label="关联贷款联审" prop="zwspId">
<ai-select v-model="form.zwspId" :instance="instance" action="/approval-process-def/list?processDefStatus=1" :prop="{label:'processName'}"/>
</el-form-item>
</template>
</ai-card>
</el-form>
</template>
<template #footer>
@@ -129,6 +139,8 @@ export default {
applyCondition: [{required: true, message: "请输入申请条件", trigger: 'blur'}],
needMaterial: [{required: true, message: "请输入所需材料", trigger: 'blur'}],
productFeatures: [{required: true, message: "请输入产品特色", trigger: 'blur'}],
handlingChannels: [{required: true, message: "请选择办理渠道"}],
zwspId: [{required: true, message: "请选择关联贷款联审"}],
// bankCounterpart: [{required: true, message: "请输入客户经理姓名", trigger: 'change'}],
// consultationTelephone: [ {required: true, message: "请输入客户经理电话", trigger: 'change'}],
}
@@ -137,7 +149,7 @@ export default {
data() {
return {
dialog: false,
form: {guaranteeMode: [], faceUser: [], loanMin: null},
form: {guaranteeMode: [], faceUser: [], loanMin: null, zwspId: null},
}
},
methods: {

View File

@@ -49,6 +49,12 @@
<el-form-item label="产品特色">{{ detail.productFeatures }}</el-form-item>
</template>
</ai-card>
<ai-card title="办理渠道">
<template #content>
<el-form-item label="业务办理渠道">{{ dict.getLabel('financialProductChannels', detail.handlingChannels) }}</el-form-item>
<el-form-item label="关联贷款联审" v-if="detail.handlingChannels==1">{{ detail.zwspName }}</el-form-item>
</template>
</ai-card>
<ai-card title="审核结果" v-if="!isAuthing">
<template #content>
<el-row type="flex" class="flexWrap">
@@ -119,11 +125,22 @@ export default {
this.detail = res.data
this.detail.guaranteeModeLabel = res.data.guaranteeMode?.split(",").map(g => this.dict.getLabel("productGuaranteeMode", g))?.toString()
this.detail.faceUserLabel = res.data.faceUser?.split(",").map(g => this.dict.getLabel("productFaceUser", g))?.toString()
if (this.detail.handlingChannels == 1) {
this.getZWSP(this.detail.zwspId).then(zwsp => this.$set(this.detail, 'zwspName', zwsp.processName))
}
} else {
this.$message.error("该产品已下架!")
}
})
},
getZWSP(id) {
//贷款联审信息
return this.instance.post("/approval-process-def/info-id", null, {params: {id}}).then(res => {
if (res?.data) {
return res.data
}
})
},
submitAudit() {
this.$refs.AuditForm.validate(v => {
if (v) {

View File

@@ -27,7 +27,9 @@
<el-form-item label="企业主体" v-if="detail.enterpriseId">
<el-row type="flex">
{{ detail.enterpriseName }}
<el-link type="primary" @click="isShow=true">企业详情</el-link>
<ai-dialog-btn text="企业详情" :dialog-title="detail.enterpriseName||'企业详情'">
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance" :dict="dict"/>
</ai-dialog-btn>
</el-row>
</el-form-item>
<el-form-item label="所在地区">{{ detail.areaName }}</el-form-item>
@@ -36,7 +38,9 @@
<el-form-item label="联系人">
<el-row type="flex">
{{ detail.name }}
<person-credit-report :person="detail" :instance="instance" :dict="dict"/>
<ai-dialog-btn text="个人详情" :dialog-title="detail.name||'个人详情'">
<person-credit-report :personId="detail.idNumber" :instance="instance" :dict="dict"/>
</ai-dialog-btn>
</el-row>
</el-form-item>
<el-form-item label="身份证号">{{ detail.idNumber }}</el-form-item>
@@ -93,20 +97,6 @@
</el-form-item>
</el-form>
</ai-dialog>
<ai-dialog class="dialog" :title="detail.enterpriseName||'企业详情'" :visible.sync="isShow" width="1200px" customFooter>
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance"
:dict="dict"/>
<template #footer>
<el-button @click="isShow=false">关闭</el-button>
</template>
</ai-dialog>
<ai-dialog class="dialog" :title="detail.enterpriseName||'企业详情'" :visible.sync="isShow" width="1200px" customFooter>
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance"
:dict="dict"/>
<template #footer>
<el-button @click="isShow=false">关闭</el-button>
</template>
</ai-dialog>
</section>
</template>
@@ -114,10 +104,11 @@
import {mapState} from "vuex";
import EnterpriseDialog from "../../../components/enterpriseDialog";
import PersonCreditReport from "../../../components/personCreditReport";
import AiDialogBtn from "../../../components/AiDialogBtn";
export default {
name: "loanDetail",
components: {PersonCreditReport, EnterpriseDialog},
components: {AiDialogBtn, PersonCreditReport, EnterpriseDialog},
props: {
instance: Function,
dict: Object,
@@ -147,7 +138,6 @@ export default {
loanDate: [{required: true, message: "请选择 放款日期"}],
auditDescription: [{required: true, message: "请输入 审批意见"}],
},
isShow: false,
personCR: false
}
},

View File

@@ -76,15 +76,16 @@ export default {
},
data() {
return {
search: {name: ""},
search: {status: "", applyTime: []},
page: {current: 1, size: 10, total: 0},
tableData: []
tableData: [],
}
},
methods: {
getTableData() {
let status = this.search.status || 999
this.instance.post("/appfinancialloanapply/list", null, {
params: {...this.page, ...this.search}
params: {...this.page, ...this.search, status}
}).then(res => {
if (res?.data) {
this.tableData = res.data?.records
@@ -103,6 +104,8 @@ export default {
},
},
created() {
this.$dict.load('financialLoanApplyStatus')
this.search.status = this.$route.query.status
this.getTableData()
}
}

View File

@@ -24,13 +24,18 @@
<h2 v-text="overviews['累计申请笔数(笔)']"/>
<p>总数</p>
</div>
<ai-echart :ops="circleEchart" :data="[{name:'企业融资',value:overviews['累计申请笔数(笔)']}]"/>
<ai-echart :ops="circleEchart" :data="[{name:'企业融资',value:applyInfo['企业融资']}, {name:'个人融资',value:applyInfo['个人贷款']}]"/>
</div>
<div class="cir-text">
<el-row type="flex" justify="space-between" align="middle" class="info">
<span class="tips-bg" style="background: #2891FF;"/>
<p class="fill">企业融资</p>
<div v-text="overviews['累计申请笔数']"/>
<div v-text="applyInfo['企业融资']"/>
</el-row>
<el-row type="flex" justify="space-between" align="middle" class="info">
<span class="tips-bg" style="background: #FFB865;"/>
<p class="fill">个人融资</p>
<div v-text="applyInfo['个人贷款']"/>
</el-row>
</div>
</div>
@@ -74,9 +79,13 @@ export default {
return {
legend: false,
color: ['#2891FF', '#FFB865'],
tooltip: {
confine: true
},
series: [
{
type: 'pie',
name: '申请信用贷款主体',
radius: ['80%', '90%'],
avoidLabelOverlap: false,
legend: false,
@@ -172,6 +181,7 @@ export default {
overviews: [],
productTop10: [],
tradeTrend: [],
applyInfo: {}
}
},
methods: {
@@ -179,6 +189,16 @@ export default {
this.getOverviews()
this.getProductTop10()
this.getTradeTrend()
this.getApply()
},
getApply() {
this.instance.post("/appfinancialloanapply/staticFinancialLoanApplyByMainbody", null, {
params: {...this.search}
}).then(res => {
if (res?.data) {
this.applyInfo = res.data
}
})
},
getOverviews() {
this.instance.post("/appfinancialloanapply/staticFinancialLoanApplyByOrganization", null, {

View File

@@ -26,14 +26,18 @@
<el-form-item label="企业主体" v-if="detail.applyType==1">
<el-row type="flex">
{{ detail.enterpriseName }}
<el-link type="primary" @click="isShow=true">企业详情</el-link>
<ai-dialog-btn text="企业详情" :dialog-title="detail.enterpriseName||'企业详情'">
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance" :dict="dict"/>
</ai-dialog-btn>
</el-row>
</el-form-item>
<el-form-item v-else/>
<el-form-item label="联系人">
<el-row type="flex">
<div v-text="detail.name"/>
<person-credit-report :person="detail" :instance="instance" :dict="dict"/>
<ai-dialog-btn text="个人详情" :dialog-title="detail.name||'个人详情'">
<person-credit-report :personId="detail.idNumber" :instance="instance" :dict="dict"/>
</ai-dialog-btn>
</el-row>
</el-form-item>
<el-form-item label="所在地区">{{ detail.areaName }}</el-form-item>
@@ -45,14 +49,6 @@
</template>
</ai-card>
</el-form>
<ai-dialog class="dialog" :title="detail.enterpriseName||'企业详情'" :visible.sync="isShow" width="1200px"
customFooter>
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance"
:dict="dict"/>
<template #footer>
<el-button @click="isShow=false">关闭</el-button>
</template>
</ai-dialog>
</template>
</ai-detail>
</section>
@@ -62,10 +58,11 @@
import {mapState} from "vuex";
import EnterpriseDialog from "../../../components/enterpriseDialog";
import PersonCreditReport from "../../../components/personCreditReport";
import AiDialogBtn from "../../../components/AiDialogBtn";
export default {
name: "needsDetail",
components: {PersonCreditReport, EnterpriseDialog},
components: {AiDialogBtn, PersonCreditReport, EnterpriseDialog},
props: {
instance: Function,
dict: Object,
@@ -81,7 +78,6 @@ export default {
return {
detail: {},
info: {},
isShow: false,
}
},
methods: {

View File

@@ -23,15 +23,17 @@
</el-form-item>
<el-form-item label="企业主体" v-if="detail.applyType==1">
{{ detail.enterpriseName }}
<el-link type="primary" @click="showEnterpriseDetail=true">
企业详情
</el-link>
<ai-dialog-btn text="企业详情" :dialog-title="detail.enterpriseName||'企业详情'">
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance" :dict="dict"/>
</ai-dialog-btn>
</el-form-item>
<el-form-item v-else/>
<el-form-item label="联系人">
<el-row type="flex">
{{ detail.createUserName }}
<person-credit-report :person="detail" :instance="instance" :dict="dict"/>
<ai-dialog-btn text="个人详情" :dialog-title="detail.name||'个人详情'">
<person-credit-report :personId="detail.idNumber" :instance="instance" :dict="dict"/>
</ai-dialog-btn>
</el-row>
</el-form-item>
<el-form-item label="所在地区">{{ detail.areaName }}</el-form-item>
@@ -75,14 +77,6 @@
</el-form-item>
</el-form>
</ai-dialog>
<ai-dialog class="dialog" :title="detail.enterpriseName||'企业详情'" :visible.sync="showEnterpriseDetail" width="1200px"
customFooter>
<enterprise-dialog v-if="detail.enterpriseId" :enterprise-id="detail.enterpriseId" :instance="instance"
:dict="dict"/>
<template #footer>
<el-button @click="showEnterpriseDetail=false">关闭</el-button>
</template>
</ai-dialog>
</section>
</template>
@@ -90,10 +84,12 @@
import {mapState} from "vuex";
import EnterpriseDialog from "../../../components/enterpriseDialog";
import PersonCreditReport from "../../../components/personCreditReport";
import AiDialogBtn from "../../../components/AiDialogBtn";
export default {
name: "grabDetail",
components: {PersonCreditReport, EnterpriseDialog},
components: {AiDialogBtn, PersonCreditReport, EnterpriseDialog},
props: {
instance: Function,
dict: Object,
@@ -115,7 +111,6 @@ export default {
auditLifespan: [{required: true, message: "请选择 使用期限"}],
loanDate: [{required: true, message: "请选择 放款日期"}],
},
showEnterpriseDetail: false
}
},
methods: {

View File

@@ -48,7 +48,7 @@ export default {
},
data() {
return {
search: {status: 1},
search: {status: ''},
page: {current: 1, size: 10, total: 0},
tableData: [],
colConfigs: [
@@ -67,8 +67,9 @@ export default {
},
methods: {
getTableData() {
let status = this.search.status || 999
this.instance.post("/appfinancialloanapply/list", null, {
params: {...this.page, ...this.search}
params: {...this.page, ...this.search, status}
}).then(res => {
if (res?.data) {
this.tableData = res.data?.records

View File

@@ -6,7 +6,7 @@
<template #content>
<ai-search-bar>
<template #left>
<ai-select v-model="search.status" placeholder="状态" :selectList="dict.getDict('financingDemandStatus')"
<ai-select v-model="search.status" placeholder="状态" :selectList="$dict.getDict('financingDemandSearchStatus')"
@change="page.current=1,getTableData()"/>
<ai-search label="申请时间">
<el-date-picker size="small" placeholder="请选择" type="daterange"
@@ -29,7 +29,7 @@
@getList="getTableData" :col-configs="colConfigs" :dict="dict">
<el-table-column slot="options" label="状态" fixed="right" width="100" align="center">
<template slot-scope="{row}">
<span :class="`status${row.status}`">{{ dict.getLabel('financingDemandStatus', row.status) }}</span>
<span :class="`status${row.status}`">{{ $dict.getLabel('financingDemandSearchStatus', row.status) }}</span>
</template>
</el-table-column>
</ai-table>
@@ -54,7 +54,7 @@ export default {
},
data() {
return {
search: {status: "1"},
search: {status: ""},
page: {current: 1, size: 10, total: 0},
tableData: [],
colConfigs: [
@@ -74,7 +74,7 @@ export default {
},
methods: {
getTableData() {
let status = this.search.status || 999
let status = this.search.status || 888
this.instance.post("/appfinancingdemand/list", null, {
params: {...this.page, ...this.search, status}
}).then(res => {
@@ -92,7 +92,7 @@ export default {
}
},
created() {
this.dict.load('financingDemandStatus')
this.dict.load('financingDemandSearchStatus')
this.search.areaId = this.user.info.areaId
this.getTableData()
}

View File

@@ -4,15 +4,14 @@
<ai-title slot="title" title="审批详情" isShowBack isShowBottomBorder @onBackClick="approval.goBack()">
<template #rightBtn>
<template v-if="listType==0&&$permissions('zwsp_oaapprovalapplyinfo_approve')">
<el-button size="small" class="iconfont iconClean del-btn-list" @click="agreeRefulse(0)">拒绝</el-button>
<el-button size="small" type="primary" class="iconfont iconCorrect" @click="agreeRefulse(1)">同意</el-button>
<el-button size="small" icon="iconfont iconClean del-btn-list" @click="agreeRefulse(0)">拒绝</el-button>
<el-button size="small" type="primary" icon="iconfont iconCorrect" @click="agreeRefulse(1)">同意</el-button>
</template>
<el-button v-if="listType==2&&detail.approvalStatus==0&&$permissions('app_oaapprovalapplyinfo_del')"
size="small" class="iconfont iconRevoke del-btn-list" style="width: 76px;" @click="recall">撤回
</el-button>
</template>
</ai-title>
<template #content>
<ai-sidebar :tabTitle="menuList" @change="change"/>
<el-scrollbar>
@@ -52,19 +51,21 @@
</template>
<template v-if="currentMenu==1">
<ai-card title="申请表单">
<template v-if="!!detailObj.objId" #right>
<ai-dialog-btn text="信息报告" :dialog-title="cpConfig.dialogTitle">
<component :is="cpConfig.component" v-bind="cpConfig.params"/>
</ai-dialog-btn>
</template>
<template #content>
<el-form label-suffix="" label-width="180px" size="small">
<div class="border-wrap">
<div v-for="(item, index) in applyForm" :key="index">
<ai-title :title="index"/>
<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 && e.fieldDataType!=10"/>
<el-input :value="getAreaName(e)" readonly style="width: 100%;"
v-else-if="e.fieldDataType==10"/>
<el-input :value="getFieldValue(e)" readonly style="width: 100%;" v-if="e.fieldDataType!=5"/>
<el-checkbox-group v-else 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 :label="val.dictValue" disabled v-for="(val,idx) in dict.getDict(e.dictionaryCode)" :key="idx">
{{ val.dictName }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
@@ -151,7 +152,7 @@
<div v-for="(m,i) in item.candidateFieldInfos" :key="i" style="margin-left: 10px;">
<div class="desc_div">{{ m.fieldName }}
<span v-if="m.fieldNameSuffix" v-text="m.fieldNameSuffix"/>
:{{m.dictionaryCode ? dict.getLabel(m.dictionaryCode, m.fieldValue) : m.fieldValue }}
:{{ m.dictionaryCode ? dict.getLabel(m.dictionaryCode, m.fieldValue) : m.fieldValue }}
</div>
</div>
</li>
@@ -159,9 +160,9 @@
<span class="li_opinion" v-if="item.annexFiles && item.annexFiles.length>0">审批附件</span>
<div style="flex: 1;">
<div class="desc_div">
<img @click="openImg(value.accessUrl)" v-for="(value,_v) in item.pictureFiles" :key="_v"
:src="value.accessUrl" alt="图片" width="80px" height="80px"
style="border: 1px solid #ddd;cursor: pointer;">
<el-image v-for="(value,_v) in item.pictureFiles" :key="_v" :preview-src-list="[value.accessUrl]"
:src="value.accessUrl" alt="图片" width="80px" height="80px"
style="border: 1px solid #ddd;cursor: pointer;"/>
</div>
<ul class="file_ul">
<li v-for="(v,_i) in item.annexFiles" :key="_i" @click="downFile(v.accessUrl)">
@@ -206,23 +207,18 @@
</el-scrollbar>
</template>
</ai-detail>
<el-dialog :visible.sync="isOpen" width="600px">
<img :src="imgUrl" alt="" width="100%" height="500px">
</el-dialog>
<!--审批同意拒绝-->
<el-dialog :title="titleType" center :visible.sync="isAgree" width="720px" v-loading="loading"
:close-on-click-modal="false" @close="form.fieldInfos = []">
<div style="height: 400px;overflow-y: auto;">
<el-form size="small" :model="form" label-width="90px" ref="ruleForm" label-position="right"
<div style="max-height: 400px;overflow-y: auto;">
<el-form size="small" :model="form" label-width="120px" ref="ruleForm" label-position="right"
class="dialog-form">
<el-form-item v-for="(op,i) in form.fieldInfos" :key="i"
:label="op.fieldName + (op.fieldNameSuffix ? op.fieldNameSuffix : '')" class="dynamicFormItem"
:prop="`fieldInfos.${i}.fieldValue`"
:rules="{required:op.mustFill==1,message:`请输入${op.fieldName}`}">
<el-input placeholder="请输入..." v-model.number="op.fieldValue"
clearable v-if="op.fieldDataType=='0'" show-word-limit :maxlength="op.fieldLength"/>
clearable v-if="op.fieldDataType=='0'" show-word-limit :maxlength="op.fieldLength"/>
<el-input type="textarea" :rows="3" placeholder="请输入..." v-model.trim="op.fieldValue"
clearable v-if="op.fieldDataType=='1'" show-word-limit
@@ -242,15 +238,15 @@
type="date"
placeholder="请选择">
</el-date-picker>
<ai-select v-if="op.fieldDataType=='9'" v-model="op.fieldValue"
:selectList="dict.getDict(op.dictionaryCode)"/>
<ai-select v-if="op.fieldDataType=='9'" v-model="op.fieldValue" :selectList="dict.getDict(op.dictionaryCode)"/>
</el-form-item>
<el-form-item label="审批意见" prop="opinion" :rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }]"
v-if="titleType=='审批拒绝'">
<el-input type="textarea" :rows="4" v-model.trim="form.opinion" placeholder="请输入" show-word-limit
:maxlength="150"></el-input>
<el-form-item label="指定审批人" prop="appointNextCandidateId" :rules="[{ required: true, message: '请选择指定审批人'}]" v-if="form.nextNodeAreaFilter==3">
<ai-select v-model="form.appointNextCandidateId" :selectList="form.nextCandidateList"/>
</el-form-item>
<el-form-item label="图片" prop="imgList" style="position: relative;">
<el-form-item label="审批意见" prop="opinion" :rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }]" v-if="!form.pass">
<el-input type="textarea" :rows="4" v-model.trim="form.opinion" placeholder="请输入" show-word-limit :maxlength="150"/>
</el-form-item>
<el-form-item label="图片" prop="imgList" style="position: relative;" v-if="form.pictureEnable==1">
<span style="position: absolute;left: -78px;top: 18px;font-size: 12px;color: #999;">最多9张</span>
<el-upload
action
@@ -270,7 +266,7 @@
</div>
</el-upload>
</el-form-item>
<el-form-item label="附件" prop="fileList">
<el-form-item label="附件" prop="fileList" v-if="form.annexEnable==1">
<el-upload
class="upload-demo"
action
@@ -306,11 +302,15 @@ import moment from 'dayjs'
import {mapState} from "vuex";
import Viewer from 'v-viewer'
import Vue from 'vue'
import AiDialogBtn from "../../../../components/AiDialogBtn";
import PersonCreditReport from "../../../../components/personCreditReport";
import EnterpriseDialog from "../../../../components/enterpriseDialog";
Vue.use(Viewer)
export default {
name: "approvalDetail",
components: {EnterpriseDialog, PersonCreditReport, AiDialogBtn},
inject: ['approval'],
props: {
instance: Function,
@@ -326,7 +326,6 @@ export default {
detailObj: {},
dataList: [],
processList: [],
titleType: '',
isAgree: false,
form: {
id: '',
@@ -346,7 +345,6 @@ export default {
fileList: [],
alreadyList: [],//已审批的
imgUrl: '',
isOpen: false,
url: "/admin/sysunit/getAll2",
applyForm: {},
menuList: ["基本信息", '申请表单', '附件材料', "审批记录"],
@@ -372,6 +370,15 @@ export default {
{slot: "annex"},
{slot: "options"}
]
},
titleType: v => v.form.pass ? '审批同意' : '审批拒绝',
cpConfig() {
const {objId, objType} = this.detailObj
let configs = {
0: {dialogTitle: "个人信息报告", params: {...this.$props, personId: objId}, component: PersonCreditReport},
1: {dialogTitle: "企业信息报告", params: {...this.$props, enterpriseId: objId}, component: EnterpriseDialog},
}
return configs?.[objType] || {}
}
},
methods: {
@@ -419,10 +426,6 @@ export default {
this.fileList = []
this.isAgree = false
},
openImg(url) {
this.isOpen = true;
this.imgUrl = url;
},
// 下载
downFile(url) {
window.open(url);
@@ -560,36 +563,22 @@ export default {
let dictionaryArr = []
this.loading = true
this.instance.post(`/app/approv-alapply-info/approval-popup?id=${this.detail.id}&type=${index}`).then(res => {
this.loading = false
if (res && res.data) {
if (res?.data) {
if (index == 1) {
res.data.fieldInfos.map(e => {
if (e.fieldType == 3 && e.dictionaryCode && dictionaryArr.indexOf(e.dictionaryCode) == -1) {
this.form = res.data
this.form.fieldInfos = res.data.fieldInfos.filter(e => e.fieldType == 3)
this.form.nextCandidateList = this.form.nextCandidateList?.map(e => ({dictValue: e.candidate, dictName: e.name}))
this.form.fieldInfos.map(e => {
if (e.dictionaryCode && !dictionaryArr.includes(e.dictionaryCode)) {
dictionaryArr.push(e.dictionaryCode)
}
})
if (dictionaryArr.length) {
this.dict.load(dictionaryArr).then(() => {
this.form.fieldInfos = res.data.fieldInfos.filter(e => e.fieldType == 3)
})
} else {
this.form.fieldInfos = res.data.fieldInfos.filter(e => e.fieldType == 3)
}
dictionaryArr.length > 0 && this.dict.load(dictionaryArr)
}
this.form.pass = index == 1
this.isAgree = true;
if (index == 0) {
this.form.pass = false;
this.titleType = '审批拒绝';
} else {
this.form.pass = true;
this.titleType = '审批同意';
}
}
}).catch(err => {
this.loading = false
console.log(err);
})
}).finally(() => this.loading = false)
},
saveAgree() {
this.form.id = this.detail.id;

View File

@@ -13,9 +13,7 @@
</el-tabs>
</template>
</ai-list>
<component v-else :is="currentComp" :instance="instance" :dict="dict"
:processType="currentTab.value" :row="row" @back="back" />
<component v-else :is="currentTab.detail" :instance="instance" :dict="dict" :processType="currentTab.value" :row="row" @back="back"/>
</section>
</template>
@@ -27,7 +25,7 @@ import guidance from "./components/guidance";
export default {
name: "AppMattersConfig",
label: '事项配置(秀山)',
components: {addConfig,guidance},
components: {addConfig, guidance},
props: {
instance: Function,
dict: Object,
@@ -37,7 +35,6 @@ export default {
return {
currIndex: "0",
row: {},
currentComp: "",
}
},
computed: {
@@ -51,22 +48,18 @@ export default {
return this.tabs?.[this.currIndex] || {}
},
showDetail() {
return !!this.$route.query?.id || !!this.$route.query?.processType
return this.$route.hash == "#add" || !!this.$route.query?.processType
}
},
methods: {
goPage(params) {
this.row = params.row
this.currentComp = params.comp
this.$router.push({query: {processType: this.currentTab.value}})
this.$router.push({query: {id: params.row.id}, hash: "#add"})
},
back () {
back() {
this.$router.push({query: {}})
}
},
created() {
this.$router.push({query: {}});
this.$dict.load("hbDepartment", 'sex', 'nation', 'marital', 'native_place', 'education', 'candidateApproverType', 'scopeCandidates', 'nodeType')
}
}

View File

@@ -9,12 +9,12 @@
</el-steps>
</div>
</template>
<template #content v-if="refresh">
<baseInfo ref="baseInfo" :instance="instance" :dict="dict" v-show="activeStep==0"/>
<template #content v-if="loaded">
<baseInfo ref="baseInfo" :instance="instance" :dict="dict" v-if="activeStep==0"/>
<applyForm ref="applyForm" :instance="instance" :dict="dict" v-show="activeStep==1"/>
<attachmentMaterial ref="attachmentMaterial" :instance="instance" v-show="activeStep==2"/>
<attachmentMaterial ref="attachmentMaterial" :instance="instance" v-if="activeStep==2"/>
<processApproval ref="processApproval" :approvalSteps="applyForm.approvalSteps" :instance="instance"
:dict="dict" v-show="activeStep==3"/>
:dict="dict" v-if="activeStep==3"/>
</template>
<template #footer>
<el-button class="btn" v-if="activeStep==0" @click="handleBack">取消</el-button>
@@ -39,12 +39,10 @@ export default {
props: {
instance: Function,
dict: Object,
row: Object
},
components: {baseInfo, applyForm, attachmentMaterial, processApproval},
data() {
return {
activeStep: 0,
baseInfo: {},
applyForm: {
tableId: "",
@@ -52,7 +50,8 @@ export default {
},
processAnnexDefs: [],
detailObj: {},
refresh: true
activeStep: 0,
loaded: false
}
},
computed: {
@@ -66,7 +65,7 @@ export default {
},
detailTitle() {
return this.detailObj?.id ? "编辑事项" : "添加事项"
}
},
},
methods: {
/**
@@ -103,9 +102,9 @@ export default {
}
},
handleBaseInfo() {
this.$refs['baseInfo'].banseInfoForm().then(res => {
this.$refs.baseInfo.banseInfoForm().then(res => {
if (res) {
this.$refs['applyForm'].getFormList()
this.$refs.applyForm?.getFormList()
this.baseInfo = res
this.activeStep++
}
@@ -115,18 +114,18 @@ export default {
* 保存
*/
save() {
this.$refs['processApproval'].handleProcessApproval().then(res => {
this.$refs.processApproval?.handleProcessApproval().then(res => {
this.instance.post(`/approval-process-def/add-update`, {
...this.detailObj,
...this.baseInfo,
processDefStatus: Number(this.baseInfo.processDefStatus),
tableId: this.applyForm.tableId,
processType: 0,
tableType: 2,
processAnnexDefs: this.annexs.map(e => ({...e, mustFill: Number(e.mustFill)})),
processNodeList: res.processNodeList
processAnnexDefs: this.annexs?.map(e => ({...e, mustFill: Number(e.mustFill)})),
processNodeList: res.processNodeList,
processType: 0
}).then(res => {
if (res.code == 0) {
if (res?.code == 0) {
this.$message.success("保存成功")
this.$emit("back")
}
@@ -139,28 +138,21 @@ export default {
this.instance.post(`/approval-process-def/info-id`, null, {params: {id}}).then(res => {
if (res?.data) {
this.detailObj = res.data
this.refreshDetail()
}
})
}).finally(() => this.loaded = true)
},
getStepIcon(rowIndex) {
if (rowIndex < this.activeStep) return "iconfont iconSteps_Finished"
else if (this.activeStep == rowIndex) return "iconfont iconSteps_In_Progress"
return ""
},
refreshDetail() {
this.refresh = false
this.$nextTick(() => this.refresh = true)
},
handleBack() {
this.detailObj?.id && this.$router.push({query: {}})
this.$emit('back')
}
},
created() {
if (this.row.id) {
this.getDetail(this.row.id)
}
this.getDetail(this.$route.query.id)
}
}
</script>

View File

@@ -17,7 +17,7 @@
<el-form-item :label="[e.fieldName,e.fieldNameSuffix].join('')" v-for="(e,j) in item.value"
:key="Math.random()">
<el-input size="small" v-model="form.checkbox" :disabled="true" clearable placeholder="请输入"
style="width: 100%;" v-if="['0','1','6'].includes(e.fieldDataType)"/>
style="width: 100%;" v-if="['0','1','6','10'].includes(e.fieldDataType)"/>
<el-radio-group style="width: 100%;" v-if="e.fieldDataType==4" disabled>
<el-radio :label="k.dictValue" v-for="(k,m) in dict.getDict(e.dictionaryCode)" :key="Math.random()">
@@ -29,16 +29,7 @@
<el-checkbox :label="p.dictName" v-for="(p,i) in dict.getDict(e.dictionaryCode)"
:key="Math.random()"></el-checkbox>
</el-checkbox-group>
<el-select placeholder="请选择" disabled size="small" clearable style="width: 100%;"
v-if="e.fieldDataType==9" v-model="e.fieldDataValue">
<el-option
v-for="(item,i) in dict.getDict(e.fieldDbName)" :key="i"
:label="item.dictName"
:value="item.dictValue">
</el-option>
</el-select>
<ai-select v-if="e.fieldDataType==9" disabled/>
<el-date-picker
v-model="form.picker"
v-if="['2','3','7','8'].includes(e.fieldDataType)"
@@ -108,7 +99,7 @@ export default {
this.form.approvalSteps = res.data.approvalSteps
res.data.tableFieldInfos.map((item, index) => {
if (item.fieldType == 0) {
if(item.dictionaryCode && dictionaryCodeArr.indexOf(item.dictionaryCode)==-1){
if (item.dictionaryCode && dictionaryCodeArr.indexOf(item.dictionaryCode) == -1) {
dictionaryCodeArr.push(item.dictionaryCode)
}
let {groupIndex, groupName} = item
@@ -121,11 +112,11 @@ export default {
arr[groupIndex].value.push({...item})
}
})
if(dictionaryCodeArr.length){
this.$dict.load(dictionaryCodeArr).then(()=>{
if (dictionaryCodeArr.length) {
this.$dict.load(dictionaryCodeArr).then(() => {
this.tablelist = arr.filter(e => e)
})
}else {
} else {
this.tablelist = arr.filter(e => e)
}
}
@@ -192,7 +183,8 @@ export default {
margin-left: 24px !important;
}
}
::v-deep .el-radio{
::v-deep .el-radio {
margin-bottom: 6px;
}
}

View File

@@ -44,25 +44,8 @@
</el-button>
</div>
</div>
<!-- <ai-wechat-selecter slot="append" :instance="instance" :props="{id:'wxUserId',label:'name'}"
v-model="item.candidateList" v-if="item.candidateApproverType==1">
<el-button size="mini" type="primary">选择指定人员</el-button>
</ai-wechat-selecter> -->
<!-- <ai-user-picker :instance="instance" v-model="item.candidateList" v-if="item.candidateApproverType==1"/> -->
<!-- <ai-people :showAiArea="false" customCliker :instance="instance"
unitUrl="/admin/sysunit/getAll2"
:meta="[]" v-model="item.candidateList"
v-if="item.candidateApproverType==1">
<el-button size="mini" type="primary">选择指定人员</el-button>
</ai-people> -->
<!-- <ai-user-picker :instance="instance" v-model="form.portalUserId"/> -->
<ai-person-select
:chooseUserList="item.candidateList"
v-if="item.candidateApproverType==1"
:instance="instance" customRightText url="/user/page"
headerTitle="人员列表" dialogTitle="选择" :isMultiple="true"
@selectPerson="e => changeCharge(e, index)">
<ai-person-select :chooseUserList="item.candidateList" v-if="item.candidateApproverType==1" :instance="instance" customRightText url="/user/page"
headerTitle="人员列表" dialogTitle="选择" :isMultiple="true" @selectPerson="e => changeCharge(e, index)">
<template v-slot:option="{ item }">
<span class="iconfont iconProlife">{{ item.name }}</span>
<span>{{ item.phone }}</span>
@@ -73,46 +56,40 @@
</el-steps>
</template>
</ai-card>
<el-dialog :title="titleType" class="editStyle" :visible.sync="isAddStep" width="575px" height="380px"
:close-on-click-modal="false">
<el-form :model="nodeObj" label-width="120px" ref="addForm" :rules="addRules">
<el-form-item label="审批步骤名称:" prop="nodeName">
<el-input size="small" v-model="nodeObj.nodeName" placeholder="如部门主管审批限10个字" :maxLength="10"
clearable></el-input>
<ai-dialog :title="titleType" class="editStyle" :visible.sync="isAddStep" width="575px" height="380px"
:close-on-click-modal="false" @onConfirm="saveAddProgress">
<el-form size="small" :model="nodeObj" label-width="100px" ref="addForm" :rules="addRules">
<el-form-item label="审批步骤" prop="nodeName">
<el-input v-model="nodeObj.nodeName" placeholder="如部门主管审批限10个字" :maxLength="10" clearable/>
</el-form-item>
<el-form-item label="审批方式" prop="nodeType">
<el-radio-group v-model="nodeObj.nodeType">
<section style="position: relative;top: 10px;margin-bottom: 30px;">
<el-radio :label="2">或签
<el-popover
placement="top-start"
width="200"
trigger="click"
content="或签是指该节点指定多名负责人审批时,其中任何一人完成审批即可。适合一个事项只需要某个岗位任何一人审批即可的业务场景。">
<el-button class="el-icon-warning" slot="reference"
style="padding:0;height:14px;border:0;"></el-button>
</el-popover>
</el-radio>
<el-radio :label="3">抄送
<el-popover
placement="top-start"
width="200"
trigger="click"
content="抄送是指一个事项审批完成后,抄送给需要知晓的单位或个人,被抄送的对象可以查阅该事项内容,无需审批。适合一个事项无需对方审批,但审批完成后需要通知对方知晓的业务场景。">
<el-button class="el-icon-warning" slot="reference"
style="padding:0;height:14px;border:0;"></el-button>
</el-popover>
</el-radio>
</section>
<el-form-item label="审批方式" prop="nodeType">
<el-radio-group v-model="nodeObj.nodeType" @change="nodeObj.areaFilter='',nodeObj.annexEnable='',nodeObj.pictureEnable=''">
<el-radio v-for="op in approvalWays" :key="op.value" :label="op.value">
<span v-text="op.label"/>
<el-popover placement="top-start" width="200" trigger="click" :content="op.tips">
<el-button type="text" slot="reference" icon="el-icon-warning" class="color-666"/>
</el-popover>
</el-radio>
</el-radio-group>
</el-form-item>
<template v-if="nodeObj.nodeType==2">
<el-form-item label="数据权限" prop="areaFilter">
<el-radio-group v-model="nodeObj.areaFilter">
<el-radio v-for="op in dict.getDict('processNodeAreaFilter')" :key="op.dictValue" :label="op.dictValue">
<span v-text="op.dictName"/>
<el-popover placement="top-start" width="200" trigger="click" :content="dict.getLabel('processNodeAreaFilterTips',op.dictValue)">
<el-button type="text" slot="reference" icon="el-icon-warning" class="color-666"/>
</el-popover>
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="附件图片">
<el-checkbox v-model="nodeObj.annexEnable" true-label="1" false-label="0">附件</el-checkbox>
<el-checkbox v-model="nodeObj.pictureEnable" true-label="1" false-label="0">图片</el-checkbox>
</el-form-item>
</template>
</el-form>
<div slot="footer" style="text-align: center;">
<el-button style="width: 92px;" size="small" @click="isAddStep = false">取消</el-button>
<el-button style="width: 92px;" size="small" type="primary" @click="saveAddProgress('addForm')">确认
</el-button>
</div>
</el-dialog>
</ai-dialog>
</div>
</template>
@@ -132,19 +109,15 @@ export default {
form: {
processNodeList: [],
},
areaId: "",
approvalWays: [
{value: 2, label: '或签', tips: '或签是指该节点指定多名负责人审批时,其中任何一人完成审批即可。适合一个事项只需要某个岗位任何一人审批即可的业务场景。'},
{value: 3, label: '抄送', tips: '抄送是指一个事项审批完成后,抄送给需要知晓的单位或个人,被抄送的对象可以查阅该事项内容,无需审批。适合一个事项无需对方审批,但审批完成后需要通知对方知晓的业务场景。'},
],
isAddStep: false,
isSelectImg: false,
isSelectUnit: false,
isSelectPerson: false,
nodeObj: {
candidateApproverType: '1',
candidateList: [],
nodeIndex: '',
nodeName: '',
nodeType: '',
scopeCandidates: ''
},
nodeObj: {},
indexType: '',
titleType: '',
bomIndex: '',
@@ -157,9 +130,8 @@ export default {
nodeName: [
{required: true, message: '请输入审批节点名称', trigger: 'change'}
],
nodeType: [
{required: true, message: '请选择审批方式', trigger: 'change'}
],
nodeType: [{required: true, message: '请选择审批方式', trigger: 'change'}],
areaFilter: [{required: true, message: '请选择数据权限'}],
candidateApproverType: [
{required: true, message: '请选择选人方式', trigger: 'change'}
],
@@ -174,16 +146,12 @@ export default {
handleProcessApproval() {
return Promise.resolve(this.form)
},
/**
*删除
* */
deleteInfo(index) {
this.$confirm("是否删除").then(() => {
this.form.processNodeList.splice(index, 1)
})
}).catch(() => 0)
},
changeCharge (e, i) {
changeCharge(e, i) {
this.$set(this.form.processNodeList[i], 'candidateList', e.map(v => {
return {
...v,
@@ -193,9 +161,6 @@ export default {
},
/**
* 添加流程
* @param index
* @param item
* @param i
*/
addAppStep(index, item, i) {
this.isAddStep = true;
@@ -205,26 +170,23 @@ export default {
this.titleType = '编辑审批步骤';
item.nodeType = item.nodeType * 1;
item.candidateApproverType = item.candidateApproverType * 1;
item.scopeCandidates = item.scopeCandidates * 1;
this.nodeObj = JSON.parse(JSON.stringify(item));
this.nodeObj = this.$copy(item)
} else {
this.titleType = '添加审批步骤';
if (this.form.processNodeList.length > 0) {
this.init();
}
this.init();
}
},
// 确定添加审批步骤
saveAddProgress(formName) {
this.$refs[formName].validate((valid) => {
saveAddProgress() {
this.$refs.addForm.validate((valid) => {
if (valid) {
if (this.nodeObj.scopeCandidates == 0) this.nodeObj.candidateList = [];
if (this.nodeObj.scopeCandidates == '0') this.nodeObj.candidateList = [];
if (this.indexType == 1) {
this.form.processNodeList.push(JSON.parse(JSON.stringify(this.nodeObj)));
this.form.processNodeList.push(this.$copy(this.nodeObj));
} else {
this.form.processNodeList.splice(this.bomIndex, 1, JSON.parse(JSON.stringify(this.nodeObj)));
this.form.processNodeList.splice(this.bomIndex, 1, this.$copy(this.nodeObj));
}
this.$refs[formName].resetFields();
this.$refs.addForm.resetFields();
this.isAddStep = false;
}
})
@@ -236,15 +198,17 @@ export default {
nodeIndex: '',
nodeName: '',
nodeType: '',
scopeCandidates: ''
scopeCandidates: '1',
annexEnable: null,
pictureEnable: null,
areaFilter: null
};
this.$refs['addForm'].resetFields();
this.$refs.addForm?.resetFields();
},
},
created() {
this.areaId = this.user.info.areaId.substring(0, 6) + '000000'
this.dict.load("processNodeAreaFilter", 'processNodeAreaFilterTips')
if (this.config.detailObj?.id) {
Object.keys(this.form).map(e => this.form[e] = this.config.detailObj[e])
}
}
@@ -426,6 +390,10 @@ export default {
}
}
.color-666 {
color: #666;
}
.dia_per_content {
width: 640px;
height: 400px;
@@ -495,7 +463,7 @@ export default {
.peraoBtn {
.el-button--text {
color: #333;
font-size: 12px;
font-size: 14px;
}
}

View File

@@ -0,0 +1,34 @@
<template>
<section class="AiDialogBtn">
<div @click="dialog=true">
<slot v-if="$scopedSlots.btn" name="btn"/>
<el-button type="text">{{ text }}</el-button>
</div>
<ai-dialog :visible.sync="dialog" :title="dialogTitle" width="1200px" customFooter>
<slot/>
<template #footer>
<el-button @click="dialog=false">关闭</el-button>
</template>
</ai-dialog>
</section>
</template>
<script>
export default {
name: "AiDialogBtn",
props: {
text: {default: "点击弹窗"},
dialogTitle: {default: "展示信息"}
},
data() {
return {
dialog: false
}
}
}
</script>
<style lang="scss" scoped>
.AiDialogBtn {
}
</style>

View File

@@ -1,144 +1,133 @@
<template>
<section class="enterpriseDialog">
<div class="top">
<div class="topPanel">
<div class="top-left" v-html="txtLogo"/>
<div class="top-right">
<div class="top-right__top">
<h2>{{ info.enterpriseName }}</h2>
<!-- <div class="right">
<span>下载报告</span>
</div> -->
<h2 v-text="info.name "/>
<el-button type="primary" icon="iconfont iconDownload" @click="handleDownload(info.id)">下载报告</el-button>
</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="统一社会信用代码:" :value="info.idNumber"></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">
<template v-if="currIndex === 0">
<ai-table :dict="dict" :tableData="info.adminstrativeLicenseList" :col-configs="colConfigs1"
:isShowPagination="false" border tableSize="small" @getList="() => {}"/>
</template>
<ai-table :dict="dict"
v-if="currIndex === 1"
:tableData="info.administrativeSanctionList"
:col-configs="colConfigs2"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}"/>
<ai-table :dict="dict"
v-if="currIndex === 2"
:tableData="info.taxInfoList"
:col-configs="colConfigs3"
:isShowPagination="false"
border
tableSize="small"
@getList="() => {}"/>
<div class="table-item" v-if="currIndex==3">
<h2>失信被执行人信息</h2>
<ai-table :dict="dict" :tableData="info.dishonestPersonList" :col-configs="colConfigs4"
:isShowPagination="false" border tableSize="small" @getList="() => {}"/>
<h2 style="margin-top: 30px;">公共事业欠缴费信息</h2>
<ai-table :dict="dict" :tableData="info.puaInfoList" :col-configs="colConfigs5"
:isShowPagination="false" border tableSize="small" @getList="() => {}"/>
</div>
</div>
</div>
<el-tabs type="border-card" stretch>
<el-tab-pane label="基本信息">
<el-descriptions :column="2" border size="small" :labelStyle="{width:'200px'}">
<el-descriptions-item v-for="des in desConfigs" :key="des.prop" v-bind="des">{{ info[des.prop] }}</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-for="(tab,i) in tabs" :label="tab.label" :key="i" lazy>
<ai-table :dict="dict" :tableData="info[tab.prop]" :col-configs="tab.colConfigs" :isShowPagination="false" border tableSize="small">
<div slot="empty">截止{{ $moment().format('YYYY-MM-DD') }},尚未公开信息</div>
</ai-table>
</el-tab-pane>
</el-tabs>
</section>
</template>
<script>
import {mapState} from "vuex";
export default {
name: "enterpriseDialog",
computed: {
...mapState(['user']),
isFinanceUser() {
return !!this.user.financeUser?.id
},
txtLogo() {
return this.info.enterpriseName?.substring(0, 4)?.replace(/(.{2})(.{2})/, '$1<br/>$2') || ""
return this.info.name?.substring(0, 4)?.replace(/(.{2})(.{2})/, '$1<br/>$2') || ""
}
},
data() {
return {
info: {},
currIndex: 0,
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: '数据更新时间'}
tabs: [
{
label: "行政许可", prop: "administrativeLicensingList", colConfigs: [
{prop: 'input04', label: '许可证编号'},
{prop: 'date05', label: '发证时间'},
{prop: 'input00', label: '许可机关'},
{prop: 'textarea03', label: '许可内容'},
{prop: 'create_time', label: '数据更新时间'},
]
},
{
label: "行政处罚", prop: "administrativeSanctionList", colConfigs: [
{prop: "textarea04", label: "违法事项"},
{prop: "input00", label: "处罚机关"},
{prop: "date03", label: "处罚时间"},
{prop: "create_time", label: "数据更新时间"},
]
},
{
label: "失信信息", prop: "discreditList", colConfigs: [
{prop: "input00", label: "姓名/名称"},
{prop: "radio01", label: "类型"},
{prop: "textarea04", label: "失信行为情形"},
{prop: "input03", label: "执行法院"},
{prop: "create_time", label: "数据更新时间"},
]
},
{
label: "缴费信息", prop: "arrearageList", colConfigs: [
{prop: "input00", label: "缴费年月"},
{prop: "radio04", label: "缴费类型"},
{prop: "radio05", label: "缴费情况"},
{prop: "input06", label: "收款单位"},
{prop: "create_time", label: "数据更新时间"},
]
},
],
colConfigs2: [
{prop: 'sanctionCode', width: '190', label: '行政处罚决定文书号'},
{prop: 'sanctionDate', align: 'center', label: '处罚决定日期'},
{prop: 'sanctionType', align: 'center', label: '处罚类型', dict: "administrativeSanctionType"},
{prop: 'sanctionContent', align: 'center', label: '处罚内容'},
{prop: 'sanctionBasis', align: 'center', label: '处罚依据'},
{prop: 'sanctionOrganization', align: 'center', label: '处罚机关'},
{prop: 'createTime', align: 'center', label: '数据更新时间'}
desConfigs: [
{prop: "creditRating", label: "信用评级"},
{prop: "creditRatingScore", label: "信用评分"},
{prop: "creditRatingDesc", label: "评级释义", span: 2},
{prop: "administrativeLicensing", label: "行政许可信息"},
{prop: "administrativeSanction", label: "行政处罚信息"},
{prop: "discredit", label: "失信被执行人"},
{prop: "enterpriseLevel", label: "企业等级"},
{prop: "maritalStatus", label: "是否已婚"},
{prop: "arrearage", label: "欠缴水电燃气费"},
{prop: "enterpriseAuth", label: "企业认证信息", span: 2},
],
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: '履行情况', dict: "dishonestPersonSituation"},
{prop: 'executionCourt', align: 'center', label: '执行法院'},
{prop: 'executionTime', align: 'center', label: '数据更新时间'}
],
colConfigs5: [
{prop: 'arrearsAmount', label: '欠费金额(万元)'},
{prop: 'arrearsType', align: 'center', label: '欠缴类型名称', dict: "arrearsType"},
{prop: 'deadlineForArrearsStatistics', align: 'center', label: '欠缴统计截止日期'},
{prop: 'dishonestySeverity', align: 'center', label: '失信严重程度', dict: "dishonestySeverity"},
{prop: 'validityPeriodOfDishonesty', align: 'center', label: '失信行为有效期'},
{prop: 'sourceOrganization', align: 'center', label: '数据来源机构'},
{prop: 'createTime', align: 'center', label: '数据更新时间'}
]
}
},
created() {
this.dict.load("dishonestPersonSituation", "administrativeSanctionType", "enterpriseType", 'arrearsType', 'dishonestySeverity')
this.getCompanyInfo()
},
methods: {
getCompanyInfo() {
let {enterpriseId: id} = this
this.instance.post(`/appportaluserenterprise/queryCreditEnterpriseDetailById`, null, {
withoutToken: true,
params: {id}
this.instance.post(`/appcreditreport/info`, null, {
params: {id, type: 1}
}).then(res => {
if (res?.data) {
this.info = res.data
}
})
},
handleDownload(id) {
this.$confirm("是否要下载报告?").then(() => {
this.instance.post("/appcreditreport/downloadCreditReport", null, {
params: {id, type: 1}
}).then(res => {
if (res?.data) {
const link = document.createElement('a')
link.style.display = 'none'
link.href = res.data
link.setAttribute('download', this.info.name + '信息报告.pdf')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
})
}).catch(() => 0)
}
},
props: {
@@ -152,21 +141,14 @@ export default {
<style lang="scss" scoped>
.enterpriseDialog {
.table-item {
h2 {
margin-bottom: 16px;
color: #333333;
font-size: 18px;
font-weight: 600;
}
}
.top {
.topPanel {
display: flex;
margin-bottom: 20px;
padding: 34px 30px 16px;
border: 1px solid #EEEEEE;
border-radius: 4px;
background: #fff;
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
.top-left {
margin-right: 31px;
@@ -220,47 +202,21 @@ export default {
}
}
.bottom {
padding-bottom: 20px;
border: 1px solid #DCDFE6;
border-radius: 4px;
::v-deep.el-tabs {
.el-tabs__header {
padding: unset;
.tab {
display: flex;
align-items: center;
height: 60px;
margin-bottom: 15px;
background: #FAFAFA;
border-radius: 4px;
.el-tabs__item {
background: #f3f6f9;
border-bottom-color: #ddd;
margin-left: 0;
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;
&.is-active {
background: #fff;
color: #1890FF;
border-bottom-color: transparent;
}
}
}
.table {
padding: 0 16px;
}
}
}
</style>

View File

@@ -1,129 +1,150 @@
<template>
<section class="personCreditReport">
<el-link v-if="hasIdNumber" type="primary" @click.stop="handleShow">个人产权</el-link>
<el-dialog :visible.sync="dialog" title="个人产权信息" width="1200px" customFooter>
<div class="top">
<div class="top-left">
<el-image v-if="info.avatar"/>
<div v-else v-html="txtLogo"/>
</div>
<div class="top-right">
<div class="top-right__top">
<h2 v-text="person.name"/>
</div>
<div class="top-right__bottom">
<ai-wrapper
label-width="130px">
<ai-info-item label="手机号码:" :value="person.phone"/>
<ai-info-item label="身份证号:" :value="person.idNumber"/>
</ai-wrapper>
</div>
</div>
<div class="topPanel">
<div class="top-left">
<el-image v-if="info.avatar"/>
<div v-else v-html="txtLogo"/>
</div>
<el-tabs type="border-card" stretch>
<el-tab-pane label="企业信息">
<ai-table :dict="dict" :tableData="info.enterpriseList" :col-configs="colConfigs1"
:isShowPagination="false" border tableSize="small"/>
</el-tab-pane>
<el-tab-pane label="宅基地信息" lazy>
<ai-table :dict="dict" :tableData="info.homesteadInfoList" :col-configs="colConfigs2"
:isShowPagination="false" border tableSize="small"/>
</el-tab-pane>
<el-tab-pane label="集体经济组织股权" lazy>
<ai-table :dict="dict" :tableData="info.shareholderList" :col-configs="colConfigs3"
:isShowPagination="false" border tableSize="small"/>
</el-tab-pane>
<el-tab-pane label="土地流转经营" lazy>
<ai-table :dict="dict" :tableData="info.landCirculateInfoList" :col-configs="colConfigs4"
:isShowPagination="false" border tableSize="small"/>
</el-tab-pane>
</el-tabs>
<template #footer>
<el-button @click.stop="dialog=false">关闭</el-button>
</template>
</el-dialog>
<ai-wrapper class="fill" label-width="130px">
<ai-info-item label="姓名:" :value="info.name"/>
<ai-info-item label="手机号码:" :value="info.phone"/>
<ai-info-item label="性别:" :value="info.sex"/>
<ai-info-item label="身份证号:" :value="info.idNumber"/>
<ai-info-item label="年龄:" :value="info.age"/>
<ai-info-item label="本地户籍:" :value="info.localRegistered"/>
<ai-info-item label="结婚状态:" :value="info.maritalStatus"/>
<ai-info-item label="所在地区:" :value="info.areaName" isLine/>
</ai-wrapper>
<el-button type="primary" icon="iconfont iconDownload" @click="handleDownload(info.id)">下载报告</el-button>
</div>
<el-tabs type="border-card" stretch>
<el-tab-pane label="基本信息">
<el-descriptions :column="2" border size="small" :labelStyle="{width:'200px'}">
<el-descriptions-item v-for="des in desConfigs" :key="des.prop" v-bind="des">{{ info[des.prop] }}</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-for="(tab,i) in tabs" :label="tab.label" :key="i" lazy>
<ai-table :dict="dict" :tableData="info[tab.prop]" :col-configs="tab.colConfigs" :isShowPagination="false" border tableSize="small">
<el-table-column slot="detail" label="操作" align="center" width="100px">
<template slot-scope="{row}">
<el-button type="text" @click="$router.push({hash:'#company',query:{id:row.id}})">详情</el-button>
</template>
</el-table-column>
<div slot="empty">截止{{ $moment().format('YYYY-MM-DD') }},尚未公开信息</div>
</ai-table>
</el-tab-pane>
</el-tabs>
</section>
</template>
<script>
import {mapState} from "vuex";
export default {
name: "personCreditReport",
computed: {
...mapState(['user']),
isFinanceUser() {
return !!this.user.financeUser?.id
},
txtLogo() {
return this.person.name?.substring(0, 1) || ""
return this.info.name?.substring(0, 1) || ""
},
hasIdNumber() {
return !!this.person.idNumber
return !!this.info.idNumber
}
},
data() {
return {
dialog: false,
info: {},
currIndex: 0,
colConfigs1: [
{prop: 'enterpriseName', label: '企业名称'},
{prop: 'enterpriseType', label: '企业类型', dict: "enterpriseType", align: 'center'},
{prop: 'areaName', label: '所属区域', align: 'center'},
{prop: 'businessScope', label: '经营范围', align: 'center'},
{prop: 'operationPeriod', label: '营业期限', align: 'center'},
],
colConfigs2: [
{prop: 'usePerson', label: '使用人'},
{prop: 'houseNumber', label: '家庭人口', align: 'center'},
{prop: 'areaName', label: '所在地区', align: 'center'},
{prop: 'landArea', label: '土地面积/㎡', align: 'center'},
{prop: 'landOwnership', label: '土地所有权', align: 'center'},
],
colConfigs3: [
{prop: 'organizationName', label: '集体经济组织名称'},
{prop: 'areaName', align: 'center', label: '所在地区'},
{prop: 'name', align: 'center', label: '持股人'},
{prop: 'shareholdingNumber', align: 'center', label: '股权总数'},
{prop: 'shareholdingAmount', align: 'center', label: '股金总额'}
],
colConfigs4: [
{prop: 'landOutflowName', label: '土地流出方'},
{prop: 'landArea', align: 'center', label: '土地面积/㎡'},
{prop: 'landUndertakeName', align: 'center', label: '土地承接方'},
{prop: 'circulateType', align: 'center', label: '流转形式', dict: "landCirculateType"},
{prop: 'startDate', align: 'center', label: '开始日期'},
tabs: [
{
label: "企业信息", prop: "unitList", colConfigs: [
{prop: 'enterpriseName', label: '企业名称'},
{prop: 'idNumber', label: '统一社会信用代码', align: 'center'},
{prop: 'enterpriseType', label: '企业类型', dict: "enterpriseType", align: 'center'},
{slot: 'detail'}
]
},
{
label: "失信信息", prop: "discreditList", colConfigs: [
{prop: "input00", label: "姓名/名称"},
{prop: "radio01", label: "类型"},
{prop: "textarea04", label: "失信行为情形"},
{prop: "input03", label: "执行法院"},
{prop: "create_time", label: "数据更新时间"},
]
},
{
label: "缴费信息", prop: "arrearageList", colConfigs: [
{prop: "input00", label: "缴费年月"},
{prop: "radio04", label: "缴费类型"},
{prop: "radio05", label: "缴费情况"},
{prop: "input06", label: "收款单位"},
{prop: "create_time", label: "数据更新时间"},
]
},
{
label: "婚姻登记", prop: "marriageList", colConfigs: [
{prop: "input05", label: "登记年度"},
{prop: "input00", label: "姓名"},
{prop: "input01", label: "证件号码"},
{prop: "input02", label: "姓名"},
{prop: "input03", label: "证件号码"},
{prop: "radio04", label: "类别"},
{prop: "create_time", label: "数据更新时间"},
]
},
],
desConfigs: [
{prop: "creditRating", label: "信用评级"},
{prop: "creditRatingScore", label: "信用评分"},
{prop: "creditRatingDesc", label: "评级释义", span: 2},
{prop: "perCapitaIncome", label: "家庭人均收入"},
{prop: "medicalInsurance", label: "全员参加医保"},
{prop: "ridOfPoverty", label: "脱贫户"},
{prop: "discredit", label: "失信被执行人"},
{prop: "arrearage", label: "欠缴水电燃气费"},
{prop: "administrativeSanction", label: "行政处罚信息"},
{prop: "sourceOfIncome", label: "家庭收入来源", span: 2},
{prop: "familyDevelopmentStatus", label: "家庭发展现状", span: 2},
]
}
},
created() {
this.dict.load("enterpriseType", "landCirculateType")
this.getPCR()
},
methods: {
getPCR() {
let {idNumber, createUserId: id} = this.person
return this.instance.post(`/appportaluser/queryPersonPropertyRight`, null, {
params: {idNumber, id}
let {personId: id} = this
return this.instance.post(`/appcreditreport/info`, null, {
params: {id, type: 0}
}).then(res => {
if (res?.data) {
let {avatar} = res.data
if (avatar) {
avatar = JSON.parse(avatar)?.[0]
}
return this.info = {...res.data, avatar}
this.info = res.data
}
})
},
handleShow() {
this.getPCR().then(() => this.dialog = true).catch(() => this.dialog = true)
handleDownload(id) {
this.$confirm("是否要下载报告?").then(() => {
this.instance.post("/appcreditreport/downloadCreditReport", null, {
params: {id, type: 0}
}).then(res => {
if (res?.data) {
const link = document.createElement('a')
link.style.display = 'none'
link.href = res.data
link.setAttribute('download', this.info.name + '信息报告.pdf')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
})
}).catch(() => 0)
}
},
props: {
instance: Function,
dict: Object,
permissions: Function,
person: {required: true, default: () => ({})}
personId: {required: true, default: ""}
}
}
</script>
@@ -141,12 +162,14 @@ export default {
}
}
.top {
.topPanel {
display: flex;
margin-bottom: 20px;
padding: 34px 30px 16px;
border: 1px solid #EEEEEE;
border-radius: 4px;
background: #fff;
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);
.top-left {
margin-right: 16px;
@@ -159,44 +182,6 @@ export default {
height: fit-content;
}
.top-right {
flex: 1;
.top-right__top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
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;
}
}
}
::v-deep.el-tabs {