Merge branch 'dev' into vite
# Conflicts: # packages/IntelligentSecurity/AppISManage/AppISManage.vue # vue.config.js
This commit is contained in:
@@ -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: ['基本信息', '每日上报', '异常处理']
|
||||
|
||||
@@ -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 => {
|
||||
e.reset()
|
||||
})
|
||||
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,347 +146,375 @@
|
||||
this.monitors = [this.monitors[0]]
|
||||
}
|
||||
|
||||
this.$refs.AiMonitor && this.$refs.AiMonitor.forEach(e => {
|
||||
e.reset()
|
||||
})
|
||||
this.$refs.AiMonitor &&
|
||||
this.$refs.AiMonitor.forEach((e) => {
|
||||
e.reset()
|
||||
})
|
||||
},
|
||||
|
||||
onReplay (e) {
|
||||
onReplay(e) {
|
||||
this.isLoading = true
|
||||
this.instance.post(`/app/appzyvideoequipment/getSlwPlaybackUrl`, null, {
|
||||
params: {
|
||||
ids: this.ids,
|
||||
startTime: e.startTime,
|
||||
endTime: e.endTime,
|
||||
nvrCodes: this.ids
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (res.data && res.data.length) {
|
||||
this.playbackUrls = res.data
|
||||
this.isLoading = false
|
||||
this.instance
|
||||
.post(`/app/appzyvideoequipment/getSlwPlaybackUrl`, null, {
|
||||
params: {
|
||||
ids: this.ids,
|
||||
startTime: e.startTime,
|
||||
endTime: e.endTime,
|
||||
nvrCodes: this.ids,
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
if (res.data && res.data.length) {
|
||||
this.playbackUrls = res.data
|
||||
this.isLoading = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(() => {
|
||||
this.isLoading = false
|
||||
})
|
||||
})
|
||||
.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 => {
|
||||
if (res?.data) {
|
||||
this.videoUrl = res.data
|
||||
let data = {
|
||||
url: res.data,
|
||||
isShowPlayBtn: false
|
||||
}
|
||||
if (refresh) {
|
||||
monitor.url = data.url
|
||||
} else if (this.splitScreen == 1) {
|
||||
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})
|
||||
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,
|
||||
}
|
||||
if (refresh) {
|
||||
monitor.url = data.url
|
||||
} else if (this.splitScreen == 1) {
|
||||
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 })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
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]}/>
|
||||
<div>{node.label}</div>
|
||||
</div>
|
||||
<div class="flexRow">
|
||||
{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">
|
||||
<p>{data.online || 0}</p>/{data.sum || 0}
|
||||
</div>
|
||||
: <div/>}
|
||||
{data.id != 'no_area' ? (
|
||||
<div class="sta">
|
||||
<p>{data.online || 0}</p>/{data.sum || 0}
|
||||
</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 ? {
|
||||
lat: e.node.lat,
|
||||
lng: e.node.lng
|
||||
} : ''
|
||||
} else if (e.type == 'locate') {
|
||||
//地图标绘
|
||||
this.latlng =
|
||||
e.node.lat && e.node.lng
|
||||
? {
|
||||
lat: e.node.lat,
|
||||
lng: e.node.lng,
|
||||
}
|
||||
: ''
|
||||
this.locate = true
|
||||
}
|
||||
},
|
||||
handleSubmit(row) {
|
||||
delete row.createTime
|
||||
return this.instance.post("/app/appzyvideoequipment/addOrUpdate", {
|
||||
...row
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
this.$message.success("提交成功!")
|
||||
this.dialog = false
|
||||
this.$refs.DeviceSlider?.getDevices()
|
||||
}
|
||||
})
|
||||
return this.instance
|
||||
.post('/app/appzyvideoequipment/addOrUpdate', {
|
||||
...row,
|
||||
})
|
||||
.then((res) => {
|
||||
if (res?.code == 0) {
|
||||
this.$message.success('提交成功!')
|
||||
this.dialog = false
|
||||
this.$refs.DeviceSlider?.getDevices()
|
||||
}
|
||||
})
|
||||
},
|
||||
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 {
|
||||
display: flex;
|
||||
background: #202330;
|
||||
height: 100%;
|
||||
|
||||
.monitorPane {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding: 20px 20px 20px 4px;
|
||||
.AppISManage {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #202330;
|
||||
height: 100%;
|
||||
|
||||
::v-deep .headerBar {
|
||||
.monitorPane {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding: 20px 20px 20px 4px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
margin-bottom: 24px;
|
||||
flex-direction: column;
|
||||
|
||||
.headerBar-item {
|
||||
::v-deep .headerBar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background: #2C2F3E;
|
||||
border-radius: 4px;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
margin-bottom: 24px;
|
||||
|
||||
.headerBar-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background: #2c2f3e;
|
||||
border-radius: 4px;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
|
||||
&.cancel-xt {
|
||||
background: linear-gradient(90deg, #299fff 0%, #0c61ff 100%);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
color: #fff;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.el-input__icon {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-input--prefix .el-input__inner {
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
.el-input--suffix .el-input__inner {
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
.el-input__prefix {
|
||||
top: 50%;
|
||||
left: 10px;
|
||||
height: auto;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.el-input {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
padding: 0 12px;
|
||||
box-sizing: border-box;
|
||||
background: #2c2f3e;
|
||||
}
|
||||
|
||||
input {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.el-input__inner,
|
||||
.el-button {
|
||||
color: #fff;
|
||||
border: none;
|
||||
background: transparent;
|
||||
|
||||
&:hover {
|
||||
color: #26f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.videoList {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.videoBox {
|
||||
position: relative;
|
||||
background: #000;
|
||||
flex-shrink: 0;
|
||||
|
||||
& > span {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 11;
|
||||
width: 60%;
|
||||
height: 38px;
|
||||
line-height: 38px;
|
||||
padding: 0 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.videoBox-close {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
right: 8px;
|
||||
top: 8px;
|
||||
z-index: 11;
|
||||
width: 84px;
|
||||
height: 32px;
|
||||
line-height: 1;
|
||||
background: linear-gradient(180deg, #2e3447 0%, #151825 100%);
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
color: #fff;
|
||||
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
i {
|
||||
position: relative;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep.el-tree-node__content:hover {
|
||||
.menuBtn {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .flexRow {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
|
||||
span {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
|
||||
&.cancel-xt {
|
||||
background: linear-gradient(90deg, #299FFF 0%, #0C61FF 100%);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 6px;
|
||||
}
|
||||
border-radius: 1px;
|
||||
background: #2266ff;
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
color: #fff;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
color: #89b;
|
||||
|
||||
.el-input__icon {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-input--prefix .el-input__inner {
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
.el-input--suffix .el-input__inner {
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
.el-input__prefix {
|
||||
top: 50%;
|
||||
left: 10px;
|
||||
height: auto;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.el-input {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
padding: 0 12px;
|
||||
box-sizing: border-box;
|
||||
background: #2C2F3E;
|
||||
}
|
||||
|
||||
input {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.el-input__inner, .el-button {
|
||||
color: #fff;
|
||||
border: none;
|
||||
background: transparent;
|
||||
|
||||
&:hover {
|
||||
color: #26f;
|
||||
&.show {
|
||||
color: #19d286;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.videoList {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
gap: 8px;
|
||||
}
|
||||
.sta {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
|
||||
.videoBox {
|
||||
position: relative;
|
||||
background: #000;
|
||||
flex-shrink: 0;
|
||||
& > p {
|
||||
color: #19d286;
|
||||
}
|
||||
}
|
||||
|
||||
& > span {
|
||||
.menuBtn {
|
||||
display: none;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 11;
|
||||
width: 60%;
|
||||
height: 38px;
|
||||
line-height: 38px;
|
||||
padding: 0 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.videoBox-close {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
right: 8px;
|
||||
top: 8px;
|
||||
z-index: 11;
|
||||
width: 84px;
|
||||
height: 32px;
|
||||
line-height: 1;
|
||||
background: linear-gradient(180deg, #2E3447 0%, #151825 100%);
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
color: #fff;
|
||||
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
i {
|
||||
position: relative;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
right: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep.el-tree-node__content:hover {
|
||||
.menuBtn {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .flexRow {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
|
||||
span {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
border-radius: 1px;
|
||||
background: #2266FF;
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
color: #89b;
|
||||
|
||||
&.show {
|
||||
color: #19D286;
|
||||
}
|
||||
}
|
||||
|
||||
.sta {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
|
||||
& > p {
|
||||
color: #19D286;
|
||||
}
|
||||
}
|
||||
|
||||
.menuBtn {
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
@@ -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,30 +417,43 @@
|
||||
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;
|
||||
}
|
||||
|
||||
.playback-item__timeline {
|
||||
flex: 1;
|
||||
height: 12px;
|
||||
line-height: 1;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.el-checkbox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
// width: 100%;
|
||||
|
||||
.el-checkbox__label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
|
||||
.playback-item__timeline {
|
||||
flex: 1;
|
||||
height: 12px;
|
||||
line-height: 1;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
span {
|
||||
width: 60px;
|
||||
color: #fff;
|
||||
|
||||
@@ -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">
|
||||
<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>
|
||||
<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>
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
export default {
|
||||
name: "AppGridMemberJp",
|
||||
label: "网格管理员",
|
||||
label: "网格管理员(防返贫)",
|
||||
|
||||
props: {
|
||||
instance: Function,
|
||||
|
||||
@@ -8,38 +8,39 @@
|
||||
<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"
|
||||
:label="item.girdName"
|
||||
:value="item.id"
|
||||
v-for="(item,i) in girdList"
|
||||
:key="i"
|
||||
:label="item.girdName"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #right>
|
||||
<el-input
|
||||
v-model="search.name"
|
||||
class="search-input"
|
||||
size="small"
|
||||
v-throttle="() => {search.current = 1, getList()}"
|
||||
placeholder="姓名/身份证/联系方式"
|
||||
clearable
|
||||
@clear="search.current = 1, search.name = '', getList()"
|
||||
suffix-icon="iconfont iconSearch">
|
||||
v-model="search.name"
|
||||
class="search-input"
|
||||
size="small"
|
||||
v-throttle="() => {search.current = 1, getList()}"
|
||||
placeholder="姓名/身份证/联系方式"
|
||||
clearable
|
||||
@clear="search.current = 1, search.name = '', getList()"
|
||||
suffix-icon="iconfont iconSearch">
|
||||
</el-input>
|
||||
</template>
|
||||
</ai-search-bar>
|
||||
<ai-table
|
||||
:tableData="tableData"
|
||||
:col-configs="colConfigs"
|
||||
:total="total"
|
||||
style="margin-top: 6px;"
|
||||
:current.sync="search.current"
|
||||
:size.sync="search.size"
|
||||
@handleSelectionChange="handleSelectionChange"
|
||||
@getList="getList">
|
||||
:tableData="tableData"
|
||||
:col-configs="colConfigs"
|
||||
:total="total"
|
||||
style="margin-top: 6px;"
|
||||
:current.sync="search.current"
|
||||
:size.sync="search.size"
|
||||
@handleSelectionChange="handleSelectionChange"
|
||||
@getList="getList">
|
||||
<el-table-column slot="options" width="100px" fixed="right" label="操作" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<div class="table-options">
|
||||
@@ -49,19 +50,20 @@
|
||||
</el-table-column>
|
||||
</ai-table>
|
||||
<ai-dialog
|
||||
:visible.sync="isShow"
|
||||
width="890px"
|
||||
@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>
|
||||
:visible.sync="isShow"
|
||||
width="890px"
|
||||
@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>
|
||||
<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
|
||||
v-for="(item,i) in girdList"
|
||||
:key="i"
|
||||
:label="item.girdName"
|
||||
:value="item.id"
|
||||
v-for="(item,i) in girdList"
|
||||
:key="i"
|
||||
:label="item.girdName"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
@@ -72,22 +74,22 @@
|
||||
<h2>户主信息列表</h2>
|
||||
</div>
|
||||
<el-input
|
||||
class="search-input"
|
||||
size="mini"
|
||||
placeholder="请输入姓名/身份证号"
|
||||
v-model="name"
|
||||
clearable
|
||||
v-throttle="getUserList"
|
||||
@clear="name = '', getUserList()"
|
||||
suffix-icon="iconfont iconSearch">
|
||||
class="search-input"
|
||||
size="mini"
|
||||
placeholder="请输入姓名/身份证号"
|
||||
v-model="name"
|
||||
clearable
|
||||
v-throttle="getUserList"
|
||||
@clear="name = '', getUserList()"
|
||||
suffix-icon="iconfont iconSearch">
|
||||
</el-input>
|
||||
</div>
|
||||
<el-scrollbar class="AiWechatSelecter-list">
|
||||
<el-checkbox-group v-model="chooseUser">
|
||||
<el-checkbox
|
||||
:label="`${item.name}~${item.id}`"
|
||||
v-for="(item, index) in userList"
|
||||
:key="index">
|
||||
:label="`${item.name}~${item.id}`"
|
||||
v-for="(item, index) in userList"
|
||||
:key="index">
|
||||
{{ item.name }}-{{ item.idNumber }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
@@ -102,12 +104,12 @@
|
||||
<el-scrollbar class="AiWechatSelecter-list">
|
||||
<div class="tags-wrapper">
|
||||
<el-tag
|
||||
v-for="(item, index) in chooseUser"
|
||||
:key="index"
|
||||
closable
|
||||
@close="del(item)"
|
||||
size="small"
|
||||
type="info">
|
||||
v-for="(item, index) in chooseUser"
|
||||
:key="index"
|
||||
closable
|
||||
@close="del(item)"
|
||||
size="small"
|
||||
type="info">
|
||||
{{ item.split('~')[0] }}
|
||||
</el-tag>
|
||||
</div>
|
||||
@@ -120,379 +122,380 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
export default {
|
||||
name: 'Family',
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
props: {
|
||||
instance: Function,
|
||||
dict: Object,
|
||||
params: Object
|
||||
},
|
||||
export default {
|
||||
name: 'Family',
|
||||
|
||||
data() {
|
||||
return {
|
||||
search: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
name: '',
|
||||
girdId: ''
|
||||
},
|
||||
isLoading: false,
|
||||
form: {
|
||||
props: {
|
||||
instance: Function,
|
||||
dict: Object,
|
||||
params: Object
|
||||
},
|
||||
|
||||
},
|
||||
userList: [],
|
||||
data() {
|
||||
return {
|
||||
search: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
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' }
|
||||
],
|
||||
tableData: [],
|
||||
areaId: '',
|
||||
ids: [],
|
||||
disabledLevel: 0,
|
||||
girdList: [],
|
||||
girdId: '',
|
||||
}
|
||||
},
|
||||
girdId: ''
|
||||
},
|
||||
isLoading: false,
|
||||
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'}
|
||||
],
|
||||
tableData: [],
|
||||
areaId: '',
|
||||
ids: [],
|
||||
disabledLevel: 0,
|
||||
girdList: [],
|
||||
girdId: '',
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapState(['user'])
|
||||
},
|
||||
computed: {
|
||||
...mapState(['user'])
|
||||
},
|
||||
|
||||
created() {
|
||||
this.areaId = this.user.info.areaId
|
||||
this.disabledLevel = this.user.info.areaList.length
|
||||
this.dict.load('epidemicDangerousAreaLevel').then(() => {
|
||||
this.getGirdList()
|
||||
this.getList()
|
||||
this.getUserList()
|
||||
created() {
|
||||
this.areaId = this.user.info.areaId
|
||||
this.disabledLevel = this.user.info.areaList.length
|
||||
this.dict.load('epidemicDangerousAreaLevel').then(() => {
|
||||
this.getGirdList()
|
||||
this.getList()
|
||||
this.getUserList()
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
getGirdList() {
|
||||
this.instance.post(`/app/appgirdmemberinfo/queryMyGirdListByLevel2?girdMemberId=${this.params.id}`).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.girdList = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getListInit() {
|
||||
this.search.current = 1
|
||||
this.getList()
|
||||
},
|
||||
getList() {
|
||||
this.instance.post(`/app/appgirdmemberpoverty/listByGirdMemberByWeb`, null, {
|
||||
params: {
|
||||
...this.search,
|
||||
girdMemberId: this.params.id,
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.tableData = res.data.records
|
||||
this.total = res.data.total
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
getGirdList() {
|
||||
this.instance.post(`/app/appgirdmemberinfo/queryMyGirdListByLevel2?girdMemberId=${this.params.id}`).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.girdList = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getListInit() {
|
||||
this.search.current = 1
|
||||
this.getList()
|
||||
},
|
||||
getList () {
|
||||
this.instance.post(`/app/appgirdmemberpoverty/listByGirdMemberByWeb`, null, {
|
||||
params: {
|
||||
...this.search,
|
||||
girdMemberId: this.params.id,
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.tableData = res.data.records
|
||||
this.total = res.data.total
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
removeAll() {
|
||||
if (!this.ids) {
|
||||
return this.$message.error('请选择户主')
|
||||
}
|
||||
this.remove(this.ids.join(','))
|
||||
},
|
||||
handleSelectionChange(e) {
|
||||
this.ids = e.map(v => v.gmrId)
|
||||
},
|
||||
|
||||
clearAll () {
|
||||
this.chooseUser = []
|
||||
},
|
||||
|
||||
onConfirm () {
|
||||
if(!this.girdId) {
|
||||
return this.$message.error('请选择网格')
|
||||
}
|
||||
|
||||
if (!this.chooseUser.length) {
|
||||
return this.$message.error('请选择户主')
|
||||
}
|
||||
|
||||
const povertyList = this.chooseUser.map(v => {
|
||||
return {
|
||||
girdMemberId: this.params.id,
|
||||
name: v.split('~')[0],
|
||||
girdId: this.girdId,
|
||||
povertyId: v.split('~')[1]
|
||||
}
|
||||
})
|
||||
this.instance.post(`/app/appgirdmemberpoverty/add`, {
|
||||
povertyList
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.current = 1
|
||||
this.getList()
|
||||
this.$message.success('添加成功')
|
||||
this.closeDialog()
|
||||
}
|
||||
})
|
||||
},
|
||||
closeDialog() {
|
||||
this.isShow = false
|
||||
this.chooseUser = []
|
||||
this.girdId = ''
|
||||
this.name = ''
|
||||
this.areaId = this.user.info.areaId
|
||||
this.getUserList()
|
||||
},
|
||||
|
||||
del (e) {
|
||||
this.chooseUser.splice(this.chooseUser.indexOf(e), 1)
|
||||
},
|
||||
|
||||
getUserList () {
|
||||
this.isLoading = true
|
||||
this.instance.post(`/app/apppreventionreturntopoverty/list`, null, {
|
||||
params: {
|
||||
current: 1,
|
||||
size: 200,
|
||||
con: this.name,
|
||||
isHousehold: 1,
|
||||
areaId: this.areaId
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.userList = res.data.records
|
||||
}
|
||||
|
||||
this.isLoading = false
|
||||
})
|
||||
},
|
||||
|
||||
onBack () {
|
||||
this.$emit('change', {
|
||||
type: 'list'
|
||||
})
|
||||
},
|
||||
|
||||
remove(id) {
|
||||
this.$confirm('确定删除该数据?').then(() => {
|
||||
this.instance.post(`/app/appgirdmemberresident/delete?ids=${id}`).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('删除成功!')
|
||||
this.getList()
|
||||
}
|
||||
})
|
||||
})
|
||||
if (!this.ids) {
|
||||
return this.$message.error('请选择户主')
|
||||
}
|
||||
this.remove(this.ids.join(','))
|
||||
},
|
||||
handleSelectionChange(e) {
|
||||
this.ids = e.map(v => v.gmpId)
|
||||
},
|
||||
|
||||
clearAll() {
|
||||
this.chooseUser = []
|
||||
},
|
||||
|
||||
onConfirm() {
|
||||
if (!this.girdId) {
|
||||
return this.$message.error('请选择网格')
|
||||
}
|
||||
|
||||
if (!this.chooseUser.length) {
|
||||
return this.$message.error('请选择户主')
|
||||
}
|
||||
|
||||
const povertyList = this.chooseUser.map(v => {
|
||||
return {
|
||||
girdMemberId: this.params.id,
|
||||
name: v.split('~')[0],
|
||||
girdId: this.girdId,
|
||||
povertyId: v.split('~')[1]
|
||||
}
|
||||
})
|
||||
this.instance.post(`/app/appgirdmemberpoverty/add`, {
|
||||
povertyList
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.current = 1
|
||||
this.getList()
|
||||
this.$message.success('添加成功')
|
||||
this.closeDialog()
|
||||
}
|
||||
})
|
||||
},
|
||||
closeDialog() {
|
||||
this.isShow = false
|
||||
this.chooseUser = []
|
||||
this.girdId = ''
|
||||
this.name = ''
|
||||
this.areaId = this.user.info.areaId
|
||||
this.getUserList()
|
||||
},
|
||||
|
||||
del(e) {
|
||||
this.chooseUser.splice(this.chooseUser.indexOf(e), 1)
|
||||
},
|
||||
|
||||
getUserList() {
|
||||
this.isLoading = true
|
||||
this.instance.post(`/app/apppreventionreturntopoverty/list`, null, {
|
||||
params: {
|
||||
current: 1,
|
||||
size: 200,
|
||||
con: this.name,
|
||||
isHousehold: 1,
|
||||
areaId: this.areaId
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.userList = res.data.records
|
||||
}
|
||||
|
||||
this.isLoading = false
|
||||
})
|
||||
},
|
||||
|
||||
onBack() {
|
||||
this.$emit('change', {
|
||||
type: 'list'
|
||||
})
|
||||
},
|
||||
|
||||
remove(id) {
|
||||
this.$confirm('确定删除该数据?').then(() => {
|
||||
this.instance.post(`/app/appgirdmemberresident/delete?ids=${id}`).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('删除成功!')
|
||||
this.getList()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.Family {
|
||||
.AiWechatSelecter-container {
|
||||
display: flex;
|
||||
height: 380px;
|
||||
margin-top: 20px;
|
||||
.Family {
|
||||
.AiWechatSelecter-container {
|
||||
display: flex;
|
||||
height: 380px;
|
||||
margin-top: 20px;
|
||||
|
||||
::v-deep {
|
||||
.el-icon-circle-close {
|
||||
display: inline-block!important;
|
||||
}
|
||||
::v-deep {
|
||||
.el-icon-circle-close {
|
||||
display: inline-block !important;
|
||||
}
|
||||
}
|
||||
|
||||
.tree-container {
|
||||
& > span {
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.tree-container {
|
||||
& > span {
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.tree-user__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
img {
|
||||
width: 27px;
|
||||
height: 27px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-tree {
|
||||
background: transparent;
|
||||
|
||||
.el-tree-node {
|
||||
margin-bottom: 8px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.el-tree-node__content {
|
||||
height: auto;
|
||||
margin-top: 2px;
|
||||
// align-items: inherit;
|
||||
}
|
||||
|
||||
.el-tree-node__expand-icon {
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.mask-btn__wrapper {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mask-btn {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.userlist-item {
|
||||
.tree-user__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
width: 27px;
|
||||
height: 27px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-tree {
|
||||
background: transparent;
|
||||
|
||||
.el-tree-node {
|
||||
margin-bottom: 8px;
|
||||
padding: 0 17px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
::v-deep .el-checkbox__label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.userlist-item__left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
& > div {
|
||||
width: 280px;
|
||||
background: #FCFCFC;
|
||||
border: 1px solid #D0D4DC;
|
||||
.el-tree-node__content {
|
||||
height: auto;
|
||||
margin-top: 2px;
|
||||
// align-items: inherit;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-list {
|
||||
height: calc(100% - 40px);
|
||||
padding: 8px 0;
|
||||
.el-tree-node__expand-icon {
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-scrollbar__wrap {
|
||||
margin-bottom: 0!important;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.mask-btn__wrapper {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
::v-deep .el-checkbox-group {
|
||||
padding: 0 8px;
|
||||
.mask-btn {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.el-checkbox {
|
||||
display: block;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
.userlist-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 8px;
|
||||
padding: 0 17px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
::v-deep .el-checkbox__label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-container__left {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-container__right {
|
||||
flex: 1;
|
||||
margin-left: 20px;
|
||||
|
||||
.AiWechatSelecter-list {
|
||||
.tags-wrapper {
|
||||
padding: 0 8px;
|
||||
}
|
||||
.el-tag {
|
||||
margin: 0 8px 8px 0px;
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.AiWechatSelecter-header {
|
||||
.userlist-item__left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 40px;
|
||||
padding: 0 8px 0 0;
|
||||
border-bottom: 1px solid #D0D4DC;
|
||||
background: #F5F7FA;
|
||||
|
||||
.AiWechatSelecter-header__left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 8px;
|
||||
|
||||
h2 {
|
||||
height: 100%;
|
||||
line-height: 40px;
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
border-bottom: 2px solid transparent;
|
||||
|
||||
&.active {
|
||||
color: #2266FF;
|
||||
border-color: #2266FF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el-button {
|
||||
height: 28px;
|
||||
padding: 7px 5px;
|
||||
}
|
||||
|
||||
.el-input {
|
||||
width: 160px;
|
||||
}
|
||||
}
|
||||
|
||||
.AiWechatSelecter-header__right {
|
||||
padding: 0 8px;
|
||||
|
||||
h2 {
|
||||
span {
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > div {
|
||||
width: 280px;
|
||||
background: #FCFCFC;
|
||||
border: 1px solid #D0D4DC;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-list {
|
||||
height: calc(100% - 40px);
|
||||
padding: 8px 0;
|
||||
|
||||
::v-deep .el-scrollbar__wrap {
|
||||
margin-bottom: 0 !important;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
::v-deep .el-checkbox-group {
|
||||
padding: 0 8px;
|
||||
|
||||
.el-checkbox {
|
||||
display: block;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.AiWechatSelecter-container__left {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-container__right {
|
||||
flex: 1;
|
||||
margin-left: 20px;
|
||||
|
||||
.AiWechatSelecter-list {
|
||||
.tags-wrapper {
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
.el-tag {
|
||||
margin: 0 8px 8px 0px;
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.AiWechatSelecter-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 40px;
|
||||
padding: 0 8px 0 0;
|
||||
border-bottom: 1px solid #D0D4DC;
|
||||
background: #F5F7FA;
|
||||
|
||||
.AiWechatSelecter-header__left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 8px;
|
||||
|
||||
h2 {
|
||||
height: 100%;
|
||||
line-height: 40px;
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
border-bottom: 2px solid transparent;
|
||||
|
||||
&.active {
|
||||
color: #2266FF;
|
||||
border-color: #2266FF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el-button {
|
||||
height: 28px;
|
||||
padding: 7px 5px;
|
||||
}
|
||||
|
||||
.el-input {
|
||||
width: 160px;
|
||||
}
|
||||
}
|
||||
|
||||
.AiWechatSelecter-header__right {
|
||||
padding: 0 8px;
|
||||
|
||||
h2 {
|
||||
color: #222222;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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'},
|
||||
]
|
||||
},
|
||||
},
|
||||
@@ -403,18 +426,23 @@ export default {
|
||||
res.data.healthyStatusList = res.data.healthyStatus.split(',')
|
||||
}
|
||||
if(res.data.basicsCheck) {
|
||||
res.data.basicsList = res.data.basicsCheck.split(',')
|
||||
res.data.basicsList = res.data.basicsCheck.split(',')
|
||||
}
|
||||
if(res.data.guaranteeCheck) {
|
||||
res.data.guaranteeList = res.data.guaranteeCheck.split(',')
|
||||
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,7 +488,26 @@ 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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,24 +2,30 @@
|
||||
<section class="List">
|
||||
<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()">
|
||||
</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,8 +73,9 @@
|
||||
<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"
|
||||
:col-configs="colConfigsNew" v-if="type == 2">
|
||||
<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}">
|
||||
<el-button type="text" @click="editNew(row)">编辑</el-button>
|
||||
@@ -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,10 +212,10 @@ 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>
|
||||
</style>
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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: '操作' }
|
||||
|
||||
Reference in New Issue
Block a user