Merge branch 'dev' into vite

# Conflicts:
#	packages/IntelligentSecurity/AppISManage/AppISManage.vue
#	vue.config.js
This commit is contained in:
aixianling
2022-04-28 18:42:05 +08:00
31 changed files with 1437 additions and 1538 deletions

View File

@@ -11,6 +11,8 @@ instance.interceptors.request.eject(0);
instance.interceptors.request.use(config => {
if (config.url.startsWith("/node")) {
config.baseURL = "/ns"
} else if (/\/project\/sass/.test(location.pathname)) {
config.baseURL = "/saas"
} else if (/\/xiushan/.test(location.pathname)) {
config.baseURL = "/xsjr"
config.url = config.url.replace(/(app|auth|admin)\//, "")

View File

@@ -184,7 +184,7 @@
tableData: [],
recordList: [],
colConfigs: [
{prop: 'createTime', label: '上报日期', align: 'center', dateFormart: 'YYYY-MM-DD'},
{prop: 'createTime', label: '上报日期', align: 'center', dateFormat: 'YYYY-MM-DD'},
{prop: 'status', label: '健康状态', align: 'center', formart: v => v === '0' ? '异常' : '正常' }
],
tabList: ['基本信息', '每日上报', '异常处理']

View File

@@ -1,62 +1,36 @@
<template>
<section class="AppISManage">
<device-slider :permissions="permissions" :show.sync="slider" :ins="instance" :dict="dict"
@treeCommand="handleSliderOption" @select="handleSelectMonitor"
:render-item="renderTreeItem" ref="DeviceSlider"/>
<device-slider :permissions="permissions" :show.sync="slider" :ins="instance" :dict="dict" @treeCommand="handleSliderOption" @select="handleSelectMonitor" :render-item="renderTreeItem" ref="DeviceSlider" />
<div class="monitorPane" v-loading="isLoading" element-loading-background="rgba(0, 0, 0, 0.6)">
<div class="headerBar">
<el-select default-first-option size="small" v-model="splitScreen" @change="onChange">
<!-- <i slot="prefix" class="iconfont iconjdq_led_Led1"/> -->
<img slot="prefix" src="https://cdn.cunwuyun.cn/slw2.0/images/fp.png">
<el-option v-for="(op,i) in splitOps" :key="i" v-bind="op"/>
<el-option v-for="(op,i) in splitOps" :key="i" v-bind="op" />
</el-select>
<div class="headerBar-item" v-if="monitors.length > 1" @click="playbackUrls = [], isShowBar = !isShowBar" :class="[isShowBar ? '' : 'cancel-xt']">
<div class="headerBar-item" @click="playbackUrls = [], isShowBar = !isShowBar" :class="[isShowBar ? '' : 'cancel-xt']">
<img src="https://cdn.cunwuyun.cn/slw2.0/images/xt.png">
<span>{{ isShowBar ? '视频协同' : '取消协同' }}</span>
</div>
</div>
<div class="videoList">
<div
class="videoBox"
v-for="(m, i) in monitors"
:key="m.id"
:style="currentSplitStyle">
<AiMonitor
:instance="instance"
:deviceId="m.deviceId"
:isShowBar="isShowBar"
:id="m.id"
:playbackUrls="playbackUrls"
:name="m.name"
@close="removeMonitor(i)"
ref="AiMonitor">
<div class="videoBox" v-for="(m, i) in monitors" :key="m.id" :style="currentSplitStyle">
<AiMonitor :instance="instance" :deviceId="m.deviceId" :isShowBar="isShowBar" :id="m.id" :playbackUrls="playbackUrls" :name="m.name" @close="removeMonitor(i)" ref="AiMonitor">
</AiMonitor>
</div>
</div>
<Synergy
ref="Synergy"
:ids="ids"
:instance="instance"
@replay="onReplay"
:isLoading.sync="isLoading"
@backLiveing="playbackUrls = []"
@checkChange="onCheckChange"
v-if="!isShowBar && monitors.length"
style="width: 100%; height: 68px;">
<Synergy ref="Synergy" :ids="ids" :instance="instance" @replay="onReplay" :isLoading.sync="isLoading" @backLiveing="playbackUrls = []" @checkChange="onCheckChange" v-if="!isShowBar && monitors.length" style="width: 100%; height: 68px;">
</Synergy>
</div>
<ai-dialog title="修改名称" :visible.sync="dialog" width="500px" @onConfirm="handleSubmit(selected)"
@closed="selected={}">
<ai-dialog title="修改名称" :visible.sync="dialog" width="500px" @onConfirm="handleSubmit(selected)" @closed="selected={}">
<el-form ref="form" :model="selected" label-width="80px" size="small" :rules="rules">
<el-form-item label="设备名称" prop="name">
<el-input v-model="selected.name" clearable/>
<el-input v-model="selected.name" clearable />
</el-form-item>
</el-form>
</ai-dialog>
<locate-dialog v-model="locate" :ins="instance" :latlng="latlng" @confirm="v=>handleLocate(selected,v)"/>
<ai-area custom-clicker :input-clicker="false" :hideLevel="disabledLevel" v-model="selected.areaId"
:instance="instance" ref="BindArea"
@change="handleSubmit(selected)"/>
<locate-dialog v-model="locate" :ins="instance" :latlng="latlng" @confirm="v=>handleLocate(selected,v)" />
<ai-area custom-clicker :input-clicker="false" :hideLevel="disabledLevel" v-model="selected.areaId" :instance="instance" ref="BindArea" @change="handleSubmit(selected)" />
</section>
</template>
@@ -68,33 +42,34 @@
import Synergy from "../components/Synergy"
export default {
name: "AppISManage",
components: {LocateDialog, DeviceSlider, AiMonitor, Synergy},
label: "监控实况",
name: 'AppISManage',
components: { LocateDialog, DeviceSlider, AiMonitor, Synergy },
label: '监控实况',
props: {
instance: Function,
dict: Object,
permissions: Function
permissions: Function,
},
computed: {
splitOps() {
return [
{label: "单分屏", value: 1, per: "100%"},
{label: "四分屏", value: 4, per: "49.2%"},
{label: "九分屏", value: 9, per: "32%"}
{ label: '单分屏', value: 1, per: '100%' },
{ label: '四分屏', value: 4, per: '49.2%' },
{ label: '九分屏', value: 9, per: '32%' },
]
},
currentSplitStyle() {
let per = this.splitOps.find(e => e.value == this.splitScreen)?.per || "100%"
return {width: per, height: per}
let per =
this.splitOps.find((e) => e.value == this.splitScreen)?.per || '100%'
return { width: per, height: per }
},
...mapState(['user']),
ids () {
ids() {
if (!this.monitors.length) return ''
return this.monitors.map(v => v.id).join(',')
}
return this.monitors.map((v) => v.id).join(',')
},
},
data() {
@@ -108,26 +83,27 @@
isLoading: false,
isShowBar: true,
selected: {
areaId: ''
areaId: '',
},
videoUrl: '',
playbackUrls: [],
latlng: null,
disabledLevel: 0,
rules: {
name: [{required: true, message: "请填写 设备名称"}]
}
name: [{ required: true, message: '请填写 设备名称' }],
},
}
},
watch: {
slider () {
this.$refs.AiMonitor && this.$refs.AiMonitor.forEach(e => {
slider() {
this.$refs.AiMonitor &&
this.$refs.AiMonitor.forEach((e) => {
e.reset()
})
this.$refs.Synergy && this.$refs.Synergy.init()
}
},
},
created() {
@@ -143,18 +119,21 @@
handleSelectMonitor(monitor) {
if (monitor.type !== '1') return
let {id} = monitor,
index = this.monitors.findIndex(e => e.id == id)
let { id } = monitor,
index = this.monitors.findIndex((e) => e.id == id)
if (index > -1) {
this.$message.error('该监控视频已存在')
} else if (this.monitors.length >= this.splitScreen && this.splitScreen > 1) {
this.$message.error("可分屏监控已满,请先取消其他的监控")
} else if (
this.monitors.length >= this.splitScreen &&
this.splitScreen > 1
) {
this.$message.error('可分屏监控已满,请先取消其他的监控')
} else {
this.showMonitor(monitor)
}
},
onCheckChange (e) {
onCheckChange(e) {
this.monitors.forEach((item, index) => {
if (e.indexOf(item.index) === -1) {
this.monitors.splice(index, 1)
@@ -167,109 +146,137 @@
this.monitors = [this.monitors[0]]
}
this.$refs.AiMonitor && this.$refs.AiMonitor.forEach(e => {
this.$refs.AiMonitor &&
this.$refs.AiMonitor.forEach((e) => {
e.reset()
})
},
onReplay (e) {
onReplay(e) {
this.isLoading = true
this.instance.post(`/app/appzyvideoequipment/getSlwPlaybackUrl`, null, {
this.instance
.post(`/app/appzyvideoequipment/getSlwPlaybackUrl`, null, {
params: {
ids: this.ids,
startTime: e.startTime,
endTime: e.endTime,
nvrCodes: this.ids
}
}).then(res => {
nvrCodes: this.ids,
},
})
.then((res) => {
if (res.code == 0) {
if (res.data && res.data.length) {
this.playbackUrls = res.data
this.isLoading = false
}
}
}).catch(() => {
})
.catch(() => {
this.isLoading = false
})
},
removeMonitor(i) {
this.monitors.splice(i, 1)
if (!this.monitors.length) {
this.isShowBar = true
}
},
showMonitor(monitor, refresh = false) {
let {id: deviceId} = monitor
deviceId && this.instance.post("/app/appzyvideoequipment/getWebSdkUrl", null, {
params: {deviceId}
}).then(res => {
let { id: deviceId } = monitor
if (deviceId) {
this.isLoading = true
this.instance.post('/app/appzyvideoequipment/getWebSdkUrl', null, {
params: { deviceId },
}).then((res) => {
if (res?.data) {
this.videoUrl = res.data
let data = {
url: res.data,
isShowPlayBtn: false
isShowPlayBtn: false,
}
if (refresh) {
monitor.url = data.url
} else if (this.splitScreen == 1) {
this.monitors = [{...monitor, ...data}]
this.monitors = [{ ...monitor, ...data }]
} else {
if (this.monitors.findIndex(e => e.id == monitor.id) === -1 && this.monitors.length <= this.splitScreen) {
this.monitors.push({...monitor, ...data})
if (
this.monitors.findIndex((e) => e.id == monitor.id) === -1 &&
this.monitors.length <= this.splitScreen
) {
this.monitors.push({ ...monitor, ...data })
}
}
}
this.isLoading = false
}).catch(() => {
this.isLoading = false
})
}
},
renderTreeItem: function (h, {node, data}) {
renderTreeItem: function (h, { node, data }) {
let show = data.deviceStatus == 1 ? 'show' : ''
const ids = this.ids.split(',')
const index = ids.indexOf(data.id) + 1
if (node.isLeaf) {
return (
<div class="flexRow">
{index > 0 ?
<span>{ index }</span>
: ''
}
<i class={['iconfont', 'iconshipinjiankong', show]}/>
{index > 0 ? <span>{index}</span> : ''}
<i class={['iconfont', 'iconshipinjiankong', show]} />
<div>{node.label}</div>
</div>
)
} else return (
} else
return (
<div class="flexRow">
<div>{node.label}</div>
{data.id != 'no_area' ? <div class="sta">
{data.id != 'no_area' ? (
<div class="sta">
<p>{data.online || 0}</p>/{data.sum || 0}
</div>
: <div/>}
) : (
<div />
)}
</div>
)
},
handleSliderOption(e) {
this.selected = {
command: e.type,
...e.node
...e.node,
}
this.selected.areaId = e.node.areaId || this.user.info.areaId
if (e.type == "edit") {//修改名称
if (e.type == 'edit') {
//修改名称
this.dialog = true
} else if (e.type == "area") {//绑定areaId
} else if (e.type == 'area') {
//绑定areaId
this.$refs.BindArea?.chooseArea()
} else if (e.type == "locate") {//地图标绘
this.latlng = e.node.lat && e.node.lng ? {
} else if (e.type == 'locate') {
//地图标绘
this.latlng =
e.node.lat && e.node.lng
? {
lat: e.node.lat,
lng: e.node.lng
} : ''
lng: e.node.lng,
}
: ''
this.locate = true
}
},
handleSubmit(row) {
delete row.createTime
return this.instance.post("/app/appzyvideoequipment/addOrUpdate", {
...row
}).then(res => {
return this.instance
.post('/app/appzyvideoequipment/addOrUpdate', {
...row,
})
.then((res) => {
if (res?.code == 0) {
this.$message.success("提交成功!")
this.$message.success('提交成功!')
this.dialog = false
this.$refs.DeviceSlider?.getDevices()
}
@@ -277,21 +284,21 @@
},
handleLocate(row, locate) {
if (locate) {
let {lat, lng} = locate.location
this.handleSubmit({...row, lat, lng}).then(() => {
let { lat, lng } = locate.location
this.handleSubmit({ ...row, lat, lng }).then(() => {
this.locate = false
})
}
}
},
},
beforeDestroy() {
this.monitors = []
}
},
}
</script>
<style lang="scss" scoped>
.AppISManage {
.AppISManage {
display: flex;
background: #202330;
height: 100%;
@@ -316,14 +323,14 @@
justify-content: center;
width: 100px;
height: 40px;
background: #2C2F3E;
background: #2c2f3e;
border-radius: 4px;
color: #fff;
font-size: 12px;
cursor: pointer;
&.cancel-xt {
background: linear-gradient(90deg, #299FFF 0%, #0C61FF 100%);
background: linear-gradient(90deg, #299fff 0%, #0c61ff 100%);
}
&:hover {
@@ -370,14 +377,15 @@
height: 40px;
padding: 0 12px;
box-sizing: border-box;
background: #2C2F3E;
background: #2c2f3e;
}
input {
text-align: center;
}
.el-input__inner, .el-button {
.el-input__inner,
.el-button {
color: #fff;
border: none;
background: transparent;
@@ -431,7 +439,7 @@
width: 84px;
height: 32px;
line-height: 1;
background: linear-gradient(180deg, #2E3447 0%, #151825 100%);
background: linear-gradient(180deg, #2e3447 0%, #151825 100%);
border-radius: 2px;
cursor: pointer;
font-size: 12px;
@@ -481,14 +489,14 @@
color: #fff;
font-size: 12px;
border-radius: 1px;
background: #2266FF;
background: #2266ff;
}
.iconfont {
color: #89b;
&.show {
color: #19D286;
color: #19d286;
}
}
@@ -498,7 +506,7 @@
min-width: 0;
& > p {
color: #19D286;
color: #19d286;
}
}
@@ -507,7 +515,6 @@
position: absolute;
right: 4px;
}
}
}
}
</style>

View File

@@ -7,12 +7,7 @@
<span>关闭视频</span>
</div>
</div>
<iframe
v-if="isShow"
:id="iframeId"
allow="autoplay *; microphone *; fullscreen *" allowfullscreen allowtransparency key="" allowusermedia frameBorder="no"
style="width: 100%; height: 100%;"
:src="`https://cdn.cunwuyun.cn/slw2.0/index.html?url=${src}`">
<iframe v-if="isShow" :id="iframeId" allow="autoplay *; microphone *; fullscreen *" allowfullscreen allowtransparency key="" allowusermedia frameBorder="no" style="width: 100%; height: 100%;" :src="`https://cdn.cunwuyun.cn/slw2.0/index.html?url=${src}`">
</iframe>
<div class="slw-bottom" v-if="isShowBar">
<Timeline class="Timeline" v-if="times.length" :times="times" @replay="onReplay" :isLiveing="isLiveing" :width="width" ref="timeline" :style="{width: width}"></Timeline>
@@ -20,24 +15,13 @@
<div class="left">
<div class="left-btns">
<el-tooltip effect="dark" :content="isPause ? '播放' : '暂停'" placement="top">
<img
:src="isPause ? 'https://cdn.cunwuyun.cn/slw2.0/images/play.png' : 'https://cdn.cunwuyun.cn/slw2.0/images/pause.png'"
@click="changePlayStatus">
<img :src="isPause ? 'https://cdn.cunwuyun.cn/slw2.0/images/play.png' : 'https://cdn.cunwuyun.cn/slw2.0/images/pause.png'" @click="changePlayStatus">
</el-tooltip>
</div>
<div
class="volume"
@mouseleave.stop="isShowVolume = false">
<img
@mouseenter.stop="isShowVolume = true"
src="https://cdn.cunwuyun.cn/slw2.0/images/sound.png">
<div class="volume" @mouseleave.stop="isShowVolume = false">
<img @mouseenter.stop="isShowVolume = true" src="https://cdn.cunwuyun.cn/slw2.0/images/sound.png">
<div class="volume-slider" :class="[isShowVolume ? 'active' : '']">
<el-slider
input-size="mini"
v-model="volume"
vertical
@change="onVolume"
height="80px">
<el-slider input-size="mini" v-model="volume" vertical @change="onVolume" height="80px">
</el-slider>
</div>
</div>
@@ -63,19 +47,10 @@
</div>
</div>
</div>
<ai-dialog
title="选择日期"
:visible.sync="isShowDate"
width="520px"
@onConfirm="onConfirm">
<ai-dialog title="选择日期" :visible.sync="isShowDate" width="520px" @onConfirm="onConfirm">
<el-form class="ai-form" ref="form" :model="form" label-width="80px" size="small">
<el-form-item label="选择日期" prop="date" :rules="[{ required: true, message: '请选择日期', trigger: 'change' }]">
<el-date-picker
value-format="yyyy-MM-dd"
v-model="form.date"
type="date"
:picker-options="pickerOptions"
placeholder="选择日期">
<el-date-picker value-format="yyyy-MM-dd" v-model="form.date" type="date" :picker-options="pickerOptions" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-form>
@@ -128,7 +103,8 @@
computed: {
src () {
if (this.playbackUrls.length) {
return this.playbackUrls.filter(v => v.id === this.id)[0].playbackUrl
const arr = this.playbackUrls.filter(v => v.id === this.id)
return arr.length ? arr[0].playbackUrl : []
}
if (this.isLiveing) {
@@ -252,6 +228,7 @@
fullScreenChange () {
if (document.fullscreenElement) {
this.reset()
} else {
this.reset()
}
@@ -269,7 +246,7 @@
},
changePlayStatus () {
const subPage = document.querySelector(`#${this.id}`).contentWindow
const subPage = document.querySelector(`#${this.iframeId}`).contentWindow
subPage.postMessage({
type: 'play',
value: this.isPause
@@ -314,7 +291,7 @@
this.$nextTick(() => {
this.$refs.timeline && this.$refs.timeline.init()
})
}, 60)
}, 100)
},
screenshots () {

View File

@@ -1,19 +1,9 @@
<template>
<div class="synergr" :id="videoId" v-if="isInit" @mouseleave="isHide = true" @mousemove.stop="onMousemove" @mouseup="onMouseUp">
<canvas
id="synergr-canvas"
:style="{height: '28px'}"
v-if="canvasWidth"
@click="onClick"
:width="canvasWidth"
height="28">
<canvas id="synergr-canvas" :style="{height: '28px'}" v-if="canvasWidth" @click="onClick" :width="canvasWidth" height="28">
</canvas>
<div class="time" v-show="!isHide && left > 100" :style="{left: (left) + 'px'}">{{ time }}</div>
<img
@mousedown="onDragDown"
class="drag-img"
:style="{left: (x) + 'px'}"
src="https://cdn.cunwuyun.cn/slw2.0/images/drag.png" />
<img @mousedown="onDragDown" class="drag-img" :style="{left: (x) + 'px'}" src="https://cdn.cunwuyun.cn/slw2.0/images/drag.png" />
<div class="slw-bottom">
<div class="action-bar">
<div class="left">
@@ -58,25 +48,17 @@
<div class="playback-item" v-for="(item, index) in times" :key="index">
<el-checkbox :label="item.id">
<span>通道{{ index + 1 }}</span>
<PlaybackTime class="playback-item__timeline" :key="'PlaybackTime' + index" v-if="item.times.length" :deviceId="item.id" :times="item.times"></PlaybackTime>
</el-checkbox>
<PlaybackTime class="playback-item__timeline" :key="'PlaybackTime' + index" v-if="item.times.length" :deviceId="item.id" :times="item.times"></PlaybackTime>
<i :style="{left: (x - 17) + 'px'}"></i>
</div>
</el-checkbox-group>
</div>
</div>
<ai-dialog
title="选择日期"
:visible.sync="isShowDate"
width="520px"
@onConfirm="onConfirm">
<ai-dialog title="选择日期" :visible.sync="isShowDate" width="520px" @onConfirm="onConfirm">
<el-form class="ai-form" ref="form" :model="form" label-width="80px" size="small">
<el-form-item label="选择日期" prop="date" :rules="[{ required: true, message: '请选择日期', trigger: 'change' }]">
<el-date-picker
value-format="yyyy-MM-dd"
v-model="form.date"
type="date"
:picker-options="pickerOptions"
placeholder="选择日期">
<el-date-picker value-format="yyyy-MM-dd" v-model="form.date" type="date" :picker-options="pickerOptions" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-form>
@@ -159,7 +141,12 @@
const canvasInfo = document.querySelector(`#synergr-canvas`).getBoundingClientRect()
const seconds = 24 * 60 * 60
const x = e.clientX - canvasInfo.left + 100
if (x < 100) return
if (x < 100 || x > this.canvasWidth + 100) {
this.isHide = true
return false
}
const unit = seconds / this.canvasWidth * (x - 100)
this.left = x
@@ -430,23 +417,26 @@
color: #FFFFFF;
.playback-item {
position: relative;
display: flex;
align-items: center;
width: 100%;
margin-bottom: 4px;
i {
position: absolute;
top: 50%;
z-index: 1;
width: 2px;
height: 12px;
background: #FFC916;
transform: translateY(-50%);
}
&:last-child {
margin-bottom: 0;
}
.el-checkbox {
display: flex;
align-items: center;
width: 100%;
.el-checkbox__label {
display: flex;
align-items: center;
flex: 1;
.playback-item__timeline {
flex: 1;
height: 12px;
@@ -454,6 +444,16 @@
border-radius: 6px;
}
.el-checkbox {
display: flex;
align-items: center;
// width: 100%;
.el-checkbox__label {
display: flex;
align-items: center;
flex: 1;
span {
width: 60px;
color: #fff;

View File

@@ -1,21 +1,12 @@
<template>
<div :class="wrapper" class="canvas" @click="onClick" @mousemove.stop="onMousemove" @mouseup="onMouseUp" @mouseleave="isHide = true" v-if="isInit">
<canvas
:id="id"
:style="{height: '52px'}"
v-if="canvasWidth"
:width="canvasWidth"
height="52">
<canvas :id="id" :style="{height: '52px'}" v-if="canvasWidth" :width="canvasWidth" height="52">
</canvas>
<div class="time" v-show="!isHide" :style="{left: left + 'px'}">{{ time }}</div>
<div class="time-scale" :style="{left: x + 'px'}">
<span></span>
</div>
<img
@mousedown="onDragDown"
class="drag-img"
:style="{left: x + 'px'}"
src="https://cdn.cunwuyun.cn/slw2.0/images/drag.png" />
<img @mousedown="onDragDown" class="drag-img" :style="{left: x + 'px'}" src="https://cdn.cunwuyun.cn/slw2.0/images/drag.png" />
</div>
</template>

View File

@@ -29,7 +29,7 @@
export default {
name: "AppGridMemberJp",
label: "网格管理员",
label: "网格管理员(防返贫)",
props: {
instance: Function,

View File

@@ -8,7 +8,8 @@
<template #left>
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="isShow = true">添加</el-button>
<el-button size="small" :disabled="!ids.length" icon="iconfont iconDelete" @click="removeAll">批量删除</el-button>
<el-select size="small" style="width: 200px;" v-model="search.girdId" placeholder="所属网格" clearable @change="getListInit()">
<el-select size="small" style="width: 200px;" v-model="search.girdId" placeholder="所属网格" clearable
@change="getListInit()">
<el-option
v-for="(item,i) in girdList"
:key="i"
@@ -54,7 +55,8 @@
@close="closeDialog"
title="添加户主"
@onConfirm="onConfirm">
<ai-area-select clearable always-show :instance="instance" v-model="areaId" :disabled-level="disabledLevel" @change="search.current = 1, getUserList()"></ai-area-select>
<ai-area-select clearable always-show :instance="instance" v-model="areaId" :disabled-level="disabledLevel"
@change="search.current = 1, getUserList()"></ai-area-select>
<span style="margin-top:16px;"><span style="color:#f46;margin-right:4px;">*</span>网格</span>
<el-select size="small" style="width: 280px;margin-top:16px;" v-model="girdId" placeholder="请选择网格" clearable>
<el-option
@@ -120,8 +122,9 @@
</template>
<script>
import { mapState } from 'vuex'
export default {
import {mapState} from 'vuex'
export default {
name: 'Family',
props: {
@@ -139,22 +142,20 @@
girdId: ''
},
isLoading: false,
form: {
},
form: {},
userList: [],
name: '',
chooseUser: [],
isShow: false,
total: 10,
colConfigs: [
{ type: 'selection', label: '' },
{ prop: 'name', label: '户主姓名', align: 'left', width: '200px' },
{ prop: 'idNumber', label: '身份证号', align: 'center' },
{ prop: 'phone', label: '联系方式', align: 'center' },
{ prop: 'girdName', label: '所属网格', align: 'center' },
{ prop: 'createTime', label: '添加时间', align: 'center' },
{ slot: 'options', label: '操作', align: 'center' }
{type: 'selection', label: ''},
{prop: 'name', label: '户主姓名', align: 'left', width: '200px'},
{prop: 'idNumber', label: '身份证号', align: 'center'},
{prop: 'phone', label: '联系方式', align: 'center'},
{prop: 'girdName', label: '所属网格', align: 'center'},
{prop: 'createTime', label: '添加时间', align: 'center'},
{slot: 'options', label: '操作', align: 'center'}
],
tableData: [],
areaId: '',
@@ -191,7 +192,7 @@
this.search.current = 1
this.getList()
},
getList () {
getList() {
this.instance.post(`/app/appgirdmemberpoverty/listByGirdMemberByWeb`, null, {
params: {
...this.search,
@@ -212,15 +213,15 @@
this.remove(this.ids.join(','))
},
handleSelectionChange(e) {
this.ids = e.map(v => v.gmrId)
this.ids = e.map(v => v.gmpId)
},
clearAll () {
clearAll() {
this.chooseUser = []
},
onConfirm () {
if(!this.girdId) {
onConfirm() {
if (!this.girdId) {
return this.$message.error('请选择网格')
}
@@ -256,11 +257,11 @@
this.getUserList()
},
del (e) {
del(e) {
this.chooseUser.splice(this.chooseUser.indexOf(e), 1)
},
getUserList () {
getUserList() {
this.isLoading = true
this.instance.post(`/app/apppreventionreturntopoverty/list`, null, {
params: {
@@ -279,7 +280,7 @@
})
},
onBack () {
onBack() {
this.$emit('change', {
type: 'list'
})
@@ -296,11 +297,11 @@
})
}
}
}
}
</script>
<style lang="scss" scoped>
.Family {
.Family {
.AiWechatSelecter-container {
display: flex;
height: 380px;
@@ -308,7 +309,7 @@
::v-deep {
.el-icon-circle-close {
display: inline-block!important;
display: inline-block !important;
}
}
@@ -327,6 +328,7 @@
margin-bottom: 0;
}
}
img {
width: 27px;
height: 27px;
@@ -410,7 +412,7 @@
padding: 8px 0;
::v-deep .el-scrollbar__wrap {
margin-bottom: 0!important;
margin-bottom: 0 !important;
overflow-x: hidden;
}
@@ -436,6 +438,7 @@
.tags-wrapper {
padding: 0 8px;
}
.el-tag {
margin: 0 8px 8px 0px;
color: #222222;
@@ -494,5 +497,5 @@
}
}
}
}
}
</style>

View File

@@ -26,11 +26,11 @@ export default {
}
},
created() {
this.dict.load("sex", "fpNation", "fpPrtpStatus", "fpHealth", "fpStudentsInSchool", 'fpYesOrNo', "fpRelationship",
"yesOrNo", "fpLaborSkills", "fpEducation", "fpType", "fpPoliticalOutlook","fpType", "fpRiskType", "fpAssistanceMeasures",
this.dict.load("fpYear", "sex", "fpNation", "fpPrtpStatus", "fpHealth", "fpStudentsInSchool", 'fpYesOrNo', "fpRelationship",
"yesOrNo", "fpLaborSkills", "fpEducation", "fpPoliticalOutlook","fpType", "fpRiskType", "fpAssistanceMeasures",
"fpPublicWelfarePostAssistance","fpHealthAssistance","fpFnancialAssistance","fpEmploymentAssistance","fpEducationalAssistance",
"fpIndustrialAssistance","fpSocialAssistance", "fpRiskEliminationMethod", "fpNaturalDisaster", "fpHouseType", "fpHouseRoadType",
"fpFuelType", "fpDisabilityType",)
"fpFuelType", "fpDisabilityType", "fpEmploymentChannels")
}
}
</script>

View File

@@ -19,7 +19,7 @@
<el-input v-model="form.phone" placeholder="请输入联系方式" :maxlength="11" show-word-limit/>
</el-form-item>
<el-form-item label="证件号码" prop="idNumber">
<el-input v-model="form.idNumber" placeholder="请输入证件号码" :maxlength="18" :disabled="isEdit || isSelectUser" @change="handleIdNumberAutocomplete"/>
<el-input v-model="form.idNumber" placeholder="请输入证件号码" :maxlength="20" :disabled="isEdit || isSelectUser" @change="handleIdNumberAutocomplete"/>
</el-form-item>
</div>
<el-form-item label="个人照片" prop="photo">
@@ -54,10 +54,10 @@
</el-form-item>
<div flex class="half wrap">
<el-form-item label="残疾类别">
<ai-select v-model="form.disabilityType" :selectList="dict.getDict('fpDisabilityType')" placeholder="请选择" />
<ai-select v-model="form.disabilityType" :selectList="dict.getDict('fpDisabilityType')" />
</el-form-item>
<el-form-item label="残疾办证年度">
<el-date-picker v-model="form.disabilityCertificateYear" type="year" placeholder="请选择"/>
<ai-select v-model="form.disabilityCertificateYear" :selectList="dict.getDict('fpYear')" />
</el-form-item>
</div>
<el-form-item label="基础保险">
@@ -75,13 +75,13 @@
<ai-select v-model="form.labourStatus" :selectList="dict.getDict('fpLaborSkills')"/>
</el-form-item>
<el-form-item label="是否会讲普通话">
<ai-select v-model="form.mandarin" :selectList="dict.getDict('fpYesOrNo')" placeholder="请选择" />
<ai-select v-model="form.mandarin" :selectList="dict.getDict('fpYesOrNo')" />
</el-form-item>
<el-form-item label="务工时间(月)">
<el-input v-model="form.workeMonths" placeholder="请输入" clearable/>
<el-input type="number" v-model="form.workeMonths" placeholder="请输入" clearable @input="numberInput('workeMonths')" />
</el-form-item>
<el-form-item label="就业渠道">
<el-input v-model="form.employmentChannels" placeholder="请输入" clearable/>
<ai-select v-model="form.employmentChannels" :selectList="dict.getDict('fpEmploymentChannels')" />
</el-form-item>
<el-form-item label="务工企业名称">
<el-input v-model="form.migrantEnterprises" placeholder="请输入" clearable/>
@@ -90,26 +90,15 @@
<el-input v-model="form.publicWelfarePosts" placeholder="请输入" clearable/>
</el-form-item>
<el-form-item label="是否国外务工">
<ai-select v-model="form.foreignWorkers" :selectList="dict.getDict('fpYesOrNo')" placeholder="请选择" />
<ai-select v-model="form.foreignWorkers" :selectList="dict.getDict('fpYesOrNo')" />
</el-form-item>
<el-form-item label="公益性岗位(月数)">
<el-input v-model="form.publicWelfarePostsMonths" placeholder="请输入" clearable/>
<el-input type="number" v-model="form.publicWelfarePostsMonths" placeholder="请输入" clearable @input="numberInput('publicWelfarePostsMonths')" />
</el-form-item>
</div>
<el-form-item label="务工所在地">
<el-input v-model="form.foreignWorkersAddress" placeholder="请输入" clearable maxlength="30" show-word-limit/>
</el-form-item>
<div flex class="half wrap">
<el-form-item label="判刑收监年度">
<el-date-picker v-model="form.sentencingYear" type="year" placeholder="请选择"/>
</el-form-item>
<el-form-item label="刑满释放">
<el-date-picker v-model="form.releaseFromPrisonYear" type="year" placeholder="请选择"/>
</el-form-item>
<el-form-item label="死亡年度">
<el-date-picker v-model="form.deathYear" type="year" placeholder="请选择"/>
</el-form-item>
</div>
<el-form-item label="现住址" prop="currentAreaId">
<ai-area-get :instance="instance" v-model="form.currentAreaId" :root="rootArea" valueLevel="5"/>
<el-form-item prop="currentAddress">
@@ -125,7 +114,7 @@
<el-input v-model="form.houseArea" placeholder="请输入" :maxlength="8"/>
</el-form-item>
<el-form-item label="户类型">
<ai-select v-model="form.houseType" :selectList="dict.getDict('fpYesOrNo')"/>
<ai-select v-model="form.houseType" :selectList="dict.getDict('fpHouseType')"/>
</el-form-item>
<el-form-item label="与村主干路距离(公里)">
<el-input v-model="form.trunkRoadDistance" placeholder="请输入" :maxlength="8"/>
@@ -203,7 +192,7 @@
<ai-select v-model="form.riskType" :selectList="dict.getDict('fpRiskType')"/>
</el-form-item>
<el-form-item label="脱贫年度">
<el-date-picker v-model="form.povertyYear" type="year" placeholder="请选择"/>
<ai-select v-model="form.povertyYear" :selectList="dict.getDict('fpYear')"/>
</el-form-item>
<el-form-item label="因自然灾害子项">
<ai-select v-model="form.naturalDisasterType" :selectList="dict.getDict('fpNaturalDisaster')"/>
@@ -213,10 +202,10 @@
</el-form-item>
</div>
<el-form-item label="义务阶段未上学原因">
<el-input v-model="form.dropOutOfSchoolReason" placeholder="请输入" maxlength="30" show-word-limit clearable/>
<el-input v-model="form.dropOutOfSchoolReason" type="textarea" placeholder="请输入" maxlength="500" show-word-limit clearable/>
</el-form-item>
<el-form-item label="备注说明">
<el-input v-model="form.detail" placeholder="请输入" maxlength="30" show-word-limit clearable/>
<el-input v-model="form.detail" placeholder="请输入" type="textarea" maxlength="500" show-word-limit clearable/>
</el-form-item>
<el-form-item label="图片最多9张" >
<ai-uploader
@@ -235,49 +224,83 @@
<template slot="content">
<div flex class="half wrap">
<el-form-item label="纳入监测对象的收入参考范围">
<el-input v-model="form.income1" placeholder="请输入" clearable/>
<el-input v-model="form.income1" placeholder="请输入" type="number" @input="decimalInput('income1')" clearable/>
</el-form-item>
<el-form-item label="纳入监测对象的人均收入参考范围">
<el-input v-model="form.income2" placeholder="请输入" clearable/>
<el-input v-model="form.income2" placeholder="请输入" type="number" @input="decimalInput('income2')" clearable/>
</el-form-item>
<el-form-item label="工资性收入(元)">
<el-input v-model="form.income3" placeholder="请输入" clearable/>
<el-input v-model="form.income3" placeholder="请输入" type="number" @input="decimalInput('income3')" clearable/>
</el-form-item>
<el-form-item label="生产经营性收入(元)">
<el-input v-model="form.income4" placeholder="请输入" clearable/>
<el-input v-model="form.income4" placeholder="请输入" type="number" @input="decimalInput('income4')" clearable/>
</el-form-item>
<el-form-item label="计划生育金(元)">
<el-input v-model="form.income5" placeholder="请输入" clearable/>
<el-input v-model="form.income5" placeholder="请输入" type="number" @input="decimalInput('income5')" clearable/>
</el-form-item>
<el-form-item label="资产收益扶贫分红收入">
<el-input v-model="form.income6" placeholder="请输入" clearable/>
<el-input v-model="form.income6" placeholder="请输入" type="number" @input="decimalInput('income6')" clearable/>
</el-form-item>
<el-form-item label="低保金(元)">
<el-input v-model="form.income7" placeholder="请输入" clearable/>
<el-input v-model="form.income7" placeholder="请输入" type="number" @input="decimalInput('income7')" clearable/>
</el-form-item>
<el-form-item label="特困供养金(元)">
<el-input v-model="form.income8" placeholder="请输入" clearable/>
<el-input v-model="form.income8" placeholder="请输入" type="number" @input="decimalInput('income8')" clearable/>
</el-form-item>
<el-form-item label="养老保险金(元)">
<el-input v-model="form.income9" placeholder="请输入" clearable/>
<el-input v-model="form.income9" placeholder="请输入" type="number" @input="decimalInput('income9')" clearable/>
</el-form-item>
<el-form-item label="生态补偿金(元)">
<el-input v-model="form.income10" placeholder="请输入" clearable/>
<el-input v-model="form.income10" placeholder="请输入" type="number" @input="decimalInput('income10')" clearable/>
</el-form-item>
<el-form-item label="转移性收入(元)">
<el-input v-model="form.income11" placeholder="请输入" clearable/>
<el-input v-model="form.income11" placeholder="请输入" type="number" @input="decimalInput('income11')" clearable/>
</el-form-item>
<el-form-item label="其它转移性收入(元)">
<el-input v-model="form.income12" placeholder="请输入" clearable/>
<el-input v-model="form.income12" placeholder="请输入" type="number" @input="decimalInput('income12')" clearable/>
</el-form-item>
<el-form-item label="财产性收入(元)">
<el-input v-model="form.income13" placeholder="请输入" clearable/>
<el-input v-model="form.income13" placeholder="请输入" type="number" @input="decimalInput('income13')" clearable/>
</el-form-item>
<el-form-item label="其它财产收入(元)">
<el-input v-model="form.income14" placeholder="请输入" clearable/>
<el-input v-model="form.income14" placeholder="请输入" type="number" @input="decimalInput('income14')" clearable/>
</el-form-item>
<el-form-item label="生产经营性支出(元)">
<el-input v-model="form.income15" placeholder="请输入" clearable/>
<el-input v-model="form.income15" placeholder="请输入" type="number" @input="decimalInput('income15')" clearable/>
</el-form-item>
</div>
</template>
</ai-card>
<ai-card title="风险消除情况" v-if="form.status == 3">
<template slot="content">
<div flex class="half wrap">
<el-form-item label="工资性收入情况">
<el-input v-model="form.fxxcIncome1" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome1')" clearable/>
</el-form-item>
<el-form-item label="生产经营性收入情况">
<el-input v-model="form.fxxcIncome2" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome2')" clearable/>
</el-form-item>
<el-form-item label="财产性收入情况">
<el-input v-model="form.fxxcIncome3" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome3')" clearable/>
</el-form-item>
<el-form-item label="转移性收入情况">
<el-input v-model="form.fxxcIncome4" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome4')" clearable/>
</el-form-item>
<el-form-item label="理赔收入情况">
<el-input v-model="form.fxxcIncome5" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome5')" clearable/>
</el-form-item>
<el-form-item label="生产经营性支出情况">
<el-input v-model="form.fxxcIncome6" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome6')" clearable/>
</el-form-item>
<el-form-item label="合规自然收支情况">
<el-input v-model="form.fxxcIncome7" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome7')" clearable/>
</el-form-item>
<el-form-item label="家庭纯收入情况">
<el-input v-model="form.fxxcIncome8" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome8')" clearable/>
</el-form-item>
<el-form-item label="家庭人均纯收入情况">
<el-input v-model="form.fxxcIncome9" placeholder="请输入" type="number" @input="decimalInput('fxxcIncome9')" clearable/>
</el-form-item>
</div>
</template>
@@ -333,22 +356,22 @@ export default {
},
guaranteeCheckList() {
return [
{label: '享受农村最低生活保障', value: 0},
{label: '是否特困供养人员', value: 1},
{label: '分散供养五保户转集中供养(减少)', value: 2},
{label: '是否接受医疗救助', value: 3},
{label: '是否接受其它健康扶贫', value: 4},
{label: '享受农村最低生活保障', value: '0'},
{label: '是否特困供养人员', value: '1'},
{label: '分散供养五保户转集中供养(减少)', value: '2'},
{label: '是否接受医疗救助', value: '3'},
{label: '是否接受其它健康扶贫', value: '4'},
]
},
basicsCheckList() {
return [
{label: '城乡居民基本医疗保险', value: 0},
{label: '城镇职工基本医疗保险', value: 1},
{label: '大病保险', value: 2},
{label: '商业补充医疗保险', value: 3},
{label: '城乡居民基本养老保险', value: 4},
{label: '城镇职工基本养老保险', value: 5},
{label: '享受人身意外保险补贴', value: 6},
{label: '城乡居民基本医疗保险', value: '0'},
{label: '城镇职工基本医疗保险', value: '1'},
{label: '大病保险', value: '2'},
{label: '商业补充医疗保险', value: '3'},
{label: '城乡居民基本养老保险', value: '4'},
{label: '城镇职工基本养老保险', value: '5'},
{label: '享受人身意外保险补贴', value: '6'},
]
},
},
@@ -408,13 +431,18 @@ export default {
if(res.data.guaranteeCheck) {
res.data.guaranteeList = res.data.guaranteeCheck.split(',')
}
console.log(res.data)
this.form = {...res.data}
}
})
},
handleIdNumberAutocomplete(v) {
let {birthday: birthDate, sex} = this.idCardNoUtil.getIdCardInfo(v)
this.form = {...this.form, birthDate, sex, age: this.$calcAge(v)}
var idNumber = v
if(v.length == 20) {
idNumber = v.substring(0, 17)
}
let {birthday: birthDate, sex} = this.idCardNoUtil.getIdCardInfo(idNumber)
this.form = {...this.form, birthDate, sex, age: this.$calcAge(idNumber)}
},
submit() {
this.$refs.ruleForm.validate(v => {
@@ -433,6 +461,25 @@ export default {
if(this.form.guaranteeList.length) {
this.form.guaranteeCheck = this.form.basicsList.join(',')
}
if([1, 2, 3].includes(2)) {
this.form.jcbxCxyiliao = '01'
}else {
this.form.jcbxCxyiliao = '02'
}
this.checkInit('jcbxCxyiliao',this.form.basicsList, '0')
this.checkInit('jcbxCzyiliao',this.form.basicsList, '1')
this.checkInit('jcbxDabing',this.form.basicsList, '2')
this.checkInit('jcbxShangye',this.form.basicsList, '3')
this.checkInit('jcbxCxyanglao',this.form.basicsList, '4')
this.checkInit('jcbxCzyanglao',this.form.basicsList, '5')
this.checkInit('jcbxRenshenyiwai',this.form.basicsList, '6')
this.checkInit('bzcsNongcundibao',this.form.guaranteeList, '0')
this.checkInit('bzcsTekungongyang',this.form.guaranteeList, '1')
this.checkInit('bzcsWubaohu',this.form.guaranteeList, '2')
this.checkInit('bzcsYiliaojiuzhu',this.form.guaranteeList, '3')
this.checkInit('bzcsQita',this.form.guaranteeList, '4')
this.instance.post(`/app/apppreventionreturntopoverty/addOrUpdate`, this.form).then(res => {
if (res.code == 0) {
this.$message.success('提交成功!');
@@ -441,8 +488,27 @@ export default {
})
}
})
},
checkInit(formName, list, value) {
if(list.includes(value)) {
this.form[formName] = '01'
}else {
this.form[formName] = '02'
}
},
decimalInput(name) {
if(!/^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/g.test(this.form[name])){
this.form[name] = ''
return this.$message.error('最多只保留两位小数点')
}
},
numberInput(name) {
if(!/^[0-9]*[1-9][0-9]*$/g.test(this.form[name])){
this.form[name] = ''
return this.$message.error('请输入正整数')
}
},
},
created() {
this.getDetail()
}

View File

@@ -5,20 +5,21 @@
<template #rightBtn>
<el-button type="primary" icon="iconfont iconEdit" @click="gotoEdit" v-if="$permissions('app_apppreventionreturntopoverty_edit')">编辑</el-button>
<template v-if="isGridAdmin">
<el-button type="primary" @click="applyMonitor('纳入监测', 1)" v-if="detail.status == 0 && girdAdminApplyStatus != 1">纳入监测</el-button>
<el-button type="primary" @click="examine('纳入监测审批', 2)" v-if="detail.status == 0 && girdAdminApplyStatus == 1">纳入监测审批</el-button>
<el-button type="primary" @click="applyMonitor('纳入监测', 1)" v-if="detail.status == 4 && girdAdminApplyStatus != 1">纳入监测</el-button>
<el-button type="primary" @click="examine('纳入监测审批', 2)" v-if="detail.status == 4 && girdAdminApplyStatus == 1">纳入监测审批</el-button>
<template v-if="detail.status == 0 || detail.status == 4">
<el-button type="primary" @click="applyMonitor('纳入监测', 1)" v-if="girdAdminApplyStatus != 1">纳入监测</el-button>
<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('解除风险', 4)" v-if="detail.status == 1">解除风险</el-button>
<el-button type="primary" @click="examine('解除风险审批', 5)" v-if="detail.status == 2">解除风险审批</el-button>
<el-button type="primary" @click="applyMonitor('纳入监测', 1)" v-if="detail.status == 3">纳入监测</el-button>
</template>
<template v-if="user.info.girdCheckType == 1">
<el-button type="primary" @click="applyMonitor('申请纳入监测', 0)" v-if="detail.status == 3">申请纳入监测</el-button>
<el-button type="primary" @click="applyMonitor('申请纳入监测', 0)" v-if="detail.status == 4">申请纳入监测</el-button>
<el-button type="primary" @click="applyMonitor('申请纳入监测', 0)" v-if="detail.status == 4 || detail.status == 3">申请纳入监测</el-button>
<el-button type="primary" @click="applyMonitor('申请解除风险', 3)" v-if="detail.status == 1">申请解除风险</el-button>
</template>
<el-button v-if="$permissions('app_apppreventionreturntopoverty_del') && /4/g.test(detail.status) && user.info.girdCheckType != 0" icon="iconfont iconDelete" @click="handleDelete(detail.id)">删除</el-button>
<template v-if="detail.status == 3 || detail.status == 4">
<el-button v-if="$permissions('app_apppreventionreturntopoverty_del') && user.info.girdCheckType != 0" icon="iconfont iconDelete" @click="handleDelete(detail.id)">删除</el-button>
</template>
</template>
</ai-title>
<template #content>
@@ -46,7 +47,7 @@
</el-form-item>
<div flex class="half wrap">
<el-form-item label="残疾类别">{{dict.getLabel("fpDisabilityType", detail.disabilityType)}}</el-form-item>
<el-form-item label="残疾办证年度">{{detail.disabilityCertificateYear}}</el-form-item>
<el-form-item label="残疾办证年度">{{dict.getLabel("fpYear", detail.disabilityCertificateYear)}}</el-form-item>
</div>
<div flex class="half wrap">
<el-form-item label="城乡居民基本医疗保险">{{dict.getLabel("fpYesOrNo", detail.jcbxCxyiliao)}}</el-form-item>
@@ -64,7 +65,7 @@
<el-form-item label="劳动技能">{{dict.getLabel("fpLaborSkills", detail.labourStatus)}}</el-form-item>
<el-form-item label="是否会讲普通话">{{dict.getLabel("fpYesOrNo", detail.mandarin)}}</el-form-item>
<el-form-item label="务工时间(月)">{{detail.workeMonths}}</el-form-item>
<el-form-item label="就业渠道">{{detail.employmentChannels}}</el-form-item>
<el-form-item label="就业渠道">{{dict.getLabel("fpEmploymentChannels", detail.employmentChannels)}}</el-form-item>
<el-form-item label="务工企业名称">{{detail.migrantEnterprises}}</el-form-item>
<el-form-item label="公益性岗位">{{detail.publicWelfarePosts}}</el-form-item>
<el-form-item label="是否国外务工">{{dict.getLabel("fpYesOrNo", detail.foreignWorkers)}}</el-form-item>
@@ -72,11 +73,6 @@
</div>
<el-form-item label="务工所在地">{{detail.foreignWorkersAddress}}
</el-form-item>
<div flex class="half wrap">
<el-form-item label="判刑收监年度">{{detail.sentencingYear}} </el-form-item>
<el-form-item label="刑满释放">{{detail.releaseFromPrisonYear}}</el-form-item>
<el-form-item label="死亡年度">{{detail.deathYear}}</el-form-item>
</div>
<el-form-item label="现住址">{{currentFullAddress}}</el-form-item>
</template>
</ai-card>
@@ -114,7 +110,7 @@
<el-form-item label="监测对象类型" prop="objectType">{{ 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>
<el-form-item label="脱贫年度">{{detail.povertyYear}} </el-form-item>
<el-form-item label="脱贫年度">{{ dict.getLabel("fpYear", detail.povertyYear)}} </el-form-item>
<el-form-item label="因自然灾害子项">{{ dict.getLabel("fpNaturalDisaster", detail.naturalDisasterType)}}</el-form-item>
<el-form-item label="是否义务阶段失学辍学">{{ dict.getLabel("fpYesOrNo", detail.dropOutOfSchool)}}</el-form-item>
<el-form-item label="识别监测时间">{{ detail.createTime}}</el-form-item>
@@ -124,10 +120,10 @@
<el-form-item label="信息采集人联系电话">{{ detail.updateUserPhone}}</el-form-item>
</div>
<el-form-item label="义务阶段未上学原因">{{detail.dropOutOfSchoolReason}}</el-form-item>
<el-form-item label="备注说明">{{detail.detail}}</el-form-item>
<!-- <el-form-item label="备注说明">{{detail.detail}}</el-form-item>
<el-form-item label="图片">
<ai-uploader disabled v-model="detail.files"></ai-uploader>
</el-form-item>
</el-form-item> -->
</template>
</ai-card>
<ai-card title="家庭收支情况">
@@ -154,6 +150,21 @@
</div>
</template>
</ai-card>
<ai-card title="风险消除情况" v-if="detail.status == 3">
<template slot="content">
<div flex class="half wrap">
<el-form-item label="工资性收入情况">{{detail.fxxcIncome1}}</el-form-item>
<el-form-item label="生产经营性收入情况">{{detail.fxxcIncome2}}</el-form-item>
<el-form-item label="财产性收入情况">{{detail.fxxcIncome3}}</el-form-item>
<el-form-item label="转移性收入情况">{{detail.fxxcIncome4}}</el-form-item>
<el-form-item label="理赔收入情况">{{detail.fxxcIncome5}}</el-form-item>
<el-form-item label="生产经营性支出情况">{{detail.fxxcIncome6}}</el-form-item>
<el-form-item label="合规自然收支情况">{{detail.fxxcIncome7}}</el-form-item>
<el-form-item label="家庭纯收入情况">{{detail.fxxcIncome8}}</el-form-item>
<el-form-item label="家庭人均纯收入情况">{{detail.fxxcIncome9}}</el-form-item>
</div>
</template>
</ai-card>
<ai-card title="家庭成员">
<template #right>
<span style=" color: #2266ff; margin-left: 16px;cursor: pointer;font-size: 12px;" @click="addFamily({})">添加</span>
@@ -170,6 +181,7 @@
</ai-table>
</template>
</ai-card>
<div style="height:20px;"></div>
</el-tab-pane>
<el-tab-pane label="走访日志" lazy name="HrLog" v-if="$permissions('app_apppreventionreturntopovertylog_detail')">
<hr-log v-if="currentTab == 'HrLog'" :instance="instance" :dict="dict" :permissions="permissions" />
@@ -256,10 +268,10 @@
<ai-select v-model="form.mandarin" :selectList="dict.getDict('fpYesOrNo')" placeholder="请选择" />
</el-form-item>
<el-form-item label="务工时间(月)">
<el-input v-model="form.workeMonths" placeholder="请输入" clearable />
<el-input type="number" v-model="form.workeMonths" placeholder="请输入" clearable @input="numberInput('workeMonths')" />
</el-form-item>
<el-form-item label="就业渠道">
<el-input v-model="form.employmentChannels" placeholder="请输入" clearable />
<ai-select v-model="form.employmentChannels" :selectList="dict.getDict('fpEmploymentChannels')" />
</el-form-item>
<el-form-item label="务工企业名称">
<el-input v-model="form.migrantEnterprises" placeholder="请输入" clearable />
@@ -271,23 +283,12 @@
<ai-select v-model="form.foreignWorkers" :selectList="dict.getDict('fpYesOrNo')" placeholder="请选择" />
</el-form-item>
<el-form-item label="公益性岗位(月数)">
<el-input v-model="form.publicWelfarePostsMonths" placeholder="请输入" clearable />
<el-input type="number" v-model="form.publicWelfarePostsMonths" placeholder="请输入" clearable @input="numberInput('publicWelfarePostsMonths')" />
</el-form-item>
</div>
<el-form-item label="务工所在地">
<el-input v-model="form.foreignWorkersAddress" placeholder="请输入" clearable maxlength="30" show-word-limit />
</el-form-item>
<div flex class="half wrap">
<el-form-item label="判刑收监年度">
<el-date-picker v-model="form.sentencingYear" type="year" placeholder="请选择" />
</el-form-item>
<el-form-item label="刑满释放">
<el-date-picker v-model="form.releaseFromPrisonYear" type="year" placeholder="请选择" />
</el-form-item>
<el-form-item label="死亡年度">
<el-date-picker v-model="form.deathYear" type="year" placeholder="请选择" />
</el-form-item>
</div>
<el-form-item label="现住址" prop="currentAreaId">
<ai-area-get :instance="instance" v-model="form.currentAreaId" :root="rootArea" valueLevel="5" />
<el-form-item prop="currentAddress">
@@ -336,7 +337,7 @@
<el-form-item label="劳动技能">{{dict.getLabel("fpLaborSkills", familyInfo.labourStatus)}}</el-form-item>
<el-form-item label="是否会讲普通话">{{dict.getLabel("fpYesOrNo", familyInfo.mandarin)}}</el-form-item>
<el-form-item label="务工时间(月)">{{familyInfo.workeMonths}}</el-form-item>
<el-form-item label="就业渠道">{{familyInfo.employmentChannels}}</el-form-item>
<el-form-item label="就业渠道">{{dict.getLabel("fpEmploymentChannels", familyInfo.employmentChannels)}}</el-form-item>
<el-form-item label="务工企业名称">{{familyInfo.migrantEnterprises}}</el-form-item>
<el-form-item label="公益性岗位">{{familyInfo.publicWelfarePosts}}</el-form-item>
<el-form-item label="是否国外务工">{{dict.getLabel("fpYesOrNo", familyInfo.foreignWorkers)}}</el-form-item>
@@ -344,11 +345,6 @@
</div>
<el-form-item label="务工所在地">{{familyInfo.foreignWorkersAddress}}
</el-form-item>
<div flex class="half wrap">
<el-form-item label="判刑收监年度">{{familyInfo.sentencingYear}} </el-form-item>
<el-form-item label="刑满释放">{{familyInfo.releaseFromPrisonYear}}</el-form-item>
<el-form-item label="死亡年度">{{familyInfo.deathYear}}</el-form-item>
</div>
<el-form-item label="现住址">{{currentFullAddressFamily}}</el-form-item>
</el-form>
<template slot="footer">
@@ -502,22 +498,22 @@ export default {
},
guaranteeCheckList() {
return [
{ label: '享受农村最低生活保障', value: 0 },
{ label: '是否特困供养人员', value: 1 },
{ label: '分散供养五保户转集中供养(减少)', value: 2 },
{ label: '是否接受医疗救助', value: 3 },
{ label: '是否接受其它健康扶贫', value: 4 },
{label: '享受农村最低生活保障', value: '0'},
{label: '是否特困供养人员', value: '1'},
{label: '分散供养五保户转集中供养(减少)', value: '2'},
{label: '是否接受医疗救助', value: '3'},
{label: '是否接受其它健康扶贫', value: '4'},
]
},
basicsCheckList() {
return [
{ label: '城乡居民基本医疗保险', value: 0 },
{ label: '城镇职工基本医疗保险', value: 1 },
{ label: '大病保险', value: 2 },
{ label: '商业补充医疗保险', value: 3 },
{ label: '城乡居民基本养老保险', value: 4 },
{ label: '城镇职工基本养老保险', value: 5 },
{ label: '享受人身意外保险补贴', value: 6 },
{label: '城乡居民基本医疗保险', value: '0'},
{label: '城镇职工基本医疗保险', value: '1'},
{label: '大病保险', value: '2'},
{label: '商业补充医疗保险', value: '3'},
{label: '城乡居民基本养老保险', value: '4'},
{label: '城镇职工基本养老保险', value: '5'},
{label: '享受人身意外保险补贴', value: '6'},
]
},
},
@@ -633,6 +629,19 @@ export default {
if (this.form.guaranteeList.length) {
this.form.guaranteeCheck = this.form.basicsList.join(',')
}
this.checkInit('jcbxCxyiliao',this.form.basicsList, '0')
this.checkInit('jcbxCzyiliao',this.form.basicsList, '1')
this.checkInit('jcbxDabing',this.form.basicsList, '2')
this.checkInit('jcbxShangye',this.form.basicsList, '3')
this.checkInit('jcbxCxyanglao',this.form.basicsList, '4')
this.checkInit('jcbxCzyanglao',this.form.basicsList, '5')
this.checkInit('jcbxRenshenyiwai',this.form.basicsList, '6')
this.checkInit('bzcsNongcundibao',this.form.guaranteeList, '0')
this.checkInit('bzcsTekungongyang',this.form.guaranteeList, '1')
this.checkInit('bzcsWubaohu',this.form.guaranteeList, '2')
this.checkInit('bzcsYiliaojiuzhu',this.form.guaranteeList, '3')
this.checkInit('bzcsQita',this.form.guaranteeList, '4')
this.instance.post(`/app/apppreventionreturntopoverty/addOrUpdate`, this.form).then(res => {
if (res.code == 0) {
this.getDetail()
@@ -643,6 +652,13 @@ export default {
}
});
},
checkInit(formName, list, value) {
if(list.includes(value)) {
this.form[formName] = '01'
}else {
this.form[formName] = '02'
}
},
onClose() {
this.isShowAdd = false;
},
@@ -710,7 +726,11 @@ export default {
})
this.applyInfo.files = ids.join(',')
}
this.instance.post(url, null, { params: this.applyInfo }).then(res => {
let fromData = new FormData()
for (let key in this.applyInfo) {
fromData.append(key, this.applyInfo[key])
}
this.instance.post(url, fromData).then(res => {
if (res.code == 0) {
this.getDetail()
this.$message.success('提交成功!');
@@ -744,7 +764,11 @@ export default {
if (this.changeStatus == 5) { //5 解除风险
url = `/app/apppreventionreturntopoverty/relieve`
}
this.instance.post(url, null, { params: this.examineFrom }).then(res => {
let fromData = new FormData()
for (let key in this.examineFrom) {
fromData.append(key, this.examineFrom[key])
}
this.instance.post(url, fromData ).then(res => {
if (res.code == 0) {
this.getDetail()
this.$message.success('提交成功!');
@@ -774,6 +798,12 @@ export default {
});
})
},
numberInput(name) {
if(!/^[0-9]*[1-9][0-9]*$/g.test(this.form[name])){
this.form[name] = ''
return this.$message.error('请输入正整数')
}
},
},
created() {
this.getDetail();
@@ -783,7 +813,6 @@ export default {
<style lang="scss" scoped>
.hrDetail {
height: 100%;
.flex-start {
align-items: flex-start;

View File

@@ -18,9 +18,9 @@
<el-date-picker value-format="yyyy-MM-dd HH:mm:ss" v-model="search.birthEnd" type="date" size="small" placeholder="选择出生结束日期"
unlink-panels @change="page.current=1,getTableData()" />
<ai-select placeholder="性别" v-model="search.sex" :selectList="dict.getDict('sex')" @change="page.current=1,getTableData()"/>
<ai-select placeholder="文化程度" v-model="search.education" :selectList="dict.getDict('fpEducation')" @change="page.current=1,getTableData()"/>
<!-- <ai-select placeholder="文化程度" v-model="search.education" :selectList="dict.getDict('fpEducation')" @change="page.current=1,getTableData()"/>
<ai-select placeholder="民族" v-model="search.nation" :selectList="dict.getDict('fpNation')" @change="page.current=1,getTableData()"/>
<!-- <ai-select placeholder="政治面貌" v-model="search.politicsStatus" :selectList="dict.getDict('fpPoliticalOutlook')" @change="page.current=1,getTableData()"/> -->
<ai-select placeholder="政治面貌" v-model="search.politicsStatus" :selectList="dict.getDict('fpPoliticalOutlook')" @change="page.current=1,getTableData()"/> -->
</template>
<template #right>
<el-input size="small" placeholder="姓名/身份证/联系方式" v-model="search.con" clearable

View File

@@ -5,21 +5,27 @@
@change="page.current=1,getTableData()">
</ai-title>
<template #content>
<div class="flex">
<div class="flex fill">
<div class="type">
<div class="title">宣传板块<span><el-button type="text" @click="addType(0, typeList.length+1, '')">添加</el-button></span></div>
<div class="title">宣传板块<span><el-button type="text"
@click="addType(0, typeList.length+1, '')">添加</el-button></span>
</div>
<div class="list">
<div class="item" v-for="(item, index) in typeList" :key="index" :class="typeIndex == index ? 'active' : ''" @click="typeClick(index)">
{{item.categoryName}}
<div class="item" v-for="(item, index) in typeList" :key="index"
:class="typeIndex == index ? 'active' : ''" @click="typeClick(index)">
{{ item.categoryName }}
</div>
<div class="item" v-if="!typeList.length">暂无数据</div>
</div>
</div>
<div class="type mini-type">
<div class="title">模块名称<span><el-button type="text" @click="addType(1, miniTypeList.length+1, typeList[typeIndex].id)">添加</el-button></span></div>
<div class="title">模块名称<span><el-button type="text"
@click="addType(1, miniTypeList.length+1, typeList[typeIndex].id)">添加</el-button></span>
</div>
<div class="list">
<div class="item" v-for="(item, index) in miniTypeList" :key="index" :class="miniTypeIndex == index ? 'active' : ''" @click="miniTypeClick(index)">
<span class="text">{{item.categoryName}}</span>
<div class="item" v-for="(item, index) in miniTypeList" :key="index"
:class="miniTypeIndex == index ? 'active' : ''" @click="miniTypeClick(index)">
<span class="text">{{ item.categoryName }}</span>
<span class="icon">
<i class="el-icon-circle-plus-outline" @click="addNewType(index)"></i>
<i class="el-icon-edit" @click="editMini(index)"></i>
@@ -32,12 +38,15 @@
<div class="content">
<ai-search-bar>
<template #right>
<el-input size="small" placeholder="请输入标题" v-model="search.title" clearable @change="page.current=1,getTableData()"/>
<el-input size="small" placeholder="请输入标题" v-model="search.title" clearable
@change="page.current=1,getTableData()"/>
</template>
</ai-search-bar>
<ai-search-bar>
<template #left>
<el-button type="primary" icon="iconfont iconAdd" @click="showEdit('')" v-if="typeList.length && miniTypeList.length">添加</el-button>
<el-button type="primary" icon="iconfont iconAdd" @click="showEdit('')"
v-if="typeList.length && miniTypeList.length">添加
</el-button>
<!-- <el-button icon="iconfont iconDelete" :disabled="!ids.length" @click="handleDelete(ids)">删除</el-button> -->
</template>
</ai-search-bar>
@@ -53,7 +62,6 @@
</ai-table>
</div>
</div>
</template>
</ai-list>
<ai-dialog :visible.sync="dialog" :title="dialogTitle" @closed="form={}" @onConfirm="submitDialog" width="600px">
@@ -65,7 +73,8 @@
<el-input-number v-model="form.showIndex" @change="handleChange" :min="1" :max="100"></el-input-number>
</el-form-item>
</el-form>
<ai-table :tableData="newTypeList" :total="newPage.total" :current.sync="newPage.current" :size.sync="newPage.size"
<ai-table :tableData="newTypeList" :total="newPage.total" :current.sync="newPage.current"
:size.sync="newPage.size"
:col-configs="colConfigsNew" v-if="type == 2">
<el-table-column slot="options" label="操作" fixed="right" align="center">
<template slot-scope="{row}">
@@ -139,7 +148,13 @@ export default {
})
},
showEdit(id) {
this.$router.push({query: {id: id, parentId: this.typeList[this.typeIndex].id, moduleId: this.miniTypeList[this.miniTypeIndex].id}, hash: "#add"})
this.$router.push({
query: {
id: id,
parentId: this.typeList[this.typeIndex].id,
moduleId: this.miniTypeList[this.miniTypeIndex].id
}, hash: "#add"
})
},
handleDelete(ids) {
this.$confirm("是否删除该条宣传资讯信息").then(() => {
@@ -164,10 +179,10 @@ export default {
this.instance.post(`/app/apppublicitycategory/addPublicityCategory`, this.form).then(res => {
if (res.code == 0) {
this.$message.success('添加成功');
if(this.type == 0) {
if (this.type == 0) {
this.getTypeList()
}
if(this.type == 1) {
if (this.type == 1) {
this.getMiniTypeList(this.typeList[this.typeIndex].id)
}
this.dialog = false
@@ -182,7 +197,7 @@ export default {
this.form.showIndex = index
this.dialogTitle = ['宣传板块', '宣传模块', '文章分类'][e]
this.addLabelText = ['板块名称', '模块名称', '分类名称'][e]
this.rules.categoryName = [{required: true, message: "请输入"+this.addLabelText, trigger: "change"}]
this.rules.categoryName = [{required: true, message: "请输入" + this.addLabelText, trigger: "change"}]
this.dialog = true
},
getTypeList() {
@@ -197,7 +212,7 @@ export default {
this.instance.post(`/app/apppublicitycategory/list?categoryType=1&size=100&parentId=${parentId}`).then(res => {
if (res.code == 0) {
this.miniTypeList = res.data.records
if(res.data.records && res.data.records.length) {
if (res.data.records && res.data.records.length) {
this.miniTypeClick(0)
}
@@ -261,27 +276,32 @@ export default {
<style lang="scss" scoped>
.List {
height: 100%;
.flex{
.flex {
display: flex;
.type{
.type {
width: 250px;
border: 1px solid #ddd;
box-sizing: border-box;
.title{
.title {
font-size: 16px;
line-height: 40px;
border-bottom: 1px solid #ddd;
padding: 0 16px;
font-weight: 600;
span{
span {
color: #26f;
font-size: 12px;
font-weight: 400;
float: right;
}
}
.list{
.item{
.list {
.item {
padding: 0 16px;
display: flex;
justify-content: space-between;
@@ -289,38 +309,51 @@ export default {
font-size: 14px;
color: #333;
box-sizing: border-box;
.text{
.text {
width: calc(100% - 70px);
cursor: pointer;
}
.icon{
.icon {
width: 70px;
text-align: right;
i{
i {
font-size: 14px;
cursor: pointer;
margin-left: 8px;
}
.el-icon-delete{
.el-icon-delete {
color: #f46;
}
.el-icon-circle-plus-outline{
.el-icon-circle-plus-outline {
color: #26f;
}
}
}
.active{
.active {
// color: #26f;
background-color: #f3f6f9;
}
}
}
.mini-type{
.mini-type {
margin-right: 16px;
}
.content{
.content {
width: calc(100% - 516px);
}
}
::v-deep .ai-list__content--right-wrapper {
min-height: calc(100% - 6px) !important;
display: flex;
}
}
</style>

View File

@@ -117,7 +117,7 @@
<ai-info-item label="政治面貌" :value="dict.getLabel('politicsStatus', baseInfo.politicsStatus)"/>
<ai-info-item label="兵役状况" :value="dict.getLabel('militaryStatus', baseInfo.militaryStatus)"/>
<ai-info-item label="宗教信仰" :value="dict.getLabel('faithType', baseInfo.faithType)"/>
<ai-info-item label="职业" :value="dict.getLabel('faithType', baseInfo.job)"/>
<ai-info-item label="职业" :value="dict.getLabel('job', baseInfo.job)"/>
</ai-wrapper>
<ai-avatar v-model="baseInfo.photo" :editable="false"/>
</el-row>
@@ -707,7 +707,7 @@ export default {
font-size: 14px;
::v-deep.el-tabs__content {
max-height: calc(100vh - 136px);
max-height: calc(100vh - 176px);
overflow-y: auto;
}

View File

@@ -84,7 +84,7 @@
{ prop: 'type', label: '类型', formart: v => this.dict.getLabel('villInfoType', v) },
{ prop: 'title', label: '标题', align: 'left' },
{ prop: 'status', label: '发布状态', align: 'center', formart: v => this.dict.getLabel('villInfoStatus', v) },
{ prop: 'createDate', label: '发布时间', dateFormart: 'YYYY-MM-DD', align: 'center' },
{ prop: 'createDate', label: '发布时间', dateFormat: 'YYYY-MM-DD', align: 'center' },
{ prop: 'createUser', label: '发布人', align: 'center' },
{ prop: 'areaName', label: '来源地区', align: 'center' },
{ slot: 'options', label: '操作' }

View File

@@ -108,7 +108,7 @@ export default {
return [
{prop: 'type', label: '类型', formart: v => this.dict.getLabel('villInfoType', v)},
{prop: 'title', label: '标题', align: 'left'},
{prop: 'createDate', label: '创建时间', dateFormart: 'YYYY-MM-DD', align: 'center'},
{prop: 'createDate', label: '创建时间', dateFormat: 'YYYY-MM-DD', align: 'center'},
{prop: 'createUser', label: '发布人', align: 'center'},
{slot: 'options', label: '操作'}
]

View File

@@ -1,76 +0,0 @@
<template>
<div class="AppGridBlock">
<keep-alive include="List">
<component
ref="component"
:is="component"
@change="onChange"
:params="params"
:instance="instance"
:dict="dict"
:isEdit="isEdit"
></component>
</keep-alive>
</div>
</template>
<script>
import List from "./components/list";
import Add from "./components/add";
export default {
name: "AppGridBlock",
label: "网格区块",
props: {
instance: Function,
dict: Object,
},
data() {
return {
component: "List",
params: {},
include: [],
isEdit: false
};
},
components: {
Add,
List,
},
mounted() {},
methods: {
onChange(data) {
if (data.type === "Add") {
this.component = "Add";
this.params = data.params;
this.isEdit = data.isEdit
}
if (data.type === "list") {
this.component = "List";
this.params = data.params;
this.$nextTick(() => {
if (data.isRefresh) {
this.$refs.component.getTreeList();
this.$refs.component.getList();
}
});
}
},
},
};
</script>
<style lang="scss">
.AppGridBlock {
height: 100%;
background: #f3f6f9;
overflow: auto;
}
</style>

View File

@@ -1,6 +0,0 @@
import component from './AppGridBlock.vue'
component.install = function (Vue) {
Vue.component(component.name, component)
}
export default component

View File

@@ -1,199 +0,0 @@
<template>
<ai-list class="list">
<template slot="title">
<ai-title title="网格员管理" :isShowBottomBorder="true"></ai-title>
</template>
<template slot="content">
<ai-search-bar bottomBorder>
<template slot="left">
<el-date-picker
v-model="searchObj.selectionDate"
type="date"
@change="(page.current = 1), getList()"
value-format="yyyy-MM-dd"
size="small"
placeholder="选用时间">
</el-date-picker>
</template>
<template slot="right">
<el-input
v-model="searchObj.name"
size="small"
placeholder="责任网格"
@keyup.enter.native="(page.current = 1), getList()"
clearable
@clear="(searchObj.name = '', page.current = 1), getList()"
suffix-icon="iconfont iconSearch" />
</template>
</ai-search-bar>
<ai-search-bar style="padding: 16px 0 0">
<template slot="left">
<el-button
icon="iconfont iconAdd"
type="primary"
size="small"
@click="add('')"
>添加</el-button
>
<el-button
icon="iconfont iconDelete"
@click="deleteById(ids.join(','))"
:disabled="!Boolean(ids.length)"
>删除</el-button
>
</template>
</ai-search-bar>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="page.total"
ref="aitableex"
:current.sync="page.current"
:size.sync="page.size"
@selection-change="(v) => (ids = v.map((e) => e.id))"
@getList="getList()">
<el-table-column label="操作" slot="options" align="center" fixed="right" width="170">
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="toFamily(row.id)">责任家庭</el-button>
<el-button type="text" @click="add(row.id)">查看</el-button>
<el-button type="text" @click="deleteById(row.id)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</template>
<script>
export default {
name: "list",
label: "网格员管理",
props: {
instance: Function,
dict: Object,
permissions: Function,
},
data() {
return {
searchObj: {
name: "",
selectionDate: "",
},
page: {
current: 1,
size: 10,
total: 0,
},
goAdd: false,
tableData: [],
fileList: [],
ids: [],
detail: {},
};
},
created() {
this.dict.load("sex", "girdMemberType", "politicsStatus", "education");
this.getList();
},
computed: {
colConfigs() {
return [
{
type: "selection",
},
{
prop: "wxUserId",
label: "网格员姓名",
openType: 'userName'
},
{
prop: "girdInfoListStr",
align: "center",
label: "责任网格",
},
{
prop: "phone",
align: "center",
label: "联系电话",
},
{
prop: "selectionDate",
align: "center",
label: "选用时间",
},
];
},
},
methods: {
getList() {
this.instance
.post("/app/appgirdmemberinfo/list", null, {
params: {
...this.searchObj,
...this.page,
},
})
.then((res) => {
if (res.code == 0) {
this.tableData = res.data.records;
this.page.total = res.data.total;
}
});
},
deleteById(ids) {
ids &&
this.$confirm("是否要删除该网格员", {
type: "error",
})
.then(() => {
this.instance
.post("/app/appgirdmemberinfo/delete", null, {
params: { ids },
})
.then((res) => {
if (res?.code == 0) {
this.$message.success("删除成功!");
this.getList();
}
});
})
.catch(() => {});
},
add(id) {
this.$emit('change', {
type: 'Add',
params: {
id: id || ''
}
})
},
toFamily (id) {
this.$emit('change', {
type: 'Family',
params: {
id
}
})
},
handleSelectionChange(val) {
this.ids = [];
val.map((e) => {
this.ids.push(e.id);
});
},
resetSearch() {
Object.keys(this.searchObj).map((e) => {
this.searchObj[e] = "";
});
this.getList();
},
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@@ -74,7 +74,7 @@
currIndex: 0,
tableData: [],
colConfigs: [
{prop: 'createTime', label: '上报日期', align: 'center', dateFormart: 'YYYY-MM-DD'},
{prop: 'createTime', label: '上报日期', align: 'center', dateFormat: 'YYYY-MM-DD'},
{
prop: 'status',
label: '健康状态',

View File

@@ -0,0 +1,39 @@
<template>
<div class="AppGridBlock">
<component :is="currentPage" :instance="instance" :dict="dict"/>
</div>
</template>
<script>
import List from "./components/list";
import Add from "./components/add";
export default {
name: "AppGridBlock",
label: "网格区块(saas)",
props: {
instance: Function,
dict: Object,
},
computed: {
currentPage() {
return this.$route.hash == "#add" ? Add : List
}
},
data() {
return {
component: "List",
};
},
components: {Add, List},
};
</script>
<style lang="scss">
.AppGridBlock {
height: 100%;
background: #f3f6f9;
overflow: auto;
}
</style>

View File

@@ -3,150 +3,53 @@
<ai-detail>
<template #title>
<ai-title
:title="title"
:title="pageTitle"
:isShowBack="true"
:isShowBottomBorder="true"
@onBackClick="cancel(false)"
></ai-title>
/>
</template>
<template #content>
<ai-card title="层级信息">
<template slot="content">
<ai-wrapper label-width="120px" :columnsNumber="2" style="margin-top: 16px">
<ai-info-item label="上级层级单位:"><span>{{ forms.parentGirdName }}</span></ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<el-form
ref="rules"
:model="forms"
:rules="formRules"
size="small"
label-suffix=""
label-width="120px"
>
<el-form ref="rules" :model="forms" :rules="formRules" size="small" label-suffix="" label-width="120px">
<ai-card title="基础信息">
<template slot="content">
<div class="above">
<div class="left">
<el-form-item label="网格名称" prop="girdName">
<el-input
v-model="forms.girdName"
placeholder="请输入…"
:maxlength="50"
show-word-limit
></el-input>
<el-input v-model="forms.girdName" placeholder="请输入…" :maxlength="50" show-word-limit clearable/>
</el-form-item>
<el-form-item label="网格类型" prop="girdType">
<el-select
v-model="forms.girdType"
placeholder="请选择"
clearable
style="width: 100%;"
>
<el-option
v-for="(item, i) in dict.getDict('girdType')"
:key="i"
:label="item.dictName"
:value="item.dictValue"
></el-option>
</el-select>
<el-form-item label="网格" prop="girdMemberManageList">
<AiUserGet :instance="instance" v-model="forms.girdMemberManageList" isShowUser :props="{label:'wxUserId'}"/>
</el-form-item>
<el-form-item label="是否最后一级" prop="isLastLevel">
<el-select
v-model="forms.isLastLevel"
placeholder="请选择"
clearable
style="width: 100%;"
>
<el-option
v-for="(item, i) in dict.getDict('isLastLevel')"
:key="i"
:label="item.dictName"
:value="item.dictValue"
></el-option>
</el-select>
<el-form-item label="网格员" prop="girdMemberList">
<AiUserGet :instance="instance" v-model="forms.girdMemberList" isShowUser :props="{label:'wxUserId'}"/>
</el-form-item>
</div>
<div class="right">
<el-form-item label="网格编码" prop="girdCode">
<el-input
v-model="forms.girdCode"
placeholder="请输入…"
maxlength="30"
show-word-limit
></el-input>
</el-form-item>
<el-form-item label="网格层级" prop="girdLevel">
<el-select
v-model="forms.girdLevel"
placeholder="请选择"
:disabled="isEdit"
clearable
style="width: 100%;"
>
<el-option
v-for="(item, i) in dict.getDict('girdLevel')"
:key="i"
:label="item.dictName"
:value="item.dictValue"
></el-option>
</el-select>
</el-form-item>
</div>
</div>
</template>
</ai-card>
<ai-card title="其他信息">
<template slot="content">
<div class="above">
<div class="left">
<!-- <el-form-item label="事件上报主体" prop="eventReportUnitId">
<el-cascader
style="width: 100%"
:options="unitOps"
ref="cascader"
v-model="forms.eventReportUnitId"
:props="unitProps"
:show-all-levels="false"
/>
</el-form-item> -->
<el-row type="flex">
<div class="fill">
<el-form-item label="初始日期" prop="startDate">
<el-date-picker
v-model="forms.startDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
style="width: 100%;"
>
</el-date-picker>
style="width: 100%;"/>
</el-form-item>
<el-form-item label="终止日期" prop="endDate">
<el-date-picker
v-model="forms.endDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
style="width: 100%;"
>
</el-date-picker>
<el-date-picker v-model="forms.endDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" style="width: 100%;"/>
</el-form-item>
</div>
<div class="right">
<div class="fill">
<el-form-item label="面积" prop="area">
<el-input
v-model="forms.area"
placeholder="面积㎡"
></el-input>
<el-input v-model="forms.area" placeholder="面积㎡" clearable/>
</el-form-item>
</div>
</div>
</el-row>
<el-form-item label="网格地址" prop="address">
<el-input v-model="forms.address" placeholder="限200字" maxlength="200"></el-input>
</el-form-item>
<el-form-item label="网格范围" prop="enclosure" v-if="forms.girdLevel === '2' || isAddLastLevel">
<el-form-item label="网格范围" prop="enclosure">
<el-button size="small" @click="showMap = true">地图标绘</el-button>
</el-form-item>
</template>
@@ -181,41 +84,26 @@
id="tipinput"
size="medium"
style="width: 200px"
></el-input>
/>
</div>
<div id="panel"></div>
<div id="panel"/>
<div class="container" id="container"></div>
<el-button-group
style="margin-top: 8px"
v-if="forms.plottingStatus == 1"
>
<el-button type="primary" size="mini" @click="polyEditor.open()"
>开始编辑
</el-button
>
<el-button size="mini" @click="polyEditor.close()"
>结束编辑
</el-button
>
<el-button-group style="margin-top: 8px" v-if="forms.plottingStatus==1">
<el-button type="primary" size="mini" @click="polyEditor.open()">开始编辑</el-button>
<el-button size="mini" @click="polyEditor.close()">结束编辑</el-button>
</el-button-group>
<el-button-group
style="margin-top: 8px"
v-if="forms.plottingStatus == 0"
>
<el-button size="mini" @click="draw('polygon')"
>开始绘制多边形
</el-button
>
<el-button size="mini" @click="draw('polygon')">开始绘制多边形</el-button>
<!-- <el-button size="mini" @click="close()">关闭绘制</el-button> -->
<el-button size="mini" @click="clear()">清除绘制</el-button>
</el-button-group>
</div>
<div class="dialog-footer" slot="footer">
<el-button size="medium" @click="showMap = false">取消</el-button>
<el-button type="primary" size="medium" @click="surePotting()"
>确认
</el-button
>
<el-button type="primary" size="medium" @click="surePotting()">确认</el-button>
</div>
</ai-dialog>
</div>
@@ -231,27 +119,12 @@ export default {
instance: Function,
dict: Object,
params: Object,
isEdit: Boolean
},
data() {
return {
forms: {
address: "",
area: "",
points: [],
endDate: "",
eventReportUnit: "",
eventReportUnitId: "",
girdCode: "",
girdLevel: "",
girdList: [],
girdName: "",
girdType: "",
isLastLevel: "",
parentGirdId: "",
parentGirdName: "",
startDate: "",
plottingStatus: "0",
girdMemberManageList: [],
girdMemberList: []
},
showMap: false,
map: "",
@@ -265,7 +138,6 @@ export default {
polyEditor: "",
title: "添加网格区块",
parentGirdInfo: {},
isAddLastLevel: false
};
},
computed: {
@@ -297,28 +169,24 @@ export default {
ops.map((e) => this.addChild(e, initData));
return ops;
},
pageTitle() {
return this.isEdit ? "编辑网格区块" : "添加网格区块"
},
isEdit() {
return !!this.$route.query.id;
}
},
created() {
this.getCorpLocation()
if (this.isEdit) {
this.title = "编辑网格区块";
this.searchDetail();
} else {
this.forms.parentGirdId = this.params.id;
this.forms.parentGirdName = this.params.girdName;
this.isAddLastLevel = this.params.girdLevel === '1'
// this.forms.girdLevel = Number(this.info.girdLevel) + 1 +'';
// this.forms.isLastLevel = ['0','1'].includes(this.forms.girdLevel)?'0':'1';
this.title = "添加网格区块";
this.forms = this.$route.query
}
// this.getAllUnit(this.user.info.areaId);
},
methods: {
cancel(isRefresh) {
this.$emit('change', {
type: 'list',
isRefresh: !!isRefresh,
})
cancel() {
this.$router.push({})
},
//
getAllUnit(data) {
@@ -389,7 +257,7 @@ export default {
},
getCorpLocation() {
this.instance.post("/app/appdvcpconfig/getCorpLocation").then(res => {
if (res.code == 0) {
if (res?.data) {
this.location = res.data
}
})
@@ -499,8 +367,9 @@ export default {
});
},
searchDetail() {
let {id} = this.$route.query
this.instance.post(`/app/appgirdinfo/queryDetailById`, null, {
params: {id: this.params.id},
params: {id},
}).then((res) => {
if (res?.data) {
this.forms = {...res.data};
@@ -526,21 +395,6 @@ export default {
display: none !important;
}
.above {
overflow: hidden;
padding: 8px 0;
.left {
width: 380px;
float: left;
}
.right {
width: 380px;
float: right;
}
}
.footer-btn {
width: 92px;
}

View File

@@ -1,5 +1,5 @@
<template>
<div class="app-grid-block">
<section class="app-grid-block">
<ai-list>
<template slot="title">
<ai-title title="网格区块" :isShowBottomBorder="true"></ai-title>
@@ -100,29 +100,12 @@
ref="aitableex"
:current.sync="page.current"
:size.sync="page.size"
@selection-change="(v) => (ids = v.map((e) => e.id))"
@selection-change="v=>ids=v.map((e) => e.id)"
@getList="getList()"
>
<el-table-column
slot="selectId"
type="selection"
align="center"
width="40"
>
</el-table-column>
<el-table-column
label="网格员"
slot="user"
align="center"
fixed="right"
width="160">
:dict="dict">
<el-table-column label="网格成员" slot="user" align="center" width="160">
<template slot-scope="{ row }">
<div class="flex-box">
<div v-for="(item, index) in row.girdMemberNames" v-show="index < 3" :key="index">
<AiOpenData type="userName" :openid="item"></AiOpenData>
<span v-if="index < 2 && index < row.girdMemberNames.length - 1"></span>
</div>
</div>
<el-button type="text" @click="showGridMembers(row)">{{ row.girdMemberNumber || 0 }}</el-button>
</template>
</el-table-column>
<el-table-column
@@ -133,8 +116,8 @@
width="160">
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="see(row)">编辑</el-button>
<el-button type="text" @click="poltting(row)" :disabled="row.girdLevel !== '2'">标绘</el-button>
<el-button type="text" @click="showEdit(row.id)">编辑</el-button>
<el-button type="text" @click="poltting(row)">标绘</el-button>
<el-button type="text" @click="deleteById(row.id)">删除</el-button>
</div>
</template>
@@ -195,15 +178,27 @@
>
</div>
</ai-dialog>
</div>
<ai-dialog :title="`${gridInfo.girdName}网格成员`" :visible.sync="dialog" customFooter @closed="gridInfo={}"
width="700px">
<ai-table :tableData="gridInfo.tableData" :colConfigs="gridMemberColConfigs" :dict="dict"
:isShowPagination="false" :show-header="false">
<el-table-column slot="tags">
<template slot-scope="{row}">
<el-tag v-if="row.label" effect="dark" size="small">{{ row.label }}</el-tag>
</template>
</el-table-column>
</ai-table>
<template #footer>
<el-button @click="dialog=false">关闭</el-button>
</template>
</ai-dialog>
</section>
</template>
<script>
import AMapLoader from "@amap/amap-jsapi-loader";
import Template from '../../../../../packages/wechat/AppAskForm/components/Template.vue';
export default {
components: {Template},
name: "List",
label: "网格区块",
props: {
@@ -246,77 +241,31 @@ export default {
isEdit: false,
searchId: "",
fileList: [],
location: {}
location: {},
dialog: false,
gridInfo: {},
gridMemberColConfigs: [
{prop: "wxUserId", openType: 'userName'},
{prop: "girdMemberType", dict: "girdMemberType"},
{slot: "tags"}
]
};
},
created() {
this.getTreeList();
this.getList();
this.getCorpLocation()
this.dict.load("girdLevel", "girdType", "isLastLevel", "plottingStatus");
this.dict.load("girdLevel", "girdType", "isLastLevel", "plottingStatus", "girdMemberType");
},
computed: {
colConfigs() {
let _ = this;
return [
{type: 'selection'},
{
prop: "girdName",
align: "left",
label: "网格名称",
},
{
prop: "girdCode",
align: "center",
label: "网格编码",
},
{
prop: "girdType",
align: "center",
label: "网格类型",
render(h, {row}) {
return h("span", {}, _.dict.getLabel("girdType", row.girdType) || '-');
},
},
{
prop: "girdLevel",
align: "center",
label: "网格层级",
render(h, {row}) {
return h("span", {}, _.dict.getLabel("girdLevel", row.girdLevel) || '-');
},
},
{
prop: "plottingStatus",
align: "center",
label: "标绘状态",
render(h, {row}) {
return h(
"span",
{
style: {
color: _.dict.getColor("plottingStatus", row.plottingStatus),
},
},
_.dict.getLabel("plottingStatus", row.plottingStatus)
);
},
},
{
prop: "createTime",
align: "center",
label: "创建时间",
render(h, {row}) {
return h("span", {}, row.createTime.substring(0, 11));
},
},
{
prop: "girdMemberNames",
align: "center",
slot: 'user',
width: 200,
label: "网格员",
},
{prop: "girdName", align: "left", label: "网格名称",},
{slot: 'user'},
{prop: "plottingStatus", align: "center", label: "标绘状态", dict: "plottingStatus"},
{prop: "createTime", align: "center", label: "创建时间", dateFormat: "YYYY-MM-DD"},
{slot: "options"}
];
},
},
@@ -334,12 +283,9 @@ export default {
this.getList();
},
getTreeList() {
this.instance
.post("/app/appgirdinfo/listByTop", null, null)
.then((res) => {
if (res.code == 0) {
this.treeObj.treeList = [...res.data];
this.instance.post("/app/appgirdinfo/listAllByTop").then(res => {
if (res?.data) {
this.treeObj.treeList = [res.data];
this.$nextTick(() => {
if (this.treeObj.treeList.length && !this.info.girdLevel) {
this.$refs.tree.setCurrentKey(this.treeObj.treeList[0].id)
@@ -398,15 +344,13 @@ export default {
});
},
getList() {
this.instance
.post("/app/appgirdinfo/list", null, {
this.instance.post("/app/appgirdinfo/list", null, {
params: {
...this.searchObj,
...this.page,
parentGirdId: this.info.girdLevel === '0' ? '' : this.searchId,
},
})
.then((res) => {
}).then((res) => {
if (res?.data) {
this.tableData = res.data.records.map(v => {
return {
@@ -430,10 +374,9 @@ export default {
this.toAdd()
},
toAdd() {
this.$emit('change', {
type: 'Add',
params: this.info,
isEdit: this.isEdit
let {id: parentGirdId, girdName: parentGirdName} = this.info
this.$router.push({
hash: "#add", query: {parentGirdId, parentGirdName}
})
},
goBack() {
@@ -498,10 +441,8 @@ export default {
console.log(e);
});
},
see(row) {
this.info = {...row};
this.isEdit = true;
this.toAdd()
showEdit(id) {
this.$router.push({hash: "#add", query: {id}})
},
draw(type) {
switch (type) {
@@ -607,6 +548,19 @@ export default {
});
this.getList();
},
showGridMembers(row) {
if (row.girdMemberNumber > 0) {
this.gridInfo = this.$copy(row)
this.instance.post("/app/appgirdmemberinfo/listByGirdIdByThree", null, {
params: {girdId: row.id}
}).then(res => {
if (res?.data) {
this.gridInfo.tableData = res.data
this.dialog = true
}
})
} else this.$message.warning("当前网格无成员")
}
},
};
</script>
@@ -711,6 +665,10 @@ export default {
}
}
::v-deep.ai-list__content--right {
overflow: visible !important;
}
::v-deep .treePanel {
display: flex;
flex-direction: column;

View File

@@ -18,7 +18,7 @@ import List from "./components/list";
export default {
name: "AppGridMap",
label: "网格地图",
label: "网格地图(saas)",
props: {
instance: Function,

View File

@@ -8,7 +8,7 @@
:params="params"
:instance="instance"
:dict="dict"
></component>
/>
</keep-alive>
</div>
</template>
@@ -20,8 +20,7 @@ import Family from "./components/Family";
export default {
name: "AppGridMember",
label: "网格管理员",
label: "网格管理员(saas)",
props: {
instance: Function,
dict: Object,
@@ -41,7 +40,8 @@ export default {
Family
},
mounted() {},
mounted() {
},
methods: {
onChange(data) {

View File

@@ -0,0 +1,216 @@
<template>
<ai-list class="list">
<template slot="title">
<ai-title title="网格员管理" :isShowBottomBorder="true"></ai-title>
</template>
<template slot="content">
<ai-search-bar bottomBorder>
<template slot="left">
<el-date-picker
v-model="searchObj.selectionDate"
type="date"
@change="(page.current = 1), getList()"
value-format="yyyy-MM-dd"
size="small"
placeholder="选用时间">
</el-date-picker>
</template>
<template slot="right">
<el-input
v-model="searchObj.name"
size="small"
placeholder="责任网格"
@keyup.enter.native="(page.current = 1), getList()"
clearable
@clear="(searchObj.name = '', page.current = 1), getList()"
suffix-icon="iconfont iconSearch"/>
</template>
</ai-search-bar>
<ai-search-bar style="padding: 16px 0 0">
<template slot="left">
<el-button
icon="iconfont iconAdd"
type="primary"
size="small"
@click="add('')"
>添加
</el-button
>
<el-button
icon="iconfont iconDelete"
@click="deleteById(ids.join(','))"
:disabled="!Boolean(ids.length)"
>删除
</el-button
>
</template>
</ai-search-bar>
<ai-table :tableData="tableData"
:col-configs="colConfigs"
:total="page.total"
ref="aitableex"
:current.sync="page.current"
:size.sync="page.size"
@selection-change="(v) => (ids = v.map((e) => e.id))"
@getList="getList()">
<el-table-column label="操作" slot="options" align="center" fixed="right" width="200">
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="setTag(row)">标签</el-button>
<el-button type="text" @click="toFamily(row.id)">责任家庭</el-button>
<el-button type="text" @click="add(row.id)">查看</el-button>
<el-button type="text" @click="deleteById(row.id)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
<ai-dialog title="设置标签" :visible.sync="dialog" @closed="form={}" @onConfirm="submit"
width="400px">
<el-form :model="form" size="small" ref="DialogForm" :rules="rules" label-width="0">
<el-form-item prop="label">
<el-input v-model="form.label" maxlength="10" show-word-limit clearable placeholder="请输入标签信息,最多10个字"/>
</el-form-item>
</el-form>
</ai-dialog>
</template>
</ai-list>
</template>
<script>
export default {
name: "list",
label: "网格员管理",
props: {
instance: Function,
dict: Object,
permissions: Function,
},
data() {
return {
searchObj: {
name: "",
selectionDate: "",
},
page: {
current: 1,
size: 10,
total: 0,
},
goAdd: false,
tableData: [],
fileList: [],
ids: [],
detail: {},
dialog: false,
form: {},
rules: {}
};
},
created() {
this.dict.load("sex", "girdMemberType", "politicsStatus", "education");
this.getList();
},
computed: {
colConfigs() {
return [
{type: "selection"},
{prop: "wxUserId", label: "网格员姓名", openType: 'userName'},
{prop: "girdInfoListStr", align: "center", label: "责任网格"},
{prop: "phone", align: "center", label: "联系电话"},
{prop: "label", align: "center", label: "标签信息"},
{prop: "selectionDate", align: "center", label: "选用时间"},
];
},
},
methods: {
getList() {
this.instance
.post("/app/appgirdmemberinfo/list", null, {
params: {
...this.searchObj,
...this.page,
},
})
.then((res) => {
if (res.code == 0) {
this.tableData = res.data.records;
this.page.total = res.data.total;
}
});
},
deleteById(ids) {
ids &&
this.$confirm("是否要删除该网格员", {
type: "error",
})
.then(() => {
this.instance
.post("/app/appgirdmemberinfo/delete", null, {
params: {ids},
})
.then((res) => {
if (res?.code == 0) {
this.$message.success("删除成功!");
this.getList();
}
});
})
.catch(() => {
});
},
add(id) {
this.$emit('change', {
type: 'Add',
params: {
id: id || ''
}
})
},
toFamily(id) {
this.$emit('change', {
type: 'Family',
params: {
id
}
})
},
handleSelectionChange(val) {
this.ids = [];
val.map((e) => {
this.ids.push(e.id);
});
},
resetSearch() {
Object.keys(this.searchObj).map((e) => {
this.searchObj[e] = "";
});
this.getList();
},
setTag(row) {
this.form = this.$copy(row)
this.dialog = true
},
submit() {
this.$refs.DialogForm.validate(v => {
if (v) {
let loading = this.$loading({text: "提交中...", background: 'rgba(0,0,0,.8)'})
let {id, label} = this.form
this.instance.post("/app/appgirdmemberinfo/updateGirdMemberLabelById", null, {
params: {id, label}
}).then(res => {
loading.close()
if (res?.code == 0) {
this.$message.success("提交成功!")
this.dialog = false
this.getList()
}
}).catch(() => loading.close())
}
})
},
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@@ -30,7 +30,12 @@
</el-row>
</el-form-item>
<el-form-item v-else/>
<el-form-item label="联系人">{{ detail.name }}</el-form-item>
<el-form-item label="联系人">
<el-row type="flex">
<div v-text="detail.name"/>
<person-credit-report :person="detail" :instance="instance" :dict="dict"/>
</el-row>
</el-form-item>
<el-form-item label="所在地区">{{ detail.areaName }}</el-form-item>
<el-form-item label="联系方式">{{ detail.phone }}</el-form-item>
<el-form-item label="身份证号">{{ detail.idNumber }}</el-form-item>
@@ -56,10 +61,11 @@
<script>
import {mapState} from "vuex";
import EnterpriseDialog from "../../../components/enterpriseDialog";
import PersonCreditReport from "../../../components/personCreditReport";
export default {
name: "needsDetail",
components: {EnterpriseDialog},
components: {PersonCreditReport, EnterpriseDialog},
props: {
instance: Function,
dict: Object,

View File

@@ -221,9 +221,8 @@
: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.trim="op.fieldValue"
clearable v-if="op.fieldDataType=='0'" oninput="value=value.replace(/[^\d]/g,'')" show-word-limit
:maxlength="op.fieldLength"/>
<el-input placeholder="请输入..." v-model.number="op.fieldValue"
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