党员积分

This commit is contained in:
liuye
2022-06-29 15:27:15 +08:00
parent 511a98026e
commit 0b83cec78b
4 changed files with 197 additions and 94 deletions

View File

@@ -4,15 +4,24 @@
<p><span>积分申请</span>通过民主程序将基层治理和服务各项事务转化为数量化指标对个人日常行为进行评价申请积分需管理员审核通过后系统自动发放积分</p> <p><span>积分申请</span>通过民主程序将基层治理和服务各项事务转化为数量化指标对个人日常行为进行评价申请积分需管理员审核通过后系统自动发放积分</p>
</div> </div>
<div class="list"> <div class="list">
<div class="item" @click="toAdd"> <div class="item" v-for="(item, index) in list" :key="index" @click="toAdd(item)">
<div class="left"> <div class="left">
<h2>积分申报</h2> <h2>{{item.eventName}}</h2>
<p>08-31 13:45</p> <p>{{item.eventDesc}}</p>
</div> </div>
<div class="right"> <div class="right">
<h2 class="color-E6736E">20<u-icon name="arrow-right" color="#ddd" size="24" style="margin-left: 4px" ></u-icon></h2> <h2 class="color-E6736E">
<span v-if="item.ruleType == 0">{{item.integral}}</span>
<span v-if="item.ruleType == 1">{{item.ladderRule[0].integral}}-{{item.ladderRule[1].integral}}</span>
<span v-if="item.ruleType == 2">{{item.integralMin}}-{{item.integralMax}}</span>
<u-icon name="arrow-right" color="#ddd" size="24" style="margin-left: 4px" ></u-icon>
</h2>
</div> </div>
</div> </div>
<AiEmpty v-if="!list.length"/>
</div>
<div class="footer" @click="linkTo(`./list`)">
<div class="btn">申请记录</div>
</div> </div>
</div> </div>
</template> </template>
@@ -27,16 +36,41 @@ export default {
}, },
data() { data() {
return { return {
current: 1,
pages: 2,
list: []
}; };
}, },
onLoad() { onLoad() {
this.getList()
}, },
methods: { methods: {
toAdd() { toAdd(row) {
uni.navigateTo({url: `./add?id=1&name=111`}) uni.navigateTo({url: `./add?integralRuleId=${row.id}&integralRuleName=${row.eventName}`})
},
getList() {
if(this.current > this.pages) return
this.$instance.post(`/app/apppartyintegralrule/list?classify=0&size=20&current=${this.current}`).then(res => {
if (res.code == 0) {
this.pages = res.data.pages
res.data.records.map((item) => {
item.ladderRule = JSON.parse(item.ladderRule)
})
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
}
})
},
linkTo(url) {
uni.navigateTo({url})
} }
},
onReachBottom() {
this.current ++
this.getList()
} }
}; };
</script> </script>
@@ -63,7 +97,7 @@ export default {
} }
} }
.list{ .list{
padding-top: 172px; padding: 172px 0 120px 0;
.item{ .item{
padding: 32px; padding: 32px;
border-bottom: 1px solid #ddd; border-bottom: 1px solid #ddd;
@@ -88,10 +122,10 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.left{ .left{
width: calc(100% - 480px); width: 480px;
} }
.right{ .right{
width: 480px; width: calc(100% - 480px);
text-align: right; text-align: right;
h2{ h2{
font-family: PingFangSC-Semibold, PingFang SC; font-family: PingFangSC-Semibold, PingFang SC;
@@ -106,5 +140,25 @@ export default {
} }
} }
} }
.footer{
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 16px 32px;
background-color: #f3f6f9;
z-index: 99;
.btn{
width: 686px;
height: 88px;
line-height: 88px;
text-align: center;
background: #E76056;
border-radius: 16px;
font-size: 34px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFF;
}
}
</style> </style>

View File

@@ -5,11 +5,13 @@
<div class="label"> <div class="label">
<span class="tips">*</span>积分类型 <span class="tips">*</span>积分类型
</div> </div>
<div class="value" @click="showTypeSelect=true">{{typeName}}<u-icon name="arrow-right" color="#ddd" size="24" style="margin-left: 4px" ></u-icon></div> <div class="value">{{integralRuleName}}
<!-- <u-icon name="arrow-right" color="#ddd" size="24" style="margin-left: 4px" ></u-icon> -->
</div>
</div> </div>
<div class="text-area"> <div class="text-area">
<div class="title"><span class="tips">*</span>申请描述</div> <div class="title"><span class="tips">*</span>申请描述</div>
<u-input v-model="value" type="textarea" :height="200" placeholder="请输入描述信息" placeholder-style="font-size:20px;color:#999;" maxlength="500" /> <u-input v-model="description" type="textarea" :height="200" placeholder="请输入描述信息" placeholder-style="font-size:20px;color:#999;" maxlength="500" />
</div> </div>
</div> </div>
<div class="upload"> <div class="upload">
@@ -21,7 +23,7 @@
<div class="footer" @click="confirmAdd"> <div class="footer" @click="confirmAdd">
<div class="btn">提交</div> <div class="btn">提交</div>
</div> </div>
<u-select v-model="showTypeSelect" :list="typeList" @confirm="confirmType" value-name="id" label-name="name"></u-select> <u-select v-model="showTypeSelect" :list="typeList" @confirm="confirmType" value-name="id" label-name="eventName"></u-select>
</div> </div>
</template> </template>
<script> <script>
@@ -35,27 +37,33 @@ export default {
}, },
data() { data() {
return { return {
value: '', description: '',
fileList: [], fileList: [],
typeId: '', integralRuleId: '',
typeName: '', integralRuleName: '',
typeList: [{id: '1', name: '111'}, {id: '2', name: '222'}],
typeList: [],
showTypeSelect: false showTypeSelect: false
}; };
}, },
onLoad(options) { onLoad(options) {
if(options.id) { this.integralRuleId = options.integralRuleId
this.typeId = options.id this.integralRuleName = options.integralRuleName
this.typeName = options.name
}
}, },
methods: { methods: {
confirmAdd() { confirmAdd() {
if(!this.value) { if(!this.description) {
this.$u.toast('请输入申请描述') this.$u.toast('请输入申请描述')
} }
this.$instance.post(`/app/partyOrganization/queryPartyOrganizationListByName`).then((res) => { var params = {
if(res?.data) { integralRuleId: this.integralRuleId,
integralRuleName: this.integralRuleName,
description: this.description,
files: this.fileList,
partyId: this.user.partyId
}
this.$instance.post(`/app/apppartyintegraldeclare/addOrUpdate`, params).then((res) => {
if(res.code == 0) {
this.$u.toast('申请成功') this.$u.toast('申请成功')
setTimeout(() => { setTimeout(() => {
uni.navigateBack() uni.navigateBack()
@@ -64,9 +72,16 @@ export default {
}) })
}, },
confirmType(e) { confirmType(e) {
this.typeId = e[0].value this.integralRuleId = e[0].value
this.typeName = e[0].label this.integralRuleName = e[0].label
} },
getTypeList() {
this.$instance.post(`/app/apppartyintegralrule/list?classify=0&size=1000`).then(res => {
if (res.code == 0) {
this.typeList = res.data.records
}
})
},
} }
}; };
</script> </script>

View File

@@ -4,60 +4,58 @@
<p class="title">填报信息</p> <p class="title">填报信息</p>
<div class="info"> <div class="info">
<div class="label">申请人</div> <div class="label">申请人</div>
<div class="value">陶白白</div> <div class="value">{{info.partyName}}</div>
</div> </div>
<div class="info"> <div class="info">
<div class="label">申请时间</div> <div class="label">申请时间</div>
<div class="value">2021-12-06 13:23</div> <div class="value" v-if="info.createTime">{{info.createTime.substring(0, 16)}}</div>
</div> </div>
<div class="info"> <div class="info">
<div class="label">积分类型</div> <div class="label">积分类型</div>
<div class="value">陶白白</div> <div class="value">{{info.integralRuleName}}</div>
</div> </div>
<div class="info"> <div class="info">
<div class="label">申请描述</div> <div class="label">申请描述</div>
<div class="value">2022.1.1上午11:00搭乘D5478次动车座位号E56</div> <div class="value">{{info.description}}</div>
</div> </div>
<div class="info border-none"> <div class="info border-none" v-if="info.files.length">
<div class="label">图片资料</div> <div class="label">图片资料</div>
</div> </div>
<div class="img-list"> <div class="img-list" v-if="info.files.length">
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1658307867&t=bdf3d5fa8f718c772521f9ba71ba062b" alt=""> <img v-for="(item,index) in info.files" :key="index" :src="item.url" alt="" @click="preview(index)">
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1658307867&t=bdf3d5fa8f718c772521f9ba71ba062b" alt="">
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1658307867&t=bdf3d5fa8f718c772521f9ba71ba062b" alt="">
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1658307867&t=bdf3d5fa8f718c772521f9ba71ba062b" alt="">
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1658307867&t=bdf3d5fa8f718c772521f9ba71ba062b" alt="">
</div> </div>
</div> </div>
<div class="bg-ff"> <div class="bg-ff">
<p class="title">审核详情</p> <p class="title">审核详情</p>
<div class="info"> <div class="info">
<div class="label">审核结果</div> <div class="label">审核结果</div>
<div class="value status0">通过</div> <div class="value" :class="`status`+info.auditStatus">{{ $dict.getLabel('integralDeclareStatus', info.auditStatus) }}</div>
</div> </div>
<div v-if="info.auditStatus == 1">
<div class="info"> <div class="info">
<div class="label">加分项</div> <div class="label">加分项</div>
<div class="value">街道荣誉</div> <div class="value">{{info.auditType}}</div>
</div>
<div class="info">
<div class="label">积分调整</div>
<div class="value">+{{info.auditIntegral}}</div>
</div>
</div> </div>
<div class="info"> <div class="info" v-if="info.auditStatus == 2">
<div class="label">积分调整</div>
<div class="value">+10</div>
</div>
<div class="info">
<div class="label">驳回理由</div> <div class="label">驳回理由</div>
<div class="value">2022.1.1上午11:00搭乘D5478次动车座位号E56</div> <div class="value">{{info.auditOpinion}}</div>
</div> </div>
<div v-if="info.auditStatus != 0">
<div class="info"> <div class="info">
<div class="label">审核人</div> <div class="label">审核人</div>
<div class="value">张三</div> <div class="value">{{info.auditUserName}}</div>
</div> </div>
<div class="info"> <div class="info">
<div class="label">审核时间</div> <div class="label">审核时间</div>
<div class="value">2021-12-06 13:23</div> <div class="value">{{info.auditTime.substring(0, 16)}}</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
@@ -72,15 +70,26 @@ export default {
}, },
data() { data() {
return { return {
id: '',
info: {}
}; };
}, },
onLoad() { onLoad(options) {
this.id = options.id
this.$dict.load("integralDeclareStatus").then(() => {
this.getDetail()
})
}, },
methods: { methods: {
getDetail() {
this.$instance.post(`/app/apppartyintegraldeclare/queryDetailById?id=${this.id}`).then(res => {
if (res.code == 0) {
this.info = res.data
}
})
},
preview(index) { preview(index) {
// this.$previewImage(this.detail.files, index, "url"); this.$previewImage(this.info.files, index, "url");
}, },
} }
}; };

View File

@@ -7,27 +7,29 @@
</div> </div>
</div> </div>
<div class="select-content"> <div class="select-content">
<div class="select" @click="showTypeSelect=true">{{typeId ? typeName : '全部类型'}}<u-icon name="arrow-down" color="#333" size="24" style="margin-left: 4px" ></u-icon></div> <div class="select" @click="showTypeSelect=true">{{integralRuleId ? '已选择' : '全部类型'}}<u-icon name="arrow-down" color="#333" size="24" style="margin-left: 4px" ></u-icon></div>
<div class="search"> <div class="search">
<u-search placeholder="请输入党组织" v-model="name" :show-action="false" @search="getListInit" @clear="name='', getListInit()"></u-search> <u-search placeholder="请输入搜索内容" v-model="partyName" :show-action="false" @search="getListInit" @clear="partyName='', getListInit()" bg-color="#ffffff"></u-search>
</div> </div>
</div> </div>
</div> </div>
<div class="list"> <div class="list">
<div class="item" @click="toDetail()"> <div class="item" v-for="(item, index) in list" :key="index" @click="toDetail(item)">
<div class="top"> <div class="top">
<p class="title">本人与2021年11月12日在紫荆医院接种第三针新冠疫苗本人与2021年11月12日在紫荆医院接种第三针新21年11月12日在紫荆医院接种第三针新</p> <p class="title">{{item.description}}</p>
<div class="flex"> <div class="flex">
<div>新冠疫苗接种</div> <div>{{item.integralRuleName}}</div>
<p>2021-12-06 13:23</p> <p>{{item.createTime.substring(0, 16)}}</p>
</div> </div>
</div> </div>
<div class="bottom status0"> <div class="bottom" :class="`status`+item.auditStatus">
<span></span>审核通过+10 <span class="tips"></span>{{ $dict.getLabel('integralDeclareStatus', item.auditStatus) }}
<span v-if="item.auditStatus == 1">+{{item.auditIntegral}}</span>
</div> </div>
</div> </div>
<AiEmpty v-if="!list.length"/>
</div> </div>
<u-select v-model="showTypeSelect" :list="typeList" @confirm="confirmType" value-name="id" label-name="name"></u-select> <u-select v-model="showTypeSelect" :list="typeList" @confirm="confirmType" value-name="id" label-name="eventName"></u-select>
</div> </div>
</template> </template>
<script> <script>
@@ -43,10 +45,10 @@ export default {
return { return {
tabList: ['全部', '待审核', '已审核'], tabList: ['全部', '待审核', '已审核'],
tabIndex: 0, tabIndex: 0,
name: '', partyName: '',
typeId: '', integralRuleId: '',
typeName: '', integralRuleName: '',
typeList: [{id: '1', name: '111'}, {id: '2', name: '222'}], typeList: [],
showTypeSelect: false, showTypeSelect: false,
current: 1, current: 1,
pages: 2, pages: 2,
@@ -54,7 +56,10 @@ export default {
}; };
}, },
onLoad() { onLoad() {
this.getTypeList()
this.$dict.load("integralDeclareStatus").then(() => {
this.getList()
})
}, },
methods: { methods: {
getListInit() { getListInit() {
@@ -65,25 +70,44 @@ export default {
}, },
getList() { getList() {
if (this.current > this.pages) return; if (this.current > this.pages) return;
// this.$instance.post(`/app/apppartyeducation/list?current=${this.current}`).then((res) => { this.$instance.post(`/app/apppartyintegraldeclare/list`, null, {
// if (res.code == 0) { params: {
// const list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records current: this.current,
// this.pages = Math.ceil(res.data.total / 10) partyName: this.partyName,
// this.list = list auditType: ['', 0, 1][this.tabIndex],
// } integralRuleId: this.integralRuleId
// }); }
}).then((res) => {
if (res.code == 0) {
const list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
this.pages = Math.ceil(res.data.total / 10)
this.list = list
}
});
}, },
tabClick(index) { tabClick(index) {
this.tabIndex = index this.tabIndex = index
this.getListInit() this.getListInit()
}, },
confirmType(e) { confirmType(e) {
this.typeId = e[0].value this.integralRuleId = e[0].value
this.typeName = e[0].label this.integralRuleName = e[0].label
this.getListInit()
},
toDetail(row) {
uni.navigateTo({ url: `./detail?id=${row.id}` })
},
getTypeList() {
this.$instance.post(`/app/apppartyintegralrule/list?classify=0&size=1000`).then(res => {
if (res.code == 0) {
this.typeList = res.data.records
this.typeList.unshift({
eventName: '全部类型',
id: ''
})
}
})
}, },
toDetail() {
uni.navigateTo({ url: `./detail` })
}
}, },
onReachBottom() { onReachBottom() {
this.current ++ this.current ++
@@ -125,6 +149,7 @@ export default {
.select-content{ .select-content{
display: flex; display: flex;
padding: 48px 32px 32px; padding: 48px 32px 32px;
background-color: #f3f6f9;
.select{ .select{
width: calc(100% - 460px); width: calc(100% - 460px);
font-size: 38px; font-size: 38px;
@@ -184,7 +209,7 @@ export default {
font-size: 28px; font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
line-height: 40px; line-height: 40px;
span{ .tips{
display: inline-block; display: inline-block;
margin-right: 8px; margin-right: 8px;
width: 8px; width: 8px;
@@ -195,19 +220,19 @@ export default {
} }
.status0{ .status0{
color: #FF883C; color: #FF883C;
span{ .tips{
background: #FF883C; background: #FF883C;
} }
} }
.status1{ .status1{
color: #42D784; color: #42D784;
span{ .tips{
background: #42D784; background: #42D784;
} }
} }
.status2{ .status2{
color: #f46; color: #f46;
span{ .tips{
background: #f46; background: #f46;
} }
} }