Browse Source

党员管理详情

V1.0
jiangyy 3 years ago
parent
commit
e97f65864a
  1. 73
      src/assets/scss/modules/management/detail-main.scss
  2. 5
      src/views/modules/base/huji/immigration/detail.vue
  3. 28
      src/views/modules/communityParty/article/index.vue
  4. 404
      src/views/modules/communityParty/members/cpts/pointsDetail.vue
  5. 241
      src/views/modules/communityParty/members/cpts/record.vue
  6. 242
      src/views/modules/communityParty/members/detailForm.vue
  7. 605
      src/views/modules/communityParty/members/index.vue
  8. 5
      src/views/modules/cpts/base/index.vue

73
src/assets/scss/modules/management/detail-main.scss

@ -251,6 +251,79 @@
}
}
//一行两列
.m-row-2{
font-size: 15px;
font-family: PingFang SC;
font-weight: 400;
color: #333;
line-height: 24px;
display: flex;
justify-content: flex-start;
width:100%;
.info-prop {
position: relative;
width:50%;
margin: 10px 0;
display: flex;
padding-left: 15px;
padding-top:10px;
.info-pics {
display: flex;
margin: 20px 0;
img {
display: block;
width: 32%;
height: 90px;
margin-right: 9px;
object-fit: cover;
}
}
.line{
text-decoration:underline;
color: #3e8ef7;
}
.line:hover{
cursor:pointer
}
.info-title-2 {
flex: 0 0 100px;
}
.info-title-3{
flex: 0 0 150px;
}
> span,
> div {
display: block;
// max-width: 300px;
}
&::before {
content: "";
display: block;
position: absolute;
top: 19px;
left: 0;
width: 7px;
height: 7px;
background: #0c81fe;
border-radius: 3px;
margin-right: 10px;
}
.div_map {
width:500px;
padding-top:10px
}
}
}
.m-case {
height: 600px;
padding: 20px 0 20px 0;

5
src/views/modules/base/huji/immigration/detail.vue

@ -77,11 +77,6 @@
<script>
import { requestPost } from "@/js/dai/request";
import formVltHelper from 'dai-js/tools/formVltHelper'
import { computedCard } from '@/utils/index'
import { isCard, isMobile } from '@/utils/validate'
export default {
data () {

28
src/views/modules/communityParty/article/index.vue

@ -40,17 +40,17 @@
style="color: #666">下线</el-button>
</template>
<template v-slot:listBtnSup2="{ item }">
<template v-slot:listBtnbefore="{ item }">
<el-button v-if="item.isTop == '1'"
@click="handleOfflineShow(item,'cancel_top')"
@click="handleTopArticle(item,'cancel_top')"
type="text"
size="small"
style="color: #666">取消置顶</el-button>
style="color: #fe6252">取消置顶</el-button>
<el-button v-else
@click="handleOfflineShow(item,'top')"
@click="handleTopArticle(item,'top')"
type="text"
size="small"
style="color: #666">置顶</el-button>
style="color: #22c1c3">置顶</el-button>
</template>
</base-page>
@ -491,6 +491,24 @@ export default {
this.$refs.offlineForm.initForm(item);
},
async handleTopArticle (item, type) {
const url = "/gov/voice/article/topArticle";
const { tableData } = this;
const { data, code, msg } = await requestPost(url, {
articleId: item.articleId,
type: type
});
if (code === 0) {
this.$message.success("操作成功!");
this.$refs.basePage.refresh();
} else {
this.$message.success("操作失败!");
}
},
handleOfflineSuccess () {
this.$refs.basePage.refresh();
this.offlineShowed = false;

404
src/views/modules/communityParty/members/cpts/pointsDetail.vue

@ -0,0 +1,404 @@
<template>
<div class="p-wr">
<el-form label-width="140px"
:model="dateForm"
:inline="true"
:disabled="disabled"
:rules="rules"
ref="ruleForm"
class="form-wr">
<div>
<el-form-item label="评分周期"
prop="year">
<div class="flex-div">
<!-- <div class="mr10">评分周期</div> -->
<div class="mr10">
<el-date-picker v-model="dateForm.year"
type="year"
value-format="yyyy"
placeholder="选择年"
@change="handleYearChange">
</el-date-picker>
</div>
<div class="mr10">
<el-form-item prop="quarter">
<el-select v-model="dateForm.quarter"
placeholder="请选择"
class="input-width"
clearable
@change="handleQuaterChange">
<el-option v-for="item in quarterList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</div>
</div>
</el-form-item>
</div>
</el-form>
<div class="m-row">
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-3">基础积分分值</span>
<span>{{ dateForm.basePoint===0||dateForm.basePoint? dateForm.basePoint:'--'}}</span>
</div>
<div class="info-prop">
<span class="info-title-3">基础积分选项</span>
<span>{{ dateForm.baseOptionsShow }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-3">民主评议积分分值</span>
<span>{{ dateForm.reviewPoint===0||dateForm.reviewPoint? dateForm.reviewPoint:'--'}}</span>
</div>
<div class="info-prop">
<span class="info-title-3">民主评议积分选项</span>
<span>{{dateForm.reviewOptionsShow}}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-3">激励积分分值</span>
<span>{{ dateForm.inspirePoint===0||dateForm.inspirePoint? dateForm.inspirePoint:'--'}}</span>
</div>
<div class="info-prop">
<span class="info-title-3">激励积分选项</span>
<span>{{dateForm.inspireOptionsShow }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-3">警示扣分分值</span>
<span>{{ dateForm.warnPoint===0||dateForm.warnPoint? dateForm.warnPoint:'--'}}</span>
</div>
<div class="info-prop">
<span class="info-title-3">警示扣分选项</span>
<span>{{ dateForm.warnOptionsShow }}</span>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
partyId: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
}
},
data () {
return {
btnDisabled: false,
year: '',
quarter: '',
dateForm: {
partyMemberId: '',
year: '',
quarter: '',
basePoint: '',
baseOptions: [],
reviewPoint: '',
reviewOptions: [],
inspirePoint: '',
inspireOptions: [],
warnPoint: '',
warnOptions: [],
baseOptionsShow: '--',
reviewOptionsShow: '--',
inspireOptionsShow: '--',
warnOptionsShow: '--'
},
rules: {
year: [{ required: true, message: '年度不能为空', trigger: 'blur' }],
quarter: [{ required: true, message: '季度不能为空', trigger: 'blur' }]
},
formItemWd: '500px',
quarterList: [
{
label: '第一季度',
value: '1'
},
{
label: '第二季度',
value: '2'
},
{
label: '第三季度',
value: '3'
},
{
label: '第四季度',
value: '4'
}
],
baseOptions: [
{
label: '参加三会一课',
value: '1'
},
{
label: '参加主题党日',
value: '2'
},
{
label: '足额缴纳党费',
value: 3
},
{
label: '积极参加学习培训',
value: '4'
},
{
label: '自觉执行党组织会议',
value: '5'
},
{
label: '严守党的政治纪律和政治规矩',
value: '6'
},
],
jiliOptions: [
{
label: '发挥先锋模范作用',
value: '1'
},
{
label: '维护社会和谐稳定',
value: '2'
},
{
label: '参与社会治理',
value: '3'
},
{
label: '联系服务群众',
value: '4'
}
],
jinshiOptions: [
{
label: '不服从党组织安排',
value: '1'
},
{
label: '不按时足额缴纳党费',
value: '2'
},
{
label: '无故长期脱离组织管理',
value: '3'
},
{
label: '在工作中出现不良影响',
value: '4'
},
{
label: '违反党的纪律',
value: '5'
}
],
pyiOptions: [
{
label: '个人自评',
value: '1'
},
{
label: '党员互评',
value: '2'
},
{
label: '民主测评',
value: '3'
}
]
}
},
watch: {
partyId: {
handler (val) {
console.log('val------points', val)
if (val.length > 0) this.btnDisabled = false
else this.btnDisabled = true
},
immediate: true
}
},
mounted () {
const w = document.getElementsByClassName('p-wr')[0]
this.formItemWd = w.clientWidth - 360 + 'px'
console.log('www----', w)
},
methods: {
handleQuaterChange (val) {
if (this.dateForm.year) {
this.getInfo()
}
this.quarter = val
},
handleYearChange (val) {
this.year = val
},
async getInfo () {
const params = {
year: this.dateForm.year,
quarter: this.dateForm.quarter,
partyMemberId: this.partyId
}
await this.$http
.post('/resi/partymember/icPartyMemberPoint/echoPartyMemberPoint', params)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
this.dateForm.baseOptionsShow = '--'
this.dateForm.reviewOptionsShow = '--'
this.dateForm.inspireOptionsShow = '--'
this.dateForm.warnOptionsShow = '--'
if (res.data.length > 0) {
let _info = res.data[0]
const info = {
..._info,
baseOptions: _info.baseOptions.length > 0 ? _info.baseOptions.split(',') : [],
reviewOptions: _info.reviewOptions.length > 0 ? _info.reviewOptions.split(',') : [],
inspireOptions: _info.inspireOptions.length > 0 ? _info.inspireOptions.split(',') : [],
warnOptions: _info.warnOptions.length > 0 ? _info.warnOptions.split(',') : []
}
for (const n in info) {
this.dateForm[n] = info[n]
}
console.log('dateForm', this.dateForm)
if (this.dateForm.baseOptions.length > 0) {
let array = []
this.baseOptions.forEach(element => {
if (this.dateForm.baseOptions.indexOf(element.value) > -1) {
array.push(element.label)
}
});
this.dateForm.baseOptionsShow = array.join(',')
}
if (this.dateForm.reviewOptions.length > 0) {
let array = []
this.pyiOptions.forEach(element => {
if (this.dateForm.reviewOptions.indexOf(element.value) > -1) {
array.push(element.label)
}
});
this.dateForm.reviewOptionsShow = array.join(',')
}
if (this.dateForm.inspireOptions.length > 0) {
let array = []
this.jiliOptions.forEach(element => {
if (this.dateForm.inspireOptions.indexOf(element.value) > -1) {
array.push(element.label)
}
});
this.dateForm.inspireOptionsShow = array.join(',')
}
if (this.dateForm.warnOptions.length > 0) {
let array = []
this.jinshiOptions.forEach(element => {
if (this.dateForm.warnOptions.indexOf(element.value) > -1) {
array.push(element.label)
}
});
this.dateForm.warnOptionsShow = array.join(',')
}
} else {
this.$refs['ruleForm'].resetFields()
this.dateForm.quarter = this.quarter
this.dateForm.year = this.year
}
}
})
.catch(err => {
console.log('err', err)
return this.$message.error('网络错误')
})
},
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/detail-main.scss";
</style>
<style lang="scss" scoped>
.flex-div {
display: flex;
align-items: center;
}
.mb20 {
margin-bottom: 20px;
}
.mr10 {
margin-right: 10px;
}
.pdl74 {
padding-left: 74px;
}
.wd-wr {
/deep/ .el-form-item__content {
width: calc(100% - 140px);
}
/deep/ .el-checkbox {
margin-right: 10px;
font-weight: 400;
// line-height: 20px;
.el-checkbox__label {
padding-left: 5px;
}
}
}
.input-width {
width: 160px;
}
</style>

241
src/views/modules/communityParty/members/cpts/record.vue

@ -1,110 +1,105 @@
<template>
<div style="padding-right: 20px;">
<div class="mt10">
<el-button size="small" class="diy-button--add" :disabled="btnDisabled || disabled"
@click="handleAdd">新增</el-button>
<el-button v-if="btnDisabled"
size="small"
class="diy-button--add"
:disabled="btnDisabled || disabled"
@click="handleAdd">新增</el-button>
</div>
<el-table
:data="tableData"
row-key="id"
border
style="width: 100%"
class="resi-table"
height="400px"
:header-cell-style="getRowClass"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
prop="name"
label="缴费日期"
align="center"
width="250px"
>
<template slot-scope="scope">
<el-date-picker
v-if="scope.row.isEdit"
v-model="scope.row.payDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
<div v-else class="div-content">{{ scope.row.payDate }}</div>
<el-table :data="tableData"
row-key="id"
border
style="width: 100%"
class="resi-table"
height="400px"
:header-cell-style="getRowClass">
<el-table-column label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column prop="name"
label="缴费日期"
align="center"
width="250px">
<template slot-scope="scope">
<el-date-picker v-if="scope.row.isEdit"
v-model="scope.row.payDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
<div v-else
class="div-content">{{ scope.row.payDate }}</div>
</template>
</el-table-column>
<el-table-column prop="name"
label="缴费金额"
align="center"
width="180px">
<template slot-scope="scope">
<el-input v-if="scope.row.isEdit"
type="number"
v-model="scope.row.money"
placeholder="请输入"
class="input-width"
clearable></el-input>
<div v-else
class="div-content">{{ scope.row.money }}</div>
</template>
</el-table-column>
<el-table-column prop="name"
label="缴费年度"
align="center"
min-width="250px">
<template slot-scope="scope">
<el-date-picker v-if="scope.row.isEdit"
v-model="scope.row.timeRange"
type="monthrange"
value-format="yyyy-MM"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="handleTimeChangePay($event, scope.row)">
</el-date-picker>
<div v-else
class="div-content">{{ scope.row.startDate + ' - ' + scope.row.endDate }}</div>
</template>
</el-table-column>
<el-table-column v-if="!disabled"
label="操作"
align="center"
width="120">
<template slot-scope="scope">
<template v-if="scope.row.isEdit">
<el-button @click="handleEdit(scope.row)"
type="text"
size="small"
class="btn-color-edit">保存</el-button>
<el-button @click="handleChange(scope.row, 'cancle')"
type="text"
size="small"
class="btn-color-edit">取消</el-button>
</template>
</el-table-column>
<el-table-column
prop="name"
label="缴费金额"
align="center"
width="180px"
>
<template slot-scope="scope">
<el-input v-if="scope.row.isEdit" type="number" v-model="scope.row.money" placeholder="请输入"
class="input-width" clearable></el-input>
<div v-else class="div-content">{{ scope.row.money }}</div>
<template v-else>
<el-button @click="handleChange(scope.row, 'edit')"
type="text"
size="small"
:disabled="disabled"
class="btn-color-edit">修改</el-button>
<el-popconfirm title="删除之后无法恢复,确认删除?"
@onConfirm="del(scope.row)">
<el-button slot="reference"
type="text"
size="small"
class="btn-color-del"
style="margin-left: 10px;">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
<el-table-column
prop="name"
label="缴费年度"
align="center"
min-width="250px"
>
<template slot-scope="scope">
<el-date-picker
v-if="scope.row.isEdit"
v-model="scope.row.timeRange"
type="monthrange"
value-format="yyyy-MM"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="handleTimeChangePay($event, scope.row)">
</el-date-picker>
<div v-else class="div-content">{{ scope.row.startDate + ' - ' + scope.row.endDate }}</div>
</template>
</el-table-column>
<el-table-column v-if="!disabled" label="操作" align="center" width="120">
<template slot-scope="scope">
<template v-if="scope.row.isEdit">
<el-button
@click="handleEdit(scope.row)"
type="text"
size="small"
class="btn-color-edit"
>保存</el-button>
<el-button
@click="handleChange(scope.row, 'cancle')"
type="text"
size="small"
class="btn-color-edit"
>取消</el-button>
</template>
<template v-else>
<el-button
@click="handleChange(scope.row, 'edit')"
type="text"
size="small"
:disabled="disabled"
class="btn-color-edit"
>修改</el-button>
<el-popconfirm
title="删除之后无法恢复,确认删除?"
@onConfirm="del(scope.row)"
>
<el-button
slot="reference"
type="text"
size="small"
class="btn-color-del"
style="margin-left: 10px;"
>删除</el-button
>
</el-popconfirm>
</template>
</template>
</el-table-column>
</el-table>
</template>
</el-table-column>
</el-table>
</div>
</template>
@ -120,7 +115,7 @@ export default {
default: false
}
},
data() {
data () {
return {
btnDisabled: false,
btnType: 'cancle',
@ -131,30 +126,30 @@ export default {
},
watch: {
partyId: {
handler(val) {
handler (val) {
console.log('val------points', val)
if (val.length > 0) {
this.btnDisabled = false
this.getList()
} else this.btnDisabled = true
},
immediate: true
}
},
created() {
created () {
// if (this.partyId) this.getList()
},
methods: {
getRowClass({ rowIndex, columnIndex }) {
getRowClass ({ rowIndex, columnIndex }) {
if (rowIndex === 0) {
return 'background: #2195fe; color: #fff;'
}
},
handleChange(row, type) {
handleChange (row, type) {
console.log('type----', type)
if (type == 'cancle') {
row = { ...this.tempRow }
row.isEdit = false
row.timeRange = []
@ -168,9 +163,9 @@ export default {
}
this.btnType = type
this.isEdit = !this.isEdit
},
handleTimeChangePay(val, row) {
handleTimeChangePay (val, row) {
console.log('vall', val)
console.log('varowll', row)
if (val != null && val.length > 0) {
@ -182,11 +177,11 @@ export default {
row.timeRange = []
}
},
async handleEdit(row) {
async handleEdit (row) {
if (this.btnType == 'add') this.save(row)
else this.edit(row)
},
handleAdd() {
handleAdd () {
this.btnType = 'add'
this.isEdit = true
const item = {
@ -200,7 +195,7 @@ export default {
}
this.tableData.push(item)
},
async save(row) {
async save (row) {
const params = {
partyMemberId: this.partyId,
payDate: row.payDate,
@ -219,14 +214,14 @@ export default {
this.isEdit = false
this.btnType = 'cancle'
this.getList()
}
}
})
.catch(err => {
console.log('err', err)
return this.$message.error('网络错误')
})
},
async edit(row) {
async edit (row) {
const params = {
...row
}
@ -240,14 +235,14 @@ export default {
row.isEdit = false
this.isEdit = false
this.getList()
}
}
})
.catch(err => {
console.log('err', err)
return this.$message.error('网络错误')
})
},
async del(row) {
async del (row) {
const params = {
...row
}
@ -257,24 +252,24 @@ export default {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
this.$message.success('删除成功')
this.$message.success('删除成功')
this.getList()
}
}
})
.catch(err => {
console.log('err', err)
return this.$message.error('网络错误')
})
},
async getList() {
async getList () {
const params = {
page: 1,
limit: 9999,
partyMemberId: this.partyId
}
await this.$http
.get('/resi/partymember/icPartyMemberPayRecord/page', { params: params, } )
.get('/resi/partymember/icPartyMemberPayRecord/page', { params: params, })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
@ -286,7 +281,7 @@ export default {
timeRange: []
}
})
}
}
})
.catch(err => {
console.log('err', err)

242
src/views/modules/communityParty/members/detailForm.vue

@ -0,0 +1,242 @@
<template>
<div class="dialog-h-content scroll-h pd0">
<div class="div-tip">本模块主要为添加非本社区居住党员本社区居住党员建议到居民信息页面添加</div>
<div class="m-row">
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">所属党组织</span>
<span>{{ info.sszb }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">党员中心户</span>
<span>{{ info.isDyzxh==='1'?'是':'否' }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">姓名</span>
<span>{{ info.name}}</span>
</div>
<div class="info-prop">
<span class="info-title-2">免学习</span>
<span>{{info.isMxx==='1'?'是':'否'}}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">手机号</span>
<span>{{ info.mobile?info.mobile:'--'}}</span>
</div>
<div class="info-prop">
<span class="info-title-2">职务</span>
<span>{{info.partyZw?info.partyZw:'--' }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">身份证</span>
<span>{{ info.idCard?info.idCard:'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">文化程度</span>
<span>{{ info.cultureName?info.cultureName:'--' }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">地址</span>
<span>{{ info.address?info.address:'--' }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">入党时间</span>
<span>{{ info.rdsj?info.rdsj:'--' }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">流动党员</span>
<span>{{ info.isLd==='1'?'是':'否'}}</span>
</div>
<div class="info-prop">
<span class="info-title-2">流动党员号</span>
<span>{{ info.ldzh?info.ldzh:'--' }}</span>
</div>
</div>
<div class="m-row-2">
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ info.remark? info.remark:'--' }}</span>
</div>
</div>
</div>
<div class="pdl40">
<el-tabs v-model="activesName">
<el-tab-pane label="量化积分"
name="first">
<pointsDetail :partyId="partymenberid" />
</el-tab-pane>
<el-tab-pane label="缴费记录"
name="second">
<record :partyId="partymenberid"
:disabled="disabled" />
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
import pointsDetail from './cpts/pointsDetail.vue'
import record from './cpts/record.vue'
export default {
components: {
pointsDetail,
record
},
props: {
partyList: {
type: Array,
default: () => []
},
info: {
type: Object,
default: () => { }
},
disabled: {
type: Boolean,
default: false
}
},
data () {
return {
activesName: 'first',
isAuto: false,
formItemWd: '100%',
partymenberid: '',
form: {
icResiUser: '',
name: '',
mobile: '',
idCard: '',
address: '',
rdsj: '',
sszb: '',
isLd: '0',
ldzh: '',
partyZw: '0',
isDyzxh: '0',
isMxx: '0',
culture: '',
remark: ''
},
partyOrgs: []
}
},
watch: {
info: {
handler (val) {
if (Object.keys(val).length > 0) {
this.form = { ...val }
if (val.icResiUserId || val.icResiUser) this.isAuto = true
console.log('val----------in', val)
console.log('isAuto----------in', this.isAuto)
this.partyOrgs = val.orgPids.split(':')
console.log('partyOrgs-----', this.partyOrgs)
this.partymenberid = val.id
}
},
immediate: true
}
},
created () {
console.log('partyList', this.partyList)
},
mounted () {
const w = document.getElementsByClassName('dialog-h-content')[0]
this.formItemWd = w.clientWidth + 'px'
},
destroyed () {
// this.$refs['ruleForm'].resetFields()
},
methods: {
async saveRecord (form) {
const params = {
...form,
partyMemberId: this.partymenberid
}
await this.$http
.post('/resi/partymember/icPartyMemberPoint/save', params)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
this.$message.success('保存成功')
}
})
.catch(err => {
console.log('err', err)
return this.$message.error('网络错误')
})
}
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/detail-main.scss";
</style>
<style lang="scss" scoped>
.input-width-textarea {
width: 400px;
}
.input-width {
width: 220px;
}
.flex-div {
display: flex;
// justify-content: space-between;
}
.wd50 {
width: 50%;
}
.pdl40 {
padding-left: 40px;
}
.pd0 {
padding: 0 !important;
}
.div-tip {
margin-left: 40px;
color: #f56c6c;
padding: 10px 0 5px;
}
</style>

605
src/views/modules/communityParty/members/index.vue

@ -1,10 +1,18 @@
<template>
<div v-if="pageLoading" class="resi-container">
<el-card ref="searchCard" class="search-card">
<div v-if="pageLoading"
class="resi-container">
<el-card ref="searchCard"
class="search-card">
<div class="">
<el-form ref="searchForm" :inline="true" :model="searchForm" size="small" label-width="100px" class="demo-form-inline">
<el-form ref="searchForm"
:inline="true"
:model="searchForm"
size="small"
label-width="110px"
class="demo-form-inline">
<div>
<el-form-item label="所属党组织" prop="partyOrgId">
<el-form-item label="所属党组织"
prop="partyOrgId">
<!-- <el-select v-model="searchForm.partyOrgId" filterable placeholder="请选择" clearable>
<el-option
v-for="item in optionsG"
@ -13,66 +21,112 @@
:value="item.value">
</el-option> -->
<!-- </el-select> -->
<el-cascader
v-model="partyOrgRange"
:options="optionsG"
:props="partyProps"
clearable
@change="handlePartyChange"></el-cascader>
<el-cascader v-model="partyOrgRange"
:options="optionsG"
:props="partyProps"
clearable
@change="handlePartyChange"></el-cascader>
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="searchForm.name" placeholder="请输入" class="input-width" clearable></el-input>
<el-form-item label="姓名"
prop="name">
<el-input v-model="searchForm.name"
placeholder="请输入"
class="input-width"
clearable></el-input>
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="searchForm.mobile" placeholder="请输入" class="input-width" clearable></el-input>
<el-form-item label="手机号"
prop="mobile">
<el-input v-model="searchForm.mobile"
placeholder="请输入"
class="input-width"
clearable></el-input>
</el-form-item>
<el-form-item label="身份证" prop="idCard">
<el-input v-model="searchForm.idCard" placeholder="请输入" class="input-width" clearable></el-input>
<el-form-item label="身份证"
prop="idCard">
<el-input v-model="searchForm.idCard"
placeholder="请输入"
class="input-width"
clearable></el-input>
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model="searchForm.address" placeholder="请输入" class="input-width" clearable></el-input>
<el-form-item label="地址"
prop="address">
<el-input v-model="searchForm.address"
placeholder="请输入"
class="input-width"
clearable></el-input>
</el-form-item>
</div>
<div>
<el-form-item label="流动党员" prop="isLd">
<el-select v-model="searchForm.isLd" filterable placeholder="请选择" clearable>
<el-option label="是" value="1" />
<el-option label="否" value="0" />
<el-form-item label="流动党员"
prop="isLd">
<el-select v-model="searchForm.isLd"
filterable
placeholder="请选择"
clearable>
<el-option label="是"
value="1" />
<el-option label="否"
value="0" />
</el-select>
</el-form-item>
<el-form-item label="流动党员证号" prop="ldzh">
<el-input v-model="searchForm.ldzh" placeholder="请输入" class="input-width" clearable></el-input>
<el-form-item label="流动党员证号"
prop="ldzh">
<el-input v-model="searchForm.ldzh"
placeholder="请输入"
class="input-width"
clearable></el-input>
</el-form-item>
<el-form-item label="职务" prop="partyZw">
<el-select v-model="searchForm.partyZw" filterable placeholder="请选择" clearable>
<el-option
v-for="item in zwList"
:key="item.value"
:label="item.label"
:value="item.value">
<el-form-item label="职务"
prop="partyZw">
<el-select v-model="searchForm.partyZw"
filterable
placeholder="请选择"
clearable>
<el-option v-for="item in zwList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="是否缴费" prop="isPay">
<el-select v-model="searchForm.isPay" filterable placeholder="请选择" clearable>
<el-option label="是" value="1" />
<el-option label="否" value="0" />
<el-form-item label="是否缴费"
prop="isPay">
<el-select v-model="searchForm.isPay"
filterable
placeholder="请选择"
clearable>
<el-option label="是"
value="1" />
<el-option label="否"
value="0" />
</el-select>
</el-form-item>
<el-form-item label="党员中心户" prop="isDyzxh">
<el-select v-model="searchForm.isDyzxh" filterable placeholder="请选择" clearable>
<el-option label="是" value="1" />
<el-option label="否" value="0" />
<el-form-item label="党员中心户"
prop="isDyzxh">
<el-select v-model="searchForm.isDyzxh"
filterable
placeholder="请选择"
clearable>
<el-option label="是"
value="1" />
<el-option label="否"
value="0" />
</el-select>
</el-form-item>
</div>
<el-form-item label="免学习" prop="isMxx">
<el-select v-model="searchForm.isMxx" filterable placeholder="请选择" clearable>
<el-option label="是" value="1" />
<el-option label="否" value="0" />
<el-form-item label="免学习"
prop="isMxx">
<el-select v-model="searchForm.isMxx"
filterable
placeholder="请选择"
clearable>
<el-option label="是"
value="1" />
<el-option label="否"
value="0" />
</el-select>
</el-form-item>
<el-form-item label="最近一次缴费时间"
<el-form-item label="最近缴费时间"
label-width="130px"
prop="startTime">
<el-date-picker v-model="timeRangePay"
@ -100,203 +154,188 @@
</el-form-item>
<el-form-item>
<el-button class="diy-button--search" size="small" @click="handleSearch">查询</el-button>
<el-button class="diy-button--reset" size="small" @click="resetForm('searchForm')">重置</el-button>
<el-button class="diy-button--search"
size="small"
@click="handleSearch">查询</el-button>
<el-button class="diy-button--reset"
size="small"
@click="resetForm('searchForm')">重置</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<el-card class="resi-card-table">
<div class="resi-row-btn">
<el-button class="diy-button--add" size="small" @click="handleAdd">新增</el-button>
<el-button
class="diy-button--export"
<el-button class="diy-button--add"
size="small"
@click="handleAdd">新增</el-button>
<el-button class="diy-button--export"
size="small"
@click="handleExportModule('room')">下载模板</el-button>
<el-upload :headers="$getElUploadHeaders()"
ref="upload"
class="upload-demo"
action="uploadUlr"
:limit="1"
:accept="'.xls,.xlsx'"
:with-credentials="true"
:show-file-list="false"
:auto-upload="true"
:on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload"
:http-request="uploadHttpRequest"
>
<el-button size="small" class="diy-button--delete" :loading="importLoading">{{importBtnTitle}}</el-button>
<el-upload :headers="$getElUploadHeaders()"
ref="upload"
class="upload-demo"
action="uploadUlr"
:limit="1"
:accept="'.xls,.xlsx'"
:with-credentials="true"
:show-file-list="false"
:auto-upload="true"
:on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload"
:http-request="uploadHttpRequest">
<el-button size="small"
class="diy-button--delete"
:loading="importLoading">{{importBtnTitle}}</el-button>
</el-upload>
<el-button class="diy-button--reset" size="small" :loading="exportBtn" @click="handleExport">{{ exportBtnTitle }}</el-button>
<el-button class="diy-button--reset"
size="small"
:loading="exportBtn"
@click="handleExport">{{ exportBtnTitle }}</el-button>
</div>
<el-table
:data="tableData"
row-key="id"
v-loading="tableLoading"
border
:height="tableHeight"
style="width: 100%"
class="resi-table"
>
<el-table-column label="序号" type="index" align="center" width="50">
<el-table :data="tableData"
row-key="id"
v-loading="tableLoading"
border
:height="tableHeight"
style="width: 100%"
class="resi-table">
<el-table-column label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
align="center"
width="100"
/>
<el-table-column
prop="idCard"
label="身份证号"
align="center"
min-width="180"
/>
<el-table-column
prop="mobile"
label="手机号"
align="center"
min-width="160"
/>
<el-table-column
prop="rdsj"
label="入党时间"
align="center"
min-width="160"
/>
<el-table-column
prop="sszb"
label="所属党组织"
align="center"
min-width="160"
/>
<el-table-column
prop="ldzh"
label="流动党员证号"
align="center"
min-width="160"
/>
<el-table-column
prop="partyZw"
label="职务"
align="center"
width="100"
/>
<el-table-column
prop="address"
label="地址"
align="center"
show-overflow-tooltip
min-width="180"
/>
<el-table-column
prop="isPay"
label="是否缴费"
align="center"
width="100"
/>
<el-table-column
prop="payDate"
label="最近一次缴费时间"
align="center"
min-width="160"
/>
<el-table-column
prop="culture"
label="文化程度"
align="center"
width="100"
/>
<el-table-column
prop="point"
label="量化积分"
align="center"
width="100"
/>
<el-table-column
prop="activityPoint"
label="活跃积分"
align="center"
width="100"
/>
<el-table-column
prop="volunteerCategory"
label="志愿者类别"
align="center"
width="100"
/>
<el-table-column
prop="remark"
label="备注"
align="center"
min-width="180"
/>
<!-- <template slot-scope="scope">
<el-table-column prop="name"
label="姓名"
align="center"
width="100" />
<el-table-column prop="idCard"
label="身份证号"
align="center"
min-width="180" />
<el-table-column prop="mobile"
label="手机号"
align="center"
min-width="160" />
<el-table-column prop="rdsj"
label="入党时间"
align="center"
min-width="160" />
<el-table-column prop="sszb"
label="所属党组织"
align="center"
min-width="160" />
<el-table-column prop="ldzh"
label="流动党员证号"
align="center"
min-width="160" />
<el-table-column prop="partyZw"
label="职务"
align="center"
width="100" />
<el-table-column prop="address"
label="地址"
align="center"
show-overflow-tooltip
min-width="180" />
<el-table-column prop="isPay"
label="是否缴费"
align="center"
width="100" />
<el-table-column prop="payDate"
label="最近一次缴费时间"
align="center"
min-width="160" />
<el-table-column prop="culture"
label="文化程度"
align="center"
width="100" />
<el-table-column prop="point"
label="量化积分"
align="center"
width="100" />
<el-table-column prop="activityPoint"
label="活跃积分"
align="center"
width="100" />
<el-table-column prop="volunteerCategory"
label="志愿者类别"
align="center"
width="100" />
<el-table-column prop="remark"
label="备注"
align="center"
min-width="180" />
<!-- <template slot-scope="scope">
<div class="div-content">{{ handleFilterSpan(scope.row, item) }}</div>
</template> -->
<!-- </el-table-column> -->
<el-table-column fixed="right" label="操作" align="center" width="200">
<el-table-column fixed="right"
label="操作"
align="center"
width="200">
<template slot-scope="scope">
<el-button
@click="handleLook(scope.row)"
type="text"
size="small"
class="btn-color-look"
>查看</el-button
>
<el-button
@click="handleEdit(scope.row, 'edit')"
type="text"
size="small"
class="btn-color-edit"
>修改</el-button
>
<el-popconfirm
title="删除之后无法恢复,确认删除?"
@onConfirm="handleDel(scope.row)"
>
<el-button
slot="reference"
type="text"
size="small"
class="btn-color-del"
>删除</el-button
>
</el-popconfirm>
<el-button @click="handleLook(scope.row)"
type="text"
size="small"
class="btn-color-look">查看</el-button>
<el-button @click="handleEdit(scope.row, 'edit')"
type="text"
size="small"
class="btn-color-edit">修改</el-button>
<el-popconfirm title="删除之后无法恢复,确认删除?"
@onConfirm="handleDel(scope.row)">
<el-button slot="reference"
type="text"
size="small"
class="btn-color-del">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-sizes="[20, 50, 100, 200]"
:page-size="pageSize"
layout="sizes, prev, pager, next, total"
:total="total"
>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-sizes="[20, 50, 100, 200]"
:page-size="pageSize"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</el-card>
<el-dialog
title="党员信息"
:visible.sync="dialogVisible"
width="60%"
top="5vh"
class="dialog-h"
append-to-body
:close-on-click-modal="false"
:before-close="handlerCancle"
>
<crate-form v-if="dialogVisible" :info="detailInfo" :partyList="optionsG"
:disabled="disabled"
@saveBase="handleSearch" @cancle="handlerCancle" />
<el-dialog title="党员信息"
:visible.sync="dialogVisible"
width="60%"
top="5vh"
class="dialog-h"
append-to-body
:close-on-click-modal="false"
:before-close="handlerCancle">
<crate-form v-if="dialogVisible"
:info="detailInfo"
:partyList="optionsG"
:disabled="disabled"
@saveBase="handleSearch"
@cancle="handlerCancle" />
</el-dialog>
<el-dialog title="党员信息"
:visible.sync="detailShow"
width="60%"
top="5vh"
class="dialog-h"
append-to-body
:close-on-click-modal="false"
:before-close="handlerCancle">
<detail-form v-if="detailShow"
:info="detailInfo"
:partyList="optionsG"
:disabled="disabled" />
</el-dialog>
</div>
@ -306,11 +345,12 @@
import axios from 'axios'
import { mapGetters } from 'vuex'
import crateForm from './crateForm.vue'
import detailForm from './detailForm.vue'
export default {
components: {
crateForm
crateForm, detailForm
},
data() {
data () {
return {
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadqrcodeV2',
importBtnTitle: '导入',
@ -340,7 +380,7 @@ export default {
{
label: '是',
value: 1
},{
}, {
label: '否',
value: 2
}
@ -417,19 +457,21 @@ export default {
partyProps: {
label: 'partyOrgName',
value: 'id',
checkStrictly: true
}
checkStrictly: true
},
detailShow: false
}
},
computed: {
computed: {
...mapGetters(['clientHeight', 'iframeHeight']),
tableHeight() {
const h = this.clientHeight - this.searchH - 280 + this.iframeHeigh
const _h = this.clientHeight - 280 - this.searchH
tableHeight () {
const h = this.clientHeight - this.searchH - 270 + this.iframeHeigh
const _h = this.clientHeight - 270 - this.searchH
return this.$store.state.inIframe ? h : _h
}
},
async created() {
async created () {
this.customerId = localStorage.getItem('customerId')
// setTimeout(() => {
// this.getTableData()
@ -440,38 +482,38 @@ export default {
// }, 200)
this.getTableData()
this.getGridList('query')
// this.getGridList('addorupdate')
// this.getCateList('query')
// this.getCateList('addorupdate')
// this.getGridList('addorupdate')
// this.getCateList('query')
// this.getCateList('addorupdate')
this.pageLoading = true
// this.tableHeight = document.documentElement.clientHeight - this.$refs.searchCard.$el.offsetHeight - 280 + 'px'
},
mounted() {
mounted () {
this.$nextTick(() => {
this.searchH = this.$refs.searchCard.$el.offsetHeight
console.log('tableHeight', this.tableHeight)
})
},
methods: {
handleSizeChange(val) {
handleSizeChange (val) {
console.log(`每页 ${val}`)
this.pageSize = val
this.getTableData()
},
handleCurrentChange(val) {
handleCurrentChange (val) {
console.log(`当前页: ${val}`)
this.currentPage = val
this.getTableData()
},
handlePartyChange(val) {
handlePartyChange (val) {
console.log('val------pp', val)
this.searchForm.partyOrgId = val[val.length - 1]
},
handleFilterSpan(row, item) {
handleFilterSpan (row, item) {
let _val = ''
if (item.options && item.options.length > 0) {
item.options.forEach((n) => {
@ -510,7 +552,7 @@ export default {
this.$message.error(res.msg)
}
},
handleProgress(event, file, fileList) {
handleProgress (event, file, fileList) {
console.log('percentage', event, file.percentage)
this.uploading = true
this.unloadPencent = Number(file.percentage.toFixed(0))
@ -541,10 +583,10 @@ export default {
},
async handleExportModule () {
let url = "/resi/partymember/icPartyMember/downloadTemplate"
let params = {}
await this.$http({
method: 'POST',
url,
@ -556,7 +598,7 @@ export default {
if (res.headers["content-disposition"]) {
let fileName = window.decodeURI(res.headers["content-disposition"].split(";")[1].split("=")[1])
this.download(res.data, fileName)
} else this.$message.error('下载失败')
})
.catch(err => {
@ -570,16 +612,16 @@ export default {
const isTypeComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
const fileType = isType || isTypeComputer
const isLt1M = (file.size / 1024 / 1024) < 10
if(!fileType) {
this.$message.error('上传文件只能是xls/xlsx格式!')
if (!fileType) {
this.$message.error('上传文件只能是xls/xlsx格式!')
}
if (!isLt1M) {
this.$message.error('上传文件大小不能超过 10MB!')
}
return fileType && isLt1M
},
async uploadHttpRequest(file) {
async uploadHttpRequest (file) {
this.importLoading = true
this.importBtnTitle = '正在上传中...'
this.$message({
@ -603,12 +645,12 @@ export default {
file.onError() //
// this.$message.error('')
})
this.importLoading = false
this.importBtnTitle = '导入'
this.$refs.upload.clearFiles()
},
async handleExport() {
async handleExport () {
this.exportBtn = true
this.exportBtnTitle = '正在导出...'
let params = {
@ -643,8 +685,8 @@ export default {
console.log('获取导出情失败', err)
this.$message.error('获取导出失败')
})
this.exportBtn = false
this.exportBtnTitle = '导出'
this.exportBtn = false
this.exportBtnTitle = '导出'
},
beforeImgUpload (file) {
const isPNG = (file.type === 'image/png') || (file.type === 'image/jpeg')
@ -670,15 +712,15 @@ export default {
this.$message.error(res.msg)
}
},
handleDelimg(item, index) {
handleDelimg (item, index) {
this.form.imageList.splice(index, 1)
},
handleSearch(val) {
handleSearch (val) {
console.log('searchhh--', val)
this.currentPage = 1
this.getTableData()
},
resetForm(formName) {
resetForm (formName) {
this.timeRangePay = []
this.timeRange = []
this.searchForm.payStatrDate = ''
@ -688,27 +730,28 @@ export default {
this.$refs[formName].resetFields()
this.handleSearch()
},
handleAdd() {
handleAdd () {
this.dialogVisible = true
},
handlerCancle() {
handlerCancle () {
this.detailInfo = {}
this.disabled = false
this.dialogVisible = false
this.detailShow = false
},
async handleLook(row) {
async handleLook (row) {
this.disabled = true
await this.getDetail(row.id)
await this.getDetail(row.id, 'detail')
},
async handleEdit(row, addType) {
async handleEdit (row, addType) {
// this.form = { ...row }
await this.getDetail(row.id)
this.dialogVisible = true
},
handleDel(row) {
handleDel (row) {
let params = {
ids: [row.id]
}
@ -727,7 +770,7 @@ export default {
return this.$message.error('网络错误')
})
},
async getDetail(id) {
async getDetail (id, formType) {
let params = {
id,
}
@ -738,7 +781,12 @@ export default {
return this.$message.error(res.msg)
} else {
this.detailInfo = { ...res.data }
this.dialogVisible = true
if (formType === 'detail') {
this.detailShow = true
} else {
this.dialogVisible = true
}
}
})
.catch((err) => {
@ -746,18 +794,18 @@ export default {
return this.$message.error('网络错误')
})
},
async getGridList(type, agencyId) {
async getGridList (type, agencyId) {
const { user } = await this.$store.state
console.log('user---ppp', user)
// addorupdate query
await this.$http
.get('/resi/partymember/icPartyOrg/getSearchTreelist', { params: {agencyId: agencyId || user.agencyId} })
.get('/resi/partymember/icPartyOrg/getSearchTreelist', { params: { agencyId: agencyId || user.agencyId } })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsG = this.deepArrTOnull(res.data)
}
})
@ -765,17 +813,17 @@ export default {
return this.$message.error('网络错误')
})
},
deepArrTOnull(arr) {
deepArrTOnull (arr) {
let a = []
a = arr.map(item => {
return {
...item,
children: (item.children.length > 0 && this.deepArrTOnull(item.children) )|| null
children: (item.children.length > 0 && this.deepArrTOnull(item.children)) || null
}
})
return a
},
async getCateList(type) {
async getCateList (type) {
const { user } = await this.$store.state
console.log('user---ppp', user)
const params = {
@ -790,7 +838,7 @@ export default {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
if (type === 'query') this.optionsC = res.data
else this.optionsEditC = res.data
}
@ -799,7 +847,7 @@ export default {
return this.$message.error('网络错误')
})
},
async getTableData() {
async getTableData () {
this.tableLoading = true
const { user } = await this.$store.state
let params = {
@ -823,7 +871,7 @@ export default {
})
this.tableLoading = false
}
}
}
</script>
@ -853,7 +901,6 @@ export default {
.form-wr {
.input-width {
width: 260px;
}
.input-width-textarea {
width: 500px;
@ -885,7 +932,6 @@ export default {
</style>
<style lang="scss" scoped>
.resi-row-btn {
display: flex;
margin-bottom: 13px;
@ -914,14 +960,13 @@ export default {
}
}
.avatar-uploader {
::v-deep
.el-upload {
::v-deep .el-upload {
cursor: pointer;
position: relative;
overflow: hidden;
}
.el-upload:hover {
border-color: #409EFF;
border-color: #409eff;
}
.avatar {
width: 100px;
@ -939,8 +984,6 @@ export default {
text-align: center;
}
}
.resi-btns {
margin-top: 20px;

5
src/views/modules/cpts/base/index.vue

@ -89,7 +89,8 @@
size="small"
@click="handleExportModule('room')">下载模板</el-button>
<el-upload :headers="$getElUploadHeaders()" v-if="importUrl"
<el-upload :headers="$getElUploadHeaders()"
v-if="importUrl"
ref="upload"
class="upload-btn"
action="uploadUlr"
@ -154,6 +155,8 @@
align="center"
width="200">
<template slot-scope="scope">
<slot name="listBtnbefore"
v-bind:item="scope.row"></slot>
<el-button v-if="infoUrl && infoAuth(scope.row)"
@click="handleWatch(scope.row)"
type="text"

Loading…
Cancel
Save