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

@@ -83,7 +83,7 @@
{ prop: 'phone', label: '网格员联系方式', align: 'center' },
{ prop: 'povertyNumber', label: '监测家庭数量', align: 'center' },
{ prop: 'logNumber', label: '开展走访次数', align: 'center' },
{ prop: 'povertyHouseholdNumber', label: '已走访家庭数量', align: 'center' },
// { prop: 'povertyHouseholdNumber', label: '已走访家庭数量', align: 'center' },
{ prop: 'finishRate', label: '走访进度', align: 'center', formart: v => (v * 100).toFixed(1) + '%' }
]
}

View File

@@ -21,6 +21,14 @@
<span>解除风险户数</span>
<h2 style="color: red">{{ totalInfo['解除风险户数'] }}</h2>
</div>
<div class="statistics-top__item">
<span>脱贫户户数</span>
<h2 style="color: pink">{{ totalInfo['脱贫户户数'] }}</h2>
</div>
<div class="statistics-top__item">
<span>脱贫户人口总数</span>
<h2>{{ totalInfo['脱贫人口总数'] }}</h2>
</div>
</div>
<div class="info">
<ai-card title="饮用水和三保障情况">
@@ -41,14 +49,17 @@
</template>
<template #content>
<div class="progress-wrapper">
<div class="progress">
<!-- -->
<div class="progress" v-if="logList.length">
<div class="item" v-for="(item, index) in logList" :key="index">
<h2>{{ item.createUserName }}</h2>
<el-progress :percentage="item.finishRate"></el-progress>
</div>
</div>
<AiEmpty v-else></AiEmpty>
</div>
</template>
</ai-card>
</div>
<ai-card title="帮扶走访情况">
@@ -283,6 +294,10 @@
<style lang="scss" scoped>
.AppAssessment {
::v-deep .ai-empty {
margin-bottom: 0;
font-size: 12px;
}
.info {
display: flex;
justify-content: space-between;

View File

@@ -1,281 +0,0 @@
<template>
<ai-detail class="form-add" :class="[currIndex === 1 ? 'form-add__active' : '']">
<ai-title title="表单配置" slot="title" isShowBottomBorder isShowBack @onBackClick="cancel(false)"></ai-title>
<template #content>
<div class="ai-step">
<div class="ai-step__item"
:class="[currIndex >= index ? 'ai-step__item--active' : '']"
v-for="(item, index) in statusList"
:key="index">
<div class="ai-step__item--icon" v-if="currIndex <= index">
<i v-if="currIndex === index"></i>
</div>
<div class="el-icon-success" v-if="currIndex > index">
</div>
<span>{{ item }}</span>
</div>
</div>
<basic-info ref="basicInfo" v-model="basicInfo" v-show="currIndex === 0" :dict="dict" :instance="instance"></basic-info>
<form-layout :appType="basicInfo.appType" :currIndex="currIndex" class="form-config__wrapper" v-model="tableInfos" ref="form" v-show="currIndex === 1" :dict="dict" :instance="instance"></form-layout>
<form-config
ref="config"
:showListFields="showListFields"
:btns="btns"
:fuzzyQueryFields="fuzzyQueryFields"
:tableInfos="tableInfos"
:orderFields="orderFields"
v-if="currIndex === 2">
</form-config>
</template>
<template #footer>
<el-button @click="cancel">取消</el-button>
<el-button @click="back" v-if="currIndex > 0">上一步</el-button>
<el-button @click="next" type="primary">{{ currIndex === 2 ? '完成' : '下一步' }}</el-button>
</template>
</ai-detail>
</template>
<script>
import BasicInfo from './BasicInfo.vue'
import FormLayout from './FormLayout.vue'
import FormConfig from './FormConfig.vue'
export default {
name: 'add',
props: {
instance: Function,
dict: Object,
params: Object,
type: String
},
components: {
FormLayout,
BasicInfo,
FormConfig
},
data () {
return {
currIndex: 0,
basicInfo: {
saasPlatformId: '',
menuLeve1Style: '',
saasPlatformName: '',
menuLevel1Name: '',
menuLevel3Name: '',
menuLevel2Name: '',
appType: ''
},
orderFields: [],
showListFields: [],
fuzzyQueryFields: [],
btns: [],
btnKeys: ['insertEnable', 'importEnable', 'exportEnalbe', 'editEnable', 'deleteEnable', 'batchDelEnable'],
configInfo: {
btns: [],
orderType: '0',
fieldName: ''
},
info: {},
tableInfos: [],
statusList: ['基础设置', '表单设计', '列表设计']
}
},
mounted () {
if (this.params.id) {
this.getInfo()
}
},
methods: {
cancel (isRefresh) {
this.$emit('change', {
type: 'list',
isRefresh: isRefresh ? true : false,
isQuote: this.params.isQuote ? true : false
})
},
confirm () {
},
back () {
this.currIndex = this.currIndex - 1
},
confirmBasicInfo () {
return this.$refs.basicInfo.validate()
},
getInfo () {
this.instance.post(`/app/appapplicationinfo/queryDetailById?id=${this.params.id}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.basicInfo = {
saasPlatformId: res.data.saasPlatformId,
menuLeve1Style: res.data.menuLeve1Style,
saasPlatformName: res.data.saasPlatformName,
menuLevel1Name: res.data.menuLevel1Name,
menuLevel3Name: res.data.menuLevel3Name,
menuLevel2Name: res.data.menuLevel2Name,
appType: res.data.appType,
corpId: res.data.corpId,
corpName: res.data.corpName
}
this.fuzzyQueryFields = res.data.fuzzyQueryFields
this.tableInfos = res.data.tableInfos
this.showListFields = res.data.showListFields
this.orderFields = res.data.orderFields
this.btns = Object.keys(res.data).filter(v => {
return this.btnKeys.indexOf(v) > -1 && res.data[v] === '1'
})
}
})
},
submit (info) {
this.instance.post(`/app/appapplicationinfo/addOrUpdate`, {
...this.info,
...this.basicInfo,
tableInfos: this.tableInfos,
...info.btns,
id: this.params.id,
applicationName: this.basicInfo.menuLevel3Name || this.basicInfo.menuLevel2Name,
fuzzyQueryFields: info.fuzzyQueryFields,
orderType: info.orderType,
orderFields: info.orderFields,
showListFields: info.showListFields
}).then(res => {
if (res.code === 0) {
this.$message.success(this.params.id ? '编辑成功' : '添加成功')
this.cancel(true)
}
})
},
next () {
if (this.currIndex === 0) {
if (!this.$refs.basicInfo.validate()) return
}
if (this.currIndex === 1) {
this.$refs.form.onConfirm()
}
if (this.currIndex === 2) {
const info = this.$refs.config.validate()
if (!info) return
this.submit(info)
return false
}
this.currIndex = this.currIndex + 1
}
}
}
</script>
<style lang="scss" scoped>
.form-add {
&.form-add__active {
::v-deep .ai-detail__content--wrapper {
max-width: 100%!important;
height: 100%!important;
background: #F5F6F9;
}
.form-config__wrapper {
height: calc(100% - 52px);
overflow-y: hidden;
}
::v-deep .ai-detail__content {
height: calc(100% - 114px)!important;
padding: 0!important;
overflow: hidden!important;
}
}
.ai-step {
display: flex;
align-items: center;
justify-content: center;
margin-top: 4px;
margin-bottom: 24px;
.ai-step__item {
display: flex;
position: relative;
align-items: center;
margin-right: 216px;
&.ai-step__item--active {
span {
color: #2266FF;
}
.ai-step__item--icon {
display: flex;
align-items: center;
justify-content: center;
border-color: #2266FF;
i {
width: 12px;
height: 12px;
border-radius: 50%;
background: #2266FF;
}
}
}
&:after {
position: absolute;
top: 50%;
right: -208px;
width: 200px;
height: 2px;
background: #D0D4DC;
content: ' ';
transform: translateY(-50%);
}
&:last-child {
margin-right: 0;
&::after {
display: none;
}
}
.ai-step__item--icon {
width: 24px;
height: 24px;
margin-right: 8px;
border-radius: 50%;
background: #FFFFFF;
border: 2px solid #D0D4DC;
}
.el-icon-success {
width: 24px;
height: 24px;
font-size: 24px;
margin-right: 8px;
color: #2266FF;
border-radius: 50%;
}
span {
color: #666666;
font-size: 14px;
}
}
}
}
</style>

View File

@@ -1,151 +0,0 @@
<template>
<div class="basicInfo">
<el-form ref="form" :model="form" label-width="110px" label-position="right">
<ai-card title="基本信息">
<template #content>
<div class="ai-form">
<el-form-item label="所属平台" prop="saasPlatformId" style="width: 100%;" :rules="[{ required: true, message: '请选择所属平台', trigger: 'change' }]">
<el-select
size="small"
style="width: 100%;"
placeholder="请选择所属平台"
clearable
@change="onChange"
v-model="form.saasPlatformId">
<el-option
v-for="(item, index) in sassList"
:key="index"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.saasPlatformId" style="width: 100%;" label="所属企业" prop="corpId" :rules="[{ required: true, message: '请选择所属企业', trigger: 'change' }]">
<ai-select
v-model="form.corpId"
placeholder="请选择所属企业"
clearable
@change="onCompanyChange"
:selectList="companyList">
</ai-select>
</el-form-item>
<el-form-item style="width: 100%;" label="一级菜单名称" prop="menuLevel1Name" :rules="[{ required: true, message: '请输入一级菜单名称', trigger: 'change' }]">
<el-input size="small" placeholder="请输入一级菜单名称" :maxlength="8" v-model="form.menuLevel1Name"></el-input>
</el-form-item>
<el-form-item style="width: 100%;" label="二级菜单名称" prop="menuLevel2Name" :rules="[{ required: true, message: '请输入二级菜单名称', trigger: 'change' }]">
<el-input size="small" placeholder="请输入二级菜单名称" :maxlength="8" v-model="form.menuLevel2Name"></el-input>
</el-form-item>
<el-form-item style="width: 100%;" label="三级菜单名称" prop="menuLevel3Name">
<el-input size="small" placeholder="请输入三级菜单名称" :maxlength="8" v-model="form.menuLevel3Name"></el-input>
</el-form-item>
<el-form-item style="width: 100%;" label="应用类型" prop="appType">
<ai-select
v-model="form.appType"
placeholder="请选择应用类型"
clearable
:selectList="dict.getDict('diyAppType')">
</ai-select>
</el-form-item>
</div>
</template>
</ai-card>
</el-form>
</div>
</template>
<script>
export default {
name: 'basicInfo',
model: {
prop: 'value',
event: 'change',
},
props: {
instance: Function,
dict: Object,
value: Object
},
data () {
return {
form: {
saasPlatformId: '',
menuLeve1Style: '',
saasPlatformName: '',
menuLevel1Name: '',
menuLevel2Name: '',
menuLevel3Name: '',
appType: '',
corpId: '',
corpName: ''
},
companyList: [],
sassList: []
}
},
watch: {
value (v) {
this.form = JSON.parse(JSON.stringify(v))
if (this.form.saasPlatformId) {
this.getCompanyList()
}
}
},
created () {
this.dict.load('diyAppType')
},
mounted () {
this.getSassList()
this.form = JSON.parse(JSON.stringify(this.value))
},
methods: {
onChange (e) {
this.form.saasPlatformName = this.sassList.filter(v => v.id === e)[0].name
this.form.saasPlatformId && this.getCompanyList()
},
validate () {
let result = false
this.$refs.form.validate(valid => {
result = valid
})
this.$emit('change', this.form)
return result
},
onCompanyChange (e) {
this.form.corpName = this.companyList.filter(v => v.dictValue === e)[0].dictName
},
getCompanyList () {
this.instance.post(`/app/appCorp/page?current=1&size=1000&saasId=${this.form.saasPlatformId}`).then(res => {
if (res.data.records.length) {
this.companyList = res.data.records.map(v => {
return {
dictValue: v.corpId,
dictName: v.name
}
})
}
})
},
getSassList () {
this.instance.post(`/app/appSaas/listAll`).then(res => {
if (res.data) {
this.sassList = res.data
}
})
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@@ -1,244 +0,0 @@
<template>
<div class="basicInfo">
<ai-card title="搜索字段" class="search-wrapper">
<template #content>
<el-checkbox-group v-model="queryFields">
<el-checkbox
:label="`${item.fieldDbName}~${item.fieldName}`"
v-for="(item, index) in tableInfos"
:key="index">
{{ item.fieldName }}
</el-checkbox>
</el-checkbox-group>
</template>
</ai-card>
<ai-card title="表格字段">
<template #content>
<div class="ai-table">
<div class="el-table el-table--border ai-header__border">
<el-scrollbar>
<table cellspacing="0" cellpadding="0" border="0" class="el-table__body">
<draggable element="thead" animation="500" class="el-table__header is-leaf ai-table__header" :sort="true" v-model="showFields">
<th v-for="(item, index) in showFields" style="background: #f3f4f5; text-align: center;" class="ai-table__header" :key="index">{{ item.fieldName }}</th>
</draggable>
<tbody element="tbody">
<tr>
<td @click="handleShow(index, item.isShow)" v-for="(item, index) in showFields" :key="index">{{ item.isShow ? '已显示' : '已隐藏' }}</td>
</tr>
</tbody>
</table>
</el-scrollbar>
</div>
</div>
</template>
</ai-card>
<ai-card title="排序和操作按钮">
<template #content>
<el-form ref="form" class="ai-form" :model="form" label-width="110px" label-position="right">
<el-form-item label="排序字段" prop="field">
<el-select
size="small"
placeholder="默认按创建时间排序"
clearable
v-model="form.field">
<el-option
v-for="(filed, index) in tableInfos"
:key="index"
:label="filed.fieldName"
:value="`${filed.fieldDbName}~${filed.fieldName}`">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="排序类型" prop="orderType" :rules="[{ required: true, message: '请输入排序类型', trigger: 'change' }]">
<el-radio-group v-model="form.orderType">
<el-radio label="asc">升序</el-radio>
<el-radio label="desc">降序</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="按钮配置" prop="btns" style="width: 100%;" :rules="[{ required: true, message: '请输入按钮配置', trigger: 'change' }]">
<el-checkbox-group v-model="form.btns">
<el-checkbox label="insertEnable">添加</el-checkbox>
<el-checkbox label="importEnable">导入</el-checkbox>
<el-checkbox label="exportEnalbe">导出</el-checkbox>
<el-checkbox label="editEnable">编辑</el-checkbox>
<el-checkbox label="deleteEnable">删除</el-checkbox>
<el-checkbox label="batchDelEnable">批量删除</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
</template>
</ai-card>
</div>
</template>
<script>
import draggable from 'vuedraggable'
export default {
name: 'configForm',
props: {
tableInfos: Array,
btns: Array,
showListFields: Array,
orderFields: Array,
fuzzyQueryFields: Array
},
components: {
draggable
},
data () {
return {
queryFields: [],
tableData: [{}],
btnKeys: ['insertEnable', 'importEnable', 'exportEnalbe', 'editEnable', 'deleteEnable', 'batchDelEnable'],
form: {
btns: [],
orderType: 'asc',
field: ''
},
showFields: []
}
},
mounted () {
const showIds = this.showListFields.map(v => v.fieldDbName)
this.showFields = JSON.parse(JSON.stringify(this.tableInfos)).map(item => {
item.isShow = showIds.indexOf(item.fieldDbName) > -1 ? true : false
return item
})
if (!this.showListFields.length) {
this.showFields.map(v => {
v.isShow = true
return v
})
}
this.tableInfos.map(item => {
this.tableData[0][item.fieldDbName] = '删除'
})
if (this.btns.length) {
this.form.btns = this.btns
}
const tableInfosIds = this.tableInfos.map(v => v.fieldDbName)
if (this.orderFields.length) {
let arr = this.orderFields.filter(v => {
return tableInfosIds.indexOf(v.fieldDbName) > -1
}).map(item => {
return `${item.fieldDbName}~${item.fieldName}`
})
if (arr.length) {
this.form.field = arr[0]
}
}
if (this.fuzzyQueryFields.length) {
this.queryFields = this.fuzzyQueryFields.filter(v => {
return tableInfosIds.indexOf(v.fieldDbName) > -1
}).map(item => {
return `${item.fieldDbName}~${item.fieldName}`
})
}
},
methods: {
validate () {
let result = false
this.$refs.form.validate(valid => {
result = valid
})
if (!result) {
return false
}
const btns = {}
this.btnKeys.forEach(item => {
btns[item] = this.form.btns.indexOf(item) > -1 ? 1 : 0
})
return {
btns,
orderFields: [{
fieldName: this.form.field.split('~')[1],
fieldDbName: this.form.field.split('~')[0],
orderType: this.form.orderType
}],
showListFields: this.showFields.filter(v => v.isShow).map((v, index) => {
return {
fieldName: v.fieldName,
fieldDbName: v.fieldDbName,
showListIndex: index
}
}),
fuzzyQueryFields: this.queryFields.map(v => {
return {
fieldName: v.split('~')[1],
fieldDbName: v.split('~')[0]
}
})
}
},
handleShow (index, isShow) {
const total = this.showFields.map(v => v.isShow).filter(v => !!v)
if (total.length <= 1 && isShow) {
return this.$message.error('表格列数不能小于1')
}
this.$set(this.showFields[index], 'isShow', !isShow)
}
}
}
</script>
<style scoped lang="scss">
.basicInfo {
.search-wrapper {
::v-deep .el-checkbox-group {
display: flex;
flex-wrap: wrap;
.el-checkbox {
width: 16.66%;
margin-bottom: 10px;
}
}
}
}
.ai-table {
.el-table--border {
border: 1px solid #d0d4dc;
border-bottom: none;
border-right: none;
}
table {
min-width: 100%;
}
th, tr {
min-width: 100px;
cursor: move;
}
tr {
td {
cursor: pointer;
color: #26f;
text-align: center;
user-select: none;
&:hover {
opacity: 0.7;
}
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,182 +0,0 @@
<template>
<ai-list class="appform">
<template slot="title">
<ai-title title="表单配置" isShowBottomBorder></ai-title>
</template>
<template slot="content">
<ai-search-bar class="search-bar">
<template #left>
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="toAdd('')">添加</el-button>
</template>
<template slot="right">
<el-input
v-model="search.applicationName"
size="small"
v-throttle="() => {search.current = 1, getList()}"
placeholder="请输入菜单名称"
clearable
@clear="search.current = 1, search.applicationName = '', getList()"
suffix-icon="iconfont iconSearch">
</el-input>
</template>
</ai-search-bar>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
v-loading="loading"
style="margin-top: 6px;"
:current.sync="search.current"
:size.sync="search.size"
@getList="getList">
<el-table-column slot="options" width="180px" fixed="right" label="操作" align="center">
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="push(row.id)" v-if="row.pushStatus === '0'">推送</el-button>
<el-button type="text" @click="operate(row.id, row.status)">{{ row.status === '1' ? '停用' : '启用' }}</el-button>
<el-button type="text" @click="toAdd(row.id)">编辑</el-button>
<el-button type="text" @click="remove(row.id)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'List',
props: {
instance: Function,
dict: Object
},
data() {
return {
search: {
current: 1,
size: 10,
applicationName: ''
},
loading: false,
total: 10,
colConfigs: [
{ prop: 'saasPlatformName', label: '所属平台' },
{ prop: 'menuLevel1Name', label: '一级菜单名称'},
{ prop: 'menuLevel2Name', label: '二级菜单名称'},
{ prop: 'menuLevel3Name', label: '三级菜单名称'},
{ prop: 'createUserName', label: '编辑人' },
{ prop: 'createTime', label: '编辑时间' },
{
prop: 'status',
label: '状态',
align: 'center',
render (h, {row}) {
return h('span',{
style: {
color: row.status === '1' ? '#2EA222' : '#F46'
}
}, row.status === '1' ? '启用' : '停用')
}
},
{
prop: 'pushStatus',
label: '推送状态',
align: 'center',
render (h, {row}) {
return h('span',{
style: {
color: row.pushStatus === '1' ? '#2EA222' : '#F46'
}
}, row.pushStatus === '1' ? '成功' : '失败')
}
}
],
tableData: [],
ids: ''
}
},
computed: {
...mapState(['user'])
},
mounted() {
this.getList()
},
methods: {
getList () {
this.loading = true
this.instance.post(`/app/appapplicationinfo/list`, null, {
params: {
...this.search
}
}).then(res => {
if (res.code == 0) {
this.tableData = res.data.records
this.total = res.data.total
this.$nextTick(() => {
this.loading = false
})
} else {
this.loading = false
}
}).catch(() => {
this.loading = false
})
},
removeAll () {
if (!this.ids) return
this.remove(this.ids)
},
push (id) {
this.instance.post(`/app/appapplicationinfo/push?id=${id}`).then(res => {
if (res.code == 0) {
this.$message.success(`推送成功`)
this.getList()
}
})
},
operate (id, status) {
this.instance.post(`/app/appapplicationinfo/enable?id=${id}`).then(res => {
if (res.code == 0) {
this.$message.success(`${status === '1' ? '停用成功' : '启用成功'}`)
this.getList()
}
})
},
remove (id) {
this.$confirm('确定删除该数据?').then(() => {
this.instance.post(`/app/appapplicationinfo/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success('删除成功!')
this.getList()
}
})
})
},
toAdd(id) {
this.$emit('change', {
type: 'Add',
params: {
id: id || ''
}
})
}
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@@ -1,272 +0,0 @@
export const components = [
{
type: 'info',
tips: '(不能重复添加同一元素)',
label: '信息',
children: [
{
type: 'name',
fieldName: '姓名',
fieldTips: '请输入姓名',
fixedLabel: '姓名',
disable: '0',
grid: 0.5,
defaultValue: '',
icon: 'icontext_box',
mustFill: '1',
maxLength: 20
},
{
type: 'idNumber',
fieldName: '身份证号',
fixedLabel: '身份证号',
fieldTips: '请输入身份证号',
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxLength: 20,
disable: '0',
grid: 0.5
},
{
type: 'phone',
fieldName: '联系方式',
fixedLabel: '联系方式',
fieldTips: '请输入联系方式',
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxLength: 20,
disable: '0',
grid: 0.5
},
{
type: 'area',
fieldName: '地区',
fixedLabel: '地区',
fieldTips: '请选择地区',
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
areaPattern: '',
disable: '0',
grid: 0.5
}
]
},
{
type: 'options',
tips: '(可重复添加)',
label: '选项',
children: [
{
type: 'radio',
fieldName: '单选',
fixedLabel: '单选',
fieldTips: '请选择',
grid: 0.5,
icon: 'iconradio',
mustFill: '1',
disable: '0',
defaultValue: '',
options: [
{
label: '选项1',
value: ''
},
{
label: '选项2',
value: ''
}
],
title: ''
},
{
type: 'checkbox',
fieldName: '多选',
fixedLabel: '多选',
fieldTips: '请选择',
icon: 'iconcheck_box',
mustFill: '1',
grid: 0.5,
disable: '0',
defaultValue: [],
options: [
{
label: '选项1',
value: ''
},
{
label: '选项2',
value: ''
}
],
title: ''
},
{
type: 'select',
fieldName: '单下拉框',
fixedLabel: '单下拉框',
grid: 0.5,
fieldTips: '请选择',
icon: 'iconSelect',
mustFill: '1',
defaultValue: '',
disable: '0',
options: [
{
label: '选项1',
value: ''
},
{
label: '选项2',
value: ''
}
],
title: ''
},
{
type: 'onOff',
fieldName: '开关',
fixedLabel: '开关',
grid: 0.5,
fieldTips: '请选择开关',
icon: 'iconSelect',
mustFill: '1',
defaultValue: '0',
disable: '0',
title: ''
},
{
type: 'date',
fieldName: '日期',
fixedLabel: '日期',
grid: 0.5,
datetimePattern: 'yyyy-MM-dd',
fieldTips: '请选择日期',
icon: 'iconSelect',
mustFill: '1',
disable: '0',
title: ''
},
{
type: 'time',
fieldName: '时间',
fixedLabel: '时间',
grid: 0.5,
datetimePattern: 'HH:mm:ss',
fieldTips: '请选择时间',
icon: 'iconSelect',
mustFill: '1',
disable: '0',
title: ''
},
{
type: 'datetime',
fieldName: '日期时间',
fixedLabel: '日期时间',
grid: 0.5,
datetimePattern: 'yyyy-MM-dd HH:mm:ss',
fieldTips: '请选择日期时间',
icon: 'iconSelect',
mustFill: '1',
disable: '0',
title: ''
}
]
},
{
type: 'input',
tips: '(可重复添加)',
label: '填空',
children: [
{
type: 'input',
fieldName: '单行填空',
fieldTips: '请输入',
fixedLabel: '单行填空',
disable: '0',
grid: 0.5,
defaultValue: '',
icon: 'icontext_box',
mustFill: '1',
maxLength: 50
},
{
type: 'textarea',
fieldName: '多行填空',
fixedLabel: '多行填空',
fieldTips: '请输入',
lineNumber: 4,
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxLength: 500,
disable: '0',
grid: 1
},
{
type: 'number',
fieldName: '数字输入',
fixedLabel: '数字输入',
fieldTips: '请输入数字',
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxValue: 10000,
decimalPlaces: 0,
minValue: 0,
maxLength: 500,
disable: '0',
grid: 0.5
},
{
type: 'rtf',
fieldName: '富文本',
fixedLabel: '富文本',
fieldTips: '请输入',
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxLength: 5000,
disable: '0',
grid: 1
}
]
},
{
type: 'annex',
tips: '(可重复添加)',
label: '附件',
children: [
{
type: 'upload',
fieldTips: '请上传',
fieldName: '上传附件',
fixedLabel: '上传附件',
disable: '0',
fileChoseSize: 10,
fileMaxCount: 9,
defaultValue: '',
icon: 'iconpic',
mustFill: '1',
grid: 1
}
]
},
{
type: 'layout',
tips: '(可重复添加)',
label: '分组',
children: [
{
type: 'group',
fieldName: '卡片',
fixedLabel: '卡片',
icon: 'iconpic',
groupName: '分组标题',
column: []
}
]
}
];

View File

@@ -1,44 +1,40 @@
<template>
<div class="doc-circulation">
<div class="AppHelpDeclaration">
<keep-alive :include="['List']">
<component ref="component" :is="component" @change="onChange" :params="params" :instance="instance" :dict="dict"></component>
</keep-alive>
</div>
</template>
<script>
import Detail from './components/Detail'
import List from './components/List'
import Add from './components/Add'
export default {
name: 'AppForm',
label: '配置表单',
name: "AppHelpDeclaration",
label: '帮扶申报',
components: {List, Detail},
props: {
instance: Function,
dict: Object
dict: Object,
permissions: Function
},
data () {
data() {
return {
component: 'List',
params: {},
include: []
}
},
components: {
Add,
List
created(){
},
mounted () {
},
methods: {
methods:{
onChange (data) {
if (data.type === 'Add') {
this.component = 'Add'
if (data.type === 'detail') {
this.component = 'Detail'
this.params = data.params
}
@@ -57,10 +53,9 @@
}
</script>
<style lang="scss">
.doc-circulation {
height: 100%;
background: #F3F6F9;
overflow: auto;
}
<style lang="scss" scoped>
.AppHelpDeclaration{
width: 100%;
height: 100%;
}
</style>

View File

@@ -0,0 +1,314 @@
<template>
<section class="detail">
<ai-detail>
<template #title>
<ai-title title="帮扶申请详情" isShowBottomBorder isShowBack @onBackClick="cancel(true)">
<template #rightBtn>
<el-button type="primary" @click="changeStatus('转交事件')" size="small" v-if="$permissions('app_apphelpdeclarationinfo_forward') && form.status != 2 && form.status != 3">转交事件</el-button>
<el-button type="primary" @click="changeStatus('审核处理')" size="small" v-if="$permissions('app_apphelpdeclarationinfo_audit') && form.status != 2 && form.status != 3"> 审核处理</el-button>
</template>
</ai-title>
</template>
<template #content>
<div style="display:flex;">
<ai-card title="申请信息" style="flex:2;margin-right:32px;">
<template slot="content">
<ai-wrapper class="mar-t16" label-width="100px" :columnsNumber="2">
<ai-info-item label="申请人姓名:"><span>{{form.name || '-'}}</span></ai-info-item>
<ai-info-item label="身份证号:"><span>{{form.idNumber || '-'}}</span></ai-info-item>
<ai-info-item label="联系方式:"><span>{{form.phone || '-'}}</span></ai-info-item>
<ai-info-item label="申报方式:"><span>{{$dict.getLabel("helpDeclarationType", form.declareType) || '-'}}</span></ai-info-item>
<ai-info-item label="家庭人口数:"><span>{{form.householdNumber || '-'}}</span></ai-info-item>
<ai-info-item label="排查人员:"><span>{{form.createUserName || '-'}}</span></ai-info-item>
<ai-info-item label="申请帮扶原因:"><span>{{form.reason || '-'}}</span></ai-info-item>
<ai-info-item label="上报时间:"><span>{{form.declareTime || '-'}}</span></ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="100px" :columnsNumber="1">
<ai-info-item label="所在地区:"><span>{{form.areaName}}{{form.address || ''}}</span></ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="100px" :columnsNumber="1">
<ai-info-item label="风险说明:"><span>{{form.riskDescription || '-'}}</span></ai-info-item>
</ai-wrapper>
<ai-uploader :instance="instance" disabled v-model="form.files"></ai-uploader>
</template>
</ai-card>
<ai-card title="办理进度" style="flex:1;">
<template #right>
<p style="color:#666;font-size:14px;">当前状态<span :class="'color'+form.status">{{$dict.getLabel("helpDeclarationStatus", form.status) || '-'}}</span></p>
</template>
<template #content>
<div class="ai-steps">
<div class="ai-steps__item" v-for="(item, index) in form.processList" :key="index">
<div class="ai-steps__item--left">
<div class="ai-steps__item--index">{{index+1}}</div>
</div>
<div class="ai-steps__item--right">
<div class="ai-steps__item__avatar">
<img :src="item.avatar" v-if="item.avatar">
<h2 v-else>{{ formatName(item.doUsername) }}</h2>
</div>
<div class="ai-steps__item--content">
<h2>{{item.doUsername}}</h2>
<h2>{{item.description}}</h2>
<p>{{ item.doTime }}</p>
</div>
</div>
</div>
</div>
</template>
</ai-card>
</div>
<ai-dialog :title="dialogTitle" :visible.sync="showDialog" @onConfirm="statusConfirm()" @onCancel="showDialog=false;" @close="$refs.dialogInfo.resetFields()" width="750px">
<div class="addother_main" style="width:100%;">
<el-form :model="dialogInfo" status-icon ref="dialogInfo" label-width="100px" class="demo-ruleForm">
<el-form-item label="转交" prop="name" style="width: 100%;" autocomplete="off" :rules="[{ required: true, message: '请选择转交人员', trigger: 'blur' }]" v-if="dialogTitle == '转交事件'">
<el-input disabled size="small" v-model="dialogInfo.name" placeholder="请选择转交人员">
<template slot="append">
<ai-wechat-selecter :instance="instance" v-model="addUser" :isMultiple="false" @change="onChange" v-if="dialogTitle == '转交事件'">
<el-button size="small">选择</el-button>
</ai-wechat-selecter>
</template>
</el-input>
</el-form-item>
<el-form-item label="处理结果:" required v-else>
<el-radio-group v-model="dialogInfo.auditStatus">
<el-radio label="1">通过审核</el-radio>
<el-radio label="0">驳回申请</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="办理意见:" prop="description" autocomplete="off" :rules="{ required: true, message: '办理意见不能为空', trigger: 'blur' }">
<el-input v-model="dialogInfo.description" autocomplete="off" size="mini" placeholder="请输入..." type="textarea" :rows="4" :maxlength="100" show-word-limit></el-input>
</el-form-item>
<el-form-item label="图片" style="width: 100%;" >
<ai-uploader
:instance="instance"
v-model="dialogInfo.files"
:limit="9">
<template slot="tips">
<p>最多上传9张图片,单个文件最大10MB支持jpgjpegpng格式</p>
</template>
</ai-uploader>
</el-form-item>
</el-form>
</div>
</ai-dialog>
</template>
</ai-detail>
</section>
</template>
<script>
export default {
name: "detail",
props: {
instance: Function,
dict: Object,
permissions: Function,
params: Object
},
data() {
return {
form: {},
showDialog: false,
dialogTitle: '',
dialogInfo: {auditStatus: '1', description: '', files: [], name: ''},
addUser: [],
};
},
computed: {
},
created() {
this.dict.load('helpDeclarationType', 'helpDeclarationStatus', 'helpDeclarationReason');
},
mounted() {
this.form = this.params
this.getDetail()
},
methods: {
formatName (name) {
if(name == undefined){
return
}
return name.substr(name.length - 2, name.length > 2 ? (name.length - 1) : name.length)
},
getDetail() {
this.instance.post(`/app/apphelpdeclarationinfo/queryDetailById?id=${this.params.id}`).then((res) => {
if (res.code == 0) {
this.form = {...res.data}
this.form.files = this.form.files || []
}
});
},
cancel(isRefresh) {
this.$emit('change', {
type: 'list',
isRefresh: !!isRefresh
})
},
changeStatus(title) {
this.dialogTitle = title
this.showDialog = true
},
onChange() {
if (!this.addUser.length) {
return this.$message.error('请选择转交人员')
}
this.dialogInfo.name = this.addUser[0].name
this.dialogInfo.wxUserId = this.addUser[0].id
},
statusConfirm() {
this.$refs["dialogInfo"].validate((valid) => {
if (valid) {
var url = '/app/apphelpdeclarationinfo/forward' //转交人员
if(this.dialogTitle == '审核处理') {
url = '/app/apphelpdeclarationinfo/audit'
}
this.dialogInfo.declarationId = this.form.id
this.instance.post(url, {
...this.dialogInfo,
}).then(res => {
if (res.code == 0) {
this.showDialog = false
this.$message.success("操作成功")
this.getDetail()
}
});
}
})
}
},
};
</script>
<style lang="scss" scoped>
.detail {
height: 100%;
overflow: auto;
background: #f3f6f9;
.above{
overflow: hidden;
width: 100%;
.left{
width: 50%;
float: left;
}
.right{
width: 50%;
float: right;
}
.el-select{
width: 100%;
}
.el-date-editor.el-input{
width: 100%;
}
}
.iconEdit,.Edit{
color:#5088FF;
font-size: 12px;
cursor: pointer;
padding-left: 8px;
}
.color0 {
color: #f82;
}
.color1 {
color: #26f;
}
.color2 {
color: #f46;
}
.color3 {
color: #2EA222;
}
}
.ai-steps {
padding-bottom: 40px;
.ai-steps__item {
display: flex;
position: relative;
padding-bottom: 44px;
&:after {
position: absolute;
left: 12px;
top: 26px;
width: 1px;
height: calc(100% - 30px);
background: #DDDDDD;
content: " ";
}
&:last-child {
padding-bottom: 0;
&:after {
display: none;
}
}
.ai-steps__item--left {
position: relative;
margin-right: 16px;
.ai-steps__item--index{
width: 24px;
height: 24px;
line-height: 24px;
border-radius: 50%;
border: 1px solid #ddd;
text-align: center;
color: #ddd;
font-size: 12px;
}
}
.ai-steps__item--right {
flex-shrink: 0;
color: #666;
font-size: 14px;
display: flex;
width: calc(100% - 40px);
.ai-steps__item--content {
span {
color: #333;
font-size: 16px;
}
h2 {
color: #666666;
font-size: 14px;
word-break: break-all;
}
p {
margin-top: 8px;
color: #666666;
font-size: 14px;
}
}
.ai-steps__item__avatar {
width: 40px;
height: 40px;
margin-right: 8px;
img, h2 {
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
font-size: 14px;
background: #2266FF;
}
}
}
}
}
</style>

View File

@@ -0,0 +1,240 @@
<template>
<ai-list class="list">
<template slot="title">
<ai-title title="帮扶申报" :instance="instance" isShowBottomBorder isShowArea :disabledLevel="disabledLevel" v-model="areaId" @change="changeArea"></ai-title>
</template>
<template slot="content">
<ai-search-bar>
<template slot="left">
<ai-select
v-model="searchObj.declareReason"
placeholder="申请帮扶原因"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('helpDeclarationReason')"
></ai-select>
<ai-select
v-model="searchObj.declareType"
placeholder="申报方式"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('helpDeclarationType')"
></ai-select>
<ai-select
v-model="searchObj.status"
placeholder="状态"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('helpDeclarationStatus')"
></ai-select>
</template>
<template slot="right">
<el-input placeholder="申请人姓名/联系方式"
v-model="searchObj.name"
size="small"
v-throttle="() => {page.current = 1, getList()}"
clearable
@clear="page.current = 1, searchObj.name = '', getList()"
prefix-icon="iconfont iconSearch"/>
</template>
</ai-search-bar>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="page.total"
ref="aitableex"
:current.sync="page.current"
row-key="id"
default-expand-all
:size.sync="page.size"
@getList="getList"
>
<el-table-column slot="options" label="操作" align="center" width="120">
<template slot-scope="{ row }">
<el-button type="text" @click="goDetail(row)">详情</el-button>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: "list",
props: {
instance: Function,
dict: Object,
permissions: Function,
},
data() {
return {
searchObj: {
declareReason: '',
declareType: null,
status: null,
name: '',
},
page: {
size: 10,
current: 1,
total: 0,
},
tableData: [],
shopList: [],
ids: [],
areaId: '',
disabledLevel: 0,
};
},
computed: {
...mapState(['user']),
colConfigs() {
return [
{
prop: "reason",
label: "申请帮扶原因"
},
{
prop: "riskDescription",
label: "返贫致贫风险说明",
},
{
prop: "areaName",
label: "所在地区",
width: 120,
align: "center",
},
{
prop: "name",
label: "申请人姓名",
width: 120,
align: "center",
},
{
prop: "phone",
label: "联系方式",
width: 120,
align: "center",
},
{
prop: "declareType",
label: "申报方式",
width: 120,
align: "center",
formart: (declareType) =>
this.$dict.getLabel("helpDeclarationType", declareType),
},
{
prop: "declareTime",
label: "申报时间",
width: 120,
align: "center",
},
{
prop: "status",
label: "状态",
width: 120,
align: "center",
render: (h, {row}) => {
return h('span', {style: {color: this.dict.getColor('helpDeclarationStatus', row.status)}}, this.dict.getLabel('helpDeclarationStatus', row.status))
},
},
{slot: "options", label: "操作"},
];
},
},
created() {
this.disabledLevel = this.user.info.areaList.length - 1
this.areaId = this.user.info.areaId
this.dict.load('helpDeclarationType', 'helpDeclarationStatus', 'helpDeclarationReason').then(() => {
this.$nextTick(() => this.getList())
})
},
methods: {
getList() {
this.instance.post(`/app/apphelpdeclarationinfo/list`, null, {
params: {
...this.searchObj,
...this.page,
areaId: this.areaId
},
}).then((res) => {
if (res.code == 0) {
this.tableData = res.data.records;
this.tableData.map((item) => {
if (item.createTime) {
item.createTime = item.createTime.substring(0, 10)
} else {
item.createTime = '-'
}
})
this.page.total = res.data.total;
}
});
},
reset() {
this.page.current = 1
Object.keys(this.searchObj).forEach((e) => {
this.searchObj[e] = "";
});
this.getList();
},
goDetail(row) {
this.$emit('change', {
type: 'detail',
params: {
...row
}
})
},
changeArea() {
this.$nextTick(() => {
this.reset()
})
},
},
};
</script>
<style lang="scss" scoped>
.list {
height: 100%;
overflow: auto;
background: #f3f6f9;
::v-deep .el-range-editor--small.el-input__inner {
width: 258px;
}
::v-deep .dateRange {
.dateLabel {
height: 32px;
border: 1px solid #D0D4DC;
line-height: 32px;
padding: 0 8px;
background: #F5F5F5;
}
.el-input__inner {
border-radius: 0;
transform: translateX(-1px);
}
}
.iconfont {
cursor: pointer;
margin-right: 8px;
}
.iconCorrect {
color: #53b43b;
}
.iconReject {
color: #e75555;
padding: 0 8px;
}
}
</style>

View File

@@ -36,6 +36,9 @@
<!-- <el-form-item label="年龄" prop="age">
<el-input disabled v-model="form.age" placeholder="请输入年龄" type="number"/>
</el-form-item> -->
<el-form-item label="家庭人口数" prop="familyCount">
<el-input v-model="form.familyCount" placeholder="请输入家庭人口数" type="number"/>
</el-form-item>
<el-form-item label="民族">
<ai-select v-model="form.nation" :selectList="dict.getDict('fpNation')"/>
</el-form-item>
@@ -115,9 +118,9 @@
<el-form-item label="住房面积(m²)">
<el-input v-model="form.houseArea" placeholder="请输入" :maxlength="8"/>
</el-form-item>
<el-form-item label="户类型">
<!-- <el-form-item label="户类型">
<ai-select v-model="form.houseType" :selectList="dict.getDict('fpHouseType')"/>
</el-form-item>
</el-form-item> -->
<el-form-item label="与村主干路距离(公里)">
<el-input v-model="form.trunkRoadDistance" placeholder="请输入" :maxlength="8"/>
</el-form-item>
@@ -184,13 +187,18 @@
<ai-card title="家庭风险情况">
<template slot="content">
<div flex class="half wrap">
<el-form-item label="监测对象类型" prop="objectType">
<el-form-item label="类型" prop="houseType">
<!-- <el-radio v-model="form.houseType" label="0">脱贫户</el-radio>
<el-radio v-model="form.houseType" label="1">监测对象</el-radio> -->
<ai-select v-model="form.houseType" :selectList="dict.getDict('fpHouseType')"/>
</el-form-item>
<el-form-item label="监测对象类型" v-if="form.houseType == 1" :prop="form.houseType == 1? 'objectType':''">
<ai-select v-model="form.objectType" :selectList="dict.getDict('fpType')"/>
</el-form-item>
<el-form-item label="是否军烈属">
<ai-select v-model="form.militaryMartyrs" :selectList="dict.getDict('fpYesOrNo')"/>
</el-form-item>
<el-form-item label="风险因素" prop="riskType">
<el-form-item label="风险因素" :prop="form.houseType == 1? 'riskType': ''" v-if="form.houseType == 1">
<ai-select v-model="form.riskType" :selectList="dict.getDict('fpRiskType')"/>
</el-form-item>
<el-form-item label="脱贫年度">
@@ -311,7 +319,7 @@
</template>
<template #footer>
<el-button @click="back">取消</el-button>
<el-button type="primary" @click="submit">提交</el-button>
<el-button type="primary" @click="$debounce(submit)">提交</el-button>
</template>
</ai-detail>
</section>
@@ -341,6 +349,7 @@ export default {
idNumber: [{required: true, message: "请输入证件号"}],
name: [{required: true, message: "请输入姓名"}],
sex: [{required: true, message: "请选择性别"}],
familyCount: [{required: true, message: "请输入家庭人口数"}],
phone: [{required: true, message: "请输入联系方式"}],
currentAreaId: [
{required: true, message: "请选择现住址"},
@@ -351,6 +360,7 @@ export default {
householdIdNumber: [{required: true, message: "请选择户主证件号"}],
riskType: [{required: true, message: "请选择风险因素"}],
objectType: [{required: true, message: "请选择监测对象类型"}],
houseType: [{required: true, message: "请选择户类型"}],
}
},
rootArea() {
@@ -447,6 +457,11 @@ export default {
this.form = {...this.form, birthDate, sex, age: this.$calcAge(idNumber)}
},
submit() {
if(this.form.houseType == 1) {
if(!this.form.objectType) {
return this.$message.error('请选择监测对象类型')
}
}
this.$refs.ruleForm.validate(v => {
if (v) {
this.form.isHousehold = 1

View File

@@ -13,13 +13,13 @@
<el-button type="primary" @click="examine('纳入监测审批', 2)" v-if="girdAdminApplyStatus == 1">纳入监测审批
</el-button>
</template>
<el-button type="primary" @click="applyMonitor('纳入监测', 1)" v-if="detail.status == 3">纳入监测</el-button>
<el-button type="primary" @click="applyMonitor('纳入监测', 1)" v-if="detail.status == 3 || detail.status == 5">纳入监测</el-button>
<el-button type="primary" @click="applyMonitor('解除风险', 4)" v-if="detail.status == 1">解除风险</el-button>
<el-button type="primary" @click="examine('解除风险审批', 5)" v-if="detail.status == 2">解除风险审批</el-button>
</template>
<template v-if="user.info.girdCheckType == 1">
<el-button type="primary" @click="applyMonitor('申请纳入监测', 0)"
v-if="detail.status == 4 || detail.status == 3">申请纳入监测
v-if="detail.status == 4 || detail.status == 3 || detail.status == 5">申请纳入监测
</el-button>
<el-button type="primary" @click="applyMonitor('申请解除风险', 3)" v-if="detail.status == 1">申请解除风险</el-button>
</template>
@@ -42,6 +42,7 @@
<el-form-item label="证件号">{{ detail.idNumber }}</el-form-item>
<el-form-item label="性别" prop="sex">{{ dict.getLabel("sex", detail.sex) }}</el-form-item>
<el-form-item label="出生日期">{{ detail.birthDate }}</el-form-item>
<el-form-item label="家庭人口数">{{ detail.familyCount}}</el-form-item>
<!-- <el-form-item label="年龄" prop="age">{{ detail.age}}</el-form-item> -->
<el-form-item label="民族">{{ dict.getLabel("fpNation", detail.nation) }}</el-form-item>
<el-form-item label="文化程度">{{ dict.getLabel("fpEducation", detail.education) }}</el-form-item>
@@ -104,7 +105,7 @@
<template slot="content">
<div flex class="half wrap">
<el-form-item label="住房面积(m²)">{{ detail.houseArea }}</el-form-item>
<el-form-item label="户类型">{{ dict.getLabel("fpHouseType", detail.houseType) }}</el-form-item>
<!-- <el-form-item label="户类型">{{ dict.getLabel("fpHouseType", detail.houseType) }}</el-form-item> -->
<el-form-item label="与村主干路距离(公里)">{{ detail.trunkRoadDistance }}</el-form-item>
<el-form-item label="入户路类型">{{ dict.getLabel("fpHouseRoadType", detail.houseRoadType) }}
</el-form-item>
@@ -136,10 +137,10 @@
<ai-card title="家庭风险情况">
<template slot="content">
<div flex class="half wrap">
<el-form-item label="监测对象类型" prop="objectType">{{ dict.getLabel("fpType", detail.objectType) }}
</el-form-item>
<el-form-item label="户类型">{{ dict.getLabel("fpHouseType", detail.houseType) }}</el-form-item>
<el-form-item label="监测对象类型" prop="objectType" v-if="detail.houseType==1">{{ dict.getLabel("fpType", detail.objectType) }}</el-form-item>
<el-form-item label="是否军烈属">{{ dict.getLabel("fpYesOrNo", detail.militaryMartyrs) }}</el-form-item>
<el-form-item label="风险因素" prop="riskType">{{ dict.getLabel("fpRiskType", detail.riskType) }}
<el-form-item label="风险因素" prop="riskType" v-if="detail.houseType==1">{{ dict.getLabel("fpRiskType", detail.riskType) }}
</el-form-item>
<el-form-item label="脱贫年度">{{ dict.getLabel("fpYear", detail.povertyYear) }}</el-form-item>
<el-form-item label="因自然灾害子项">{{ dict.getLabel("fpNaturalDisaster", detail.naturalDisasterType) }}

View File

@@ -2,7 +2,7 @@
<section class="hrList">
<ai-list>
<ai-title slot="title" title="监测对象" isShowBottomBorder isShowArea v-model="search.areaId" :instance="instance"
@change="page.current=1,getTableData()">
@change="page.current=1,getTableData()" :hideLevel="hideLevel">
<template #rightBtn>
<el-button type="primary" icon="iconfont iconSetting" @click="dialog=true" v-if="$permissions('app_apppreventionreturntopovertyalarmconfig_edit')">
预警规则
@@ -13,6 +13,7 @@
<ai-search-bar>
<template #left>
<ai-select placeholder="档案状态" v-model="search.status" :selectList="dict.getDict('fpPrtpStatus')" @change="page.current=1,getTableData()"/>
<ai-select placeholder="户类型" v-model="search.houseType" :selectList="dict.getDict('fpHouseType')" @change="page.current=1,getTableData()"/>
<ai-select placeholder="监测对象类型" v-model="search.objectType" :selectList="dict.getDict('fpType')" @change="page.current=1,getTableData()"/>
<ai-select placeholder="风险因素" v-model="search.riskType" :selectList="dict.getDict('fpRiskType')" @change="page.current=1,getTableData()"/>
<el-date-picker value-format="yyyy-MM-dd HH:mm:ss" v-model="search.birthStart" type="date" size="small" unlink-panels placeholder="选择出生开始日期"
@@ -97,11 +98,14 @@ export default {
{label: "档案状态", prop: "status", dict: "fpPrtpStatus", align: "center"},
{slot: "options"}
]
},
hideLevel() {
return this.user.info.areaList?.length - 1
}
},
data() {
return {
search: {name: '', objectType: '', riskType: '', isHousehold: 1},
search: {status: '',houseType: '', objectType: '', riskType: '', birthStart: '', birthEnd:'',sex: '' },
page: {current: 1, size: 10, total: 0},
tableData: [],
ids: [],

View File

@@ -80,9 +80,11 @@
const validatorPhone = function (rule, value, callback) {
if (value === '') {
callback(new Error('请输入联系方式'))
} else if (!/^1\d{10}$/.test(value)) {
callback(new Error('手机号格式错误'))
} else {
}
// else if (!/^1\d{10}$/.test(value)) {
// callback(new Error('手机号格式错误'))
// }
else {
callback()
}
}

View File

@@ -45,7 +45,7 @@
</div>
</div>
<ai-wechat-selecter slot="append" :instance="instance" :props="{id:'wxUserId',label:'name'}"
v-model="item.candidateList" v-if="item.candidateApproverType==1">
v-model="item.candidateList" v-if="item.candidateApproverType==1">
<el-button size="mini" type="primary">选择指定人员</el-button>
</ai-wechat-selecter>
</div>
@@ -53,8 +53,8 @@
</el-steps>
</template>
</ai-card>
<el-dialog :title="titleType" class="editStyle" :visible.sync="isAddStep" width="575px" height="380px"
:close-on-click-modal="false">
<ai-dialog :title="titleType" class="editStyle" :visible.sync="isAddStep" width="575px" height="380px"
:close-on-click-modal="false" @onConfirm="saveAddProgress('addForm')">
<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"
@@ -87,12 +87,7 @@
</el-radio-group>
</el-form-item>
</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>
@@ -117,14 +112,7 @@ export default {
isSelectImg: false,
isSelectUnit: false,
isSelectPerson: false,
nodeObj: {
candidateApproverType: '1',
candidateList: [],
nodeIndex: '',
nodeName: '',
nodeType: '',
scopeCandidates: ''
},
nodeObj: {},
indexType: '',
titleType: '',
bomIndex: '',
@@ -175,20 +163,17 @@ 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));
} else {
this.titleType = '添加审批步骤';
if (this.form.processNodeList.length > 0) {
this.init();
}
this.init();
}
},
// 确定添加审批步骤
saveAddProgress(formName) {
this.$refs[formName].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)));
} else {
@@ -206,7 +191,7 @@ export default {
nodeIndex: '',
nodeName: '',
nodeType: '',
scopeCandidates: ''
scopeCandidates: '1',
};
this.$refs['addForm'].resetFields();
},