提交一部分民政评分新版

This commit is contained in:
aixianling
2022-12-06 18:04:44 +08:00
parent 0ffed95b87
commit a9e0c68755
4 changed files with 249 additions and 4 deletions

View File

@@ -1,7 +1,7 @@
<template> <template>
<section class="AiTabPanes" :style="{background}"> <section class="AiTabPanes" :class="{white}" :style="{background}">
<div class="item" :class="{active:value==i}" v-for="(item, i) in tabs" :key="i" <div class="item" :class="{active:value==i}" v-for="(item, i) in tabs" :key="i"
@click="handleClick(item,i)">{{ item }} @click="handleClick(item,i)">{{ getLabel(item) }}
</div> </div>
</section> </section>
</template> </template>
@@ -19,9 +19,13 @@ export default {
props: { props: {
value: {default: ""}, value: {default: ""},
tabs: {default: () => []}, tabs: {default: () => []},
background: {default: ""} background: {default: ""},
white: Boolean
}, },
methods: { methods: {
getLabel(item) {
return item?.label || item
},
handleClick(item, index) { handleClick(item, index) {
this.$emit("change", index) this.$emit("change", index)
this.$emit("click", item) this.$emit("click", item)
@@ -63,5 +67,22 @@ export default {
} }
} }
} }
&.white {
background: #fff;
.item {
color: #666;
&.active {
color: #000;
font-weight: bold;
&:after {
background: #3399FF;
}
}
}
}
} }
</style> </style>

View File

@@ -29,7 +29,7 @@
"open": true, "open": true,
"proxy": { "proxy": {
"/lan": { "/lan": {
"target": "http://dvcp.sinoecare.net", "target": "http://192.168.1.105:19000",
"changeOrigin": true, "changeOrigin": true,
"pathRewrite": { "pathRewrite": {
"^/lan": "/" "^/lan": "/"

View File

@@ -0,0 +1,116 @@
<template>
<section class="AppRecoScore">
<div class="banner">
省民政厅公务员平时考核系统
</div>
<AiTabPanes :tabs="tabs" v-model="search.type" white @change="handChangeTab"/>
<AiGroup>
<div v-for="item in list" :key="item.id" class="listItem pad-r32" flex @click="handleDetail(item.id)">
<div class="fill mar-r20">
<h3 class="mar-b8" v-text="item.templateName"/>
<div class="sub" v-text="item.taskTitle"/>
</div>
<div class="status" :class="{finish:item.unfinishedCount==0}">{{ item.unfinishedCount == 0 ? '已完成' : '尚未完成' }}</div>
</div>
</AiGroup>
<AiEmpty class="pad-t96" v-if="!list.length"/>
</section>
</template>
<script>
export default {
name: "AppRecoScore",
appName: "考核系统",
data() {
return {
current: 1,
total: 0,
list: [],
tabs: ["待我填写", "已提交", "待我审核"],
search: {type: "0"},
}
},
methods: {
handChangeTab() {
this.current = 1
this.getList()
},
getList() {
const {current, total, list} = this
if (current == 1 || list.length < total) {
current == 1 && (this.list = [])
this.getTasks()
}
},
getTasks() {
const {current, search} = this
this.$http.post("/app/appassessmentscorev2task/myTaskList", null, {
params: {size: 999, current, ...search}
}).then(res => {
if (res?.data) {
this.list = [this.list, res.data.records].flat().filter(Boolean)
this.total = res.data.total
}
})
},
handleDetail(id) {
uni.navigateTo({url: "./astDetail?id=" + id})
}
},
onShow() {
this.current = 1
this.getList()
document.title = this.$options.appName
},
onReachBottom() {
this.current++
this.getList()
}
}
</script>
<style lang="scss" scoped>
.AppRecoScore {
background: #f5f5f5;
font-size: 28px;
.banner {
height: 240px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-weight: bold;
font-size: 40px;
background-image: url("https://cdn.cunwuyun.cn/AppAssessmentScoreTask/banner.png");
background-size: 100%;
}
.listItem {
height: 160px;
justify-content: space-between;
border-bottom: 1px solid #eee;
.sub {
font-size: 26px;
color: #3975C6;
line-height: 36px;
}
& > h3 {
font-size: 32px;
color: #333;
line-height: 44px;
}
.status {
font-size: 28px;
color: #FFA938;
&.finish {
color: #1CCEB0;
}
}
}
}
</style>

View File

@@ -0,0 +1,108 @@
<template>
<section class="astDetail">
<AiGroup left="48" class="header mar-b16">
<h3 flex class="mar-b8">{{ detail.templateName }}</h3>
<div class="color-999">开始日期{{ $dateFormat(detail.beginTime, "YYYY-MM-DD HH:mm") }}</div>
<div class="color-999">截止日期{{ $dateFormat(detail.endTime, "YYYY-MM-DD HH:mm") }}</div>
</AiGroup>
<AiGroup title="参评人员" description class="pad-t32">
<div flex class="pad-r32 pad-t16 pad-b16" v-for="item in list" :key="item.id" @click="handleScore(item)">
<div flex class="fill">
<AiImage class="mar-r32 circle avatar" :src="item.evaluatorsAvatar"/>
<div>
<h4>{{ item.evaluatorsName }}</h4>
<div class="color-999">{{ item.evaluatorsDepartments }}</div>
</div>
</div>
<div class="result" :class="{finish:!item.fillable}" v-text="item.resultLabel"/>
</div>
<AiEmpty class="pad-b32" v-if="!list.length"/>
</AiGroup>
</section>
</template>
<script>
export default {
name: "astDetail",
appName: "考核评分",
data() {
return {
detail: {},
current: 1,
total: 0,
list: []
}
},
methods: {
getDetail() {
const {id} = this.$route.query
return this.$http.post("/app/appassessmentscortask/taskTemplateDetail", null, {
params: {id}
}).then(res => {
if (res?.data) {
this.detail = res.data
}
})
},
getList() {
const {id} = this.$route.query,
{current, list, total} = this
if (current == 1 || list.length < total) {
current == 1 && (this.list = [])
this.$http.post("/app/appassessmentscortask/myScoreList", null, {
params: {id, size: 999, current}
}).then(res => {
if (res?.data) {
res.data.records.map(e => {
e.fillable = !e.commitTime && this.detail.status == 1
e.resultLabel = !!e.commitTime ? `${e.totalScore || 0}` : e.fillable ? "去填报" : "未填报"
})
this.list = [this.list, res.data.records].flat().filter(Boolean)
this.total = res.data.total
}
})
}
},
handleScore(item) {
if (this.detail.status == 1) {
const {id, templateId: tid} = item
uni.navigateTo({url: `/apps/AppAskForm/AppForm?id=${id}&tid=${tid}&from=AppAssessmentScoreTask` + (!item.fillable ? '&result=1' : '')})
} else {
this.$u.toast("任务未开始或已结束,无法填报!")
}
}
},
onShow() {
document.title = this.$options.appName
this.current = 1
this.getDetail().then(this.getList)
},
onReachBottom() {
this.current++
this.getList()
}
}
</script>
<style lang="scss" scoped>
.astDetail {
background: #f5f5f5;
.header {
padding: 32px 0;
}
h3 {
font-size: 40px;
min-height: 56px;
}
.result {
color: #FFA938;
&.finish {
color: #2C51CE;
}
}
}
</style>