Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_wxcp_app into dev
This commit is contained in:
@@ -18,7 +18,8 @@
|
||||
"src/common/modules.js",
|
||||
"src/common/http.js",
|
||||
"src/common/crypto-js.js",
|
||||
"src/apps"
|
||||
"src/apps",
|
||||
"src/styles"
|
||||
],
|
||||
"workspaces": [
|
||||
"src/project/*",
|
||||
|
||||
28
src/App.vue
28
src/App.vue
@@ -68,8 +68,7 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '~uview-ui/index.scss';
|
||||
@import './common/iconfont.css';
|
||||
@import 'styles/common';
|
||||
|
||||
body {
|
||||
font-family: 'Microsoft YaHei', serif;
|
||||
@@ -113,31 +112,6 @@ div[bottom] {
|
||||
}
|
||||
}
|
||||
|
||||
div[flex] {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.spb {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&.wrap {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
&.column {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
&.start {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
div[shrink] {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
uni-button {
|
||||
border-radius: 4px;
|
||||
|
||||
|
||||
@@ -4,9 +4,18 @@
|
||||
<div class="header-content">
|
||||
<img src="https://cdn.cunwuyun.cn/dvcp/credit/head.png" alt="">
|
||||
<div class="headerDataPane" flex>
|
||||
<div class="headerItem" v-for="i in 3" :key="i">
|
||||
<b v-text="560"/>
|
||||
<div class="headerItem top">
|
||||
<div v-text="`个人积分`"/>
|
||||
<b v-text="info.historyIntegralTotal||0"/>
|
||||
</div>
|
||||
<div class="headerItem">
|
||||
<div v-text="`剩余积分`"/>
|
||||
<b v-text="info.nowIntegral||0"/>
|
||||
</div>
|
||||
<div class="divider"/>
|
||||
<div class="headerItem">
|
||||
<div v-text="`积分排名`"/>
|
||||
<b v-text="info.integralRanking||'-'"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -48,14 +57,14 @@ export default {
|
||||
methods: {
|
||||
// 积分排行
|
||||
getInfo() {
|
||||
let {current, info: {details}} = this
|
||||
let {current, info: {detailList: details}} = this
|
||||
if (!details?.pages || current <= details.pages) {
|
||||
this.$http.post('/app/appintegraluser/appGirdIntegral', null, {
|
||||
params: {current, size: 10}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
this.info = res.data
|
||||
this.list = [this.list, res.data.details?.records || []].flat()
|
||||
this.list = [this.list, res.data.detailList?.records || []].flat()
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -77,13 +86,13 @@ export default {
|
||||
|
||||
.bg-blue {
|
||||
width: 100%;
|
||||
height: 176px;
|
||||
height: 270px;
|
||||
background-color: #3975C6;
|
||||
}
|
||||
|
||||
.header-content {
|
||||
width: 690px;
|
||||
height: 256px;
|
||||
height: 408px;
|
||||
margin: -130px 0 40px;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
@@ -93,11 +102,12 @@ export default {
|
||||
|
||||
.headerDataPane {
|
||||
justify-content: space-around;
|
||||
top: 106px;
|
||||
top: 76px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
position: absolute;
|
||||
z-index: 9;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.headerItem {
|
||||
text-align: center;
|
||||
@@ -109,28 +119,29 @@ export default {
|
||||
|
||||
b {
|
||||
display: block;
|
||||
color: #4185F5;
|
||||
line-height: 60px;
|
||||
font-size: 52px;
|
||||
line-height: 50px;
|
||||
color: #000;
|
||||
font-size: 36px;
|
||||
font-family: DINAlternate-Bold, DINAlternate;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
&:nth-of-type(1) > b {
|
||||
color: #5AAD6A;
|
||||
}
|
||||
&.top {
|
||||
width: 100%;
|
||||
|
||||
&:nth-of-type(3) > b {
|
||||
color: #CD413A;
|
||||
b {
|
||||
font-size: 104px;
|
||||
line-height: 122px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
& > img {
|
||||
position: absolute;
|
||||
width: 342px;
|
||||
height: 220px;
|
||||
top: -40px;
|
||||
top: -60px;
|
||||
right: 10px;
|
||||
z-index: 2;
|
||||
}
|
||||
@@ -207,5 +218,11 @@ export default {
|
||||
.color-0 {
|
||||
color: #E6736E !important;
|
||||
}
|
||||
|
||||
.divider {
|
||||
width: 2px;
|
||||
height: 60px;
|
||||
background: #ededed;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -217,7 +217,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
|
||||
.AppOnlineAnswer {
|
||||
width: 100%;
|
||||
|
||||
@@ -144,7 +144,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
|
||||
.AppPartyHistoryEducation {
|
||||
width: 100%;
|
||||
|
||||
@@ -60,7 +60,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -50,7 +50,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -184,7 +184,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.page {
|
||||
.search-box {
|
||||
width: 100%;
|
||||
|
||||
@@ -201,7 +201,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
|
||||
.page {
|
||||
.search-box {
|
||||
|
||||
@@ -31,7 +31,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -50,7 +50,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -90,7 +90,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -83,7 +83,7 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@import "../../common/common.css";
|
||||
@import "../../styles/party";
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<AiAreaPicker v-model="areaId" :areaId="user.areaId" @select="areaSelect" :name.sync="areaName" selectRoot>
|
||||
<span class="label" v-if="areaName">{{ areaName }}</span>
|
||||
<span v-else>请选择</span>
|
||||
<u-icon name="arrow-right" color="#666" size="24" style="margin-left:4px;" />
|
||||
<u-icon name="arrow-right" color="#666" size="24" style="margin-left:4px;"/>
|
||||
</AiAreaPicker>
|
||||
</div>
|
||||
<u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="clearSearch"
|
||||
@@ -207,10 +207,6 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
uni-page-body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
::v-deep .content {
|
||||
padding: 0 !important;
|
||||
}
|
||||
@@ -248,13 +244,10 @@ uni-page-body {
|
||||
}
|
||||
}
|
||||
|
||||
.iconfont-iconMore {
|
||||
// margin-top: 8px;
|
||||
}
|
||||
|
||||
.AppServicePublic {
|
||||
height: 100%;
|
||||
|
||||
|
||||
.header-top {
|
||||
display: flex;
|
||||
background: #fff;
|
||||
|
||||
@@ -1,26 +1,23 @@
|
||||
<template>
|
||||
<div class="Detail">
|
||||
<div class="header-top">
|
||||
<div class="titles">{{data.title}}</div>
|
||||
<div class="titles">{{ data.title }}</div>
|
||||
<div class="flex">
|
||||
<span class="left">
|
||||
<span class="type" v-if="data.categoryName">{{data.categoryName}}</span>
|
||||
<span class="type" v-if="data.categoryName">{{ data.categoryName }}</span>
|
||||
<span class="times">{{ data.createTime }}</span>
|
||||
</span>
|
||||
|
||||
<span class="right">
|
||||
<img src="./img/view-icon.png" alt="">
|
||||
<span>{{data.viewCount}}</span>
|
||||
<span>{{ data.viewCount }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header-middle">
|
||||
<div class="contsnts">
|
||||
<u-parse :html="data.content"></u-parse>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- <div class="img-list" v-if="data.files && data.files.length && data.contentType != 1">
|
||||
<div class="title">图片</div>
|
||||
@@ -35,8 +32,6 @@
|
||||
<script>
|
||||
export default {
|
||||
name: 'Detail',
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
return {
|
||||
data: {},
|
||||
@@ -45,8 +40,6 @@ export default {
|
||||
selectList: []
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
watch: {},
|
||||
onLoad(o) {
|
||||
this.id = o.id
|
||||
this.listName = o.listName
|
||||
@@ -55,8 +48,6 @@ export default {
|
||||
onShow() {
|
||||
document.title = this.listName
|
||||
},
|
||||
|
||||
mounted() {},
|
||||
methods: {
|
||||
previewImage(images, img) {
|
||||
uni.previewImage({
|
||||
@@ -74,7 +65,7 @@ export default {
|
||||
getType() {
|
||||
this.$http.post(`/app/appcontentmoduleinfo/listByName?names=${this.listName}`).then((res) => {
|
||||
if (res.code == 0) {
|
||||
if(res.data && res.data.length) {
|
||||
if (res.data && res.data.length) {
|
||||
this.selectList = res.data[0].categoryList
|
||||
}
|
||||
this.getDetail()
|
||||
@@ -86,15 +77,14 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
uni-page-body {
|
||||
height: 100%;
|
||||
}
|
||||
.Detail {
|
||||
height: 100%;
|
||||
padding: 0 32px;
|
||||
background: #fff;
|
||||
|
||||
.header-top {
|
||||
padding: 40px 0 32px 0;
|
||||
|
||||
.titles {
|
||||
font-size: 48px;
|
||||
font-weight: 600;
|
||||
@@ -110,6 +100,7 @@ uni-page-body {
|
||||
margin-top: 16px;
|
||||
font-size: 30px;
|
||||
color: #999999;
|
||||
|
||||
.to-left {
|
||||
margin-left: 32px;
|
||||
}
|
||||
@@ -118,11 +109,15 @@ uni-page-body {
|
||||
|
||||
.header-middle {
|
||||
padding: 64px 0 48px 0;
|
||||
background: inherit;
|
||||
|
||||
.contsnts {
|
||||
font-size: 36px;
|
||||
line-height: 1.5;
|
||||
word-break: break-all;
|
||||
background: inherit;
|
||||
}
|
||||
|
||||
img {
|
||||
margin-top: 30px;
|
||||
width: 686px;
|
||||
@@ -130,13 +125,14 @@ uni-page-body {
|
||||
}
|
||||
}
|
||||
|
||||
.img-list{
|
||||
img{
|
||||
.img-list {
|
||||
img {
|
||||
width: 204px;
|
||||
height: 204px;
|
||||
margin: 0 8px 8px 0;
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
line-height: 112px;
|
||||
background: #FFF;
|
||||
@@ -164,7 +160,7 @@ uni-page-body {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.type{
|
||||
.type {
|
||||
display: inline-block;
|
||||
padding: 0 16px;
|
||||
line-height: 48px;
|
||||
@@ -181,19 +177,21 @@ uni-page-body {
|
||||
.right {
|
||||
font-size: 28px;
|
||||
color: #999;
|
||||
img{
|
||||
|
||||
img {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
vertical-align: middle;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.font {
|
||||
color: #4181ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep uni-video{
|
||||
::v-deep uni-video {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
"files": [
|
||||
"apps",
|
||||
"project",
|
||||
"styles",
|
||||
"components",
|
||||
"common/util.js",
|
||||
"common/dict.js",
|
||||
"common/monent.js",
|
||||
"common/modules.js",
|
||||
"common/http.js",
|
||||
"common/crypto-js.js",
|
||||
"common/ckeditor.scss"
|
||||
"common/crypto-js.js"
|
||||
],
|
||||
"dependencies": {
|
||||
}
|
||||
|
||||
@@ -1,225 +0,0 @@
|
||||
<template>
|
||||
<div class="AppInterview">
|
||||
<AiTopFixed>
|
||||
<div flex>
|
||||
<AiDate placeholder="日期选择" mode="range" @change="handleDateSearch"/>
|
||||
<u-search placeholder="请输入标题" :show-action="false" v-model="search.title" @search="current=1,getList()"/>
|
||||
</div>
|
||||
</AiTopFixed>
|
||||
<template v-if="list.length>0">
|
||||
<AiCard :ref="'aiCard' + index" v-for="(e,index) in list" :key="index" @click.native="goDetail(e.id,1)">
|
||||
<template #custom>
|
||||
<div flex>
|
||||
<b class="fill">{{ e.title }}</b>
|
||||
</div>
|
||||
<div flex v-if="!!e.fileList" class="wrap" @click.stop>
|
||||
<AiImage v-for="(op,i) in e.fileList.slice(0,3)" :src="op.accessUrl" preview :key="i"/>
|
||||
</div>
|
||||
<div class="bottom">{{ e.createTime }}</div>
|
||||
</template>
|
||||
<template #menu>
|
||||
<div class="menu" @tap.stop="goDetail(e.id,false,index)">编辑</div>
|
||||
<div class="menu" @tap.stop="handleDelete(e.id, index)">删除</div>
|
||||
</template>
|
||||
</AiCard>
|
||||
<u-loadmore :status="loadmore" color="#999" font-size="24"
|
||||
margin-top="32" margin-bottom="80"/>
|
||||
</template>
|
||||
<div class="no-message" v-else>
|
||||
<image src="https://cdn.cunwuyun.cn/wxAdmin/img/message.png"/>
|
||||
<p>您还未添加过入户调查走访<br>点击<b>新增按钮</b>试试吧~</p>
|
||||
</div>
|
||||
<AiFixedBtn>
|
||||
<div class="addBtn iconfont iconfont-iconfangda" @tap="gotoAdd()"/>
|
||||
</AiFixedBtn>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import qs from "query-string"
|
||||
|
||||
export default {
|
||||
name: "AppInterview",
|
||||
appName: "调查走访",
|
||||
inject: {
|
||||
root: {}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
search: {title: ""},
|
||||
list: [],
|
||||
current: 1,
|
||||
pages: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
loadmore() {
|
||||
return this.pages <= this.current ? 'loading ' : 'nomore'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.$http.post('/app/appinterview/list-xcx', null, {
|
||||
params: {
|
||||
current: this.current,
|
||||
size: 10,
|
||||
...this.search
|
||||
}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
|
||||
this.pages = res.data.pages
|
||||
}
|
||||
})
|
||||
},
|
||||
goDetail(id, readonly, index) {
|
||||
let query = {id}
|
||||
readonly && (query.detail = 1)
|
||||
index > -1 && this.$refs[`aiCard${index}`][0].handleClose()
|
||||
uni.navigateTo({url: `./interviewDetail?${qs.stringify(query)}`})
|
||||
},
|
||||
gotoAdd() {
|
||||
uni.navigateTo({url: `./interviewDetail`})
|
||||
},
|
||||
handleDelete(ids, index) {
|
||||
this.$refs[`aiCard${index}`][0].handleClose()
|
||||
this.$confirm("是否要删除该调查走访").then(() => {
|
||||
this.$http.post("/app/appinterview/delete", null, {
|
||||
params: {ids}
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
this.$u.toast("删除成功!")
|
||||
this.getList()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
handleDateSearch(v) {
|
||||
this.search.startTime = v?.startDate
|
||||
this.search.endTime = v?.endDate || v?.startDate
|
||||
this.current = 1
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
document.title = "调查走访"
|
||||
this.current = 1;
|
||||
this.getList()
|
||||
},
|
||||
onReachBottom() {
|
||||
this.current++;
|
||||
this.getList()
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.AppInterview {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
|
||||
.no-message {
|
||||
margin-top: 140px;
|
||||
text-align: center;
|
||||
color: #888;
|
||||
font-size: 30px;
|
||||
|
||||
b {
|
||||
font-size: 32px;
|
||||
color: $uni-color-primary;
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 320px;
|
||||
height: 240px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .AiCard {
|
||||
width: 100%;
|
||||
min-height: 160px;
|
||||
background: #FFFFFF;
|
||||
padding: 32px 32px 0;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
|
||||
b {
|
||||
display: block;
|
||||
width: 100%;
|
||||
font-size: 30px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: #333;
|
||||
margin-right: 60px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.iconfont-iconMore {
|
||||
color: #666;
|
||||
position: absolute;
|
||||
right: 32px;
|
||||
top: 32px;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
font-size: 24px;
|
||||
color: #999999;
|
||||
padding: 24px 0;
|
||||
border-bottom: 1px solid rgba(221, 221, 221, .4);
|
||||
}
|
||||
|
||||
.AiImage {
|
||||
width: 30%;
|
||||
margin-bottom: 8px;
|
||||
margin-right: 8px;
|
||||
|
||||
image {
|
||||
width: 100%;
|
||||
height: 218px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.addBtn {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
flex-shrink: 0;
|
||||
background: $uni-color-primary;
|
||||
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
|
||||
font-size: 48px;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.menu {
|
||||
text-align: center;
|
||||
line-height: 80px;
|
||||
width: 192px;
|
||||
height: 80px;
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
::v-deep .u-search {
|
||||
margin-bottom: 0 !important;
|
||||
padding-left: 146px;
|
||||
box-shadow: none;
|
||||
|
||||
.u-content {
|
||||
padding-left: 50px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,177 +0,0 @@
|
||||
<template>
|
||||
<div class="interviewDetail">
|
||||
<template v-if="isEdit">
|
||||
<u-form ref="interviewForm" label-position="top" :model="form">
|
||||
<u-form-item label="调查走访事项" prop="title" required>
|
||||
<u-input v-model="form.title" placeholder="请输入,最多30字" maxlength="30"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="调查走访内容" prop="content">
|
||||
<AiTextarea v-model="form.content" placeholder="请输入,最多500字" :maxlength="500"/>
|
||||
</u-form-item>
|
||||
<u-form-item label="图片(最多9张)">
|
||||
<AiUploader multiple :limit="9" :def.sync="form.fileList" action="/admin/file/add2"/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<div bottom>
|
||||
<u-button type="primary" @tap="submitForm">保存</u-button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="headerPane">
|
||||
<b>{{ form.title }}</b>
|
||||
<div>记录时间:{{ form.createTime }}</div>
|
||||
</div>
|
||||
<div class="contentPane">
|
||||
<div v-html="form.content"/>
|
||||
<div flex class="wrap">
|
||||
<AiImage v-for="(op,i) in form.fileList" :src="op.accessUrl" preview :key="i"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'interviewDetail',
|
||||
inject: {root: {}},
|
||||
computed: {
|
||||
isEdit() {
|
||||
return this.$route.query?.detail != 1
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
fileList: []
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
created() {
|
||||
this.searchDetail();
|
||||
},
|
||||
methods: {
|
||||
submitForm() {
|
||||
if (!this.form.title) {
|
||||
return this.$u.toast("请输入调查走访事项")
|
||||
}
|
||||
|
||||
this.$refs.interviewForm?.validate(v => {
|
||||
if (v) {
|
||||
this.$http.post(`/app/appinterview/add-xcx`, {
|
||||
...this.form
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
this.$u.toast("提交成功!")
|
||||
setTimeout(() => {
|
||||
uni.navigateBack({})
|
||||
}, 1000)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
searchDetail() {
|
||||
let {id} = this.$route.query
|
||||
id && this.$http.post(`/app/appinterview/queryDetailById`, null, {
|
||||
params: {id}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
this.form = {...res.data};
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.interviewDetail {
|
||||
background: #F3F6F9;
|
||||
height: 100%;
|
||||
|
||||
.u-form {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
background-color: #f3f6f9;
|
||||
position: relative;
|
||||
padding: 0 0 188px;
|
||||
box-sizing: border-box;
|
||||
font-size: 30px;
|
||||
|
||||
::v-deep textarea {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
::v-deep .u-form-item {
|
||||
margin-bottom: 16px;
|
||||
|
||||
.u-form-item--left__content__label {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
div[flex] {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div[bottom] {
|
||||
z-index: 99;
|
||||
padding: 0;
|
||||
height: 112px;
|
||||
|
||||
.u-btn {
|
||||
height: 100%;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .headerPane {
|
||||
width: 100%;
|
||||
background: #3975C6;
|
||||
color: #fff;
|
||||
padding: 24px 32px 32px;
|
||||
box-sizing: border-box;
|
||||
font-size: 28px;
|
||||
|
||||
b {
|
||||
display: block;
|
||||
font-size: 40px;
|
||||
line-height: 64px;
|
||||
letter-spacing: 2px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .contentPane {
|
||||
padding: 32px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
font-size: 32px;
|
||||
font-weight: 400;
|
||||
color: #666;
|
||||
line-height: 56px;
|
||||
|
||||
.wrap {
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.AiImage {
|
||||
width: 31%;
|
||||
margin-bottom: 16px;
|
||||
margin-right: 16px;
|
||||
|
||||
image {
|
||||
width: 100%;
|
||||
height: 218px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,171 +0,0 @@
|
||||
<template>
|
||||
<div class="info">
|
||||
<div class="info-top">
|
||||
<div class="info-top__item" @click="linkTo('./Monitor')">
|
||||
<image :src="$cdn + '/tengxun/wdbf.png'"/>
|
||||
<h2>监测对象</h2>
|
||||
</div>
|
||||
<div class="info-top__item" @click="linkTo('./povertyMonitor')">
|
||||
<image src="/static/images/yjjk.png"/>
|
||||
<h2>预警监控</h2>
|
||||
</div>
|
||||
<div class="info-top__item" @click="linkTo('./News')">
|
||||
<image src="/static/images/news.png"/>
|
||||
<h2>政策动态</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="news">
|
||||
<h2>最新动态</h2>
|
||||
<div class="news-list">
|
||||
<div class="news-item" v-for="(item, index) in list" :key="index"
|
||||
@click="linkTo(`./NewsDetail?id=${item.id}`)">
|
||||
<div class="left">
|
||||
<h2>{{ item.title }}</h2>
|
||||
<div class="item-bottom">
|
||||
<span>{{ $dict.getLabel('newsCenterPolicyType', item.policyType) }}</span>
|
||||
<span>{{ item.createTime }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "AppPovertyAlleviation",
|
||||
appName: "防返贫",
|
||||
data() {
|
||||
return {
|
||||
list: []
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.$dict.load(['newsCenterPolicyType']).then(() => {
|
||||
this.getList()
|
||||
})
|
||||
|
||||
console.log(this.$cdn + '/tengxun/wdbf.png')
|
||||
},
|
||||
|
||||
methods: {
|
||||
linkTo(url) {
|
||||
uni.navigateTo({url})
|
||||
},
|
||||
getList() {
|
||||
this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
|
||||
params: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
status: 1
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.list = res.data.records
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.info {
|
||||
padding: 32px 30px;
|
||||
|
||||
.info-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 32px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 16px;
|
||||
|
||||
div {
|
||||
flex: 1;
|
||||
padding: 32px 0;
|
||||
text-align: center;
|
||||
|
||||
image {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-top: 4px;
|
||||
color: #3D434A;
|
||||
font-size: 28px;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.news {
|
||||
& > h2 {
|
||||
margin-bottom: 32px;
|
||||
color: #333333;
|
||||
font-weight: 600;
|
||||
font-size: 32px;
|
||||
|
||||
}
|
||||
|
||||
.news-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
padding: 32px 24px;
|
||||
background: #fff;
|
||||
border-radius: 14px;
|
||||
|
||||
&:active {
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.left {
|
||||
flex: 1;
|
||||
margin-right: 20px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
& > image {
|
||||
width: 200px;
|
||||
height: 140px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
width: 100%;
|
||||
margin-bottom: 32px;
|
||||
color: #333333;
|
||||
font-size: 30px;
|
||||
font-weight: 600;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.item-bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 24px;
|
||||
|
||||
&:first-child {
|
||||
margin-right: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,87 +0,0 @@
|
||||
<template>
|
||||
<div class="povertyMonitor">
|
||||
<div class="form-content">
|
||||
<List ref="list" v-if="currIndex === 0"></List>
|
||||
<Statistics ref="statistics" v-if="currIndex === 1"></Statistics>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div @click="currIndex = 0" :class="[currIndex === 0 ? 'active' : '']">监测对象列表</div>
|
||||
<div @click="currIndex = 1" :class="[currIndex === 1 ? 'active' : '']">数据统计</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Statistics from './Monitor/Statistics.vue'
|
||||
import List from './Monitor/List.vue'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
currIndex: 0
|
||||
}
|
||||
},
|
||||
|
||||
components: {
|
||||
List,
|
||||
Statistics
|
||||
},
|
||||
|
||||
computed: {
|
||||
tabBar() {
|
||||
const link = icon => `${this.$cdn}askform/${icon}.png`
|
||||
return [
|
||||
{text: "监测对象列表", iconPath: "bdlb1", selectedIconPath: "bdlb2"},
|
||||
{text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"}
|
||||
].map(e => ({
|
||||
...e,
|
||||
iconPath: link(e.iconPath),
|
||||
selectedIconPath: link(e.selectedIconPath)
|
||||
}))
|
||||
}
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
uni.$on('reload', () => {
|
||||
if (this.currIndex === 0) {
|
||||
this.$refs.list.reload()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
onReachBottom() {
|
||||
if (this.currIndex === 0) {
|
||||
this.$refs.list.getList()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.povertyMonitor {
|
||||
.footer {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 98px;
|
||||
|
||||
div {
|
||||
flex: 1;
|
||||
height: 98px;
|
||||
line-height: 98px;
|
||||
text-align: center;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
background: #fff;
|
||||
|
||||
&.active {
|
||||
color: #fff;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,285 +0,0 @@
|
||||
<template>
|
||||
<div class="list">
|
||||
<div class="area">
|
||||
<i>可选范围</i>
|
||||
<span class="separat">/</span>
|
||||
<!-- <AiArea class="aiArea" v-model="addressAreaId" mode="custom" fullname :areaRange="$areaId" :name.sync="addressArea" @change="reload">
|
||||
<div class="label" v-if="addressArea">{{ addressArea }}</div>
|
||||
<i v-else>请选择</i>
|
||||
</AiArea> -->
|
||||
<AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom"
|
||||
@select="onChange">
|
||||
<span class="label" v-if="addressArea">{{ addressArea }}</span>
|
||||
<i v-else>请选择</i>
|
||||
</AiAreaPicker>
|
||||
</div>
|
||||
<div class="list-wrapper">
|
||||
<div class="tab">
|
||||
<span @click="changeTab(0)" :class="[currIndex === 0 ? 'active' : '']">已登记监测对象</span>
|
||||
<span @click="changeTab(1)" :class="[currIndex === 1 ? 'active' : '']">已消除风险对象</span>
|
||||
</div>
|
||||
<div class="search">
|
||||
<u-search
|
||||
placeholder="请输入"
|
||||
:show-action="false"
|
||||
search-icon-color="#ccc"
|
||||
v-model="name"
|
||||
@search="reload">
|
||||
</u-search>
|
||||
</div>
|
||||
<div class="list-item__wrapper">
|
||||
<div class="list-item" v-for="(item, index) in list" :key="index" @click="toDetail(item.id)">
|
||||
<image src="/static/images/avatar.png"/>
|
||||
<div class="right">
|
||||
<h2>{{ item.name || item.phone }}</h2>
|
||||
<p>{{ item.addressArea }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-if="!list.length && isMore" style="padding-bottom: 20px;"></AiEmpty>
|
||||
</div>
|
||||
<AiFixedBtn>
|
||||
<div class="addBtn iconfont iconfont-iconfangda" @tap="toAdd"></div>
|
||||
</AiFixedBtn>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'list',
|
||||
|
||||
data() {
|
||||
return {
|
||||
currIndex: 0,
|
||||
name: '',
|
||||
list: [],
|
||||
areaId: '',
|
||||
addressAreaId: '',
|
||||
addressArea: '',
|
||||
isMore: false,
|
||||
current: 1
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
uni.showLoading()
|
||||
this.areaId = this.$store.state.user.areaId
|
||||
this.addressAreaId = this.$store.state.user.areaId
|
||||
this.addressArea = this.$store.state.user.areaName
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.getList()
|
||||
})
|
||||
uni.$on('reload', () => {
|
||||
if (this.currIndex === 0) {
|
||||
} else {
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
toDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: './MonitorDetail?id=' + id
|
||||
})
|
||||
},
|
||||
|
||||
onChange(e) {
|
||||
this.addressAreaId = e.id
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.reload()
|
||||
})
|
||||
},
|
||||
|
||||
toAdd() {
|
||||
uni.navigateTo({
|
||||
url: './MonitorAdd'
|
||||
})
|
||||
},
|
||||
|
||||
reload() {
|
||||
this.isMore = false
|
||||
this.current = 1
|
||||
uni.showLoading()
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
|
||||
changeTab(index) {
|
||||
this.currIndex = index
|
||||
this.reload()
|
||||
},
|
||||
|
||||
getList() {
|
||||
if (this.isMore) return
|
||||
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
|
||||
params: {
|
||||
current: this.current,
|
||||
size: 15,
|
||||
status: this.currIndex === 1 ? '1' : '',
|
||||
addressAreaId: this.addressAreaId,
|
||||
name: this.name
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (this.current > 1) {
|
||||
this.list = [...this.list, ...res.data.records]
|
||||
} else {
|
||||
this.list = res.data.records
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
|
||||
if (res.data.records.length < 10) {
|
||||
this.isMore = true
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
this.current = this.current + 1
|
||||
} else {
|
||||
uni.hideLoading()
|
||||
}
|
||||
}).catch(() => {
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.list {
|
||||
padding: 112px 0 120px;
|
||||
|
||||
.addBtn {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
flex-shrink: 0;
|
||||
background: $uni-color-primary;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
font-size: 48px;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.list-wrapper {
|
||||
margin-top: 16px;
|
||||
background: #fff;
|
||||
|
||||
.list-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20px 32px;
|
||||
|
||||
image {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
margin-right: 32px;
|
||||
}
|
||||
|
||||
.right {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 10px;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.search {
|
||||
margin: 20px 0;
|
||||
padding: 0 32px;
|
||||
}
|
||||
|
||||
.tab {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
padding: 0 60px;
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
box-sizing: border-box;
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
span {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
font-size: 32px;
|
||||
|
||||
&::after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 192px;
|
||||
height: 6px;
|
||||
background: transparent;
|
||||
transform: translateX(-50%);
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: #1365DD;
|
||||
|
||||
&::after {
|
||||
background: #1365DD;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.area {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
align-items: center;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
padding: 0 32px;
|
||||
height: 112px;
|
||||
color: #333333;
|
||||
font-size: 30px;
|
||||
background: #fff;
|
||||
|
||||
.separat {
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #3F8DF5;
|
||||
font-size: 30px;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,433 +0,0 @@
|
||||
<template>
|
||||
<div class="statistics">
|
||||
<div class="area">
|
||||
<i>可选范围</i>
|
||||
<span class="separat">/</span>
|
||||
<AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom"
|
||||
@select="onChange">
|
||||
<span class="label" v-if="addressArea">{{ addressArea }}</span>
|
||||
<i v-else>请选择</i>
|
||||
</AiAreaPicker>
|
||||
</div>
|
||||
<div class="charts-wrapper">
|
||||
<div class="total">
|
||||
<div class="total-item">
|
||||
<h2>{{ info.jths }}</h2>
|
||||
<p>检测家庭户数</p>
|
||||
</div>
|
||||
<div class="total-item">
|
||||
<h2>{{ info.zrs }}</h2>
|
||||
<p>监测对象总人数</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="charts">
|
||||
<h2>近半年风险人数变化趋势</h2>
|
||||
<div id="chart1" style="height: 400rpx"></div>
|
||||
</div>
|
||||
<div class="total middle-total">
|
||||
<div class="total-item">
|
||||
<h2>{{ info['饮水安全'] || 0 }}</h2>
|
||||
<p>住房安全</p>
|
||||
</div>
|
||||
<div class="total-item">
|
||||
<h2>{{ info['饮水安全'] || 0 }}</h2>
|
||||
<p>饮水安全</p>
|
||||
</div>
|
||||
<div class="total-item">
|
||||
<h2>{{ info['失学辍学'] || 0 }}</h2>
|
||||
<p>失学辍学</p>
|
||||
</div>
|
||||
<div class="total-item">
|
||||
<h2>{{ info['医疗保险'] || 0 }}</h2>
|
||||
<p>医疗保险</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="charts">
|
||||
<h2>风险类型排行TOP10</h2>
|
||||
<div id="chart3" style="height: 400rpx"></div>
|
||||
</div>
|
||||
<div class="charts">
|
||||
<h2>风险消除方式</h2>
|
||||
<div id="chart4" style="height: 400rpx"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import echarts from 'echarts'
|
||||
|
||||
export default {
|
||||
name: 'statistics',
|
||||
|
||||
data() {
|
||||
return {
|
||||
addressAreaId: '',
|
||||
addressArea: '',
|
||||
chart1: null,
|
||||
chart2: null,
|
||||
chart3: null,
|
||||
chart4: null,
|
||||
areaId: '',
|
||||
info: {},
|
||||
pageShow: false
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
created() {
|
||||
this.areaId = this.$store.state.user.areaId
|
||||
this.addressAreaId = this.$store.state.user.areaId
|
||||
this.addressArea = this.$store.state.user.areaName
|
||||
},
|
||||
|
||||
mounted() {
|
||||
window.scrollTo(0, 0)
|
||||
this.chart1 = echarts.init(document.getElementById('chart1'))
|
||||
this.chart4 = echarts.init(document.getElementById('chart4'))
|
||||
this.chart3 = echarts.init(document.getElementById('chart3'))
|
||||
|
||||
this.$dict.load(['fpRiskType', 'fpRiskEliminationMethod']).then(() => {
|
||||
this.getInfo()
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
reload() {
|
||||
this.$nextTick(() => {
|
||||
this.getInfo()
|
||||
})
|
||||
},
|
||||
|
||||
onChange(e) {
|
||||
this.addressAreaId = e.id
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.reload()
|
||||
})
|
||||
},
|
||||
|
||||
initChart1(data) {
|
||||
const x = data.map(v => v.m)
|
||||
const v = data.map(v => v.c)
|
||||
const option = {
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: x,
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid',
|
||||
color: '#f5f5f5'
|
||||
}
|
||||
},
|
||||
axisLabel: {
|
||||
align: 'center',
|
||||
padding: [2, 0, 0, 0],
|
||||
interval: 0,
|
||||
fontSize: 14,
|
||||
color: '#999'
|
||||
},
|
||||
axisTick: {
|
||||
length: 1,
|
||||
show: true
|
||||
},
|
||||
boundaryGap: true,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#aaa'
|
||||
}
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
top: '4%',
|
||||
left: '4%',
|
||||
right: '6%',
|
||||
bottom: '0%',
|
||||
containLabel: true
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
boundaryGap: true,
|
||||
axisTick: {
|
||||
length: 1,
|
||||
show: true
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid',
|
||||
color: '#f5f5f5'
|
||||
}
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: '#f5f5f5',
|
||||
align: 'left'
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid',
|
||||
color: '#aaa'
|
||||
}
|
||||
},
|
||||
axisLabel: {
|
||||
color: '#999'
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: v,
|
||||
type: 'line'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart1.setOption(option)
|
||||
},
|
||||
|
||||
initChart3(data) {
|
||||
const y = data.map(v => this.$dict.getLabel('fpRiskType', v.risk_type) || '其他')
|
||||
const v = data.map(v => v.c)
|
||||
const option = {
|
||||
tooltip: {},
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
grid: {
|
||||
top: '4%',
|
||||
left: '4%',
|
||||
right: '6%',
|
||||
bottom: '0%',
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid',
|
||||
color: '#f5f5f5'
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
length: 1,
|
||||
show: true
|
||||
},
|
||||
axisLabel: {
|
||||
align: 'center',
|
||||
padding: [2, 0, 0, 0],
|
||||
interval: 0,
|
||||
fontSize: 14,
|
||||
color: '#999'
|
||||
},
|
||||
boundaryGap: true,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid',
|
||||
color: '#aaa'
|
||||
}
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: 'category',
|
||||
data: y,
|
||||
boundaryGap: true,
|
||||
axisTick: {
|
||||
length: 0,
|
||||
show: false
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: ['#e9e9e9'],
|
||||
width: 1,
|
||||
type: 'solid'
|
||||
}
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: '#999',
|
||||
align: 'left'
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid',
|
||||
color: '#aaa'
|
||||
}
|
||||
},
|
||||
axisLabel: {
|
||||
color: '#999'
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '2011',
|
||||
type: 'bar',
|
||||
data: v
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart3.setOption(option)
|
||||
},
|
||||
|
||||
initChart4(data) {
|
||||
const values = data.map(v => {
|
||||
return {
|
||||
value: v.c,
|
||||
name: this.$dict.getLabel('fpRiskEliminationMethod', v.risk_elimination_method) || '其他'
|
||||
}
|
||||
})
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'item'
|
||||
},
|
||||
grid: {
|
||||
left: '0%',
|
||||
right: '0%',
|
||||
bottom: '0%',
|
||||
top: '40px',
|
||||
containLabel: true
|
||||
},
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
series: [
|
||||
{
|
||||
name: '本月纳入监测人群属性分析',
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
emphasis: {
|
||||
label: {
|
||||
show: true,
|
||||
fontSize: '40',
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
},
|
||||
data: values
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart4.setOption(option)
|
||||
},
|
||||
|
||||
getInfo() {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/statistics-prtp?areaId=${this.addressAreaId}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.info = res.data
|
||||
this.initChart1(res.data['近半年趋势'])
|
||||
this.initChart3(res.data['风险类型排行'])
|
||||
this.initChart4(res.data['风险消除方式'])
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.statistics {
|
||||
padding: 112px 0 120px;
|
||||
|
||||
.area {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
align-items: center;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
padding: 0 32px;
|
||||
height: 112px;
|
||||
color: #333333;
|
||||
font-size: 30px;
|
||||
background: #fff;
|
||||
|
||||
.separat {
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #3F8DF5;
|
||||
font-size: 30px;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.charts-wrapper {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding: 0 32px;
|
||||
|
||||
.total {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 200px;
|
||||
margin-top: 32px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 8px;
|
||||
|
||||
.total-item {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
|
||||
h2 {
|
||||
font-size: 64px;
|
||||
color: #3192F4;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 10px;
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.middle-total {
|
||||
height: 160px;
|
||||
|
||||
h2 {
|
||||
font-size: 48px !important;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.charts {
|
||||
margin-top: 32px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 8px;
|
||||
|
||||
& > h2 {
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
padding: 0 32px;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
}
|
||||
|
||||
& > div {
|
||||
width: 686px;
|
||||
margin: 0 auto;
|
||||
padding: 32px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,359 +0,0 @@
|
||||
<template>
|
||||
<div class="add">
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>监测对象类型</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpType" v-model="form.type"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>联系方式</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>地址</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<!-- <AiArea class="aiArea" v-model="form.addressAreaId" mode="custom" fullname :areaRange="$areaId" :name.sync="form.addressArea">
|
||||
<span class="label" v-if="form.addressArea">{{ form.addressArea }}</span>
|
||||
<i v-else>请选择</i>
|
||||
<u-icon name="arrow-right" color="#ddd"/>
|
||||
</AiArea> -->
|
||||
<AiAreaPicker ref="address" class="aiArea" :areaId="$areaId" mode="custom" all @select="onAreaChange">
|
||||
<span class="label" v-if="form.addressArea">{{ form.addressArea }}</span>
|
||||
<i v-else>请选择</i>
|
||||
<u-icon name="arrow-right" color="#ddd"/>
|
||||
</AiAreaPicker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>家庭住址</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.address" placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>是否扶贫搬迁</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.move">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" v-if="form.move === '01'">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>安置地区</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all
|
||||
@select="onChange">
|
||||
<span class="label" v-if="form.placeArea">{{ form.placeArea }}</span>
|
||||
<i v-else>请选择</i>
|
||||
<u-icon name="arrow-right" color="#ddd"/>
|
||||
</AiAreaPicker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>安置地区详细地址</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.place" placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn" hover-class="text" @click="submit"> {{ isEdit ? '保存' : '提交' }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
addressAreaId: '',
|
||||
address: '',
|
||||
addressArea: '',
|
||||
move: '02',
|
||||
place: '',
|
||||
placeAreaId: '',
|
||||
placeArea: '',
|
||||
type: ''
|
||||
},
|
||||
$areaId: '',
|
||||
isEdit: false,
|
||||
id: '',
|
||||
areaName: ''
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
this.$areaId = this.$store.state.user.areaId
|
||||
this.areaName = this.$store.state.user.areaFullName
|
||||
this.$dict.load(['fpType', 'fpYesOrNo'])
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
if (query.id) {
|
||||
this.isEdit = true
|
||||
this.id = query.id
|
||||
|
||||
this.getInfo(this.id)
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
submit() {
|
||||
if (!this.form.type) {
|
||||
return this.$u.toast('请选择监测类型')
|
||||
}
|
||||
|
||||
if (!this.form.phone) {
|
||||
return this.$u.toast('请输入联系方式')
|
||||
}
|
||||
|
||||
if (!this.form.addressAreaId) {
|
||||
return this.$u.toast('请选择住址')
|
||||
}
|
||||
|
||||
uni.showLoading()
|
||||
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
|
||||
...this.form,
|
||||
id: this.isEdit ? this.id : ''
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
|
||||
uni.$emit('reload')
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
onAreaChange(e) {
|
||||
this.form.addressAreaId = e.id
|
||||
const areaList = this.$refs.address.fullArea
|
||||
let fullAreaName = ''
|
||||
areaList.forEach(item => {
|
||||
fullAreaName = fullAreaName + item.name
|
||||
})
|
||||
|
||||
this.form.addressArea = fullAreaName.replace('全国', '')
|
||||
},
|
||||
|
||||
onChange(e) {
|
||||
this.form.placeAreaId = e.id
|
||||
const areaList = this.$refs.area.fullArea
|
||||
let fullAreaName = ''
|
||||
areaList.forEach(item => {
|
||||
fullAreaName = fullAreaName + item.name
|
||||
})
|
||||
|
||||
this.form.placeArea = fullAreaName.replace('全国', '')
|
||||
},
|
||||
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.form = {
|
||||
...this.form,
|
||||
...res.data
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.add {
|
||||
padding-bottom: 120px;
|
||||
|
||||
.aiArea {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.label {
|
||||
color: #303133 !important;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-left: 4px;
|
||||
font-style: normal;
|
||||
color: #999999;
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .u-radio {
|
||||
&:last-child {
|
||||
.u-radio__label {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.form-item {
|
||||
padding-left: 32px;
|
||||
|
||||
.form-item__wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
border-bottom: 1px solid #E4E5E6;
|
||||
}
|
||||
|
||||
.right {
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
padding-right: 32px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-right: 4px;
|
||||
font-style: normal;
|
||||
color: #FF4466;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.form-item__wrapper {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-item__imgs {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,466 +0,0 @@
|
||||
<template>
|
||||
<div class="add">
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>与户主关系</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpRelationship" v-model="form.relationship"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>姓名</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.name" placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>身份证号</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.idNumber" placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>性别</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="sex" v-model="form.sex"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>民族</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpNation" v-model="form.nation"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>政治面貌</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpPoliticalOutlook" v-model="form.politicalOutlook"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>文化程度</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpEducation" v-model="form.education"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>在校情况</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpStudentsInSchool" v-model="form.studentsInSchool"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>健康状况</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpHealth" v-model="form.health"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>劳动技能</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpLaborSkills" v-model="form.laborSkills"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>务工区域</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.workArea" placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>务工时长(月)</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" type="number" v-model="form.workingMonths"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否参加医保</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.medicalInsurance">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否参加大病保险</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.sicknessInsurance">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否参加养老保险</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.endowmentInsurance">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否享受最低生活保障</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.subsistenceAllowance">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否特困供养</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.destitute">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn" @click="submit">提交</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
destitute: '',
|
||||
education: '',
|
||||
endowmentInsurance: '',
|
||||
health: '',
|
||||
idNumber: '',
|
||||
laborSkills: '',
|
||||
medicalInsurance: '',
|
||||
name: '',
|
||||
nation: '',
|
||||
politicalOutlook: '',
|
||||
relationship: '',
|
||||
relocation: '',
|
||||
sex: '',
|
||||
sicknessInsurance: '',
|
||||
studentsInSchool: '',
|
||||
subsistenceAllowance: '',
|
||||
workArea: '',
|
||||
workingMonths: ''
|
||||
},
|
||||
id: '',
|
||||
info: {},
|
||||
isEdit: false,
|
||||
index: ''
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
uni.showLoading()
|
||||
this.id = query.id
|
||||
this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
|
||||
'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
|
||||
this.getInfo(query.id)
|
||||
})
|
||||
|
||||
if (query.index > -1) {
|
||||
this.isEdit = true
|
||||
this.index = Number(query.index)
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
if (this.isEdit) {
|
||||
this.form = {
|
||||
...res.data.familyList[this.index]
|
||||
}
|
||||
}
|
||||
this.info = res.data
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
rules() {
|
||||
return {
|
||||
relationship: '请选择与户主关系',
|
||||
name: '请输入姓名',
|
||||
idNumber: '请输入身份证号',
|
||||
sex: '请选择性别',
|
||||
studentsInSchool: '请选择在校情况',
|
||||
health: '请选择健康状况',
|
||||
medicalInsurance: '请选择是否参加医保',
|
||||
sicknessInsurance: '请选择是否参加大病保险',
|
||||
endowmentInsurance: '请选择是否参加养老保险',
|
||||
subsistenceAllowance: '请选择是否享受最低生活保障',
|
||||
destitute: '请选择是否特困供养',
|
||||
}
|
||||
},
|
||||
|
||||
submit() {
|
||||
const rules = this.rules()
|
||||
|
||||
for (let v of Object.keys(rules)) {
|
||||
if (!this.form[v]) {
|
||||
return this.$u.toast(rules[v])
|
||||
}
|
||||
}
|
||||
|
||||
uni.showLoading()
|
||||
let familyList = this.info.familyList
|
||||
if (this.isEdit) {
|
||||
familyList[this.index] = this.form
|
||||
} else {
|
||||
familyList.push(this.form)
|
||||
}
|
||||
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
|
||||
...this.info,
|
||||
familyList,
|
||||
id: this.id
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast(this.isEdit ? '编辑成功' : '提交成功')
|
||||
uni.$emit('reload')
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.add {
|
||||
padding-bottom: 120px;
|
||||
|
||||
::v-deep .u-radio {
|
||||
&:last-child {
|
||||
.u-radio__label {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.form-item {
|
||||
padding-left: 32px;
|
||||
|
||||
.form-item__wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
border-bottom: 1px solid #E4E5E6;
|
||||
}
|
||||
|
||||
.right {
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
padding-right: 32px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-right: 4px;
|
||||
font-style: normal;
|
||||
color: #FF4466;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.form-item__wrapper {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-item__imgs {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,155 +0,0 @@
|
||||
<template>
|
||||
<div class="form">
|
||||
<div class="form-item form-item__textarea">
|
||||
<div class="form-item__title">
|
||||
<em>*</em>
|
||||
<h2>帮扶内容</h2>
|
||||
</div>
|
||||
<textarea :maxlength="500" v-model="detail" placeholder="请输入帮扶内容"></textarea>
|
||||
</div>
|
||||
<div class="form-item form-item__imgs">
|
||||
<div class="form-item__title">
|
||||
<h2>图片</h2>
|
||||
<i>(最多9张)</i>
|
||||
</div>
|
||||
<div>
|
||||
<AiUploader :limit="9" multiple :def.sync="picture"></AiUploader>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn" @click="submit">提交</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
detail: '',
|
||||
pid: '',
|
||||
id: '',
|
||||
picture: []
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
onLoad(query) {
|
||||
if (query.id) {
|
||||
this.getInfo(query.id)
|
||||
this.id = query.id
|
||||
}
|
||||
this.pid = query.pid
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopovertylog/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.detail = res.data.detail
|
||||
this.picture = JSON.parse(res.data.picture)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
submit() {
|
||||
if (!this.detail) {
|
||||
return this.$u.toast('请输入帮扶内容')
|
||||
}
|
||||
|
||||
uni.showLoading()
|
||||
this.$http.post('/app/apppreventionreturntopovertylog/addOrUpdate', {
|
||||
detail: this.detail,
|
||||
picture: JSON.stringify(this.picture),
|
||||
pid: this.pid,
|
||||
id: this.id || ''
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
|
||||
uni.$emit('reload')
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.form {
|
||||
padding-bottom: 120px;
|
||||
|
||||
div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.form-item {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
em {
|
||||
margin-right: 4px;
|
||||
font-style: normal;
|
||||
color: #FF4466;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,538 +0,0 @@
|
||||
<template>
|
||||
<div class="detail" v-if="pageShow" :class="[isFrom ? 'active' : '']">
|
||||
<div class="tab" v-if="!isFrom">
|
||||
<span @click="changeTab(0)" :class="[currIndex === 0 ? 'active' : '']">基本信息</span>
|
||||
<span @click="changeTab(1)" :class="[currIndex === 1 ? 'active' : '']">帮扶日志</span>
|
||||
</div>
|
||||
<div class="tab-content">
|
||||
<div class="tab-content__item" v-show="currIndex === 0">
|
||||
<div class="item-wrapper">
|
||||
<div class="item-header item-avatar">
|
||||
<div class="left">
|
||||
<image src="/static/images/avatar.png"/>
|
||||
<div class="left-right">
|
||||
<h2>{{ info.name }}</h2>
|
||||
<p>{{ info.phone }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<span @click="linkTo('./MonitorAdd?id=' + info.id)">编辑</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>行政区划</label>
|
||||
<span>{{ info.addressArea }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>家庭地址</label>
|
||||
<span>{{ info.address }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>是否扶贫搬迁</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', info.move) }}</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="info.move === '01'">
|
||||
<label>安置地区</label>
|
||||
<span>{{ info.placeArea }}</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="info.move === '01'">
|
||||
<label>安置详细地址</label>
|
||||
<span>{{ info.place }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>纳入监测时间</label>
|
||||
<span>{{ info.createTime }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>监测员</label>
|
||||
<span>{{ info.monitoringContact || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>监测员电话</label>
|
||||
<span style="color: #3D94FB;"
|
||||
@click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-wrapper">
|
||||
<div class="item-header">
|
||||
<div class="left">
|
||||
<h2>家庭成员</h2>
|
||||
<i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{
|
||||
info.familyList.length ? '已填写' : '未填写'
|
||||
}})</i>
|
||||
</div>
|
||||
<span @click="linkTo('./MonitorFamilyMember?id=' + info.id)">编辑</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>未参加医疗参保</label>
|
||||
<span>{{ info.ylbxCount }}人</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>未参加养老保险</label>
|
||||
<span>{{ info.ylCount }}人</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-wrapper">
|
||||
<div class="item-header">
|
||||
<div class="left">
|
||||
<h2>家庭情况</h2>
|
||||
<i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{
|
||||
isFamilySituation ? '已填写' : '未填写'
|
||||
}})</i>
|
||||
</div>
|
||||
<span @click="linkTo('./MonitorFamilySituation?id=' + info.id)">编辑</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>是否危房</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', info.dilapidatedHouse) || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>饮用水安全问题</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', info.drinkingWaterSafety) || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-wrapper">
|
||||
<div class="item-header">
|
||||
<div class="left">
|
||||
<h2>收支情况</h2>
|
||||
<i :style="{color: isIncome ? '#2EA222' : '#FF4466'}">({{ isIncome ? '已填写' : '未填写' }})</i>
|
||||
</div>
|
||||
<span @click="linkTo('./MonitorIncome?id=' + info.id)">编辑</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>家庭纯收入</label>
|
||||
<span>{{ info.income6 }}元</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>家庭人均纯收入</label>
|
||||
<span>{{ info.income7 }}元</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-wrapper">
|
||||
<div class="item-header">
|
||||
<div class="left">
|
||||
<h2>风险解除</h2>
|
||||
<i :style="{color: isPoorStatus ? '#2EA222' : '#FF4466'}">({{ isPoorStatus ? '已填写' : '未填写' }})</i>
|
||||
</div>
|
||||
<span @click="linkTo('./MonitorPoorStatus?id=' + info.id)">编辑</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<label>是否消除风险</label>
|
||||
<span>{{ info.riskEliminationMethod ? '是' : '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-content__item" v-show="currIndex === 1">
|
||||
<div class="log-item" v-for="(item, index) in list" :key="index">
|
||||
<div class="log-item__wrapper">
|
||||
<div class="log-item__user">
|
||||
<div class="left">
|
||||
<div class="user">
|
||||
<span>{{ item.createUserName.substr(item.createUserName.length - 2) }}</span>
|
||||
</div>
|
||||
<h2>{{ item.createUserName }}</h2>
|
||||
</div>
|
||||
<div class="right">
|
||||
<span>{{ item.createTime }}</span>
|
||||
<image src="/static/images/more.png" @click="edit(item.id)"/>
|
||||
</div>
|
||||
</div>
|
||||
<p>{{ item.detail }}</p>
|
||||
<div class="imgs">
|
||||
<image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs"
|
||||
:key="index"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-if="!list.length" style="padding-bottom: 20px;"></AiEmpty>
|
||||
</div>
|
||||
</div>
|
||||
<AiFixedBtn v-if="currIndex === 1">
|
||||
<div class="addBtn iconfont iconfont-iconfangda" @tap="toAddLog"></div>
|
||||
</AiFixedBtn>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'detail',
|
||||
|
||||
data() {
|
||||
return {
|
||||
info: {},
|
||||
pageShow: false,
|
||||
currIndex: 0,
|
||||
list: [],
|
||||
isFrom: false
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
computed: {
|
||||
isIncome() {
|
||||
if (!this.info.id) {
|
||||
return false
|
||||
}
|
||||
|
||||
return this.info.income6 > 0 && this.info.income7 > 0;
|
||||
|
||||
|
||||
},
|
||||
|
||||
isPoorStatus() {
|
||||
if (!this.info.id) {
|
||||
return false
|
||||
}
|
||||
|
||||
return !!this.info.riskEliminationMethod;
|
||||
|
||||
|
||||
},
|
||||
|
||||
isFamilySituation() {
|
||||
if (!this.info.id) {
|
||||
return false
|
||||
}
|
||||
|
||||
return !!(this.info.drinkingWaterSafety && this.info.dilapidatedHouse);
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
if (query.isFrom) {
|
||||
this.isFrom = true
|
||||
}
|
||||
uni.showLoading()
|
||||
this.$dict.load(['fpType', 'riskEliminationMethod', 'fpRiskType', 'fpYesOrNo']).then(() => {
|
||||
this.getInfo(query.id)
|
||||
})
|
||||
|
||||
this.id = query.id
|
||||
uni.$on('reload', () => {
|
||||
this.getInfo(query.id)
|
||||
})
|
||||
},
|
||||
onShow() {
|
||||
document.title = '风险预警详情'
|
||||
},
|
||||
|
||||
methods: {
|
||||
linkTo(url) {
|
||||
uni.navigateTo({url})
|
||||
},
|
||||
|
||||
call(phone) {
|
||||
if (phone) {
|
||||
uni.makePhoneCall({
|
||||
phoneNumber: phone
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
edit(id) {
|
||||
uni.showActionSheet({
|
||||
itemList: ['编辑', '删除'],
|
||||
success: res => {
|
||||
if (res.tapIndex === 0) {
|
||||
uni.navigateTo({
|
||||
url: `./MonitorAddLog?pid=${this.info.id}&id=${id}`
|
||||
})
|
||||
} else if (res.tapIndex === 1) {
|
||||
this.$confirm('确定删除该数据?').then(() => {
|
||||
uni.showLoading()
|
||||
this.$http.post(`/app/apppreventionreturntopovertylog/delete?ids=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast('删除成功')
|
||||
this.getInfo(this.id)
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
prevImg(urls, img) {
|
||||
const imgs = urls.map(v => v.url)
|
||||
uni.previewImage({
|
||||
urls: imgs,
|
||||
current: img
|
||||
})
|
||||
},
|
||||
|
||||
toAddLog() {
|
||||
uni.navigateTo({
|
||||
url: './MonitorAddLog?pid=' + this.info.id
|
||||
})
|
||||
},
|
||||
|
||||
changeTab(index) {
|
||||
this.currIndex = index
|
||||
},
|
||||
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.info = res.data
|
||||
|
||||
let ylbxCount = 0
|
||||
let ylCount = 0
|
||||
res.data.familyList.forEach(item => {
|
||||
if (item.medicalInsurance === '02') {
|
||||
ylbxCount = ylbxCount + 1
|
||||
}
|
||||
if (item.endowmentInsurance === '02') {
|
||||
ylCount = ylCount + 1
|
||||
}
|
||||
})
|
||||
this.info.ylbxCount = ylbxCount
|
||||
this.info.ylCount = ylCount
|
||||
this.pageShow = true
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
this.$http.post(`/app/apppreventionreturntopovertylog/list?pid=${id}&size=1000¤t=1`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.list = res.data.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
imgs: JSON.parse(item.picture)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.detail {
|
||||
padding-top: 96px;
|
||||
padding-bottom: 60px;
|
||||
|
||||
&.active {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.addBtn {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
flex-shrink: 0;
|
||||
background: $uni-color-primary;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
font-size: 48px;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.tab {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
align-items: center;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
padding: 0 60px;
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
box-sizing: border-box;
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
span {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
font-size: 32px;
|
||||
|
||||
&::after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 192px;
|
||||
height: 6px;
|
||||
background: transparent;
|
||||
transform: translateX(-50%);
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: #1365DD;
|
||||
|
||||
&::after {
|
||||
background: #1365DD;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-wrapper {
|
||||
background: #fff;
|
||||
margin-bottom: 16px;
|
||||
padding: 0 32px 16px;
|
||||
|
||||
.item-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 96px;
|
||||
|
||||
& > span {
|
||||
color: #3975C6;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
i {
|
||||
font-style: normal;
|
||||
color: #2EA222;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 14px 0;
|
||||
|
||||
label {
|
||||
color: #999999;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
max-width: 496px;
|
||||
text-align: right;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.item-avatar {
|
||||
height: 192px;
|
||||
|
||||
image {
|
||||
width: 112px;
|
||||
height: 112px;
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.left-right {
|
||||
p {
|
||||
margin-top: 8px;
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.log-item {
|
||||
padding: 0 0 0 32px;
|
||||
background: #fff;
|
||||
|
||||
&:first-child {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.log-item__wrapper {
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.log-item__wrapper {
|
||||
padding: 32px 32px 32px 0;
|
||||
border-bottom: 1px solid #E4E5E6;
|
||||
|
||||
.log-item__user {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
& > div {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.left {
|
||||
.user, image {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
line-height: 80px;
|
||||
margin-right: 16px;
|
||||
text-align: center;
|
||||
border-radius: 50%;
|
||||
background: #2266FF;
|
||||
|
||||
span {
|
||||
color: #fff;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-right: 6px;
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 4px 0 16px 96px;
|
||||
color: #343D65;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.imgs {
|
||||
margin-left: 96px;
|
||||
|
||||
image {
|
||||
width: 136px;
|
||||
height: 136px;
|
||||
margin-right: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,329 +0,0 @@
|
||||
<template>
|
||||
<div class="familyMember" v-if="pageShow">
|
||||
<div class="item" v-for="(item, index) in list" :key="index">
|
||||
<div class="item-title">
|
||||
<div class="top">
|
||||
<div class="left">
|
||||
<h2>{{ item.name }}</h2>
|
||||
<span>{{ item.idNumber }}</span>
|
||||
</div>
|
||||
<span>{{ $dict.getLabel('fpRelationship', item.relationship) }}</span>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<span>{{ $dict.getLabel('sex', item.sex) }}</span>
|
||||
<span>{{ item.age }}岁</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-info" v-if="item.isShow">
|
||||
<div class="item-info__item">
|
||||
<label>民族</label>
|
||||
<span>{{ $dict.getLabel('fpNation', item.nation) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>政治面貌</label>
|
||||
<span>{{ $dict.getLabel('fpPoliticalOutlook', item.politicalOutlook) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>文化程度</label>
|
||||
<span>{{ $dict.getLabel('fpEducation', item.education) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>在校情况</label>
|
||||
<span>{{ $dict.getLabel('fpStudentsInSchool', item.studentsInSchool) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>健康状况</label>
|
||||
<span>{{ $dict.getLabel('fpHealth', item.health) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>劳动技能</label>
|
||||
<span>{{ $dict.getLabel('fpLaborSkills', item.laborSkills) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>务工区域</label>
|
||||
<span>{{ item.workArea }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>务工时间</label>
|
||||
<span>{{ item.workingMonths }}月</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>是否参加医疗参保</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', item.medicalInsurance) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>是否参加大病保险</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', item.sicknessInsurance) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>是否参加养老保险</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', item.endowmentInsurance) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>是否享受最低生活保障</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', item.subsistenceAllowance) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
<label>是否特困供养</label>
|
||||
<span>{{ $dict.getLabel('fpYesOrNo', item.destitute) }}</span>
|
||||
</div>
|
||||
<div class="item-info__item">
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-bottom">
|
||||
<span @click="showMore(index)">{{ item.isShow ? '收起详情' : '展开详情' }}</span>
|
||||
<span @click="toEdit(index)">编辑</span>
|
||||
<span @click="remove(index)">删除</span>
|
||||
</div>
|
||||
</div>
|
||||
<AiFixedBtn>
|
||||
<div class="addBtn iconfont iconfont-iconfangda" @tap="toAdd"></div>
|
||||
</AiFixedBtn>
|
||||
<div class="no-more" v-if="!list.length">
|
||||
<image src="/static/images/empty.png"/>
|
||||
<div>
|
||||
<span>您还未添加过家庭成员点击</span>
|
||||
<i>新增按钮</i>
|
||||
<span>试试吧~</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
id: '',
|
||||
info: {},
|
||||
pageShow: false
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
uni.showLoading()
|
||||
this.id = query.id
|
||||
this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
|
||||
'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
|
||||
this.getInfo(query.id)
|
||||
})
|
||||
|
||||
uni.$on('reload', () => {
|
||||
this.getInfo(query.id)
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
toAdd() {
|
||||
uni.navigateTo({
|
||||
url: './MonitorAddFamilyMember?id=' + this.id
|
||||
})
|
||||
},
|
||||
|
||||
toEdit(index) {
|
||||
this.$confirm('确定编辑该数据?').then(() => {
|
||||
uni.navigateTo({
|
||||
url: `./MonitorAddFamilyMember?id=${this.id}&index=${index}`
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
remove(index) {
|
||||
this.$confirm('确定删除该数据?').then(() => {
|
||||
let familyList = JSON.parse(JSON.stringify(this.list))
|
||||
familyList.splice(index, 1)
|
||||
uni.showLoading()
|
||||
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
|
||||
...this.info,
|
||||
familyList,
|
||||
id: this.id
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast('删除成功')
|
||||
this.getInfo(this.id)
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
|
||||
showMore(index) {
|
||||
this.list[index].isShow = !this.list[index].isShow
|
||||
},
|
||||
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.info = res.data
|
||||
this.list = res.data.familyList.map(item => {
|
||||
return {
|
||||
...item,
|
||||
isShow: false,
|
||||
age: this.$calcAge(item.idNumber)
|
||||
}
|
||||
})
|
||||
|
||||
this.pageShow = true
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.familyMember {
|
||||
padding: 32px 0;
|
||||
|
||||
.no-more {
|
||||
padding-top: 160px;
|
||||
text-align: center;
|
||||
|
||||
image {
|
||||
width: 282px;
|
||||
height: 304px;
|
||||
}
|
||||
|
||||
div {
|
||||
width: 280px;
|
||||
margin: 0 auto;
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
i {
|
||||
font-style: normal;
|
||||
color: #467DFE;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.addBtn {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
flex-shrink: 0;
|
||||
background: $uni-color-primary;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
font-size: 48px;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 686px;
|
||||
margin: 0 auto 32px;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
.item-bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 94px;
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
line-height: 96px;
|
||||
color: #3975C6;
|
||||
font-size: 26px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.item-title {
|
||||
padding: 32px;
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
|
||||
.top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
h2 {
|
||||
margin-right: 32px;
|
||||
color: #333333;
|
||||
font-size: 40px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
& > span {
|
||||
color: #3975C6;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
background: #F9F9F9;
|
||||
|
||||
.item-info__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 50%;
|
||||
height: 72px;
|
||||
padding: 0 20px;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
border-right: 1px solid #DDDDDD;
|
||||
box-sizing: border-box;
|
||||
|
||||
&:nth-of-type(2n) {
|
||||
border-right: none;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #3975C6;
|
||||
font-size: 26px;
|
||||
}
|
||||
}
|
||||
|
||||
.bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
|
||||
&:first-child {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,257 +0,0 @@
|
||||
<template>
|
||||
<div class="add">
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否危房</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.dilapidatedHouse">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否饮水安全问题</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.drinkingWaterSafety">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>风险类型</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpRiskType" v-model="form.riskType"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group form-textarea">
|
||||
<h2>备注</h2>
|
||||
<textarea placeholder-style="color: #999; font-size: 30rpx;" placeholder="请输入"></textarea>
|
||||
</div> -->
|
||||
<div class="btn" hover-class="text" @click="submit">保存</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
dilapidatedHouse: '',
|
||||
drinkingWaterSafety: '',
|
||||
riskType: ''
|
||||
},
|
||||
id: ''
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
onLoad(query) {
|
||||
this.$dict.load(['fpYesOrNo', 'fpRiskType'])
|
||||
uni.showLoading()
|
||||
this.id = query.id
|
||||
this.getInfo(query.id)
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.form = {
|
||||
...this.form,
|
||||
...res.data
|
||||
}
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
submit() {
|
||||
uni.showLoading()
|
||||
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
|
||||
...this.form,
|
||||
id: this.id
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
|
||||
uni.$emit('reload')
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.add {
|
||||
padding-bottom: 120px;
|
||||
|
||||
.form-textarea {
|
||||
padding: 32px;
|
||||
|
||||
h2 {
|
||||
margin-bottom: 32px;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
& > div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
::v-deep .u-radio {
|
||||
&:last-child {
|
||||
.u-radio__label {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.form-item {
|
||||
padding-left: 32px;
|
||||
|
||||
.form-item__wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
border-bottom: 1px solid #E4E5E6;
|
||||
}
|
||||
|
||||
.right {
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
padding-right: 32px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-right: 4px;
|
||||
font-style: normal;
|
||||
color: #FF4466;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.form-item__wrapper {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-item__imgs {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,274 +0,0 @@
|
||||
<template>
|
||||
<div class="add">
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>工资收入</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income1" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>生产经营收入</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income2" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>财产性收入</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income3" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>转移性收入</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income4" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>理赔收入</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income8" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>生产经营支出</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income5" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<span>合规自然支出</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<input placeholder="请输入" v-model="form.income9" type="number"
|
||||
placeholder-style="color: #999; font-size: 30rpx;"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="tips">*不填时默认为0元</p>
|
||||
<div class="btn" hover-class="text" @click="submit">保存</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
income1: '',
|
||||
income2: '',
|
||||
income3: '',
|
||||
income4: '',
|
||||
income5: '',
|
||||
income8: '',
|
||||
income9: ''
|
||||
},
|
||||
id: ''
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
uni.showLoading()
|
||||
this.id = query.id
|
||||
this.getInfo(query.id)
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.form = {
|
||||
...this.form,
|
||||
...res.data
|
||||
}
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
submit() {
|
||||
uni.showLoading()
|
||||
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
|
||||
...this.form,
|
||||
id: this.id
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
|
||||
uni.$emit('reload')
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.add {
|
||||
padding-bottom: 120px;
|
||||
|
||||
.tips {
|
||||
margin: 32px 0 0 32px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
& > div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.form-item {
|
||||
padding-left: 32px;
|
||||
|
||||
.form-item__wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
border-bottom: 1px solid #E4E5E6;
|
||||
}
|
||||
|
||||
.right {
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
padding-right: 32px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-right: 4px;
|
||||
font-style: normal;
|
||||
color: #FF4466;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.form-item__wrapper {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-item__imgs {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,345 +0,0 @@
|
||||
<template>
|
||||
<div class="add">
|
||||
<div class="form-group">
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>产业帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpIndustrialAssistance" v-model="form.industrialAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>健康帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpHealthAssistance" v-model="form.healthAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>就业帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpEmploymentAssistance" v-model="form.employmentAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>教育帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpEducationalAssistance" v-model="form.educationalAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>金融帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpFinancialAssistance" v-model="form.financialAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>社会帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpSocialAssistance" v-model="form.socialAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i style="opacity: 0;">*</i>
|
||||
<span>公益岗位帮扶</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpPublicWelfarePostAssistance" v-model="form.publicWelfarePostAssistance"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>是否消除风险</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<u-radio-group v-model="form.isRisk" @change="onRiskChange">
|
||||
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
|
||||
{{ item.dictName }}
|
||||
</u-radio>
|
||||
</u-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item" v-if="form.isRisk === '01'">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>风险消除方式</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiSelect dict="fpRiskEliminationMethod" v-model="form.riskEliminationMethod"></AiSelect>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item" v-if="form.isRisk === '01'">
|
||||
<div class="form-item__wrapper">
|
||||
<div class="left">
|
||||
<i>*</i>
|
||||
<span>风险消除时间</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<AiDate v-model="form.riskEliminationDate"></AiDate>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn" hover-class="text" @click="submit">保存</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
result: '',
|
||||
form: {
|
||||
isRisk: '02',
|
||||
riskEliminationMethod: '',
|
||||
riskEliminationDate: '',
|
||||
industrialAssistance: '',
|
||||
healthAssistance: '',
|
||||
employmentAssistance: '',
|
||||
educationalAssistance: '',
|
||||
financialAssistance: '',
|
||||
socialAssistance: '',
|
||||
publicWelfarePostAssistance: ''
|
||||
},
|
||||
id: ''
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
uni.showLoading()
|
||||
this.$dict.load(['fpYesOrNo', 'fpRiskEliminationMethod', 'fpIndustrialAssistance', 'fpHealthAssistance', 'fpEmploymentAssistance',
|
||||
'fpEducationalAssistance', 'fpFinancialAssistance', 'fpSocialAssistance', 'fpPublicWelfarePostAssistance']).then(() => {
|
||||
this.getInfo(query.id)
|
||||
})
|
||||
this.id = query.id
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.form = {
|
||||
...this.form,
|
||||
...res.data
|
||||
}
|
||||
|
||||
if (this.form.riskEliminationMethod) {
|
||||
this.form.isRisk = '01'
|
||||
}
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
onRiskChange(e) {
|
||||
if (e === '02') {
|
||||
this.form.riskEliminationMethod = ''
|
||||
this.form.riskEliminationDate = ''
|
||||
}
|
||||
},
|
||||
|
||||
submit() {
|
||||
if (!this.form.isRisk) {
|
||||
return this.$u.toast('请选择是否消除风险')
|
||||
}
|
||||
|
||||
if (this.form.isRisk === '01') {
|
||||
if (!this.form.riskEliminationMethod) {
|
||||
return this.$u.toast('请选择风险消除方式')
|
||||
}
|
||||
|
||||
if (!this.form.riskEliminationDate) {
|
||||
return this.$u.toast('请选择风险消除时间')
|
||||
}
|
||||
}
|
||||
|
||||
uni.showLoading()
|
||||
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
|
||||
...this.form,
|
||||
riskEliminationMethod: this.form.isRisk ? this.form.riskEliminationMethod : '',
|
||||
id: this.id,
|
||||
status: this.form.isRisk === '01' ? 1 : ''
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
|
||||
uni.$emit('reload')
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.add {
|
||||
padding-bottom: 120px;
|
||||
|
||||
& > div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
::v-deep .u-radio {
|
||||
&:last-child {
|
||||
.u-radio__label {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.form-item {
|
||||
padding-left: 32px;
|
||||
|
||||
.form-item__wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
border-bottom: 1px solid #E4E5E6;
|
||||
}
|
||||
|
||||
.right {
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
padding-right: 32px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
height: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
margin-right: 4px;
|
||||
font-style: normal;
|
||||
color: #FF4466;
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.form-item__wrapper {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-item__imgs {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,224 +0,0 @@
|
||||
<template>
|
||||
<div class="news">
|
||||
<div class="tab">
|
||||
<span
|
||||
@click="changeTab(index, item.dictValue)"
|
||||
v-for="(item, index) in tabList"
|
||||
:key="index"
|
||||
:class="[currIndex === index ? 'active' : '']">
|
||||
{{ item.dictName }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="list">
|
||||
<div class="item" v-for="(item, index) in list" :key="index"
|
||||
@click="linkTo('./NewsDetail?id=' + item.id)">
|
||||
<div class="left">
|
||||
<h2>{{ item.title }}</h2>
|
||||
<div class="item-bottom">
|
||||
<span>{{ $dict.getLabel('newsCenterPolicyType', item.policyType) }}</span>
|
||||
<span>{{ item.createTime }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/>
|
||||
</div>
|
||||
<AiEmpty v-if="!list.length && isMore" style="padding-bottom: 20px;"></AiEmpty>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
currIndex: 0,
|
||||
list: [],
|
||||
current: 1,
|
||||
size: 15,
|
||||
type: '',
|
||||
tabList: [],
|
||||
isMore: false
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
onLoad() {
|
||||
uni.showLoading()
|
||||
this.$dict.load(['newsCenterPolicyType']).then(() => {
|
||||
this.tabList = this.$dict.getDict('newsCenterPolicyType')
|
||||
this.type = this.$dict.getDict('newsCenterPolicyType')[0].dictValue
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
changeTab(index, type) {
|
||||
this.type = type
|
||||
this.currIndex = index
|
||||
|
||||
this.current = 1
|
||||
this.isMore = false
|
||||
|
||||
uni.showLoading()
|
||||
this.$nextTick(() => {
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
|
||||
linkTo(url) {
|
||||
uni.navigateTo({url})
|
||||
},
|
||||
|
||||
getList() {
|
||||
if (this.isMore) return
|
||||
|
||||
this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
|
||||
params: {
|
||||
current: this.current,
|
||||
size: this.size,
|
||||
status: 1,
|
||||
policyType: this.type
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (this.current > 1) {
|
||||
this.list = [...this.list, ...res.data.records]
|
||||
} else {
|
||||
this.list = res.data.records
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
|
||||
if (res.data.records.length < 10) {
|
||||
this.isMore = true
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
this.current = this.current + 1
|
||||
} else {
|
||||
uni.hideLoading()
|
||||
}
|
||||
}).catch(() => {
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
onReachBottom() {
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.news {
|
||||
padding: 96px 0 40px;
|
||||
|
||||
.list {
|
||||
padding: 0 30px;
|
||||
background: #fff;
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 32px 0;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
|
||||
&:active {
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.left {
|
||||
flex: 1;
|
||||
margin-right: 20px;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
& > image {
|
||||
width: 200px;
|
||||
height: 140px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 32px;
|
||||
color: #333333;
|
||||
font-size: 30px;
|
||||
font-weight: 600;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.item-bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 24px;
|
||||
|
||||
&:first-child {
|
||||
margin-right: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
align-items: center;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
box-sizing: border-box;
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
span {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
|
||||
&::after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 88px;
|
||||
height: 6px;
|
||||
background: transparent;
|
||||
transform: translateX(-50%);
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: #1365DD;
|
||||
|
||||
&::after {
|
||||
background: #1365DD;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,98 +0,0 @@
|
||||
<template>
|
||||
<div class="detail" v-if="pageShow">
|
||||
<h2>{{ info.title }}</h2>
|
||||
<span>发布时间:{{ info.createTime }}</span>
|
||||
<div class="content">
|
||||
<u-parse :html="info.content" v-if="info.type === '0'"></u-parse>
|
||||
<video class="video" v-else :src="info.videoFile.url"></video>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pageShow: false,
|
||||
info: {},
|
||||
content: `
|
||||
<p>露从今夜白,月是故乡明</p>
|
||||
<img src="https://cdn.uviewui.com/uview/swiper/2.jpg" />
|
||||
`
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
uni.showLoading()
|
||||
this.getInfo(query.id)
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/appnewscenterinfo/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.info = res.data
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.pageShow = true
|
||||
})
|
||||
}
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.detail {
|
||||
min-height: 100vh;
|
||||
padding: 40px 32px 40px;
|
||||
box-sizing: border-box;
|
||||
background: #fff;
|
||||
|
||||
& > h2 {
|
||||
margin-bottom: 16px;
|
||||
line-height: 1.3;
|
||||
font-size: 40px;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
& > span {
|
||||
font-size: 28px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
margin-top: 40px;
|
||||
|
||||
::v-deep * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
::v-deep p {
|
||||
margin: 20px 0;
|
||||
line-height: 1.4;
|
||||
color: #666;
|
||||
font-size: 28px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
::v-deep img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
::v-deep br {
|
||||
display: block;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.video {
|
||||
width: 100%;
|
||||
height: 600px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,89 +0,0 @@
|
||||
<template>
|
||||
<div class="povertyMonitor">
|
||||
<div class="form-content">
|
||||
<List ref="list" v-if="currIndex === 0"></List>
|
||||
<Statistics ref="statistics" v-if="currIndex === 1"></Statistics>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div @click="currIndex = 0" :class="[currIndex === 0 ? 'active' : '']">监控预警</div>
|
||||
<div @click="currIndex = 1" :class="[currIndex === 1 ? 'active' : '']">数据统计</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Statistics from './povertyMonitor/Statistics.vue'
|
||||
import List from './povertyMonitor/List.vue'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
currIndex: 0
|
||||
}
|
||||
},
|
||||
|
||||
components: {
|
||||
List,
|
||||
Statistics
|
||||
},
|
||||
|
||||
computed: {
|
||||
tabBar() {
|
||||
const link = icon => `${this.$cdn}askform/${icon}.png`
|
||||
return [
|
||||
{text: "预警监控", iconPath: "bdlb1", selectedIconPath: "bdlb2"},
|
||||
{text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"}
|
||||
].map(e => ({
|
||||
...e,
|
||||
iconPath: link(e.iconPath),
|
||||
selectedIconPath: link(e.selectedIconPath)
|
||||
}))
|
||||
}
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
uni.$on('reload', () => {
|
||||
if (this.currIndex === 0) {
|
||||
this.$refs.list.reload()
|
||||
} else {
|
||||
this.$refs.addList.getList()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
onReachBottom() {
|
||||
if (this.currIndex === 0) {
|
||||
this.$refs.list.getList()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.povertyMonitor {
|
||||
.footer {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 98px;
|
||||
|
||||
div {
|
||||
flex: 1;
|
||||
height: 98px;
|
||||
line-height: 98px;
|
||||
text-align: center;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
background: #fff;
|
||||
|
||||
&.active {
|
||||
color: #fff;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,207 +0,0 @@
|
||||
<template>
|
||||
<div class="list">
|
||||
<!-- <div class="tab">
|
||||
<span @click="changeTab(0)" :class="[currIndex === 0 ? 'active' : '']">高返贫风险人员</span>
|
||||
<span @click="changeTab(1)" :class="[currIndex === 1 ? 'active' : '']">监测对象风险解除</span>
|
||||
</div> -->
|
||||
<div class="list-wrapper">
|
||||
<div class="item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="toDetail(item.id)">
|
||||
<div class="item-top">
|
||||
<h2>{{ item.name || item.phone }}</h2>
|
||||
<span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{
|
||||
item.riskEliminationMethod ? '已解除' : '未解除'
|
||||
}}</span>
|
||||
</div>
|
||||
<p>{{ item.addressArea }} {{ item.address }}</p>
|
||||
<div class="item-bottom">家庭收入</div>
|
||||
</div>
|
||||
<AiEmpty v-if="!list.length && isMore" style="padding-bottom: 20px;"></AiEmpty>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'list',
|
||||
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
isMore: false,
|
||||
current: 1,
|
||||
currIndex: 0
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
uni.showLoading()
|
||||
this.$nextTick(() => {
|
||||
this.getList()
|
||||
})
|
||||
uni.$on('reload', () => {
|
||||
this.reload()
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
changeTab(index) {
|
||||
this.currIndex = index
|
||||
},
|
||||
|
||||
toDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: `./MonitorDetail?id=${id}&isFrom=1`
|
||||
})
|
||||
},
|
||||
|
||||
reload() {
|
||||
this.isMore = false
|
||||
this.current = 1
|
||||
|
||||
this.getList()
|
||||
uni.showLoading()
|
||||
},
|
||||
|
||||
getList() {
|
||||
if (this.isMore) return
|
||||
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
|
||||
params: {
|
||||
current: this.current,
|
||||
size: 15,
|
||||
status: 2
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (this.current > 1) {
|
||||
this.list = [...this.list, ...res.data.records]
|
||||
} else {
|
||||
this.list = res.data.records
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
|
||||
if (res.data.records.length < 10) {
|
||||
this.isMore = true
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
this.current = this.current + 1
|
||||
} else {
|
||||
uni.hideLoading()
|
||||
}
|
||||
}).catch(() => {
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.list {
|
||||
padding: 30px 0 120px;
|
||||
|
||||
.tab {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
padding: 0 60px;
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
box-sizing: border-box;
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
span {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
font-size: 32px;
|
||||
|
||||
&::after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 192px;
|
||||
height: 6px;
|
||||
background: transparent;
|
||||
transform: translateX(-50%);
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: #1365DD;
|
||||
|
||||
&::after {
|
||||
background: #1365DD;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list-wrapper {
|
||||
.item {
|
||||
margin: 0 32px 32px;
|
||||
padding-bottom: 10px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 16px;
|
||||
|
||||
.item-bottom {
|
||||
height: 94px;
|
||||
line-height: 94px;
|
||||
padding: 0 32px;
|
||||
border-top: 1px solid #DDDDDD;
|
||||
color: #3975C6;
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.item-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 16px;
|
||||
padding: 32px 32px 0;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #FFBB00;
|
||||
|
||||
&.status0 {
|
||||
color: #FF4466;
|
||||
}
|
||||
|
||||
&.status1 {
|
||||
color: #3975C6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.4;
|
||||
margin-bottom: 32px;
|
||||
padding: 0 32px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,329 +0,0 @@
|
||||
<template>
|
||||
<div class="statistics">
|
||||
<div class="block"></div>
|
||||
<div class="charts-wrapper">
|
||||
<div class="total">
|
||||
<!-- <div class="total-item">
|
||||
<h2>2</h2>
|
||||
<p>高返贫风险人数</p>
|
||||
</div> -->
|
||||
<div class="total-item">
|
||||
<h2>{{ info.fxyjCount }}</h2>
|
||||
<p>监测对象风险预警</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="charts" v-if="false">
|
||||
<h2>本月高风险预警转换统计</h2>
|
||||
<div id="chart1" style="height: 400rpx"></div>
|
||||
</div>
|
||||
<div class="charts">
|
||||
<h2>本月纳入监测人群属性分析</h2>
|
||||
<div id="chart2" style="height: 400rpx"></div>
|
||||
</div>
|
||||
<div class="charts">
|
||||
<h2>本月风险消除方式统计</h2>
|
||||
<div id="chart3" style="height: 400rpx"></div>
|
||||
</div>
|
||||
<div class="charts">
|
||||
<h2>本月监测对象预警转换统计</h2>
|
||||
<div id="chart4" style="height: 400rpx"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import echarts from 'echarts'
|
||||
|
||||
export default {
|
||||
name: 'statistics',
|
||||
|
||||
data() {
|
||||
return {
|
||||
chart1: null,
|
||||
chart2: null,
|
||||
chart3: null,
|
||||
chart4: null,
|
||||
info: {}
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
window.scrollTo(0, 0)
|
||||
// this.chart1 = echarts.init(document.getElementById('chart1'))
|
||||
this.chart4 = echarts.init(document.getElementById('chart4'))
|
||||
this.chart2 = echarts.init(document.getElementById('chart2'))
|
||||
this.chart3 = echarts.init(document.getElementById('chart3'))
|
||||
this.$dict.load(['fpType', 'fpRiskEliminationMethod'])
|
||||
this.getInfo()
|
||||
},
|
||||
|
||||
methods: {
|
||||
getInfo() {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/statistics-h5`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.info = res.data
|
||||
this.initChart2(res.data.byxzMap)
|
||||
this.initChart3(res.data.byxcMap)
|
||||
this.initChart4(res.data.fxxcCount, res.data.fxyjCount)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
initChart1() {
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: '{a} <br/>{b} : {c}%'
|
||||
},
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
series: [
|
||||
{
|
||||
name: 'Funnel',
|
||||
type: 'funnel',
|
||||
left: '0%',
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
width: '100%',
|
||||
min: 0,
|
||||
max: 100,
|
||||
minSize: '0%',
|
||||
maxSize: '100%',
|
||||
sort: 'descending',
|
||||
gap: 2,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'inside'
|
||||
},
|
||||
labelLine: {
|
||||
length: 10,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid'
|
||||
}
|
||||
},
|
||||
itemStyle: {
|
||||
borderColor: '#fff',
|
||||
borderWidth: 1
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
fontSize: 20
|
||||
}
|
||||
},
|
||||
data: [
|
||||
{value: 60, name: '总上报'},
|
||||
{value: 40, name: '纳入监测'},
|
||||
{value: 20, name: '已处理'}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart1.setOption(option)
|
||||
},
|
||||
|
||||
initChart2(data) {
|
||||
const values = data.map(item => {
|
||||
return {
|
||||
value: item.typeCount,
|
||||
name: this.$dict.getLabel('fpType', item.type)
|
||||
}
|
||||
})
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'item'
|
||||
},
|
||||
grid: {
|
||||
left: '0%',
|
||||
right: '0%',
|
||||
bottom: '0%',
|
||||
top: '40px',
|
||||
containLabel: true
|
||||
},
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
series: [
|
||||
{
|
||||
name: '本月纳入监测人群属性分析',
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
emphasis: {
|
||||
label: {
|
||||
show: true,
|
||||
fontSize: '40',
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
},
|
||||
data: values
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart2.setOption(option)
|
||||
},
|
||||
|
||||
initChart3(data) {
|
||||
const values = data.map(item => {
|
||||
return {
|
||||
value: item.typeCount,
|
||||
name: this.$dict.getLabel('fpRiskEliminationMethod', item.risk_elimination_method)
|
||||
}
|
||||
})
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'item'
|
||||
},
|
||||
grid: {
|
||||
left: '0%',
|
||||
right: '0%',
|
||||
bottom: '0%',
|
||||
top: '40px',
|
||||
containLabel: true
|
||||
},
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
series: [
|
||||
{
|
||||
name: '本月纳入监测人群属性分析',
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
emphasis: {
|
||||
label: {
|
||||
show: true,
|
||||
fontSize: '40',
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
},
|
||||
data: values
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart3.setOption(option)
|
||||
},
|
||||
|
||||
initChart4(x, y) {
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'item'
|
||||
},
|
||||
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
|
||||
series: [
|
||||
{
|
||||
name: '',
|
||||
type: 'funnel',
|
||||
left: '0%',
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
width: '100%',
|
||||
min: 0,
|
||||
max: 100,
|
||||
minSize: '0%',
|
||||
maxSize: '100%',
|
||||
sort: 'descending',
|
||||
gap: 2,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'inside'
|
||||
},
|
||||
labelLine: {
|
||||
length: 10,
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
type: 'solid'
|
||||
}
|
||||
},
|
||||
itemStyle: {
|
||||
borderColor: '#fff',
|
||||
borderWidth: 1
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
fontSize: 20
|
||||
}
|
||||
},
|
||||
data: [
|
||||
{value: y, name: '纳入监测'},
|
||||
{value: x, name: '消除监测'}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.chart4.setOption(option)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.statistics {
|
||||
padding: 40px 0 120px;
|
||||
|
||||
.block {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
width: 100%;
|
||||
height: 140px;
|
||||
background: #3975C6;
|
||||
}
|
||||
|
||||
.charts-wrapper {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding: 0 32px;
|
||||
|
||||
.total {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 200px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 8px;
|
||||
|
||||
.total-item {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
|
||||
h2 {
|
||||
font-size: 64px;
|
||||
color: #3192F4;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 10px;
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
h2 {
|
||||
color: #F09535;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.charts {
|
||||
margin-top: 32px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 8px;
|
||||
|
||||
& > h2 {
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
padding: 0 32px;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
}
|
||||
|
||||
& > div {
|
||||
width: 686px;
|
||||
margin: 0 auto;
|
||||
padding: 32px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,251 +0,0 @@
|
||||
<template>
|
||||
<div class="detail" v-if="pageShow">
|
||||
<div class="info">
|
||||
<div class="info-top">
|
||||
<div class="left">
|
||||
<image src="/static/images/avatar.png"/>
|
||||
<h2>{{ info.name || info.phone }}</h2>
|
||||
</div>
|
||||
<div class="right">
|
||||
<image src="/static/images/phone.png"/>
|
||||
<p>拨打电话</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-item__wrapper">
|
||||
<div class="info-item">
|
||||
<label>风险类型:</label>
|
||||
<span>大额医疗支出</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>联系电话:</label>
|
||||
<span>13782909781</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>所在地址:</label>
|
||||
<span>{{ info.addressArea }} {{ info.address }}</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>情况描述:</label>
|
||||
<span>全身大面积烧伤,预计手术费30万元</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="result" v-if="false">
|
||||
<div class="result-top">
|
||||
<h2>处理结果</h2>
|
||||
<span>已解除风险</span>
|
||||
</div>
|
||||
<div class="info-item__wrapper">
|
||||
<div class="info-item">
|
||||
<label>受理人:</label>
|
||||
<span>张三</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>处理时间:</label>
|
||||
<span>2021-10-10 10:10:10</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>联系方式:</label>
|
||||
<span>17964042574</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>处理结果:</label>
|
||||
<span>经现场了解,该人员家庭有多出房产,无返贫风险倾向。</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<label>图片:</label>
|
||||
<div class="imgs">
|
||||
<image v-for="(item, index) in 6" :key="index" src="/static/images/avatar.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<span>纳入监测对象</span>
|
||||
<span @click="linkTo">解除预警</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'detail',
|
||||
|
||||
data() {
|
||||
return {
|
||||
info: {},
|
||||
id: '',
|
||||
pageShow: false
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(query) {
|
||||
uni.showLoading()
|
||||
this.id = query.id
|
||||
|
||||
this.getInfo(query.id)
|
||||
},
|
||||
|
||||
methods: {
|
||||
linkTo() {
|
||||
uni.navigateTo({
|
||||
url: './povertyMonitorForm'
|
||||
})
|
||||
},
|
||||
|
||||
getInfo(id) {
|
||||
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.info = res.data
|
||||
|
||||
this.pageShow = true
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.detail {
|
||||
padding-bottom: 122px;
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 1;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
text-align: center;
|
||||
color: #FF4466;
|
||||
font-size: 32px;
|
||||
background: #fff;
|
||||
|
||||
&:last-child {
|
||||
color: #fff;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
background: #fff;
|
||||
|
||||
.info-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 136px;
|
||||
padding: 0 32px;
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #D8DDE6;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
image {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-size: 36px;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
text-align: center;
|
||||
|
||||
image {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #3D94FB;
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.result {
|
||||
margin-top: 20px;
|
||||
background: #fff;
|
||||
|
||||
.result-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 96px;
|
||||
padding: 0 32px;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
|
||||
h2 {
|
||||
font-size: 32px;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #2EA222;
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.info-item__wrapper {
|
||||
padding: 32px;
|
||||
|
||||
.info-item {
|
||||
display: flex;
|
||||
margin-bottom: 12px;
|
||||
|
||||
label {
|
||||
flex-shrink: 0;
|
||||
width: 150px;
|
||||
line-height: 1.3;
|
||||
text-align: right;
|
||||
color: #999999;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
line-height: 1.3;
|
||||
text-align: justify;
|
||||
color: #343D65;
|
||||
}
|
||||
|
||||
.imgs {
|
||||
flex: 1;
|
||||
|
||||
image {
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
margin-right: 16px;
|
||||
margin-bottom: 16px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,107 +0,0 @@
|
||||
<template>
|
||||
<div class="form">
|
||||
<div class="form-type">
|
||||
<h2>处理方式</h2>
|
||||
<span>解除风险</span>
|
||||
</div>
|
||||
<div class="form-item form-item__textarea">
|
||||
<div class="form-item__title">
|
||||
<h2>帮扶结果</h2>
|
||||
</div>
|
||||
<textarea :maxlength="-1" v-model="result" placeholder="请详细说明跟进情况"></textarea>
|
||||
</div>
|
||||
<div class="form-item form-item__imgs">
|
||||
<div class="form-item__title">
|
||||
<h2>图片</h2>
|
||||
<i>(最多9张)</i>
|
||||
</div>
|
||||
<div>
|
||||
<AiUploader :limit="9" multiple></AiUploader>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">提交</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
result: '',
|
||||
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.form {
|
||||
padding-bottom: 120px;
|
||||
|
||||
div {
|
||||
margin-bottom: 16px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.form-item {
|
||||
padding: 32px;
|
||||
|
||||
.form-item__title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 34px;
|
||||
|
||||
h2 {
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-type {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 112px;
|
||||
padding: 0 32px;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
span {
|
||||
color: #999999;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: 11;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #FFFFFF;
|
||||
font-size: 32px;
|
||||
background: #3192F4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,98 +0,0 @@
|
||||
<template>
|
||||
<section class="comp">
|
||||
<AiResult v-if="error" status="error" :tips="error"/>
|
||||
<template v-else-if="isNormal">
|
||||
<component ref="currentTab" :is="currentTab.comp" :isNormal="isNormal"/>
|
||||
<AiTabbar :active.sync="active" :list="bottomBar"/>
|
||||
</template>
|
||||
<AiLoading v-else tips="居民管理加载中..."/>
|
||||
</section>
|
||||
</template>
|
||||
<script>
|
||||
import {mapActions} from "vuex";
|
||||
import ResidentSta from "./components/residentSta";
|
||||
import ResidentList from "./components/residentList";
|
||||
import GroupList from "./components/groupList";
|
||||
|
||||
export default {
|
||||
name: "AppResident",
|
||||
appName: "居民群管理",
|
||||
components: {GroupList, ResidentList, ResidentSta},
|
||||
data() {
|
||||
return {
|
||||
error: "",
|
||||
active: 0,
|
||||
isNormal: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
bottomBar() {
|
||||
const link = icon => `${this.$cdn}resident/${icon}.png`
|
||||
return [
|
||||
{text: "统计分析", iconPath: "qwhome2", selectedIconPath: "qwhome1", comp: ResidentSta},
|
||||
{text: "居民列表", iconPath: "qwjmda1", selectedIconPath: "qwjmda2", comp: ResidentList},
|
||||
{text: "居民群列表", iconPath: "qwjmq1", selectedIconPath: "qwjmq2", comp: GroupList},
|
||||
].map(e => ({
|
||||
...e,
|
||||
iconPath: link(e.iconPath),
|
||||
selectedIconPath: link(e.selectedIconPath)
|
||||
}))
|
||||
},
|
||||
currentTab() {
|
||||
return this.bottomBar?.[this.active] || {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['injectJWeixin', "wxInvoke"]),
|
||||
|
||||
},
|
||||
created() {
|
||||
if (this.$route.hash == "#dev") {
|
||||
this.isNormal = true
|
||||
} else this.injectJWeixin(["getContext", "getCurExternalChat"]).then(() => {
|
||||
this.wxInvoke(['getContext', {}, res => {
|
||||
if (res.err_msg == "getContext:ok") {
|
||||
if (res.entry == 'normal') this.isNormal = true
|
||||
else this.wxInvoke(['getCurExternalChat', {}, res => {
|
||||
if (res?.err_msg == 'getCurExternalChat:ok') {
|
||||
wx.redirectTo({
|
||||
url: "./groupResident"
|
||||
})
|
||||
} else {
|
||||
wx.redirectTo({
|
||||
url: "./resident"
|
||||
})
|
||||
}
|
||||
}])
|
||||
} else {
|
||||
this.error = "wxwork:获取进入场景失败"
|
||||
}
|
||||
}])
|
||||
}).catch(() => {
|
||||
this.error = "应用加载失败"
|
||||
})
|
||||
},
|
||||
onReachBottom() {
|
||||
if (typeof this.$refs?.currentTab?.reachBottom == 'function') this.$refs?.currentTab.reachBottom()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.comp {
|
||||
height: 100%;
|
||||
|
||||
::v-deep .u-tabbar__content__item {
|
||||
padding: 0;
|
||||
|
||||
.u-icon__img {
|
||||
height: 44px !important;
|
||||
width: 44px !important;
|
||||
}
|
||||
|
||||
.u-tabbar__content__item__text {
|
||||
margin-top: 4px;
|
||||
font-size: 22px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,129 +0,0 @@
|
||||
<template>
|
||||
<section class="document">
|
||||
<div class="card">
|
||||
<div class="info">
|
||||
<u-image border-radius="4" :src="top.detail.avatar" width="118" height="118"/>
|
||||
<div class="fill">
|
||||
<b>{{ top.detail.realName || top.detail.name }}</b>
|
||||
<u-row>
|
||||
<span class="idNumber" v-html="IDObj.id"/>
|
||||
<a @tap="showID=!showID">{{ IDObj.btn }}</a>
|
||||
</u-row>
|
||||
</div>
|
||||
</div>
|
||||
<AiCell label="性别">{{ $dict.getLabel("sex", resident.sex) || "-" }}</AiCell>
|
||||
<AiCell label="出生日期">{{ resident.birthDate }}</AiCell>
|
||||
<AiCell label="年龄">{{ resident.age }}</AiCell>
|
||||
<AiCell label="籍贯">{{ resident.birthplaceAreaName }}</AiCell>
|
||||
<AiCell label="民族">{{ $dict.getLabel("nation", resident.nation) || "-" }}</AiCell>
|
||||
<AiCell label="文化程度">{{ $dict.getLabel("education", resident.education) || "-" }}</AiCell>
|
||||
<AiCell label="兵役状况">{{ $dict.getLabel("militaryStatus", resident.militaryStatus) || "-" }}</AiCell>
|
||||
<AiCell label="政治面貌">{{ $dict.getLabel("politicsStatus", resident.politicsStatus) || "-" }}</AiCell>
|
||||
<AiCell label="职业">{{ $dict.getLabel("job", resident.job) || "-" }}</AiCell>
|
||||
<AiCell label="宗教信仰">{{ $dict.getLabel("faithType", resident.faithType) || "-" }}</AiCell>
|
||||
</div>
|
||||
<div class="card">
|
||||
<AiCell title label="联络信息"/>
|
||||
<AiCell label="联系方式">{{ resident.phone }}</AiCell>
|
||||
<AiCell label="现住址">{{ resident.currentAreaName + resident.currentAddress }}</AiCell>
|
||||
</div>
|
||||
<div class="card">
|
||||
<AiCell title label="家庭信息"/>
|
||||
<AiCell label="是否户主">{{ $dict.getLabel("householdName", resident.householdName) || "-" }}</AiCell>
|
||||
<AiCell label="与户主关系">{{ $dict.getLabel("householdRelation", resident.householdRelation) || "-" }}</AiCell>
|
||||
<AiCell label="现住址">{{ resident.householdAreaName + resident.householdAddress }}</AiCell>
|
||||
</div>
|
||||
<div class="card">
|
||||
<AiCell title label="家庭成员"/>
|
||||
<AiTable :data="family" :colConfigs="colConfigs"/>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "document",
|
||||
inject: ['top'],
|
||||
computed: {
|
||||
IDObj() {
|
||||
return this.showID ? {
|
||||
id: this.resident?.idNumber,
|
||||
btn: '隐藏'
|
||||
} : {
|
||||
id: this.resident?.idNumber?.replace(/(\d{10}).+/g, '$1******'),
|
||||
btn: '显示'
|
||||
}
|
||||
},
|
||||
colConfigs() {
|
||||
return [
|
||||
{label: "与户主关系", prop: "householdRelation", width: '160rpx', dict: "householdRelation"},
|
||||
{label: "姓名", prop: "name", width: '120rpx'},
|
||||
{label: "性别", prop: "sex", dict: "sex"},
|
||||
{label: "年龄", prop: "age"},
|
||||
{label: "身份证号", prop: "idNumber", width: '320rpx'},
|
||||
]
|
||||
},
|
||||
resident() {
|
||||
let obj = {}
|
||||
Object.keys(this.top.detail?.residentInfo?.resident || {}).map(e => {
|
||||
obj[e] = this.top.detail?.residentInfo?.resident[e] || ""
|
||||
})
|
||||
return obj
|
||||
},
|
||||
family() {
|
||||
return this.top.detail?.residentInfo?.family?.map(e => ({...e, householdRelation: e.householdRelation || "户主"}))
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showID: false,
|
||||
familyList: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$dict.load("sex", "nation", "education", "job",
|
||||
"faithType", "politicsStatus", "militaryStatus", "householdRelation",
|
||||
"householdName")
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.document {
|
||||
overflow-y: auto;
|
||||
background: #F5F5F5;
|
||||
|
||||
.info {
|
||||
height: 186px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.fill {
|
||||
color: #3C7FC8;
|
||||
margin-left: 24px;
|
||||
font-size: 28px;
|
||||
line-height: 40px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
b {
|
||||
font-size: 36px;
|
||||
color: #333;
|
||||
margin-bottom: 8px;
|
||||
line-height: 50px;
|
||||
}
|
||||
|
||||
a {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.idNumber {
|
||||
margin-right: 16px;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,178 +0,0 @@
|
||||
<template>
|
||||
<section class="groupList">
|
||||
<AiTopFixed>
|
||||
<u-search placeholder="请输入群名、群主名" :show-action="false" search-icon-color="#ccc"
|
||||
v-model="search.name" @search="page.current=1,getList()"/>
|
||||
<AiCell>
|
||||
<b slot="label" class="title">共<i v-html="page.total||0"/>个居民群</b>
|
||||
</AiCell>
|
||||
</AiTopFixed>
|
||||
<div class="mainPane">
|
||||
<AiCell v-for="item in list" :key="item.id" @click.native="showResident(item)">
|
||||
<template #label>
|
||||
<AiImage :src="item.avatar" preview/>
|
||||
</template>
|
||||
<div class="card column start" flex>
|
||||
<div flex class="groupName">
|
||||
<b>{{ item.name || "群聊" }}</b>
|
||||
<div class="personCount" v-if="item.personCount">({{ item.personCount }})</div>
|
||||
</div>
|
||||
<div class="owner" v-html="`群主:${item.ownerName}`"/>
|
||||
<div flex class="trends">
|
||||
<div flex v-html="`今日入群:<em>${item.increase||0}</em>`"/>
|
||||
<div flex v-html="`今日退群:<p>${item.decrease||0}</p>`"/>
|
||||
</div>
|
||||
</div>
|
||||
</AiCell>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "groupList",
|
||||
data() {
|
||||
return {
|
||||
page: {current: 1, size: 10, total: 0},
|
||||
search: {name: ""},
|
||||
list: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.$http.post("/app/wxcp/wxgroup/list", null, {
|
||||
params: {...this.page, ...this.search}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
let meta = res.data.records?.map(e => ({
|
||||
...e,
|
||||
avatar: e?.avatar || this.$cdn + "groupAvatar.png"
|
||||
}))
|
||||
if (this.page.current > 1) {
|
||||
this.list = [...this.list, ...meta]
|
||||
} else this.list = meta
|
||||
this.page.total = res.data.total
|
||||
}
|
||||
})
|
||||
},
|
||||
reachBottom() {
|
||||
if (this.page.total > this.list.length) {
|
||||
this.page.current++
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
showResident({id}) {
|
||||
id && uni.navigateTo({
|
||||
url: './groupResident?id=' + id
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.groupList {
|
||||
::v-deep .AiTopFixed {
|
||||
b.title {
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
|
||||
& > i {
|
||||
color: #267FCE;
|
||||
font-style: normal;
|
||||
margin: 0 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .mainPane {
|
||||
background: #fff;
|
||||
padding: 0 32px;
|
||||
|
||||
.AiCell {
|
||||
align-items: center;
|
||||
height: 230px;
|
||||
justify-content: flex-start;
|
||||
|
||||
.content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
height: 100%;
|
||||
max-width: unset;
|
||||
border-bottom: 1px solid rgba(221, 221, 221, 1);
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
|
||||
b {
|
||||
font-size: 36px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.tag {
|
||||
justify-content: center;
|
||||
background: #F3F4F7;
|
||||
border-radius: 4px;
|
||||
padding: 0 16px;
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #333;
|
||||
margin-left: 16px;
|
||||
height: 56px;
|
||||
}
|
||||
|
||||
.groupName {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.owner, .trends {
|
||||
margin-top: 8px;
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.personCount {
|
||||
flex-shrink: 0;
|
||||
font-size: 30px;
|
||||
font-weight: 400;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.trends {
|
||||
* + * {
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: normal;
|
||||
color: #5FBA95;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #F09535;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.AiImage {
|
||||
margin-right: 24px;
|
||||
|
||||
image {
|
||||
width: 112px;
|
||||
height: 112px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,353 +0,0 @@
|
||||
<template>
|
||||
<section class="info">
|
||||
<div class="card">
|
||||
<div class="baseInfo">
|
||||
<u-image border-radius="4" :src="top.detail.avatar" width="118" height="118"/>
|
||||
<div class="fill">
|
||||
<b>{{ top.detail.name }}</b>
|
||||
<div v-if="top.detail.type==1" class="wx">@微信</div>
|
||||
<div v-if="top.detail.type==2">@企业微信</div>
|
||||
</div>
|
||||
<div class="certBtn" @tap="handleCert">{{ !isCert ? "实名认证" : "解绑" }}</div>
|
||||
</div>
|
||||
<u-row>
|
||||
<AiCell class="half" top-label label="来源">{{ $dict.getLabel("wxCustomerAddWay", top.detail.addWay) }}</AiCell>
|
||||
<AiCell class="half" top-label label="添加时间">{{ top.detail.createTime }}</AiCell>
|
||||
<AiCell class="half" top-label label="真实姓名">{{ top.detail.realName }}</AiCell>
|
||||
<AiCell class="half" top-label label="手机号码">{{ resident.phone || "-" }}</AiCell>
|
||||
<AiCell class="half" top-label label="家庭积分">{{ resident.familyIntegral }}</AiCell>
|
||||
<AiCell class="half" top-label label="个人积分">{{ resident.personalIntegral }}</AiCell>
|
||||
</u-row>
|
||||
</div>
|
||||
<div class="card">
|
||||
<AiCell title label="公共标签">
|
||||
<u-icon label="添加" size="38" name="iconAdd" custom-prefix="iconfont" color="#1365DD"
|
||||
label-color="#1365DD" @tap="top.showTagManage=true"/>
|
||||
</AiCell>
|
||||
<AiCell top-label v-for="(op,name) in tagsList" :label="name" :key="name">
|
||||
<u-row>
|
||||
<div class="tag" v-for="(tag,j) in op" :key="j">{{ tag }}</div>
|
||||
</u-row>
|
||||
</AiCell>
|
||||
</div>
|
||||
<div class="card">
|
||||
<AiCell title label="动态"/>
|
||||
<AiCell top-label>
|
||||
<div class="logItem" v-for="item in customLogs" :key="item.id">
|
||||
<div flex class="column" shrink>
|
||||
<div class="dot"/>
|
||||
<div class="line fill"/>
|
||||
</div>
|
||||
<div flex class="start column">
|
||||
<b>{{ $dict.getLabel('wxCustomerLogType', item.type) }}</b>
|
||||
<span>{{ item.createTime }}</span>
|
||||
<div v-html="item.content"/>
|
||||
</div>
|
||||
</div>
|
||||
</AiCell>
|
||||
</div>
|
||||
<u-mask :show="dialog" @tap="dialog=false">
|
||||
<div class="bindCert" @tap.stop>
|
||||
<b class="title">实名认证</b>
|
||||
<u-input class="searchInput" v-model="search" clearable placeholder="请输入姓名或身份证号" @input="handleSearch"/>
|
||||
<div class="residents">
|
||||
<div flex class="spb" v-for="(op,i) in result" :key="i" @tap="bindCert(op.id)">
|
||||
<div v-html="op.name"/>
|
||||
<div v-html="op.idNumber"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</u-mask>
|
||||
<div bottom>
|
||||
<u-button type="primary" @tap="handleWechat">微信联系</u-button>
|
||||
<u-button v-if="isMobile" :disabled="!resident.phone" @tap="handleTel">电话联系</u-button>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapActions} from "vuex";
|
||||
|
||||
export default {
|
||||
name: "info",
|
||||
inject: ['top'],
|
||||
computed: {
|
||||
resident() {
|
||||
return this.top.detail?.residentInfo?.resident || {}
|
||||
},
|
||||
tagsList() {
|
||||
let obj = {}
|
||||
this.top.detail?.tags?.map(e => {
|
||||
if (e.type == 1 && e?.groupName) {
|
||||
if (obj?.[e.groupName]) {
|
||||
obj[e.groupName].push(e.tagName)
|
||||
} else {
|
||||
obj[e.groupName] = [e.tagName]
|
||||
}
|
||||
}
|
||||
})
|
||||
return obj
|
||||
},
|
||||
isCert() {
|
||||
return !!this.top?.detail?.residentInfo
|
||||
},
|
||||
isMobile() {
|
||||
return ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]
|
||||
.some(e => navigator.userAgent.indexOf(e) > -1)
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialog: false,
|
||||
search: "",
|
||||
result: [],
|
||||
customLogs: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['injectJWeixin', 'wxInvoke']),
|
||||
searchResident() {
|
||||
this.$http.post("/app/appresident/check-name", null, {
|
||||
params: {name: this.search}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
let reg = new RegExp(this.search, 'g')
|
||||
this.result = res.data?.map(e => ({
|
||||
...e,
|
||||
name: e.name.replace(reg, `<b>${this.search}</b>`),
|
||||
idNumber: e.idNumber.replace(reg, `<b>${this.search}</b>`),
|
||||
}))
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSearch() {
|
||||
if (this.search?.length >= 2) {
|
||||
this.searchResident()
|
||||
} else {
|
||||
this.result = []
|
||||
}
|
||||
},
|
||||
handleCert() {
|
||||
if (this.isCert) {
|
||||
this.$confirm("是否要解绑当前实名认证?").then(() => {
|
||||
this.$http.post("/app/wxcp/wxcustomer/unBindCustomer2Resident", null, {
|
||||
params: {residentId: this.resident.id, customerId: this.top.custom}
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
this.$u.toast("解除绑定成功!")
|
||||
this.top.getContact()
|
||||
}
|
||||
})
|
||||
})
|
||||
} else this.dialog = true
|
||||
},
|
||||
bindCert(residentId) {
|
||||
this.dialog = false
|
||||
this.$confirm("是否要绑定该居民?").then(() => {
|
||||
this.$http.post("/app/wxcp/wxcustomer/bindCustomer2Resident", null, {
|
||||
params: {residentId, customerId: this.top.custom}
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
this.$u.toast("绑定成功!")
|
||||
this.top.getContact()
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$u.toast(err)
|
||||
setTimeout(() => this.dialog = true, 1000)
|
||||
})
|
||||
}).catch(() => this.dialog = true)
|
||||
},
|
||||
getCustomLog(customerId) {
|
||||
customerId && this.$http.post("/app/wxcp/wxcustomerlog/listAll", null, {
|
||||
params: {customerId}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
this.customLogs = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
handleTel() {
|
||||
location.href = "tel:" + this.resident.phone
|
||||
},
|
||||
handleWechat() {
|
||||
this.wxInvoke(['openUserProfile', {
|
||||
type: 2,
|
||||
userid: this.top.custom
|
||||
}, () => 0])
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$dict.load("wxCustomerAddWay", 'wxCustomerLogType')
|
||||
this.getCustomLog(this.top.custom)
|
||||
this.injectJWeixin('openUserProfile')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.info {
|
||||
padding-bottom: 130px;
|
||||
|
||||
.certBtn {
|
||||
cursor: pointer;
|
||||
background: $uni-color-primary;
|
||||
color: #fff;
|
||||
padding: 8px 16px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.baseInfo {
|
||||
height: 186px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.fill {
|
||||
color: #3C7FC8;
|
||||
margin-left: 24px;
|
||||
font-size: 28px;
|
||||
line-height: 40px;
|
||||
|
||||
b {
|
||||
font-size: 36px;
|
||||
color: #333;
|
||||
margin-bottom: 8px;
|
||||
line-height: 50px;
|
||||
}
|
||||
|
||||
.wx {
|
||||
color: #2EA222;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .AiCell {
|
||||
&.half {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .u-form-item {
|
||||
width: 50%;
|
||||
min-height: 124px;
|
||||
|
||||
.u-form-item--left {
|
||||
color: #999;
|
||||
min-height: 40px;
|
||||
}
|
||||
|
||||
.u-form-item--right {
|
||||
min-height: 0;
|
||||
margin-top: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .u-mask {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.bindCert {
|
||||
width: 600px;
|
||||
padding: 32px;
|
||||
min-height: 400px;
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.residents {
|
||||
max-height: 780px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
.searchInput {
|
||||
margin: 16px 0;
|
||||
border: 1px solid #D0D4DC;
|
||||
border-radius: 8px;
|
||||
padding: 0 16px !important;
|
||||
flex: 0;
|
||||
}
|
||||
|
||||
.spb {
|
||||
height: 60px;
|
||||
cursor: pointer;
|
||||
padding: 0 16px;
|
||||
|
||||
b {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
&:nth-of-type(2n) {
|
||||
background: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .logItem {
|
||||
display: flex;
|
||||
min-height: 220px;
|
||||
|
||||
&:last-of-type {
|
||||
.line {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
& > .column + .column {
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
.dot {
|
||||
flex-shrink: 0;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: $uni-color-primary;
|
||||
border: 8px solid #FFFFFF;
|
||||
border-radius: 50%;
|
||||
margin: 8px 0;
|
||||
}
|
||||
|
||||
.line {
|
||||
width: 4px;
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
.start {
|
||||
font-size: 26px;
|
||||
font-weight: 400;
|
||||
color: #666;
|
||||
|
||||
b {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
i {
|
||||
color: $uni-color-primary;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
& > b {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
& > span {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
& > div {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,142 +0,0 @@
|
||||
<template>
|
||||
<section class="residentList">
|
||||
<AiTopFixed>
|
||||
<u-search placeholder="请输入昵称、姓名" :show-action="false" search-icon-color="#ccc"
|
||||
v-model="search.name" @search="page.current=1,getList()"/>
|
||||
<AiCell>
|
||||
<b slot="label" class="title">共<i v-html="page.total||0"/>个居民</b>
|
||||
</AiCell>
|
||||
</AiTopFixed>
|
||||
<div class="mainPane">
|
||||
<AiCell v-for="item in list" :key="item.id" @click.native="showResident(item)">
|
||||
<template #label>
|
||||
<AiImage :src="item.avatar" preview/>
|
||||
</template>
|
||||
<div class="card wrap start" flex>
|
||||
<b>{{ item.name }}</b>
|
||||
<div flex class="tag" v-for="(tag,j) in item.tags" :key="j">{{ tag.tagName }}</div>
|
||||
<div class="realName" shrink v-html="`真实姓名:${item.realName||'-'}`"/>
|
||||
</div>
|
||||
</AiCell>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "residentList",
|
||||
data() {
|
||||
return {
|
||||
page: {current: 1, size: 10, total: 0},
|
||||
search: {name: ""},
|
||||
list: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.$http.post("/app/wxcp/wxcustomer/list", null, {
|
||||
params: {...this.page, ...this.search, type: 1}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
if (this.page.current > 1) {
|
||||
this.list = [...this.list, ...res.data.records]
|
||||
} else this.list = res.data.records
|
||||
this.page.total = res.data.total
|
||||
}
|
||||
})
|
||||
},
|
||||
reachBottom() {
|
||||
if (this.page.total > this.list.length) {
|
||||
this.page.current++
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
showResident({id}) {
|
||||
id && uni.navigateTo({
|
||||
url: './resident?id=' + id
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.residentList {
|
||||
::v-deep .AiTopFixed {
|
||||
b.title {
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
|
||||
& > i {
|
||||
color: #267FCE;
|
||||
font-style: normal;
|
||||
margin: 0 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .mainPane {
|
||||
background: #fff;
|
||||
padding: 0 32px;
|
||||
|
||||
.AiCell {
|
||||
flex-shrink: 0;
|
||||
justify-content: flex-start;
|
||||
|
||||
.content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
max-width: unset;
|
||||
border-bottom: 1px solid rgba(221, 221, 221, 1);
|
||||
min-height: 160px;
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
text-align: left;
|
||||
|
||||
b {
|
||||
max-width: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
.tag {
|
||||
justify-content: center;
|
||||
background: #F3F4F7;
|
||||
border-radius: 4px;
|
||||
padding: 0 16px;
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #333;
|
||||
margin-left: 16px;
|
||||
margin-bottom: 16px;
|
||||
height: 56px;
|
||||
}
|
||||
|
||||
.realName {
|
||||
width: 100%;
|
||||
margin-top: 8px;
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.AiImage {
|
||||
margin-right: 24px;
|
||||
|
||||
image {
|
||||
width: 112px;
|
||||
height: 112px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,258 +0,0 @@
|
||||
<template>
|
||||
<div class="resident-statistical">
|
||||
<u-tabs :list="tabs" :is-scroll="false" :current="currentType" font-size="32"
|
||||
bar-width="192" height="96" bg-color="#3975C6"
|
||||
active-color="#fff" inactive-color="#fff" @change="handleChange"/>
|
||||
<div class="bg" :style="{backgroundImage:'url(' + $cdn + 'dvcp_bg.png' + ')'}"></div>
|
||||
<div class="card">
|
||||
<u-row justify="between">
|
||||
<div class="item" v-for="(item,index) in cardList" :key="index">
|
||||
<span :style="{color:item.color} ">{{ item.value }}</span>
|
||||
<span>{{ item.label }}</span>
|
||||
</div>
|
||||
</u-row>
|
||||
</div>
|
||||
<div class="chart">
|
||||
<div id="chart"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import echarts from "echarts"
|
||||
import {mapActions} from "vuex";
|
||||
|
||||
export default {
|
||||
name: "residentSta",
|
||||
props: {
|
||||
isNormal: Boolean
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentType: 0,
|
||||
groupId: null,
|
||||
chart: null,
|
||||
chartData: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['injectJWeixin', "wxInvoke"]),
|
||||
handleChange(i) {
|
||||
this.currentType = i
|
||||
this.getChart()
|
||||
},
|
||||
getChart() {
|
||||
this.$http.post(this.currentType == 0 ? "/app/wxcp/wxgroup/groupStatistic" : "/app/wxcp/wxcustomerlog/customerStatistic", null, {
|
||||
params: {
|
||||
id: this.groupId
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.chartData = res.data
|
||||
this.initChart()
|
||||
}
|
||||
})
|
||||
},
|
||||
initChart() {
|
||||
this.chart = echarts.init(document.getElementById('chart'))
|
||||
this.setOptions()
|
||||
},
|
||||
setOptions() {
|
||||
const x = Object.keys(this.chartData.list)
|
||||
const y = Object.values(this.chartData.list)
|
||||
this.chart.setOption({
|
||||
backgroundColor: "#F9F9F9",
|
||||
legend: {
|
||||
data: this.currentType == 0 ? ["群成员总数", "入群人数", "退群人数"] : ["居民总数", "新增居民数", "流失居民数"],
|
||||
icon: "rect",
|
||||
itemWidth: 8,
|
||||
itemHeight: 8,
|
||||
itemGap: 10,
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
color: "#666666",
|
||||
lineHeight: 20
|
||||
},
|
||||
bottom: 0
|
||||
},
|
||||
grid: {
|
||||
left: 60,
|
||||
top: "10%",
|
||||
bottom: "30%",
|
||||
},
|
||||
xAxis: {
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
},
|
||||
axisLabel: {
|
||||
marginTop: 10,
|
||||
rotate: 40,
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: '#666666'
|
||||
}
|
||||
},
|
||||
data: x.map(e => e.slice(5))
|
||||
},
|
||||
yAxis: {
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
},
|
||||
axisLabel: {
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: '#666666'
|
||||
}
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: this.currentType == 0 ? "群成员总数" : "居民总数",
|
||||
type: "line",
|
||||
itemStyle: {
|
||||
color: "#4B87FE"
|
||||
},
|
||||
data: y.map(e => e.total)
|
||||
},
|
||||
{
|
||||
name: this.currentType == 0 ? "入群人数" : "新增居民数",
|
||||
type: "line",
|
||||
itemStyle: {
|
||||
color: "#32C5FF"
|
||||
},
|
||||
data: y.map(e => e.increase)
|
||||
},
|
||||
{
|
||||
name: this.currentType == 0 ? "退群人数" : "流失居民数",
|
||||
type: "line",
|
||||
itemStyle: {
|
||||
color: "#FFAA44"
|
||||
},
|
||||
data: y.map(e => e.decrease)
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
tabs() {
|
||||
return [
|
||||
{name: "居民群统计", value: 0},
|
||||
{name: "居民统计", value: 1},
|
||||
]
|
||||
},
|
||||
currentTab() {
|
||||
return this.tabs.find(e => e.value == this.currentType)
|
||||
},
|
||||
cardList() {
|
||||
return this.currentType == 0 ? [
|
||||
{label: "群聊总数", value: this.chartData?.groupSum || "0", color: "#354FC7"},
|
||||
{label: "群成员总数", value: this.chartData?.today?.total || "0", color: "#868686"},
|
||||
{label: "今日入群", value: this.chartData?.today?.increase || "0", color: "#5FBA95"},
|
||||
{label: "今日退群", value: this.chartData?.today?.decrease || "0", color: "#F09535"},
|
||||
] : [
|
||||
{label: "居民总数", value: this.chartData?.today?.total || "0", color: "#354FC7"},
|
||||
{label: "今日新增", value: this.chartData?.today?.increase || "0", color: "#5FBA95"},
|
||||
{label: "今日流失", value: this.chartData?.today?.decrease || "0", color: "#F09535"},
|
||||
]
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
isNormal(v) {
|
||||
v && this.getChart()
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (this.$route.hash == "#dev") {
|
||||
this.getChart()
|
||||
} else this.injectJWeixin("getCurExternalChat").then(() => {
|
||||
return Promise.resolve()
|
||||
}).then(() => {
|
||||
this.wxInvoke(['getCurExternalChat', {}, res => {
|
||||
if (res?.err_msg == 'getCurExternalChat:ok') {
|
||||
this.groupId = res.chatId
|
||||
}
|
||||
this.getChart()
|
||||
}])
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.resident-statistical {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #F5F5F5;
|
||||
padding-top: 96px;
|
||||
|
||||
::v-deep .u-tabs {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.bg {
|
||||
height: 340px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 686px;
|
||||
height: 232px;
|
||||
margin: -140px auto 0;
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
padding: 32px;
|
||||
|
||||
.u-row {
|
||||
width: 100%;
|
||||
|
||||
.item {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
color: #354FC7;
|
||||
|
||||
& > span {
|
||||
display: block;
|
||||
}
|
||||
|
||||
& > span:last-child {
|
||||
font-size: 30px;
|
||||
font-weight: 500;
|
||||
color: #999999;
|
||||
line-height: 42px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chart {
|
||||
background-color: #FFFFFF;
|
||||
margin: 24px 0;
|
||||
box-sizing: border-box;
|
||||
padding: 32px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
#chart {
|
||||
width: 686px;
|
||||
height: 470px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,89 +0,0 @@
|
||||
<template>
|
||||
<section class="tagManage">
|
||||
<div class="card" v-for="(group,i) in tags" :key="i">
|
||||
<AiCell title :label="group.name"/>
|
||||
<u-row>
|
||||
<div class="tag" v-for="(op,j) in group.tagList" :key="j" :class="{selected:selected.includes(op.id)}"
|
||||
@tap="$u.debounce(handleToggle(op.id))">
|
||||
{{ op.name }}
|
||||
</div>
|
||||
</u-row>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "tagManage",
|
||||
inject: ['top'],
|
||||
data() {
|
||||
return {
|
||||
tags: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
selected() {
|
||||
return this.top.groupId ? this.top.detail?.tagList.map(e => e.tagId) : this.top.detail?.tags.map(e => e.tagId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getTags() {
|
||||
this.$http.post(this.top.groupId ? "/app/wxcp/wxgroupchattag/listAll" : "/app/wxcp/wxcorptag/listAll", null, {
|
||||
params: {size: 9999}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
this.tags = res.data.records
|
||||
}
|
||||
})
|
||||
},
|
||||
handleToggle(tagId) {
|
||||
uni.showLoading({
|
||||
title: '提交中'
|
||||
});
|
||||
|
||||
this.$http.post(this.top.groupId ? "/app/wxcp/wxgroupchattag/markTagForCP" : "/app/wxcp/wxcorptag/markTagForCP", null, {
|
||||
params: this.top.groupId ? {tagId, groupId: this.top.groupId,} : {tagId, customerId: this.top.custom}
|
||||
}).then(res => {
|
||||
uni.hideLoading()
|
||||
if (res?.code == 0) {
|
||||
this.$u.toast("操作成功!")
|
||||
this.getTags()
|
||||
this.top.getContact()
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.hideLoading()
|
||||
this.$u.toast(err)
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getTags()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.tagManage {
|
||||
padding-top: 16px;
|
||||
|
||||
.tag {
|
||||
cursor: pointer !important;
|
||||
|
||||
&.selected {
|
||||
background-color: $uni-color-primary !important;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
color: #999;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
& + .tag {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,302 +0,0 @@
|
||||
<template>
|
||||
<div class="group-resident">
|
||||
<template v-if="!showTagManage">
|
||||
<AiTopFixed>
|
||||
<div class="card">
|
||||
<header>
|
||||
<u-avatar mode="square" :src="$cdn + 'groupAvatar.png'" :size="112"></u-avatar>
|
||||
{{ detail.name }}
|
||||
</header>
|
||||
<u-grid :col="2" :border="false">
|
||||
<u-grid-item>
|
||||
<label>建群日期</label>
|
||||
<label v-if="detail.createTime">{{ detail.createTime.split(" ")[0] }}</label>
|
||||
</u-grid-item>
|
||||
<u-grid-item>
|
||||
<label>成员总数</label>
|
||||
<label v-if="isToday">{{ detail.statistic.today.total }}</label>
|
||||
</u-grid-item>
|
||||
<u-grid-item>
|
||||
<label>今日入群</label>
|
||||
<label v-if="isToday">{{ detail.statistic.today.increase }}</label>
|
||||
</u-grid-item>
|
||||
<u-grid-item>
|
||||
<label>今日退群</label>
|
||||
<label v-if="isToday">{{ detail.statistic.today.decrease }}</label>
|
||||
</u-grid-item>
|
||||
<!-- <u-grid-item>-->
|
||||
<!-- <label>今日活跃人数</label>-->
|
||||
<!-- <label>{{item.value}}</label>-->
|
||||
<!-- </u-grid-item>-->
|
||||
</u-grid>
|
||||
<p class="statistics">
|
||||
<span>成员性别:</span>
|
||||
<label>男性</label>
|
||||
<b>{{ detail.man }}</b>
|
||||
<label>女性</label>
|
||||
<b>{{ detail.woman }}</b>
|
||||
<label>未知</label>
|
||||
<b>{{ detail.unknown }}</b>
|
||||
</p>
|
||||
</div>
|
||||
</AiTopFixed>
|
||||
<div class="card">
|
||||
<AiCell title label="群标签">
|
||||
<u-icon label="添加" size="38" name="iconAdd" custom-prefix="iconfont" color="#1365DD"
|
||||
label-color="#1365DD" @tap="showTagManage=true"/>
|
||||
</AiCell>
|
||||
<AiCell top-label v-for="(op,name) in tagsList" :label="name" :key="name">
|
||||
<u-row>
|
||||
<div class="tag" v-for="(tag,j) in op" :key="j">{{ tag }}</div>
|
||||
</u-row>
|
||||
</AiCell>
|
||||
</div>
|
||||
<div class="card">
|
||||
<AiCell title label="群成员"></AiCell>
|
||||
<div class="wrap">
|
||||
<div class="item" v-for="(item,index) in detail.groupUserList" :key="index" @click="handleWechat(item)">
|
||||
<u-avatar mode="square" :src="item.avatar"></u-avatar>
|
||||
<div class="info">
|
||||
<div class="left">
|
||||
<p>{{ item.memberName }}
|
||||
<b v-if="item.customerType==2" style="color: #3C7FC8;">@{{ item.corpName }}</b>
|
||||
<b v-if="item.customerType==1" style="color: #2EA222;">@微信</b>
|
||||
</p>
|
||||
<p>真实姓名:{{ item.realName }}</p>
|
||||
</div>
|
||||
<span v-if="item.userId==detail.owner">群主</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<tag-manage v-if="showTagManage"/>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapActions} from "vuex";
|
||||
import TagManage from "./components/tagManage";
|
||||
|
||||
export default {
|
||||
name: "groupResident",
|
||||
components: {TagManage},
|
||||
provide() {
|
||||
return {
|
||||
top: this
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
detail: {},
|
||||
groupId: null,
|
||||
showTagManage: false,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
tagsList() {
|
||||
let obj = {}
|
||||
this.detail?.tagList?.map(e => {
|
||||
if (e?.groupName) {
|
||||
if (obj?.[e.groupName]) {
|
||||
obj[e.groupName].push(e.tagName)
|
||||
} else {
|
||||
obj[e.groupName] = [e.tagName]
|
||||
}
|
||||
}
|
||||
})
|
||||
return obj
|
||||
},
|
||||
isToday() {
|
||||
return !!this.detail?.statistic?.today
|
||||
},
|
||||
isNormal() {
|
||||
return !!this.$route.query.id;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['injectJWeixin', "wxInvoke"]),
|
||||
getContact() {
|
||||
if (this.isNormal) {
|
||||
this.groupId = this.$route.query.id
|
||||
this.getGroup(this.$route.query.id)
|
||||
} else this.injectJWeixin("getCurExternalChat").then(() => {
|
||||
this.wxInvoke(['getCurExternalChat', {}, res => {
|
||||
if (res?.err_msg == 'getCurExternalChat:ok') {
|
||||
this.groupId = res.chatId
|
||||
this.getGroup(res.chatId)
|
||||
}
|
||||
}])
|
||||
})
|
||||
},
|
||||
getGroup(id) {
|
||||
this.$http.post("/app/wxcp/wxgroup/getDetail", null, {
|
||||
params: {id}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
this.detail = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
handleWechat({userId, type}) {
|
||||
this.injectJWeixin('openUserProfile').then(() => {
|
||||
this.wxInvoke(['openUserProfile', {
|
||||
type,
|
||||
userid: userId
|
||||
}, () => 0])
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getContact()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.group-resident {
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
background-color: #F5F5F5;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
::v-deep .AiTopFixed {
|
||||
& > .card {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .card {
|
||||
background-color: #FFFFFF;
|
||||
padding: 16px 32px;
|
||||
box-sizing: border-box;
|
||||
margin-top: 16px;
|
||||
|
||||
header {
|
||||
height: 192px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 36px;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
|
||||
.u-avatar {
|
||||
margin-right: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .u-grid-item-box {
|
||||
box-sizing: border-box;
|
||||
padding: 16px !important;
|
||||
|
||||
.uni-label-pointer {
|
||||
width: 100%;
|
||||
line-height: 40px;
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
uni-label:last-child {
|
||||
margin-top: 16px;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
|
||||
.statistics {
|
||||
height: 96px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-top: 1px solid #eee;
|
||||
margin-top: 16px;
|
||||
|
||||
span {
|
||||
font-size: 28px;
|
||||
color: #999999
|
||||
}
|
||||
|
||||
label + b {
|
||||
font-size: 28px;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
b {
|
||||
color: #1365DD !important;
|
||||
margin: 0 32px 0 16px;
|
||||
}
|
||||
}
|
||||
|
||||
& > section:first-child {
|
||||
height: 90px !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.wrap {
|
||||
margin-bottom: 20px;
|
||||
|
||||
.item {
|
||||
height: 176px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.info {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-left: 24px;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
||||
.left {
|
||||
font-size: 36px;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
|
||||
b {
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #3C7FC8;
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
span {
|
||||
width: 88px;
|
||||
height: 56px;
|
||||
text-align: center;
|
||||
background: rgba(19, 101, 221, 0.1);
|
||||
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
|
||||
border-radius: 4px;
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #1365DD;
|
||||
line-height: 56px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .tag {
|
||||
height: 56px;
|
||||
line-height: 56px;
|
||||
background: #F3F4F7;
|
||||
border-radius: 6px;
|
||||
padding: 8px 16px;
|
||||
margin-right: 16px;
|
||||
margin-bottom: 16px;
|
||||
overflow: hidden;
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,145 +0,0 @@
|
||||
<template>
|
||||
<section class="resident">
|
||||
<AiLoading v-if="!custom&&!error" tips="获取居民信息中..."/>
|
||||
<AiResult v-else-if="error" status="error" :tips="error"/>
|
||||
<template v-else>
|
||||
<tag-manage v-if="showTagManage"/>
|
||||
<template v-else>
|
||||
<AiTopFixed>
|
||||
<u-tabs :list="tabs" :is-scroll="false" :current="currentType" font-size="32"
|
||||
bar-width="192" height="96" @change="handleTabClick"/>
|
||||
</AiTopFixed>
|
||||
<component :is="currentTab.comp"/>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapActions} from "vuex";
|
||||
import Info from "./components/info";
|
||||
import Document from "./components/document";
|
||||
import TagManage from "./components/tagManage";
|
||||
|
||||
export default {
|
||||
name: "resident",
|
||||
components: {TagManage, Document, Info},
|
||||
provide() {
|
||||
return {
|
||||
top: this
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
tabs() {
|
||||
return [
|
||||
{name: "居民信息", value: 0, comp: Info},
|
||||
{name: "居民档案", value: 1, comp: Document, hide: !this.detail.residentInfo},
|
||||
].filter(e => !e.hide)
|
||||
},
|
||||
currentTab() {
|
||||
return this.tabs.find(e => e.value == this.currentType)
|
||||
},
|
||||
isNormal() {
|
||||
return !!this.$route.query.id;
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentType: 0,
|
||||
detail: {},
|
||||
showTagManage: false,
|
||||
custom: "",
|
||||
error: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['injectJWeixin', 'wxInvoke']),
|
||||
handleTabClick(i) {
|
||||
this.currentType = i
|
||||
},
|
||||
getContact() {
|
||||
if (this.isNormal) {
|
||||
this.getCustom(this.$route.query.id)
|
||||
} else {
|
||||
this.injectJWeixin("getCurExternalContact").then(() => {
|
||||
this.wxInvoke(['getCurExternalContact', {}, res => {
|
||||
if (res?.err_msg == 'getCurExternalContact:ok') {
|
||||
this.getCustom(res.userId)
|
||||
}
|
||||
}])
|
||||
}).catch(({errMsg}) => {
|
||||
this.error = errMsg
|
||||
})
|
||||
}
|
||||
},
|
||||
getCustom(id) {
|
||||
this.$http.post("/app/wxcp/wxcustomer/queryCustomerById", null, {
|
||||
params: {id}
|
||||
}).then(ret => {
|
||||
if (ret?.data) {
|
||||
this.custom = id
|
||||
this.detail = ret.data
|
||||
if (this.detail.type == 2) {
|
||||
this.error = "只能查看个人微信绑定的居民信息"
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getContact()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.resident {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
background: #F5F5F5;
|
||||
|
||||
.error {
|
||||
font-size: 32px;
|
||||
color: #666;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
::v-deep .u-scroll-box {
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
|
||||
.u-tab-bar {
|
||||
position: absolute;
|
||||
bottom: -6px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .card {
|
||||
background: #fff;
|
||||
margin-bottom: 16px;
|
||||
padding: 16px 32px;
|
||||
}
|
||||
|
||||
.half {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
::v-deep .tag {
|
||||
height: 56px;
|
||||
line-height: 56px;
|
||||
background: #F3F4F7;
|
||||
border-radius: 6px;
|
||||
padding: 8px 16px;
|
||||
margin-right: 16px;
|
||||
margin-bottom: 16px;
|
||||
overflow: hidden;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
@@ -1,389 +0,0 @@
|
||||
<template>
|
||||
<section class="AppPartyHistory">
|
||||
<div v-if="isShow" style="height: 100%">
|
||||
<!-- 头部搜索样式 -->
|
||||
<div class="fixed-top" style="width:100%;">
|
||||
<div class="search-box">
|
||||
<div class="search-input flex-row" @click="changeSearchBox">
|
||||
<img src="https://cdn.cunwuyun.cn/img/search-red.svg"/>
|
||||
<span class="color-fff">请输入文章标题</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 选择时间和类型 -->
|
||||
<div class="slect flex-row">
|
||||
<!-- 类型选择 -->
|
||||
<div class="uni-list type-slect">
|
||||
<div class="uni-list-cell">
|
||||
<div class="uni-list-cell-db">
|
||||
<picker @change="bindPickerChange" :value="index" :range="array" range-key="dictName">
|
||||
<div class="uni-input">{{ partyType }}</div>
|
||||
<img src="https://cdn.cunwuyun.cn/img/down.svg"/>
|
||||
</picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 时间选择 -->
|
||||
<div class="uni-list type-slect">
|
||||
<div class="uni-list-cell">
|
||||
<div class="uni-list-cell-db">
|
||||
<picker
|
||||
mode="date"
|
||||
:value="date"
|
||||
:start="startDate"
|
||||
:end="endDate"
|
||||
@change="bindDateChange"
|
||||
fields="month"
|
||||
>
|
||||
<div class="uni-input">{{ day }}</div>
|
||||
<img src="https://cdn.cunwuyun.cn/img/down.svg"/>
|
||||
</picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 党务公开列表 -->
|
||||
<div class="affairs-list">
|
||||
<div class="affairs" v-if="affairsList.length > 0">
|
||||
<!-- 循环 v-for -->
|
||||
<div v-for="(item, index) in affairsList" :key="index">
|
||||
<div class="affairs-item" @click="getDetail(item.id)">
|
||||
<div class="break-word">
|
||||
<span class="type">{{ $dict.getLabel(`partyHistoryType${style}`, item.type) }}</span>
|
||||
<span class="affirs-title">{{ item.title }}</span>
|
||||
</div>
|
||||
<div class="created-unit flex-row">
|
||||
<span>{{ item.organizationName || "" }}</span>
|
||||
<span>{{ item.createDate }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-if="affairsList.length == 0"/>
|
||||
</div>
|
||||
<div v-if="!isShow" class="search-input">
|
||||
<div class="input-box flex-row">
|
||||
<input
|
||||
type="text"
|
||||
class="input"
|
||||
placeholder="请输入文章标题"
|
||||
focus="false"
|
||||
v-model="searchValue"
|
||||
@blur="onBlur"
|
||||
/>
|
||||
<img
|
||||
class="sousuo"
|
||||
src="https://cdn.cunwuyun.cn/img/search-active.svg"
|
||||
/>
|
||||
<img
|
||||
v-if="searchValue"
|
||||
@tap="clearInput"
|
||||
class="clear"
|
||||
src="https://cdn.cunwuyun.cn/img/empty-Input.svg"
|
||||
/>
|
||||
<div class="search-word" @click="search">搜索</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from "vuex";
|
||||
|
||||
export default {
|
||||
name: "AppPartyHistory",
|
||||
appName: "党史文章",
|
||||
data() {
|
||||
const currentDate = this.getDate({
|
||||
format: true,
|
||||
});
|
||||
return {
|
||||
inputValue: "请输入文章标题",
|
||||
isShow: true,
|
||||
array: [],
|
||||
index: 0,
|
||||
partyType: "类型",
|
||||
partyTypeIndex: "", //类型index 0:党务公开,1:三会一课
|
||||
date: currentDate,
|
||||
day: "时间",
|
||||
createData: "", //创建时间
|
||||
affairsList: [],
|
||||
searchValue: "", //搜索框输入值
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pages: 2,
|
||||
style: '',
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
startDate() {
|
||||
return this.getDate("start");
|
||||
},
|
||||
endDate() {
|
||||
return this.getDate("end");
|
||||
},
|
||||
...mapState(["user"]),
|
||||
},
|
||||
onLoad(option) {
|
||||
this.style = option.style
|
||||
this.$dict.load("partyHistoryType0", "partyHistoryType1", "partyHistoryType2").then(() => {
|
||||
this.array = this.$dict.getDict(`partyHistoryType${this.style}`)
|
||||
this.array.unshift({dictName: "全部类型", dictValue: ""})
|
||||
this.getPartyList()
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
bindPickerChange(e) {
|
||||
this.partyType = this.array[e.detail.value].dictName;
|
||||
this.partyTypeIndex = this.array[e.detail.value].dictValue;
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.pageSize = 10;
|
||||
this.getPartyList();
|
||||
},
|
||||
bindDateChange: function (e) {
|
||||
this.day = e.target.value;
|
||||
this.createData =
|
||||
e.target.value + "-" + "08" + " " + "00" + ":" + "00" + ":" + "00";
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.pageSize = 10;
|
||||
this.getPartyList();
|
||||
},
|
||||
getDate(type) {
|
||||
const date = new Date();
|
||||
let year = date.getFullYear();
|
||||
let month = date.getMonth() + 1;
|
||||
let day = date.getDate();
|
||||
|
||||
if (type === "start") {
|
||||
year = year - 60;
|
||||
} else if (type === "end") {
|
||||
year = year + 2;
|
||||
}
|
||||
month = month > 9 ? month : "0" + month;
|
||||
day = day > 9 ? day : "0" + day;
|
||||
|
||||
return `${year}-${month}-08 00:00:00 `;
|
||||
},
|
||||
changeSearchBox() {
|
||||
this.isShow = false;
|
||||
},
|
||||
onBlur(e) {
|
||||
this.searchValue = e.target.value;
|
||||
|
||||
if (this.searchValue) {
|
||||
this.inputValue = this.searchValue;
|
||||
} else {
|
||||
this.inputValue = "请输入文章标题";
|
||||
}
|
||||
},
|
||||
search() {
|
||||
this.isShow = true;
|
||||
this.pageNum = 1;
|
||||
this.pageSize = 10;
|
||||
this.pages = 2;
|
||||
this.getPartyList();
|
||||
},
|
||||
clearInput() {
|
||||
this.searchValue = "";
|
||||
this.inputValue = "请输入文章标题";
|
||||
},
|
||||
getDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: `./detail?id=${id}`,
|
||||
});
|
||||
},
|
||||
getPartyList() {
|
||||
if (this.pageNum > this.pages) return;
|
||||
this.$http.post(`/app/apppartyhistory/listWechat`, {
|
||||
condition: this.searchValue,
|
||||
style: this.style,
|
||||
type: this.partyTypeIndex,
|
||||
createDate: this.createData,
|
||||
current: this.pageNum,
|
||||
size: this.pageSize,
|
||||
// organizationId: this.user.partyOrgId
|
||||
}).then((res) => {
|
||||
if (res.code == 0) {
|
||||
const affairsList = this.pageNum > 1 ? [...this.affairsList, ...res.data.records] : res.data.records;
|
||||
this.pages = Math.ceil(res.data.total / 10);
|
||||
this.affairsList = affairsList;
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
onReachBottom() {
|
||||
this.pageNum = this.pageNum + 1;
|
||||
this.getPartyList();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.AppPartyHistory {
|
||||
.search-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #e60012;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.search-input {
|
||||
line-height: 64px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #ce0010;
|
||||
// background:rgba(0,0,0,1);
|
||||
border-radius: 32px;
|
||||
// opacity: 0.1;
|
||||
color: #f0cbcd;
|
||||
font-size: 26px;
|
||||
|
||||
img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: 8px 8px 8px 24px;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
}
|
||||
|
||||
.color-fff {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.slect {
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
|
||||
.type-slect {
|
||||
width: 50%;
|
||||
border-right: 1px solid #f7f7f7;
|
||||
margin: 30px 0;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
|
||||
.uni-input {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
margin-left: 8 srpx;
|
||||
}
|
||||
}
|
||||
|
||||
.type-slect:nth-child(2) {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.affairs-list {
|
||||
width: 100%;
|
||||
// height:calc(100% - 210rpx);
|
||||
// overflow-y: auto;
|
||||
padding-top: 200px;
|
||||
|
||||
.affairs {
|
||||
background-color: #fff;
|
||||
margin: 32px;
|
||||
|
||||
.affairs-item {
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.type {
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
background-color: #e6edf7;
|
||||
color: #135ab8;
|
||||
font-size: 26px;
|
||||
margin-right: 16px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.affirs-title {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.created-unit {
|
||||
font-size: 28px;
|
||||
color: #999;
|
||||
justify-content: space-between;
|
||||
margin-top: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-affairs {
|
||||
width: 100%;
|
||||
height: calc(100% - 210rpx);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
// width:100%;
|
||||
// height:112rpx;
|
||||
.input-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #fff;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.sousuo {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 60px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.input {
|
||||
background-color: #f3f3f3;
|
||||
width: 598px;
|
||||
height: 64px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
margin-left: 8px;
|
||||
border-radius: 32px;
|
||||
padding-left: 70px;
|
||||
padding-right: 60px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.clear {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 130px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.search-word {
|
||||
font-size: 28px;
|
||||
color: #135ab8;
|
||||
line-height: 60px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,145 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<scroll-view
|
||||
scroll-y
|
||||
class="commentList"
|
||||
@scrolltolower="page.current++, getComments()"
|
||||
>
|
||||
<div class="comments-list" v-if="commentList.length">
|
||||
<div
|
||||
class="comments-item flex-row"
|
||||
v-for="(item, i) in commentList"
|
||||
:key="i"
|
||||
>
|
||||
<div class="user-avatar">
|
||||
<image v-if="item.avatar" :src="item.avatar"></image>
|
||||
<image v-else src="https://cdn.cunwuyun.cn/img/personal.png"></image>
|
||||
</div>
|
||||
<div class="content flex-column">
|
||||
<div class="flex-row" style="justify-content: space-between">
|
||||
<text>{{ item.createUser }}</text>
|
||||
<text class="commentTime">{{ item.commentTime }}</text>
|
||||
</div>
|
||||
<div>{{ item.content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-else />
|
||||
<view class="tips" v-if="commentList.length"> 已加载全部评论</view>
|
||||
</scroll-view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "commentList",
|
||||
props: {
|
||||
detail: Object,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
commentList: [],
|
||||
page: {
|
||||
current: 1,
|
||||
size: 10000,
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getComments() {
|
||||
this.$http.post(`/app/apppartyhistorycomment/list?partyHistoryId=${this.detail.id}&size=10000`).then((res) => {
|
||||
if (res && res.data) {
|
||||
this.commentList = res.data.records;
|
||||
this.$emit("comments", res.data.total);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => this.getComments());
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.commentList {
|
||||
width: 100%;
|
||||
margin-bottom: 135px;
|
||||
overflow-y: auto;
|
||||
|
||||
.comments-list {
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
box-sizing: border-box;
|
||||
|
||||
.user-avatar {
|
||||
display: inline-block;
|
||||
width: 80rpx;
|
||||
margin: 46rpx 20rpx 0 0;
|
||||
image {
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.user-bg {
|
||||
display: inline-block;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 50%;
|
||||
line-height: 80rpx;
|
||||
text-align: center;
|
||||
background-color: #26f;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.comments-item {
|
||||
border-bottom: 1px solid #f7f7f7;
|
||||
padding: 0 32px;
|
||||
color: #333;
|
||||
font-size: 28px;
|
||||
background-color: #fff;
|
||||
|
||||
& + .comments-item {
|
||||
border-top: 4px solid #eee;
|
||||
}
|
||||
|
||||
.content {
|
||||
display: inline-block;
|
||||
width: calc(100% - 120rpx);
|
||||
background-color: #fff;
|
||||
padding: 46px 0 32px 0;
|
||||
box-sizing: border-box;
|
||||
|
||||
.name {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.commentTime {
|
||||
color: #999;
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tips {
|
||||
line-height: 90px;
|
||||
width: 100%;
|
||||
color: #999;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
background-color: #f3f6f9;
|
||||
}
|
||||
|
||||
.no-comment-list {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,278 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<div>
|
||||
<div v-if="!showCommentList" class="detail">
|
||||
<!-- 文章标题 -->
|
||||
<div class="created-unit">
|
||||
<div class="artical-title break-word">{{ affairs.title }}</div>
|
||||
<div class="artical-unit">
|
||||
<span> 发布党组织 :{{ affairs.organizationName || "-" }}</span>
|
||||
</div>
|
||||
<div class="artical-unit">
|
||||
<text>发布时间:{{ affairs.createDate }}</text>
|
||||
<text />
|
||||
</div>
|
||||
</div>
|
||||
<!-- 文章内容 -->
|
||||
<div class="artical-content break-word">
|
||||
<u-parse :html="affairs.content" class="content" v-if="affairs.content"></u-parse>
|
||||
</div>
|
||||
<!-- 语音播报-->
|
||||
<AiTransSpeech :src="affairs.speech" v-if="affairs.speech"/>
|
||||
</div>
|
||||
<commentList v-else :detail="affairs"></commentList>
|
||||
<AiComment
|
||||
:comment-count="commentCount"
|
||||
@submitComment="submitComment"
|
||||
@showCommentList="showCommentList = true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import commentList from './commentList'
|
||||
export default {
|
||||
name: "policyDetail",
|
||||
components: {commentList},
|
||||
computed: {
|
||||
...mapState(["user"]),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
affairs: {},
|
||||
showCommentList: false,
|
||||
commentCount: 0,
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.$dict.load("policyPromotionType");
|
||||
this.id = options.id;
|
||||
this.getPartyAffairsDetail(this.id);
|
||||
this.getCount();
|
||||
},
|
||||
methods: {
|
||||
getCount() {
|
||||
this.$http.post(`/app/apppartyhistorycomment/list?partyHistoryId=${this.id}`).then((res) => {
|
||||
if (res && res.data) {
|
||||
this.commentCount = res.data.total;
|
||||
}
|
||||
});
|
||||
},
|
||||
getPartyAffairsDetail(id) {
|
||||
this.$http.post(`/app/apppartyhistory/queryDetailByIdWeChat?id=${id}`).then((res) => {
|
||||
if (res && res.data) {
|
||||
res.data.createDate = res.data.createDate.substring(0, 10);
|
||||
const regex = new RegExp("<img", "gi");
|
||||
res.data.content = res.data.content
|
||||
.replace(
|
||||
regex,
|
||||
`<img style="max-width:100%!important;" calss="img"`
|
||||
)
|
||||
.replace(/<p([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/gi, "<p")
|
||||
.replace(/<p>/gi, '<p class="p_class">')
|
||||
.replace(/style=""/g, 'style="max-width:100%!important;"');
|
||||
res.data.content = res.data.content.replace(
|
||||
/<img[^>]*>/gi,
|
||||
function (match) {
|
||||
return match.replace(
|
||||
/style\s*?=\s*?([‘"])[\s\S]*?\1/gi,
|
||||
'style="max-width:100%;"'
|
||||
); // 替换style
|
||||
}
|
||||
);
|
||||
|
||||
if (res.data.files && res.data.files.length) {
|
||||
res.data.files.map(item => {
|
||||
var size = item.size / 1024;
|
||||
item.fileSize = size.toFixed(0);
|
||||
return item
|
||||
})
|
||||
}
|
||||
|
||||
this.affairs = { ...res.data };
|
||||
}
|
||||
});
|
||||
},
|
||||
back() {
|
||||
if (getCurrentPages().length === 1) {
|
||||
uni.switchTab({
|
||||
url: "/pages/home/home",
|
||||
});
|
||||
return false;
|
||||
}
|
||||
this.showCommentList
|
||||
? (this.showCommentList = false)
|
||||
: uni.navigateBack();
|
||||
},
|
||||
submitComment(content) {
|
||||
this.$http
|
||||
.post("/app/apppartyhistorycomment/addOrUpdate", {
|
||||
partyHistoryId: this.affairs.id,
|
||||
content: content,
|
||||
name: this.user.nickName,
|
||||
avatar: this.user.avatarUrl,
|
||||
organizationId: this.affairs.organizationId
|
||||
})
|
||||
.then((res) => {
|
||||
if (res && res.code == 0) {
|
||||
uni.showToast({ icon: "success", title: "评论成功" });
|
||||
this.showCommentList = true
|
||||
this.getCount()
|
||||
} else {
|
||||
uni.showToast({ icon: "none", title: res.msg });
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
uni.showToast({ icon: "none", title: err });
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
.navHeadBar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background: #135ab8;
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.detail {
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
|
||||
.created-unit {
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
background-color: #D40A05;
|
||||
color: #fff;
|
||||
|
||||
.artical-title {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.artical-unit {
|
||||
font-size: 28px;
|
||||
margin-top: 16px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
.artical-content {
|
||||
color: #666666;
|
||||
font-size: 32px;
|
||||
padding: 32px 32px 128px 32px;
|
||||
box-sizing: border-box;
|
||||
background-color: #fff;
|
||||
|
||||
.p_class {
|
||||
margin-top: 40px;
|
||||
font-size: 32px;
|
||||
color: #333;
|
||||
text-indent: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.attachment {
|
||||
width: 100%;
|
||||
padding: 32px 32px 96px 32px;
|
||||
box-sizing: border-box;
|
||||
background-color: #ffffff;
|
||||
margin-top: 16px;
|
||||
|
||||
.attachment-title {
|
||||
font-size: 32px;
|
||||
color: #333333;
|
||||
font-weight: 500;
|
||||
|
||||
image {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.p_class {
|
||||
margin-top: 40px;
|
||||
font-size: 32px;
|
||||
color: #333;
|
||||
text-indent: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
.attachment {
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
background-color: #FFFFFF;
|
||||
margin-top: 16px;
|
||||
|
||||
.attachment-title {
|
||||
font-size: 32px;
|
||||
color: #333333;
|
||||
font-weight: 500;
|
||||
|
||||
image {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.attachment-item {
|
||||
border: 1px solid rgba(204, 204, 204, 1);
|
||||
padding: 16px;
|
||||
box-sizing: border-box;
|
||||
margin-top: 34px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
border-radius: 8px;
|
||||
|
||||
.file-name {
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
image {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.title {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
word-break: break-all;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.size {
|
||||
color: #999;
|
||||
font-size: 28px;
|
||||
display: flex;
|
||||
justify-content: cemter;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,304 +0,0 @@
|
||||
<template>
|
||||
<div class="AppPartyOrganization">
|
||||
<div class="header"></div>
|
||||
<div class="content">
|
||||
<div class="party-org">
|
||||
<div class="title">所在组织</div>
|
||||
<p class="org-select" @click="selectShow = true">{{ detail.name || '请选择' }}<img
|
||||
src="https://cdn.cunwuyun.cn/img/down.svg"/></p>
|
||||
</div>
|
||||
<div class="org-info">
|
||||
<div class="title">组织信息</div>
|
||||
<div class="flex-row">
|
||||
<span class="color-666">组织类型</span>
|
||||
<span class="color-333">{{ $dict.getLabel("orgType", detail.orgType) }}</span>
|
||||
</div>
|
||||
<div class="flex-row">
|
||||
<span class="color-666">组织级别</span>
|
||||
<span class="color-333">{{ $dict.getLabel("orgPartyType", detail.partyType) }}</span>
|
||||
</div>
|
||||
<div class="flex-row">
|
||||
<span class="color-666">党员人数</span>
|
||||
<span class="color-333">{{ count }}人</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="org-info">
|
||||
<div class="flex-row">
|
||||
<span class="title">报到状态</span>
|
||||
<span :class="userInfo.reportOrgId ? 'status1' : 'status0'">{{ userInfo.reportOrgId ? '已报到' : '未报到' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<u-select v-model="selectShow" :list="treeData" @confirm="confirm"></u-select>
|
||||
<u-popup v-model="dialog" mode="center" border-radius="8">
|
||||
<div class="estateNotice">
|
||||
<b>您已加入过党组织,是否变更?</b>
|
||||
<u-gap height="40"/>
|
||||
<div class="curEstate">
|
||||
<div class="flexRow">
|
||||
<b>当前党组织:</b>
|
||||
<span>{{ detail.name }}</span>
|
||||
</div>
|
||||
<div class="flexRow">
|
||||
<b>当前报到状态:</b>
|
||||
<span
|
||||
:class="userInfo.reportOrgId ? 'status1' : 'status0'">{{ userInfo.reportOrgId ? '已报到' : '未报到' }}</span>
|
||||
</div>
|
||||
<div class="flexRow">
|
||||
<b>变更党组织:</b>
|
||||
<span>{{ changeOrgInfo.label }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<u-gap height="34"/>
|
||||
<div class="alert">变更党组织后需尽快前往新党组织报到</div>
|
||||
<u-gap height="62"/>
|
||||
<div class="flexRow footer">
|
||||
<div class="fill"/>
|
||||
<span @click="dialog=false">取消</span>
|
||||
<span @click="dialog=false,bindEstate()">确认</span>
|
||||
</div>
|
||||
</div>
|
||||
</u-popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "AppPartyOrganization",
|
||||
appName: "党组织",
|
||||
data() {
|
||||
return {
|
||||
dialog: false,
|
||||
detail: {},
|
||||
treeData: [],
|
||||
selectShow: false,
|
||||
reportOrgName: '', //报到党组织名称
|
||||
reportOrgId: '',
|
||||
changeOrgInfo: {},
|
||||
userInfo: {},
|
||||
count: 0
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.$dict.load("orgType", "orgPartyType").then(() => {
|
||||
this.getUserInfo()
|
||||
})
|
||||
|
||||
},
|
||||
methods: {
|
||||
getUserInfo() {
|
||||
this.$http.post("/app/appparty/chanhudetail").then(res => {
|
||||
if (res?.data) {
|
||||
if (res.data.reportOrgId) {
|
||||
this.reportOrgName = res.data.reportOrgName
|
||||
this.reportOrgId = res.data.reportOrgId
|
||||
} else {
|
||||
this.reportOrgName = res.data.partyOrgName
|
||||
this.reportOrgId = res.data.partyOrgId
|
||||
}
|
||||
this.userInfo = res.data
|
||||
this.getDetail()
|
||||
this.getTree()
|
||||
}
|
||||
})
|
||||
},
|
||||
getTree() {
|
||||
this.$http.post(`/admin/partyOrganization/queryAllChildren?id=${this.userInfo.topOrgId}`).then(res => {
|
||||
if (res?.data) {
|
||||
res.data.map((item) => {
|
||||
item.label = item.name
|
||||
item.value = item.id
|
||||
})
|
||||
this.treeData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getDetail() {
|
||||
this.$http.post(`/admin/partyOrganization/detail?id=${this.userInfo.reportOrgId}`).then(res => {
|
||||
if (res?.data) {
|
||||
this.detail = res.data
|
||||
this.count = res.data.memberCount.one || 0
|
||||
}
|
||||
})
|
||||
},
|
||||
confirm(e) {
|
||||
this.treeData.map((item) => {
|
||||
if (item.id == e[0].value) {
|
||||
this.changeOrgInfo = item
|
||||
}
|
||||
})
|
||||
this.dialog = true
|
||||
},
|
||||
bindEstate() {
|
||||
this.$http.post("/app/apppartyreportorgchange/changeReportOrg", {
|
||||
orgId: this.changeOrgInfo.id,
|
||||
orgName: this.changeOrgInfo.name,
|
||||
partyId: this.userInfo.id,
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
this.$toast('党组织变更成功')
|
||||
this.getUserInfo()
|
||||
this.$store.commit("getUserInfo")
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.AppPartyOrganization {
|
||||
height: 100%;
|
||||
padding-bottom: 112px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.header {
|
||||
height: 160px;
|
||||
background: #E60012;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 686px;
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
left: 32px;
|
||||
|
||||
.party-org {
|
||||
padding: 32px;
|
||||
margin-bottom: 16px;
|
||||
background: #FFFFFF;
|
||||
|
||||
.title {
|
||||
font-size: 34px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 700;
|
||||
color: #333;
|
||||
line-height: 60px;
|
||||
}
|
||||
|
||||
.org-select {
|
||||
font-size: 30px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #666;
|
||||
line-height: 42px;
|
||||
|
||||
img {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
vertical-align: middle;
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.org-info {
|
||||
padding: 0 32px;
|
||||
background: #FFFFFF;
|
||||
margin-bottom: 16px;
|
||||
|
||||
div {
|
||||
line-height: 100px;
|
||||
font-size: 30px;
|
||||
border-bottom: 2px solid #eee;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
div:nth-last-of-type(1) {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 700;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.color-666 {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.color-333 {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.status0 {
|
||||
color: #FF8822;
|
||||
}
|
||||
|
||||
.status1 {
|
||||
color: #2EA222;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
::v-deep .estateNotice {
|
||||
width: 560px;
|
||||
background: #FFFFFF;
|
||||
padding: 48px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.status0 {
|
||||
color: #FF8822;
|
||||
}
|
||||
|
||||
.status1 {
|
||||
color: #2EA222;
|
||||
}
|
||||
|
||||
.curEstate {
|
||||
color: #666;
|
||||
font-size: 28px;
|
||||
|
||||
b {
|
||||
color: #333
|
||||
}
|
||||
}
|
||||
|
||||
.alert {
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
color: #F14242;
|
||||
}
|
||||
|
||||
.footer {
|
||||
span {
|
||||
width: 128px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
color: #1365DD;
|
||||
font-size: 28px;
|
||||
transform: translateX(32px);
|
||||
|
||||
& + span {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.bottomBtn {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
text-align: center;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
background: #E60012;
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,485 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<div v-if="isShow" style="height: 100%">
|
||||
<div class="fixed-top">
|
||||
<!-- 头部搜索样式 -->
|
||||
<div class="search-box">
|
||||
<div class="search-input flex-row" @click="changeSearchBox">
|
||||
<image src="https://cdn.cunwuyun.cn/img/search-red.svg"></image>
|
||||
<span>{{ inputValue }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 选择时间和类型 -->
|
||||
<div class="slect flex-row">
|
||||
<!-- 类型选择 -->
|
||||
<div class="uni-list type-select">
|
||||
<div class="uni-list-cell">
|
||||
<div class="uni-list-cell-db">
|
||||
<picker
|
||||
@change="bindPickerChange"
|
||||
:range="array"
|
||||
range-key="dictName"
|
||||
>
|
||||
<div class="uni-input" v-if="partyStudyType === ''">
|
||||
学习类别
|
||||
</div>
|
||||
<div class="uni-input" v-else>
|
||||
{{ array[partyStudyType + 1].dictName }}
|
||||
</div>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
|
||||
</picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 时间选择 -->
|
||||
<div class="uni-list type-select">
|
||||
<div class="uni-list-cell">
|
||||
<div class="uni-list-cell-db">
|
||||
<picker
|
||||
mode="date"
|
||||
:value="date"
|
||||
:start="startDate"
|
||||
:end="endDate"
|
||||
@change="bindDateChange"
|
||||
fields="month"
|
||||
>
|
||||
<div class="uni-input">{{ day }}</div>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
|
||||
</picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="session-list">
|
||||
<div
|
||||
class="session-item"
|
||||
v-for="(item, index) in meetList"
|
||||
:key="index"
|
||||
>
|
||||
<div class="item-top" @click="toDetail(item.id)">
|
||||
<div class="item-title mar-b12">{{ item.title }}</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">学习类别:</span>
|
||||
<span class="info-value">{{
|
||||
$dict.getLabel("partyStudyType", item.type)
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">发布时间:</span>
|
||||
<span class="info-value">{{ item.publishTime }}</span>
|
||||
</div>
|
||||
<div class="item-info mar-b12">
|
||||
<span class="info-label">发布人员:</span>
|
||||
<span class="info-value">{{ item.publishUserName }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-status" :class="'item-status' + item.studyStatus">
|
||||
{{ $dict.getLabel("partyStudyStatus", item.studyStatus) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-if="meetList.length == 0"/>
|
||||
</div>
|
||||
<div v-if="!isShow" class="search-input">
|
||||
<div class="input-box flex-row">
|
||||
<input
|
||||
type="span"
|
||||
class="input"
|
||||
placeholder="请输入学习标题"
|
||||
focus="false"
|
||||
v-model="searchValue"
|
||||
@blur="onBlur"
|
||||
/>
|
||||
<image
|
||||
class="sousuo"
|
||||
src="https://cdn.cunwuyun.cn/img/search-active.svg"
|
||||
></image>
|
||||
<image
|
||||
v-if="searchValue"
|
||||
@tap="clearInput"
|
||||
class="clear"
|
||||
src="https://cdn.cunwuyun.cn/img/empty-Input.svg"
|
||||
></image>
|
||||
<div class="search-word" @click="search">搜索</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
appName: "学习心得",
|
||||
data() {
|
||||
const currentDate = this.getDate({
|
||||
format: true,
|
||||
});
|
||||
return {
|
||||
inputValue: "请输入学习标题",
|
||||
isShow: true,
|
||||
array: [],
|
||||
meetType: "",
|
||||
partyStudyType: "",
|
||||
index: 0,
|
||||
date: currentDate,
|
||||
day: "时间",
|
||||
createDate: "", //创建时间
|
||||
meetList: [],
|
||||
searchValue: "", //搜索框输入值
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pages: 2,
|
||||
userId: "",
|
||||
partyId: "",
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
startDate() {
|
||||
return this.getDate("start");
|
||||
},
|
||||
endDate() {
|
||||
return this.getDate("end");
|
||||
},
|
||||
},
|
||||
onLoad(options) {
|
||||
this.partyId = options.partyId;
|
||||
this.$dict.load("partyStudyStatus", "partyStudyType").then((res) => {
|
||||
this.array = this.$dict.getDict("partyStudyType");
|
||||
this.array.unshift({dictName: "全部类型", dictValue: ""})
|
||||
this.getList();
|
||||
});
|
||||
},
|
||||
onShow() {
|
||||
this.$dict.load("partyStudyStatus", "partyStudyType");
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
bindPickerChange(e) {
|
||||
if (e.detail.value - 1 >= 0) {
|
||||
this.partyStudyType = e.detail.value - 1;
|
||||
} else {
|
||||
this.partyStudyType = "";
|
||||
}
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.pageSize = 10;
|
||||
this.getList();
|
||||
},
|
||||
bindDateChange: function (e) {
|
||||
this.day = e.target.value;
|
||||
this.createDate = e.target.value;
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.pageSize = 10;
|
||||
this.getList();
|
||||
},
|
||||
getDate(type) {
|
||||
const date = new Date();
|
||||
let year = date.getFullYear();
|
||||
let month = date.getMonth() + 1;
|
||||
let day = date.getDate();
|
||||
|
||||
if (type === "start") {
|
||||
year = year - 60;
|
||||
} else if (type === "end") {
|
||||
year = year + 2;
|
||||
}
|
||||
month = month > 9 ? month : "0" + month;
|
||||
day = day > 9 ? day : "0" + day;
|
||||
|
||||
return `${year}-${month}-08 00:00:00 `;
|
||||
},
|
||||
changeSearchBox() {
|
||||
this.isShow = false;
|
||||
},
|
||||
onBlur(e) {
|
||||
this.searchValue = e.target.value;
|
||||
if (this.searchValue) {
|
||||
this.inputValue = this.searchValue;
|
||||
} else {
|
||||
this.inputValue = "请输入学习标题";
|
||||
}
|
||||
},
|
||||
search() {
|
||||
this.isShow = true;
|
||||
this.pageNum = 1;
|
||||
this.pageSize = 10;
|
||||
this.pages = 2;
|
||||
this.getList();
|
||||
},
|
||||
clearInput() {
|
||||
this.searchValue = "";
|
||||
this.inputValue = "请输入学习标题";
|
||||
},
|
||||
getList() {
|
||||
if (this.pageNum > this.pages) return;
|
||||
|
||||
this.$http.post(`/app/apppartystudy/listWechat`, {
|
||||
title: this.searchValue,
|
||||
type: this.partyStudyType,
|
||||
searchMonth: this.createDate,
|
||||
current: this.pageNum,
|
||||
size: this.pageSize,
|
||||
}).then((res) => {
|
||||
if (res.code == 0) {
|
||||
const meetList = this.pageNum > 1 ? [...this.meetList, ...res.data.records] : res.data.records;
|
||||
this.pages = Math.ceil(res.data.total / 10);
|
||||
this.meetList = meetList;
|
||||
}
|
||||
});
|
||||
},
|
||||
toDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: "./partyStudyDetail?id=" + id,
|
||||
});
|
||||
},
|
||||
},
|
||||
onReachBottom() {
|
||||
this.pageNum = this.pageNum + 1;
|
||||
this.getList();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
.search-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #e60012;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.search-input {
|
||||
line-height: 64px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #ce0010;
|
||||
border-radius: 32px;
|
||||
color: #f0cbcd;
|
||||
font-size: 26px;
|
||||
|
||||
image {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
margin: 8px 8px 8px 24px;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
}
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
span-overflow: ellipsis;
|
||||
width: 600px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.slect {
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
|
||||
.type-select {
|
||||
width: 50%;
|
||||
border-right: 1px solid #f7f7f7;
|
||||
margin: 30px 0;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
|
||||
.uni-input {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.type-select:nth-child(2) {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.search-input {
|
||||
.input-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #fff;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.sousuo {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 60px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
}
|
||||
|
||||
.input {
|
||||
background-color: #f3f3f3;
|
||||
width: 598px;
|
||||
height: 64px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
margin-left: 8px;
|
||||
border-radius: 32px;
|
||||
padding-left: 70px;
|
||||
padding-right: 60px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.clear {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 130px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.search-word {
|
||||
font-size: 28px;
|
||||
color: #135ab8;
|
||||
line-height: 60px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.session-list {
|
||||
padding-top: 224px;
|
||||
|
||||
.session-item {
|
||||
width: 686px;
|
||||
margin: 0 auto 32px auto;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
.item-top {
|
||||
padding: 32px 32px 0 32px;
|
||||
}
|
||||
|
||||
.item-title {
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
line-height: 44px;
|
||||
word-break: break-all;
|
||||
width: 600px;
|
||||
}
|
||||
|
||||
.item-info {
|
||||
line-height: 42px;
|
||||
font-size: 28px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.info-label {
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.item-bottom {
|
||||
border-top: 2px solid #eee;
|
||||
text-align: right;
|
||||
padding-right: 64px;
|
||||
box-sizing: border-box;
|
||||
line-height: 96px;
|
||||
|
||||
.item-btn {
|
||||
display: inline-block;
|
||||
width: 152px;
|
||||
height: 52px;
|
||||
line-height: 52px;
|
||||
border-radius: 28px;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
margin-left: 32px;
|
||||
border: 2px solid #e1e1e1;
|
||||
}
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #343d65;
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.item-status {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: -30px;
|
||||
width: 140px;
|
||||
text-align: center;
|
||||
line-height: 44px;
|
||||
font-size: 24px;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.item-status1 {
|
||||
color: #5a98f2;
|
||||
background-color: #f1f6ff;
|
||||
}
|
||||
|
||||
.item-status0 {
|
||||
color: #ff9b2b;
|
||||
background-color: #fff3e8;
|
||||
}
|
||||
|
||||
.color-1365DD {
|
||||
color: #1365dd;
|
||||
}
|
||||
|
||||
.color-FF4466 {
|
||||
color: #ff4466;
|
||||
}
|
||||
|
||||
.color-333333 {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.color-606060 {
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
.border-1365DD {
|
||||
border-color: #1365dd !important;
|
||||
color: #1365dd !important;
|
||||
}
|
||||
|
||||
.border-E1E1E1 {
|
||||
border-color: #e1e1e1 !important;
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
.border-E1E1E1 {
|
||||
border-color: #e1e1e1 !important;
|
||||
}
|
||||
|
||||
.mar-b12 {
|
||||
margin-bottom: 26px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-affairs {
|
||||
width: 100%;
|
||||
height: calc(100% - 210px);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,220 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<header></header>
|
||||
<div class="form">
|
||||
<div class="main">
|
||||
<div class="textarea">
|
||||
<div class="color-333 fs32">
|
||||
<span class="color-red">*</span>学习心得
|
||||
</div>
|
||||
<textarea
|
||||
type="textarea"
|
||||
placeholder="请输入学习心得(200字以内)"
|
||||
v-model="content"
|
||||
adjust-position="false"
|
||||
maxlength="200"
|
||||
class="fs32"
|
||||
></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="tips-span">说明 : 提交学习心得,意味着完成本次内容的学习。</p>
|
||||
<div class="report" @click="changeStatus()">提交</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "fillLog",
|
||||
data() {
|
||||
return {
|
||||
id: "",
|
||||
content: "",
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.id = options.id;
|
||||
this.getDetailInfo();
|
||||
},
|
||||
methods: {
|
||||
getDetailInfo() {
|
||||
this.$http
|
||||
.post(`/app/apppartystudylog/queryStudyLog?id=${this.id}`, null, {})
|
||||
.then((res) => {
|
||||
if (res.data) {
|
||||
if (res.data.content != null) {
|
||||
this.content = res.data.content;
|
||||
} else {
|
||||
this.content = "";
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
changeStatus() {
|
||||
if (!this.content) {
|
||||
this.$toast("请输入学习心得");
|
||||
return;
|
||||
}
|
||||
let params = {
|
||||
studyId: this.id,
|
||||
content: this.content,
|
||||
};
|
||||
this.$http
|
||||
.post(`/app/apppartystudylog/addStudyLog`, params)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$toast("学习心得提交完成");
|
||||
setTimeout(function () {
|
||||
uni.navigateBack({
|
||||
delta: 2,
|
||||
});
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
.tips-span {
|
||||
width: 626px;
|
||||
font-size: 28px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
line-height: 40px;
|
||||
margin-top: 20px;
|
||||
padding-left: 32px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
height: 688px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
header {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #e60012;
|
||||
}
|
||||
|
||||
.form {
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
margin-top: -100px;
|
||||
|
||||
.main {
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 16px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.basic-item {
|
||||
font-size: 32px;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
padding: 32px 32px 32px 12px;
|
||||
box-sizing: border-box;
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
||||
input {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wid-110 {
|
||||
width: 214px;
|
||||
}
|
||||
|
||||
.skill-span {
|
||||
max-width: 432px;
|
||||
text-align: right;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
span-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.picker {
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
color: #999999;
|
||||
font-size: 32px;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.picker > .AiArea {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.wei-span {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.msg-value {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.msg-btn {
|
||||
width: 160px;
|
||||
text-align: right;
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 28px;
|
||||
background-color: #fff;
|
||||
line-height: 48px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button::after {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.button-hover {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
button[disabled] {
|
||||
background-color: #fff !important;
|
||||
font-size: 28px;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.report {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
font-size: 32px;
|
||||
text-align: center;
|
||||
background: rgba(230, 0, 18, 1);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.fs32 {
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,350 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<div class="detail-content">
|
||||
<div class="detail-info">
|
||||
<div class="info-title">{{ data.title }}</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">学习类别:</span>
|
||||
<span class="info-value">{{ $dict.getLabel('partyStudyType', data.type) }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">发布人员:</span>
|
||||
<span class="info-value">{{ data.publishUserName }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">发布时间:</span>
|
||||
<span class="info-value">{{ data.publishTime }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">学习时间:</span>
|
||||
<span class="info-value">{{ data.studyBeginDate }}至{{ data.studyEndDate }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">学习状态:</span>
|
||||
<span class="info-value">{{ $dict.getLabel('partyStudyStatus', data.studyStatus) }}</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="data.studyStatus == 1">
|
||||
<span class="info-label">完成时间:</span>
|
||||
<span class="info-value">{{ data.finishDate || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="page-title">学习内容</div> -->
|
||||
<u-parse :html="data.content" class="content" v-if="data.content"></u-parse>
|
||||
<AiTransSpeech :src="data.speech"/>
|
||||
</div>
|
||||
<div class="btn-box" @click="toContent()">
|
||||
<span class="active">学习心得</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
id: '',
|
||||
data: {},
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.$dict.load('partyStudyStatus', 'partyStudyType')
|
||||
this.id = options.id
|
||||
this.getDetailInfo()
|
||||
},
|
||||
onShow() {
|
||||
this.getDetailInfo()
|
||||
},
|
||||
methods: {
|
||||
toContent() {
|
||||
uni.navigateTo({url: `./AppPartyStudy?id=${this.id}`})
|
||||
},
|
||||
getDetailInfo() {
|
||||
this.$http.post(`/app/apppartystudy/queryDetailByIdWeChat?id=${this.id}`, null, {}).then(res => {
|
||||
if (res.data) {
|
||||
if (res.data.files && res.data.files.length) {
|
||||
res.data.files.map(item => {
|
||||
var size = item.size / 1024;
|
||||
item.fileSize = size.toFixed(0);
|
||||
return item
|
||||
})
|
||||
}
|
||||
this.data = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
background-color: #fff;
|
||||
|
||||
.detail-content {
|
||||
padding-bottom: 140px;
|
||||
}
|
||||
.content{
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.detail-info {
|
||||
padding: 16px 32px 8px 32px;
|
||||
border-bottom: 2px solid #D8DDE6;
|
||||
background-color: #E60012;
|
||||
padding-bottom: 80px;
|
||||
position: relative;
|
||||
|
||||
.info-title {
|
||||
line-height: 64px;
|
||||
font-size: 40px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #fff;
|
||||
word-break: break-all;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.item-info {
|
||||
line-height: 48px;
|
||||
font-size: 30px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.info-label {
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
display: inline-block;
|
||||
width: 510px;
|
||||
word-break: break-all;
|
||||
color: #FFE8E8;
|
||||
}
|
||||
|
||||
.item-status0 {
|
||||
color: #FF9B2B;
|
||||
}
|
||||
|
||||
.item-status1 {
|
||||
color: #2EA222;
|
||||
}
|
||||
|
||||
.item-status2 {
|
||||
color: #343D65;
|
||||
}
|
||||
|
||||
.item-status3 {
|
||||
color: #5A98F2;
|
||||
}
|
||||
|
||||
.item-status4 {
|
||||
color: #f46;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.retract-btn {
|
||||
line-height: 80px;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 690px;
|
||||
|
||||
.down-icon {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
margin-left: 4px;
|
||||
vertical-align: middle;
|
||||
transition: all .3s ease-in-out;
|
||||
}
|
||||
|
||||
.icon-active {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-title {
|
||||
line-height: 96px;
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
padding-left: 32px;
|
||||
background-color: #fff;
|
||||
|
||||
span {
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.info-content {
|
||||
padding: 16px 32px;
|
||||
background-color: #fff;
|
||||
line-height: 48px;
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.user-list {
|
||||
background-color: #fff;
|
||||
|
||||
.user-item {
|
||||
height: 112px;
|
||||
padding-top: 16px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.user-bg {
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background-color: #4E8EEE;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
line-height: 80px;
|
||||
margin: 0 16px 0 32px;
|
||||
font-size: 28px;
|
||||
border-radius: 50%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: inline-block;
|
||||
width: 622px;
|
||||
height: 96px;
|
||||
border-bottom: 2px solid #D8DDE6;
|
||||
box-sizing: border-box;
|
||||
|
||||
.user-name {
|
||||
line-height: 44px;
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.user-unit {
|
||||
line-height: 34px;
|
||||
color: #999;
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.user-item:nth-last-of-type(1) {
|
||||
.user-info {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mar-b8 {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.color-1365DD {
|
||||
color: #1365DD;
|
||||
}
|
||||
|
||||
.color-999999 {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.pad-l7 {
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
.attachment {
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
background-color: #FFFFFF;
|
||||
margin-top: 16px;
|
||||
|
||||
.attachment-title {
|
||||
font-size: 32px;
|
||||
color: #333333;
|
||||
font-weight: 500;
|
||||
|
||||
image {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.attachment-item {
|
||||
border: 1px solid rgba(204, 204, 204, 1);
|
||||
padding: 16px;
|
||||
box-sizing: border-box;
|
||||
margin-top: 34px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
border-radius: 8px;
|
||||
|
||||
.file-name {
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
image {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.title {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
word-break: break-all;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.size {
|
||||
color: #999;
|
||||
font-size: 28px;
|
||||
display: flex;
|
||||
justify-content: cemter;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-box {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
bottom: 0;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
width: 100%;
|
||||
color: #333;
|
||||
background-color: #fff;
|
||||
font-size: 36px;
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.active {
|
||||
background-color: #E60012;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.partyStudyContent {
|
||||
width: 100%;
|
||||
height: calc(100% - 184rpx);
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
color: #666;
|
||||
font-size: 32px;
|
||||
background-color: #fff;
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
@@ -1,553 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<div v-if="isShow" style="height:100%;">
|
||||
<div class="fixed-top" style="width:100%;">
|
||||
<!-- 头部搜索样式 -->
|
||||
<div class="search-box">
|
||||
<div class="search-input flex-row" @click="changeSearchBox">
|
||||
<image src="https://cdn.cunwuyun.cn/img/search-red.svg"></image>
|
||||
<span>{{ inputValue }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 选择时间和类型 -->
|
||||
<div class='slect flex-row'>
|
||||
<!-- 类型选择 -->
|
||||
<div class="uni-list type-slect">
|
||||
<div class="uni-list-cell">
|
||||
<div class="uni-list-cell-db">
|
||||
<picker @change="bindPickerChange" :range="array" range-key="dictName">
|
||||
<div class="uni-input">{{ meetTypespan }}</div>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
|
||||
</picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 时间选择 -->
|
||||
<div class="uni-list type-slect">
|
||||
<div class="uni-list-cell">
|
||||
<div class="uni-list-cell-db">
|
||||
<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindDateChange"
|
||||
fields='month'>
|
||||
<div class="uni-input">{{ day }}</div>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
|
||||
</picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="session-list">
|
||||
<div class="session-item" v-for="(item, index) in meetList" :key="index">
|
||||
<div class="item-top" @click="toSessionDetail(item.meetingId, item.status)">
|
||||
<div class="item-title mar-b12">{{ item.meetingAgenda }}</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">会议状态:</span>
|
||||
<span :class="'item-status'+item.postStatus" class="info-value">
|
||||
{{ $dict.getLabel('postStatus', item.postStatus) }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">开始时间:</span>
|
||||
<span class="info-value">{{ item.startTime || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">会议地点:</span>
|
||||
<span class="info-value">{{ item.meetingAddress || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">主持人员:</span>
|
||||
<span class="info-value">{{ item.hostName || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info mar-b12">
|
||||
<span class="info-label">会议类型:</span>
|
||||
<span class="info-value">{{ item.meetingClassification || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-bottom">
|
||||
<span class="item-btn border-E1E1E1" v-if="item.status == 3">已请假</span>
|
||||
<span class="item-btn border-1365DD" v-if="item.status == 0" @click="signMeeting(item.meetingId)">签到</span>
|
||||
<span class="item-btn border-E1E1E1" v-if="item.status == 1">已签到</span>
|
||||
<span class="item-btn border-E1E1E1" v-if="item.status == 4">不签到</span>
|
||||
</div>
|
||||
<div class="item-status" :class="'item-status'+item.postStatus">
|
||||
{{ $dict.getLabel('postStatus', item.postStatus) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-if="meetList.length == 0"/>
|
||||
</div>
|
||||
<div v-if="!isShow" class="search-input">
|
||||
<div class="input-box flex-row">
|
||||
<input class="input" placeholder="请输入会议标题" focus="false" v-model="searchValue" @blur="onBlur"/>
|
||||
<image class="sousuo" src="https://cdn.cunwuyun.cn/img/search-active.svg"></image>
|
||||
<image v-if="searchValue" @tap="clearInput" class="clear"
|
||||
src="https://cdn.cunwuyun.cn/img/empty-Input.svg"></image>
|
||||
<div class="search-word" @click="search">搜索</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: "AppThreeSessions",
|
||||
appName: "三会一课",
|
||||
data() {
|
||||
const currentDate = this.getDate({
|
||||
format: true
|
||||
})
|
||||
return {
|
||||
inputValue: "请输入会议标题",
|
||||
isShow: true,
|
||||
array: [],
|
||||
meetType: "",
|
||||
meetTypespan: "会议类型",
|
||||
index: 0,
|
||||
date: currentDate,
|
||||
day: "会议时间",
|
||||
createDate: "",//创建时间
|
||||
meetList: [],
|
||||
searchValue: "",//搜索框输入值
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pages: 2,
|
||||
userId: '',
|
||||
partyId: '',
|
||||
meetTypeIndex: '',
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
startDate() {
|
||||
return this.getDate('start');
|
||||
},
|
||||
endDate() {
|
||||
return this.getDate('end');
|
||||
},
|
||||
...mapState(['user']),
|
||||
},
|
||||
onLoad() {
|
||||
this.partyId = this.user.id
|
||||
this.$dict.load('postStatus', 'meetingClassification')
|
||||
this.array = this.$dict.getDict('meetingClassification')
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
signMeeting(id) {
|
||||
this.$http.post(`/app/appthreemeetinguser/signByMeetingIdAndUserIdForWX?meetingId=${id}&userId=${this.user.id}`, null, {}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$toast('签到成功')
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.getList()
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err,
|
||||
duration: 2000
|
||||
});
|
||||
})
|
||||
},
|
||||
btnClick(span) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: span,
|
||||
duration: 2000
|
||||
});
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.array.map((item, index) => {
|
||||
if (e.detail.value == item.dictValue) {
|
||||
this.meetTypespan = this.array[index].dictName
|
||||
}
|
||||
})
|
||||
this.meetTypeIndex = e.detail.value
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.pageSize = 10;
|
||||
this.getList()
|
||||
},
|
||||
bindDateChange: function (e) {
|
||||
this.day = e.target.value;
|
||||
this.createDate = e.target.value + '-' + "01"
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.pageSize = 10;
|
||||
this.getList()
|
||||
},
|
||||
getDate(type) {
|
||||
const date = new Date();
|
||||
let year = date.getFullYear();
|
||||
let month = date.getMonth() + 1;
|
||||
let day = date.getDate();
|
||||
|
||||
if (type === 'start') {
|
||||
year = year - 60;
|
||||
} else if (type === 'end') {
|
||||
year = year + 2;
|
||||
}
|
||||
month = month > 9 ? month : '0' + month;
|
||||
day = day > 9 ? day : '0' + day;
|
||||
|
||||
return `${year}-${month}-08 00:00:00 `;
|
||||
},
|
||||
changeSearchBox() {
|
||||
this.isShow = false;
|
||||
},
|
||||
onBlur(e) {
|
||||
this.searchValue = e.target.value;
|
||||
if (this.searchValue) {
|
||||
this.inputValue = this.searchValue;
|
||||
} else {
|
||||
this.inputValue = "请输入会议标题";
|
||||
}
|
||||
},
|
||||
search() {
|
||||
this.isShow = true;
|
||||
this.pageNum = 1;
|
||||
this.pageSize = 10;
|
||||
this.pages = 2;
|
||||
this.getList()
|
||||
},
|
||||
clearInput() {
|
||||
this.searchValue = ''
|
||||
this.inputValue = "请输入会议标题";
|
||||
},
|
||||
getList() {
|
||||
if (this.pageNum > this.pages) return
|
||||
// var searchYMD = ''
|
||||
// if(this.createDate) {
|
||||
// searchYMD = this.createDate + '-01'
|
||||
// }
|
||||
this.$http.post(`/app/appthreemeetinguser/listForWX?meetingUserId=${this.user.id}&meetingAgenda=${this.searchValue}&meetingClassification=${this.meetTypeIndex}&searchYMD=${this.createDate}¤t=${this.pageNum}&size=${this.pageSize}`
|
||||
).then(res => {
|
||||
if (res.code == 0) {
|
||||
const meetList = this.pageNum > 1 ? [...this.meetList, ...res.data.records] : res.data.records
|
||||
meetList.map(item => {
|
||||
if (item.meetingClassification.length == 1) {
|
||||
item.meetingClassification = this.$dict.getLabel('meetingClassification', item.meetingClassification)
|
||||
} else {
|
||||
var typeList = item.meetingClassification.split(',')
|
||||
typeList.map((items, index) => {
|
||||
if (index == 0) {
|
||||
item.meetingClassification = this.$dict.getLabel('meetingClassification', items)
|
||||
} else {
|
||||
item.meetingClassification = item.meetingClassification + ',' + this.$dict.getLabel('meetingClassification', items)
|
||||
}
|
||||
return item.meetingClassification
|
||||
})
|
||||
return item.meetingClassification
|
||||
}
|
||||
return item
|
||||
})
|
||||
this.pages = Math.ceil(res.data.total / 10)
|
||||
this.meetList = meetList
|
||||
}
|
||||
})
|
||||
},
|
||||
toSessionDetail(id, signStatus) {
|
||||
uni.navigateTo({
|
||||
url: `../threeSessions/threeSessionsDetail?id=${id}&signStatus=${signStatus}&token=${this.user.token}`
|
||||
})
|
||||
},
|
||||
leave() {
|
||||
uni.showModal({
|
||||
title: '如需请假,请联系签到负责人',
|
||||
confirmspan: "确认",
|
||||
confirmColor: "#135AB8",
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
} else if (res.cancel) {
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
changeStatus(id, signStatus, joinStatus, signMethod, absence, meetingUserId, meetingId, successspan) {
|
||||
let signTime = new Date().getFullYear() + '-' + this.isDate(new Date().getMonth() + 1) + '-' + this.isDate(new Date().getDate()) + ' ' + this.isDate(new Date().getHours()) + ':' + this.isDate(new Date().getMinutes()) + ':' + this.isDate(new Date().getSeconds())
|
||||
var params = {
|
||||
id,
|
||||
signStatus,
|
||||
joinStatus,
|
||||
signMethod,
|
||||
absence,
|
||||
signUserId: this.user.id,
|
||||
signUserName: this.user.realName,
|
||||
signTime,
|
||||
meetingUserId,
|
||||
meetingId
|
||||
}
|
||||
this.$http.post(`/app/appthreemeetinguser/addOrUpdate`, null, {
|
||||
data: params
|
||||
}).then(res => {
|
||||
if (res?.code == 0) {
|
||||
uni.showToast({
|
||||
title: successspan + '成功!',
|
||||
duration: 2000
|
||||
});
|
||||
this.pageNum = 1;
|
||||
this.pages = 2;
|
||||
this.getList()
|
||||
}
|
||||
})
|
||||
},
|
||||
isDate(num) {
|
||||
if (num < 10) {
|
||||
num = '0' + num
|
||||
}
|
||||
return num
|
||||
},
|
||||
},
|
||||
onReachBottom() {
|
||||
this.pageNum = this.pageNum + 1
|
||||
this.getList()
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
.search-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #e60012;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.search-input {
|
||||
line-height: 64px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #CE0010;
|
||||
border-radius: 32px;
|
||||
color: #F0CBCD;
|
||||
font-size: 26px;
|
||||
|
||||
image {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
margin: 8px 8px 8px 24px;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.slect {
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
|
||||
.type-slect {
|
||||
width: 50%;
|
||||
border-right: 1px solid #F7F7F7;
|
||||
margin: 30px 0;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
|
||||
.uni-input {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
margin-left: 8 srpx;
|
||||
}
|
||||
}
|
||||
|
||||
.type-slect:nth-child(2) {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.search-input {
|
||||
.input-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #fff;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.sousuo {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 60px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
}
|
||||
|
||||
.input {
|
||||
background-color: #F3F3F3;
|
||||
width: 598px;
|
||||
height: 64px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
margin-left: 8px;
|
||||
border-radius: 32px;
|
||||
padding-left: 70px;
|
||||
padding-right: 60px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.clear {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 130px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.search-word {
|
||||
font-size: 28px;
|
||||
color: #135AB8;
|
||||
line-height: 60px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.session-list {
|
||||
padding-top: 224px;
|
||||
|
||||
.session-item {
|
||||
width: 686px;
|
||||
margin: 0 auto 32px auto;
|
||||
background-color: #fff;
|
||||
// height: 462rpx;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
.item-top {
|
||||
padding: 32px 32px 0 32px;
|
||||
}
|
||||
|
||||
.item-title {
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
line-height: 44px;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.item-info {
|
||||
line-height: 42px;
|
||||
font-size: 28px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.info-label {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.item-bottom {
|
||||
border-top: 2px solid #EEE;
|
||||
text-align: right;
|
||||
padding-right: 64px;
|
||||
box-sizing: border-box;
|
||||
line-height: 96px;
|
||||
|
||||
.item-btn {
|
||||
display: inline-block;
|
||||
width: 152px;
|
||||
height: 52px;
|
||||
line-height: 52px;
|
||||
border-radius: 28px;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
margin-left: 32px;
|
||||
border: 2px solid #E1E1E1;
|
||||
}
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #343D65;
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.item-status {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: -36rpx;
|
||||
width: 140px;
|
||||
text-align: center;
|
||||
line-height: 44px;
|
||||
font-size: 24px;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.item-status1 {
|
||||
color: #FF9B2B;
|
||||
background-color: #FFF3E8;
|
||||
}
|
||||
|
||||
.item-status0 {
|
||||
color: #2EA222;
|
||||
background-color: #EAF5E8;
|
||||
}
|
||||
|
||||
.item-status3 {
|
||||
color: #999;
|
||||
background-color: #F2F2F2;
|
||||
}
|
||||
|
||||
.item-status2 {
|
||||
color: #5A98F2;
|
||||
background-color: #F1F6FF;
|
||||
}
|
||||
|
||||
.color-1365DD {
|
||||
color: #1365DD;
|
||||
}
|
||||
|
||||
.color-FF4466 {
|
||||
color: #FF4466;
|
||||
}
|
||||
|
||||
.color-333333 {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.color-606060 {
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
.border-1365DD {
|
||||
border-color: #1365DD !important;
|
||||
color: #1365DD !important;
|
||||
}
|
||||
|
||||
.border-E1E1E1 {
|
||||
border-color: #E1E1E1 !important;
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
.border-E1E1E1 {
|
||||
border-color: #E1E1E1 !important;
|
||||
}
|
||||
|
||||
.mar-b12 {
|
||||
margin-bottom: 26px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-affairs {
|
||||
width: 100%;
|
||||
height: calc(100% - 210rpx);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,213 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<!-- <span class="close-img" @click="closePage()">×</span> -->
|
||||
<image src="https://cdn.cunwuyun.cn/img/qrcode-sign-img.png" class="banner-img"></image>
|
||||
<div class="btn" @click="btnClick()">{{ btnspan }}</div>
|
||||
<div class="mask" v-if="showFail">
|
||||
<div class="mask-content">
|
||||
<image src="https://cdn.cunwuyun.cn/img/qrcode-sign-fail.png" class="fail-img"></image>
|
||||
<div class="mask-span">签到失败!请重新签到</div>
|
||||
<div class="mask-btn" @click="btnClick()">确认签到</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from "vuex"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
showFail: false,
|
||||
meetingId: '',
|
||||
btnspan: '',
|
||||
scene: '',
|
||||
userId: '',
|
||||
isSign: true
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(['user'])
|
||||
},
|
||||
onShow() {
|
||||
if (this.user.token) {
|
||||
this.meetingId = this.$mp.query.scene
|
||||
this.getUserInfo()
|
||||
} else {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '您还未登录,请先登录!',
|
||||
confirmspan: "去登录",
|
||||
showCancel: false,
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
wx.switchTab({
|
||||
url: '../mine/mine',
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getUserInfo() {
|
||||
this.$store.commit("getUserInfo", v => {
|
||||
if (v) {
|
||||
this.userId = res.data.id
|
||||
this.getDetailInfo()
|
||||
}
|
||||
})
|
||||
},
|
||||
getDetailInfo() {
|
||||
this.$http.post(`/app/appthreemeetinguser/queryWeathersignByMeetingIdAndUserIdForWX?meetingId=${this.meetingId}&userId=${this.userId}`, null, {}).then(res => {
|
||||
if (res.data) {
|
||||
this.isSign = true
|
||||
// if(res.data.status == 1) { //已签到
|
||||
// this.btnspan = '已签到'
|
||||
// }
|
||||
if (res.data.status == 0) { //未签
|
||||
this.btnspan = '确认签到'
|
||||
} else {
|
||||
this.btnspan = '已签到'
|
||||
}
|
||||
} else {
|
||||
this.btnspan = '确认签到'
|
||||
this.isSign = false //不是参会人员
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err,
|
||||
duration: 2000
|
||||
});
|
||||
return
|
||||
})
|
||||
},
|
||||
btnClick() {
|
||||
// if(!this.isSign) {
|
||||
// uni.showToast({
|
||||
// icon: 'none',
|
||||
// title: '您不是参会人员',
|
||||
// duration: 2000
|
||||
// });
|
||||
// return
|
||||
// }
|
||||
if (this.btnspan == '已签到') {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '已签到',
|
||||
duration: 2000
|
||||
});
|
||||
return
|
||||
}
|
||||
this.$http.post(`/app/appthreemeetinguser/signByMeetingIdAndUserIdForWX?meetingId=${this.meetingId}&userId=${this.userId}`, null, {}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.btnspan = '已签到'
|
||||
uni.showToast({
|
||||
title: '签到成功',
|
||||
duration: 2000
|
||||
});
|
||||
} else {
|
||||
this.showFail = true
|
||||
}
|
||||
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err,
|
||||
duration: 2000
|
||||
});
|
||||
return
|
||||
})
|
||||
},
|
||||
closePage() {
|
||||
uni.reLaunch({
|
||||
url: "../home/portal"
|
||||
})
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
background-color: #FFFFFF;
|
||||
position: relative;
|
||||
|
||||
.close-img {
|
||||
position: absolute;
|
||||
font-size: 50px;
|
||||
left: 32px;
|
||||
}
|
||||
|
||||
.banner-img {
|
||||
width: 514px;
|
||||
height: 340px;
|
||||
margin: 48px 0 118px 96px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 622px;
|
||||
line-height: 96px;
|
||||
text-align: center;
|
||||
background: rgba(19, 90, 184, 1);
|
||||
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
|
||||
border-radius: 8px;
|
||||
margin: 0 auto;
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.mask {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, .3);
|
||||
|
||||
.mask-content {
|
||||
width: 686px;
|
||||
height: 640px;
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
border: 2px solid rgba(151, 151, 151, 1);
|
||||
margin: 260px auto 0;
|
||||
|
||||
.fail-img {
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
margin: 112px 0 32px 264px;
|
||||
}
|
||||
|
||||
.mask-span {
|
||||
width: 100%;
|
||||
line-height: 50px;
|
||||
font-size: 36px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 700;
|
||||
color: rgba(51, 51, 51, 1);
|
||||
text-align: center;
|
||||
margin-bottom: 134px;
|
||||
}
|
||||
|
||||
.mask-btn {
|
||||
width: 560px;
|
||||
line-height: 96px;
|
||||
text-align: center;
|
||||
background: rgba(19, 90, 184, 1);
|
||||
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.02);
|
||||
border-radius: 8px;
|
||||
margin: 0 auto;
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,458 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<header></header>
|
||||
<div class="form">
|
||||
<div class="main">
|
||||
<div class="textarea">
|
||||
<div class="color-666"><span class="color-red">*</span>会议内容</div>
|
||||
<textarea
|
||||
type="textarea"
|
||||
placeholder="请输入会议内容(3000字以内)"
|
||||
v-model="baseInfo.content"
|
||||
adjust-position="false"
|
||||
maxlength="3000"
|
||||
></textarea>
|
||||
</div>
|
||||
<div class="uni-uploader">
|
||||
<div class="title-box title-box-margin">
|
||||
<span class="title color-666">图片资料(最多9张)</span>
|
||||
</div>
|
||||
<div class="uni-uploader-body">
|
||||
<div class="uni-uploader__files">
|
||||
<block v-for="(image, index) in imageList" :key="index">
|
||||
<div class="uni-uploader__file">
|
||||
<image
|
||||
class="uni-uploader__img"
|
||||
:src="image.accessUrl"
|
||||
:data-index="index"
|
||||
@tap="previewImage"
|
||||
></image>
|
||||
<AiUniIcon
|
||||
type="clear"
|
||||
class="icon"
|
||||
color="#8f8f94"
|
||||
size="26"
|
||||
@click="deleteImage(index)"
|
||||
></AiUniIcon>
|
||||
</div>
|
||||
</block>
|
||||
<div
|
||||
class="pre-div"
|
||||
@tap="chooseImageType"
|
||||
v-if="imageList.length < 9"
|
||||
>
|
||||
<span class="pre-label">+</span>
|
||||
<span class="add-image">添加照片</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="report" @click="report()">提交</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from "vuex"
|
||||
export default {
|
||||
name: "fillLog",
|
||||
data() {
|
||||
return {
|
||||
reportId: "",
|
||||
baseInfo: {
|
||||
content: "",
|
||||
fileIds: [],
|
||||
reportId: "",
|
||||
id: "",
|
||||
images: [],
|
||||
meetingId: "",
|
||||
createUserName: "",
|
||||
},
|
||||
imageList: [],
|
||||
sourceTypeIndex: 2,
|
||||
sourceType: [
|
||||
// 图片来源类型
|
||||
["camera"],
|
||||
["album"],
|
||||
],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(['user']),
|
||||
user() {
|
||||
return uni.getStorageSync("userInfo");
|
||||
},
|
||||
},
|
||||
onLoad(options) {
|
||||
this.baseInfo.meetingId = options.id;
|
||||
this.getDetailInfo();
|
||||
},
|
||||
methods: {
|
||||
getDetailInfo() {
|
||||
this.$http.post(`/app/appthreemeetinginfoexpand/queryDetailById?id=${this.baseInfo.meetingId}`).then((res) => {
|
||||
if (res.data) {
|
||||
if (res.data.images != null) {
|
||||
this.imageList = JSON.parse(res.data.images);
|
||||
}
|
||||
this.baseInfo = {...res.data};
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
});
|
||||
},
|
||||
// 选择照片类型
|
||||
chooseImageType() {
|
||||
let that = this;
|
||||
uni.showActionSheet({
|
||||
itemList: ["拍照", "从相册选择"],
|
||||
success: function (res) {
|
||||
// console.log(res.tapIndex)
|
||||
that.sourceTypeIndex = res.tapIndex;
|
||||
// console.log(that.sourceTypeIndex)
|
||||
that.chooseImage();
|
||||
},
|
||||
});
|
||||
},
|
||||
showModel(title) {
|
||||
uni.showModal({
|
||||
title: "温馨提示",
|
||||
content: title,
|
||||
showCancel: false,
|
||||
confirmColor: "#135AB8",
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
chooseImage: async function () {
|
||||
let that = this;
|
||||
if (that.imageList.length === 9) {
|
||||
let isContinue = await that.isFullImg();
|
||||
// console.log("是否继续?", isContinue);
|
||||
if (!isContinue) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
const {token} = this.user
|
||||
uni.chooseImage({
|
||||
// 从相册选择或相机拍摄
|
||||
sourceType: that.sourceType[that.sourceTypeIndex],
|
||||
// 最多可以选择的图片数量
|
||||
count: 9,
|
||||
success: (res) => {
|
||||
// 图片的本地文件路径列表
|
||||
that.tempFilePaths = res.tempFilePaths;
|
||||
// console.log(res.tempFilePaths)
|
||||
for (let i = 0; i < that.tempFilePaths.length; i++) {
|
||||
let str = "";
|
||||
// url String 是 开发者服务器 url
|
||||
// files Aarry 否 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。 5+App
|
||||
// filePath String 是 要上传文件资源的路径。
|
||||
// name String 是 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
|
||||
// header Object 否 HTTP 请求 Header, header 中不能设置 Referer
|
||||
// formData Object 否 HTTP 请求中其他额外的 form data
|
||||
// success Function 否 接口调用成功的回调函数
|
||||
// fail Function 否 接口调用失败的回调函数
|
||||
// complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
|
||||
uni.uploadFile({
|
||||
url: this.$http.baseURL + "/admin/file/add",
|
||||
filePath: that.tempFilePaths[i],
|
||||
name: "file",
|
||||
// formData:params,
|
||||
header: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
access_token: token,
|
||||
Authorization: token,
|
||||
},
|
||||
success(res) {
|
||||
// console.log('uploader',res)
|
||||
str = JSON.stringify(JSON.parse(res.data).data[0]).replace(
|
||||
/\"/g,
|
||||
""
|
||||
);
|
||||
var temp = {
|
||||
fileId: str.split(";")[1],
|
||||
accessUrl: str.split(";")[0],
|
||||
};
|
||||
that.imageList = that.imageList.concat(temp);
|
||||
if (that.imageList.length > 9) {
|
||||
that.imageList = that.imageList.slice(0, 9);
|
||||
uni.showToast({
|
||||
title: "图片最多只能上传9张",
|
||||
icon: "none",
|
||||
});
|
||||
}
|
||||
that.imgUrl = JSON.stringify(that.imageList);
|
||||
|
||||
// console.log('imageList-upload',that.imageList)
|
||||
},
|
||||
fail(res) {
|
||||
console.log("error", res);
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
// 预览图片(大图预览)
|
||||
previewImage: function (e) {
|
||||
let that = this;
|
||||
// console.log('预览',e)
|
||||
var current = e.target.dataset.index;
|
||||
// console.log(current)
|
||||
|
||||
var tempList = [];
|
||||
for (var i in that.imageList) {
|
||||
tempList.push(that.imageList[i].accessUrl);
|
||||
}
|
||||
|
||||
uni.previewImage({
|
||||
// 当前图片的索引、链接
|
||||
current: tempList[current],
|
||||
urls: tempList,
|
||||
longPressActions: {
|
||||
itemList: ["发送给朋友", "保存图片", "收藏"],
|
||||
success: function (data) {
|
||||
// console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
|
||||
},
|
||||
fail: function (err) {
|
||||
// console.log(err.errMsg);
|
||||
},
|
||||
},
|
||||
});
|
||||
},
|
||||
// 删除照片
|
||||
deleteImage(index) {
|
||||
this.imageList.splice(index, 1);
|
||||
},
|
||||
report() {
|
||||
if (!this.baseInfo.content) {
|
||||
uni.showToast({title: "会议内容不能为空", icon: "none"});
|
||||
return false;
|
||||
}
|
||||
this.baseInfo.fileIds = [];
|
||||
this.imageList.forEach((e) => {
|
||||
this.baseInfo.fileIds.push(e.fileId);
|
||||
});
|
||||
this.baseInfo.images = JSON.stringify(this.imageList);
|
||||
this.baseInfo.createUserName = this.user.realName;
|
||||
this.$http
|
||||
.post(`/app/appthreemeetinginfoexpand/addOrUpdate`, this.baseInfo, null)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: "会议纪要提交成功",
|
||||
icon: "none",
|
||||
duration: 2000,
|
||||
});
|
||||
setTimeout(() => {
|
||||
uni.navigateBack({
|
||||
delta: 2,
|
||||
});
|
||||
}, 2000);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
uni.showToast({
|
||||
title: err,
|
||||
icon: "none",
|
||||
duration: 1000,
|
||||
});
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 32 rpx;
|
||||
|
||||
header {
|
||||
width: 100%;
|
||||
height: 112 rpx;
|
||||
background-color: #e60012;
|
||||
}
|
||||
|
||||
.form {
|
||||
width: 100%;
|
||||
padding: 32 rpx;
|
||||
box-sizing: border-box;
|
||||
margin-top: -100rpx;
|
||||
|
||||
.main {
|
||||
background-color: #fff;
|
||||
border-radius: 8 rpx;
|
||||
padding: 16 rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.basic-item {
|
||||
font-size: 32 rpx;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 112 rpx;
|
||||
padding: 32 rpx 32 rpx 32 rpx 12 rpx;
|
||||
box-sizing: border-box;
|
||||
background-color: #fff;
|
||||
border-bottom: 1 rpx solid #eee;
|
||||
|
||||
input {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wid-110 {
|
||||
width: 214 rpx;
|
||||
}
|
||||
|
||||
.skill-span {
|
||||
max-width: 432 rpx;
|
||||
text-align: right;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
span-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-size: 30 rpx;
|
||||
}
|
||||
|
||||
.picker {
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
color: #999999;
|
||||
font-size: 32 rpx;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.picker > .AiArea {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.image {
|
||||
width: 32 rpx;
|
||||
height: 32 rpx;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.wei-span {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.msg-value {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.msg-btn {
|
||||
width: 160px;
|
||||
text-align: right;
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 28 rpx;
|
||||
background-color: #fff;
|
||||
line-height: 48 rpx;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button::after {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.button-hover {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
button[disabled] {
|
||||
background-color: #fff !important;
|
||||
font-size: 28 rpx;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 上传照片 */
|
||||
.uni-uploader {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.uni-uploader-head {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.uni-uploader-info {
|
||||
color: #b2b2b2;
|
||||
}
|
||||
|
||||
.uni-uploader-body {
|
||||
margin-top: 16 rpx;
|
||||
}
|
||||
|
||||
.uni-uploader__files {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.uni-uploader__file {
|
||||
margin-right: 10 rpx;
|
||||
margin-bottom: 20 rpx;
|
||||
width: 160 rpx;
|
||||
height: 160 rpx;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.uni-uploader__img {
|
||||
display: block;
|
||||
width: 160 rpx;
|
||||
height: 160 rpx;
|
||||
}
|
||||
|
||||
.pre-label {
|
||||
font-size: 80 rpx;
|
||||
color: #dddddd;
|
||||
}
|
||||
|
||||
.add-image {
|
||||
color: #dddddd;
|
||||
font-size: 24 rpx;
|
||||
}
|
||||
|
||||
.pre-div {
|
||||
width: 160 rpx;
|
||||
height: 160 rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
border-radius: 8 rpx;
|
||||
border: 2 rpx solid #dddddd;
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
top: -15rpx;
|
||||
right: -10rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.report {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 112 rpx;
|
||||
line-height: 112 rpx;
|
||||
font-size: 32 rpx;
|
||||
text-align: center;
|
||||
background: rgba(230, 0, 18, 1);
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,525 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<div class="detail-info">
|
||||
<div class="info-title">{{ data.meetingAgenda }}</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">会议状态:</span>
|
||||
<span class="info-value">{{ $dict.getLabel('postStatus', data.postStatus) }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">举办方式:</span>
|
||||
<span class="info-value">{{ data.isOnline == 1 ? '线上会议' : '线下会议' }}</span>
|
||||
</div>
|
||||
<div class="item-info">
|
||||
<span class="info-label">会议分类:</span>
|
||||
<span class="info-value" v-if="data.meetingClassification && data.meetingClassification.length">
|
||||
<span v-for="(item, index) in data.meetingClassification" :key="index">
|
||||
{{ $dict.getLabel('meetingClassification', item) }}
|
||||
<span v-if="index < data.meetingClassification.length - 1">,</span>
|
||||
</span>
|
||||
</span>
|
||||
<span class="info-value" v-else>-</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">会议时间:</span>
|
||||
<span class="info-value">{{ data.startTime || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">签到时间:</span>
|
||||
<span class="info-value" v-if="data.signMethod == 1 && signStart">{{ signStart }}</span>
|
||||
<span class="info-value sign-end" v-if="data.signMethod == 1 && signEnd">至 {{ signEnd }}</span>
|
||||
<span class="info-value" v-if="data.signMethod != 1">-</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">会议地点:</span>
|
||||
<span class="info-value">{{ data.meetingAddress || '-' }}</span>
|
||||
</div>
|
||||
<!-- <div class="item-info" v-if="showAll">
|
||||
<span class="info-label">会议主题:</span>
|
||||
<span class="info-value" v-if="data.topicClassification && data.topicClassification.length">
|
||||
<span v-for="(item, index) in data.topicClassification" :key="index">
|
||||
{{ $dict.getLabel('topicClassification', item) }}
|
||||
<span v-if="index < data.topicClassification.length - 1">,</span>
|
||||
</span>
|
||||
</span>
|
||||
<span class="info-value" v-else>-</span>
|
||||
</div> -->
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">主持人员:</span>
|
||||
<span class="info-value">{{ data.hostName || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">发布人员:</span>
|
||||
<span class="info-value">{{ data.createUserName || '-' }}</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">签到人员:</span>
|
||||
<span class="info-value" v-if="data.chargeOfSignInList && data.chargeOfSignInList.length">
|
||||
<span v-for="(item, index) in data.chargeOfSignInList" :key="index">
|
||||
{{ item.userName }}
|
||||
<span v-if="index < data.chargeOfSignInList.length - 1">,</span>
|
||||
</span>
|
||||
</span>
|
||||
<span class="info-value" v-else>-</span>
|
||||
</div>
|
||||
<div class="item-info" v-if="showAll">
|
||||
<span class="info-label">记录人员:</span>
|
||||
<span class="info-value">{{ data.recorderName || '-' }}</span>
|
||||
</div>
|
||||
<div class="retract-btn" @click="divAll()">
|
||||
<span>{{ btnspan }}</span>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down-icon-fff.png"
|
||||
:class="btnspan == '收起' ? 'down-icon icon-active' : 'down-icon'"></image>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-title">会议内容</div>
|
||||
<div class="info-content mar-b8" v-html="data.meetingDescription"></div>
|
||||
<div class="page-title mar-b8" @click="toSessionUser">参会情况
|
||||
<span class="pad-l7" v-for="(item, index) in titleList" :key="index">
|
||||
<span class="color-999999">{{ item.label }}</span>
|
||||
<span class="color-1365DD">({{ item.value }})</span>
|
||||
</span>
|
||||
<img src="https://cdn.cunwuyun.cn/img/down.svg" class="right-icon">
|
||||
</div>
|
||||
<div class="user-list">
|
||||
<div class="user-item" v-for="(item, index) in data.appThreeMeetingUserList" :key="index"
|
||||
v-if="item.meetingUserRole == 0 || item.meetingUserRole == 3">
|
||||
<div class="user-bg">{{ formatName(item.meetingUserName) }}</div>
|
||||
<div class="user-info">
|
||||
<div class="user-name">{{ item.meetingUserName }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-bottom" v-if="signStatus < 1 || data.isOnline == 1">
|
||||
<div class="btn" @click="signMeeting()" v-if="data.isOnline != 1">签到</div>
|
||||
<div class="btn" @click="isWeiXin" v-if="data.isOnline == 1">进入直播间</div>
|
||||
</div>
|
||||
<div class="mask" v-if="showMask" @click="showMask=false">
|
||||
<img src="https://cdn.cunwuyun.cn/guangdong/h5/mask-text.png" alt="" class="text-img">
|
||||
</div>
|
||||
<img src="https://cdn.cunwuyun.cn/guangdong/h5/vote-img.png" alt="" class="vote-img" v-if="data.isVote == 1" @click="toVote">
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from "vuex"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
titleList: [
|
||||
{label: '参与', value: '0'},
|
||||
{label: '已到', value: '0'},
|
||||
{label: '未到', value: '0'},
|
||||
{label: '请假', value: '0'}
|
||||
],
|
||||
id: '',
|
||||
data: {},
|
||||
btnspan: '展开',
|
||||
showAll: false,
|
||||
partyId: '',
|
||||
signStart: '',
|
||||
signEnd: '',
|
||||
signStatus: '', //0表示显示签到
|
||||
showMask: false,
|
||||
user: {}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(['user'])
|
||||
},
|
||||
onLoad(options) {
|
||||
this.$dict.load('postStatus', 'meetingClassification', 'topicClassification').then(() => {
|
||||
this.id = options.id
|
||||
this.signStatus = options.signStatus
|
||||
this.getUserInfo()
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
getUserInfo() {
|
||||
this.$store.commit("getUserInfo")
|
||||
this.$http.post("/app/appparty/chanhudetail").then(res => {
|
||||
if (res?.data) {
|
||||
this.user = res.data
|
||||
this.partyId = this.user.id
|
||||
this.getDetailInfo()
|
||||
}
|
||||
})
|
||||
},
|
||||
isWeiXin() {
|
||||
uni.navigateTo({url: `./ylinkMeetingRoom?meetingNum=${this.data.onlineNum}&pwd=${this.data.onlinePwd}`})
|
||||
},
|
||||
copy() {
|
||||
uni.setClipboardData({data: `https://gdpartyh5.cunwuyun.cn/pages/party/threeSessions/threeSessionsDetail?id=${this.id}&signStatus=${this.signStatus}&token=${this.user.token}`});
|
||||
},
|
||||
signMeeting() {
|
||||
this.$http.post(`/app/appthreemeetinguser/signByMeetingIdAndUserIdForWX?meetingId=${this.data.id}&userId=${this.user.id}`, null, {}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$toast('签到成功')
|
||||
this.getDetailInfo()
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: err,
|
||||
duration: 2000
|
||||
});
|
||||
})
|
||||
},
|
||||
toContent() {
|
||||
uni.navigateTo({
|
||||
url: './threeSessionsContent?id=' + this.id
|
||||
})
|
||||
},
|
||||
toSessionUser() {
|
||||
uni.navigateTo({
|
||||
url: './threeSessionsUser?id=' + this.id
|
||||
})
|
||||
},
|
||||
getDetailInfo() {
|
||||
this.$loading()
|
||||
this.$http.post(`/app/appthreemeetinginfo/queryDetailById?id=${this.id}`, null, {}).then(res => {
|
||||
if (res.data) {
|
||||
var data = res.data
|
||||
if (data.startTime && data.meetingBefore) {
|
||||
var dStart = new Date(data.startTime);
|
||||
var timeStart = dStart.getTime();
|
||||
var minStart = (Number(data.meetingBefore)) * 60000
|
||||
var totalStart = timeStart - minStart;
|
||||
this.signStart = this.countTime(totalStart);
|
||||
}
|
||||
if (data.startTime && data.meetingAfter) {
|
||||
var dEnd = new Date(data.startTime);
|
||||
var timeEnd = dEnd.getTime();
|
||||
var minEnd = (Number(data.meetingAfter)) * 60000
|
||||
var totalEnd = timeEnd + minEnd;
|
||||
this.signEnd = this.countTime(totalEnd);
|
||||
}
|
||||
data.meetingClassification = data.meetingClassification.split(',')
|
||||
this.titleList[0].value = data.participantList.length + 1 || '0'
|
||||
if (data.isArriveLIst) {
|
||||
this.titleList[1].value = data.isArriveLIst.length
|
||||
}
|
||||
if (data.isArriveLIst) {
|
||||
this.titleList[2].value = data.notArriveLIst.length
|
||||
}
|
||||
if (data.isArriveLIst) {
|
||||
this.titleList[3].value = data.leaveLIst.length
|
||||
}
|
||||
this.data = data
|
||||
|
||||
// var methodsObj = data.reminderMethod
|
||||
// this.objInit(methodsObj, 'reminderMethod')
|
||||
|
||||
// var meetingClassificationObj = data.meetingClassification
|
||||
// this.objInit(meetingClassificationObj, 'meetingClassification')
|
||||
|
||||
// var topicClassificationObj = data.topicClassification
|
||||
// this.objInit(topicClassificationObj, 'topicClassification')
|
||||
|
||||
this.$hideLoading()
|
||||
}
|
||||
})
|
||||
},
|
||||
objInit(obj, name) {
|
||||
this.data[name] = []
|
||||
for (let i in obj) {
|
||||
if (obj[i] !== '') {
|
||||
this.data[name].push(obj[i])
|
||||
}
|
||||
}
|
||||
},
|
||||
//会议签到时间计算
|
||||
countTime(total) {
|
||||
var now = new Date(total)
|
||||
var y = now.getFullYear();
|
||||
var m = now.getMonth() + 1;
|
||||
m = m < 10 ? ('0' + m) : m;
|
||||
var da = now.getDate();
|
||||
da = da < 10 ? ('0' + da) : da;
|
||||
var h = now.getHours();
|
||||
h = h < 10 ? ('0' + h) : h;
|
||||
var minute = now.getMinutes();
|
||||
minute = minute < 10 ? ('0' + minute) : minute;
|
||||
var seconds = now.getSeconds();
|
||||
seconds = seconds < 10 ? ('0' + seconds) : seconds;
|
||||
var resDate = y + '-' + m + '-' + da + ' ' + h + ':' + minute + ":" + seconds;
|
||||
resDate = resDate.substring(0, 16)
|
||||
return resDate;
|
||||
},
|
||||
formatName(name) {
|
||||
if (name == undefined) {
|
||||
return
|
||||
}
|
||||
return name.substr(name.length - 2, name.length > 2 ? (name.length - 1) : name.length)
|
||||
},
|
||||
divAll() {
|
||||
if (this.btnspan == '展开') {
|
||||
this.btnspan = '收起'
|
||||
this.showAll = true
|
||||
} else {
|
||||
this.btnspan = '展开'
|
||||
this.showAll = false
|
||||
}
|
||||
},
|
||||
toVote() {
|
||||
var myVote = ''
|
||||
if (this.data.myVote) {
|
||||
myVote = this.data.myVote
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: `./vote?id=${this.id}`
|
||||
})
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
overflow-x: hidden;
|
||||
background-color: #F4F6F8;
|
||||
|
||||
.mask {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, .8);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999;
|
||||
|
||||
.cancel-img {
|
||||
width: 219px;
|
||||
height: 94px;
|
||||
margin: 580px 0 166px 266px;
|
||||
}
|
||||
|
||||
.text-img {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 50%;
|
||||
line-height: 112px;
|
||||
background: #E60012;
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.right-icon {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
float: right;
|
||||
vertical-align: middle;
|
||||
transform: rotate(270deg);
|
||||
padding: 0 72px 0 0;
|
||||
}
|
||||
|
||||
.vote-img {
|
||||
width: 140px;
|
||||
height: 140px;
|
||||
position: fixed;
|
||||
bottom: 344px;
|
||||
right: 48px;
|
||||
}
|
||||
|
||||
.sign-end {
|
||||
padding-left: 150px;
|
||||
}
|
||||
|
||||
.btn-bottom {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 9;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
|
||||
.btn {
|
||||
flex: 1;
|
||||
line-height: 112px;
|
||||
background: #E60012;
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sign {
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
.detail-info {
|
||||
border-bottom: 2px solid #D8DDE6;
|
||||
background-color: #D40A05;
|
||||
padding: 16px 0 80px 32px;
|
||||
position: relative;
|
||||
|
||||
.info-title {
|
||||
line-height: 64px;
|
||||
font-size: 40px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #fff;
|
||||
word-break: break-all;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.item-info {
|
||||
line-height: 48px;
|
||||
font-size: 30px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.info-label {
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
display: inline-block;
|
||||
width: 550px;
|
||||
word-break: break-all;
|
||||
color: #FFE8E8;
|
||||
}
|
||||
|
||||
.item-status0 {
|
||||
color: #FF9B2B;
|
||||
}
|
||||
|
||||
.item-status1 {
|
||||
color: #2EA222;
|
||||
}
|
||||
|
||||
.item-status2 {
|
||||
color: #343D65;
|
||||
}
|
||||
|
||||
.item-status3 {
|
||||
color: #5A98F2;
|
||||
}
|
||||
|
||||
.item-status4 {
|
||||
color: #f46;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.retract-btn {
|
||||
line-height: 80px;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 690px;
|
||||
|
||||
.down-icon {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
margin-left: 4px;
|
||||
vertical-align: middle;
|
||||
transition: all .3s ease-in-out;
|
||||
}
|
||||
|
||||
.icon-active {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-title {
|
||||
line-height: 96px;
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
padding-left: 32px;
|
||||
background-color: #fff;
|
||||
|
||||
span {
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.info-content {
|
||||
padding: 16px 32px;
|
||||
background-color: #fff;
|
||||
line-height: 48px;
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.user-list {
|
||||
padding-bottom: 140px;
|
||||
|
||||
.user-item {
|
||||
background-color: #fff;
|
||||
height: 112px;
|
||||
padding-top: 16px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.user-bg {
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background-color: #4E8EEE;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
line-height: 80px;
|
||||
margin: 0 16px 0 32px;
|
||||
font-size: 28px;
|
||||
border-radius: 50%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: inline-block;
|
||||
width: 622px;
|
||||
height: 96px;
|
||||
border-bottom: 2px solid #D8DDE6;
|
||||
box-sizing: border-box;
|
||||
|
||||
.user-name {
|
||||
line-height: 44px;
|
||||
color: #333;
|
||||
font-size: 32px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.user-item:nth-last-of-type(1) {
|
||||
.user-info {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mar-b8 {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.color-1365DD {
|
||||
color: #1365DD;
|
||||
}
|
||||
|
||||
.color-999999 {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.pad-l7 {
|
||||
padding-left: 14px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,191 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<div class="tab-list">
|
||||
<div
|
||||
class="tab-item"
|
||||
v-for="(item, index) in tabList"
|
||||
:key="index"
|
||||
:class="tabIndex == index ? 'tab-active' : ''"
|
||||
@click="tabClick(index)"
|
||||
>
|
||||
{{ item.label }}({{ item.value }})
|
||||
<span class="line"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="user-list"
|
||||
v-for="(item, index) in list"
|
||||
:key="index"
|
||||
v-if="tabIndex != 0"
|
||||
>
|
||||
<div class="user-item">
|
||||
<div class="user-bg">{{ formatName(item.meetingUserName) }}</div>
|
||||
<div class="user-info">
|
||||
<div class="user-name">{{ item.meetingUserName }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="user-list"
|
||||
v-for="(item, index) in list"
|
||||
:key="index"
|
||||
v-if="tabIndex == 0"
|
||||
>
|
||||
<div
|
||||
class="user-item"
|
||||
v-if="item.meetingUserRole == 0 || item.meetingUserRole == 3"
|
||||
>
|
||||
<div class="user-bg">{{ formatName(item.meetingUserName) }}</div>
|
||||
<div class="user-info">
|
||||
<div class="user-name">{{ item.meetingUserName }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AiEmpty v-if="list.length == 0 || list == null" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
tabList: [
|
||||
{ label: "参与", value: "0" },
|
||||
{ label: "已到", value: "0" },
|
||||
{ label: "未到", value: "0" },
|
||||
{ label: "请假", value: "0" },
|
||||
],
|
||||
tabIndex: 0,
|
||||
id: "",
|
||||
data: {},
|
||||
list: [],
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.id = options.id;
|
||||
this.getDetailInfo();
|
||||
},
|
||||
methods: {
|
||||
tabClick(index) {
|
||||
this.tabIndex = index;
|
||||
if (index == 0) {
|
||||
this.list = this.data.appThreeMeetingUserList;
|
||||
}
|
||||
if (index == 1) {
|
||||
this.list = this.data.isArriveLIst;
|
||||
}
|
||||
if (index == 2) {
|
||||
this.list = this.data.notArriveLIst;
|
||||
}
|
||||
if (index == 3) {
|
||||
this.list = this.data.leaveLIst;
|
||||
}
|
||||
},
|
||||
getDetailInfo() {
|
||||
this.$http
|
||||
.post(
|
||||
`/app/appthreemeetinginfo/queryDetailById?id=${this.id}`,
|
||||
null,
|
||||
{}
|
||||
)
|
||||
.then((res) => {
|
||||
if (res.data) {
|
||||
var data = res.data;
|
||||
if (data.appThreeMeetingUserList) {
|
||||
this.tabList[0].value = data.participantList.length + 1;
|
||||
}
|
||||
if (data.isArriveLIst) {
|
||||
this.tabList[1].value = data.isArriveLIst.length;
|
||||
}
|
||||
if (data.isArriveLIst) {
|
||||
this.tabList[2].value = data.notArriveLIst.length;
|
||||
}
|
||||
if (data.isArriveLIst) {
|
||||
this.tabList[3].value = data.leaveLIst.length;
|
||||
}
|
||||
this.data = data;
|
||||
this.list = this.data.appThreeMeetingUserList;
|
||||
}
|
||||
});
|
||||
},
|
||||
formatName(name) {
|
||||
if (name == undefined) {
|
||||
return;
|
||||
}
|
||||
return name.substr(
|
||||
name.length - 2,
|
||||
name.length > 2 ? name.length - 1 : name.length
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
.page {
|
||||
background-color: #f4f6f8;
|
||||
.tab-list {
|
||||
display: flex;
|
||||
background-color: #e60012;
|
||||
line-height: 96rpx;
|
||||
.tab-item {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
position: relative;
|
||||
}
|
||||
.tab-active {
|
||||
.line {
|
||||
position: absolute;
|
||||
bottom: 14rpx;
|
||||
left: 50%;
|
||||
margin-left: -20rpx;
|
||||
display: inline-block;
|
||||
width: 40rpx;
|
||||
height: 4rpx;
|
||||
border-radius: 4rpx;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
.user-list {
|
||||
background-color: #fff;
|
||||
.user-item {
|
||||
height: 112rpx;
|
||||
padding-top: 16rpx;
|
||||
box-sizing: border-box;
|
||||
.user-bg {
|
||||
display: inline-block;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
background-color: #4e8eee;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
line-height: 80rpx;
|
||||
margin: 0 16rpx 0 32rpx;
|
||||
font-size: 28rpx;
|
||||
border-radius: 50%;
|
||||
vertical-align: top;
|
||||
}
|
||||
.user-info {
|
||||
display: inline-block;
|
||||
width: 622rpx;
|
||||
height: 96rpx;
|
||||
border-bottom: 2rpx solid #d8dde6;
|
||||
box-sizing: border-box;
|
||||
.user-name {
|
||||
line-height: 44rpx;
|
||||
color: #333;
|
||||
font-size: 32rpx;
|
||||
margin-top: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.user-item:nth-last-of-type(1) {
|
||||
.user-info {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,143 +0,0 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<img src="https://cdn.cunwuyun.cn/guangdong/h5/bg@2x.png" alt="" class="bg-img">
|
||||
<div class="title">会议投票</div>
|
||||
<div class="content">
|
||||
<img src="https://cdn.cunwuyun.cn/guangdong/h5/dh@2x.png" alt="">
|
||||
<div>投票主题</div>
|
||||
<p v-html="info.voteTopic"></p>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="bg-gray" v-if="info.myVote">已投票</div>
|
||||
<div class="bg-pink" @click="voteSubmit(0)" v-if="!info.myVote">不同意</div>
|
||||
<div class="bg-red" @click="voteSubmit(1)" v-if="!info.myVote">同意观点</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
export default {
|
||||
computed: {
|
||||
...mapState(['user']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
id: '',
|
||||
info: {},
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.id = options.id
|
||||
this.getDetailInfo()
|
||||
},
|
||||
methods: {
|
||||
voteSubmit(myVote) {
|
||||
this.$http.post(`/app/appthreemeetinguser/voteMeetting?meetingId=${this.id}&myVote=${myVote}&userId=${this.user.id}`).then((res) => {
|
||||
if(res.code == 0) {
|
||||
this.$toast('投票成功')
|
||||
this.getDetailInfo()
|
||||
}
|
||||
}).catch((err) => {
|
||||
this.$toast(err)
|
||||
})
|
||||
},
|
||||
getDetailInfo() {
|
||||
this.$http.post(`/app/appthreemeetinginfo/queryDetailById?id=${this.id}`, null, {}).then(res => {
|
||||
if (res.data) {
|
||||
this.info = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
@import "../../../common/common.css";
|
||||
|
||||
.page {
|
||||
background-color: #F3F6F9;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
overflow-x: hidden;
|
||||
.bg-img{
|
||||
width: 100%;
|
||||
height: 340px;
|
||||
}
|
||||
.title{
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
font-size: 44px;
|
||||
font-family: PingFangSC-Semibold, PingFang SC;
|
||||
font-weight: 600;
|
||||
color: #FFF;
|
||||
line-height: 60px;
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
left: 290px;
|
||||
}
|
||||
.content{
|
||||
position: absolute;
|
||||
top: 210px;
|
||||
left: 20px;
|
||||
width: 710px;
|
||||
background: #FFF;
|
||||
border-radius: 24px;
|
||||
padding: 100px 32px 172px;
|
||||
box-sizing: border-box;
|
||||
img{
|
||||
position: absolute;
|
||||
top: -60px;
|
||||
left: 310px;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
}
|
||||
div{
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
line-height: 44px;
|
||||
margin-bottom: 36px;
|
||||
}
|
||||
p{
|
||||
font-size: 28px;
|
||||
color: #333;
|
||||
line-height: 40px;
|
||||
}
|
||||
}
|
||||
.footer{
|
||||
display: flex;
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
div{
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
}
|
||||
.bg-gray{
|
||||
font-size: 36px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
background: #EAE9E9;
|
||||
}
|
||||
.bg-pink{
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #D73D3D;
|
||||
background: #FFE4DD;
|
||||
}
|
||||
.bg-red{
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #fff;
|
||||
background: #FE5A49;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
42
src/styles/common.scss
Normal file
42
src/styles/common.scss
Normal file
@@ -0,0 +1,42 @@
|
||||
@import '~uview-ui/index.scss';
|
||||
@import "styles/ckeditor";
|
||||
@import "styles/party";
|
||||
@import "styles/iconfont.css";
|
||||
|
||||
/**
|
||||
常用内外边距样式
|
||||
*/
|
||||
@each $padMar, $pm in (mar:margin, pad:padding) {
|
||||
@each $pos, $p in (l:left, r:right, t:top, b:bottom) {
|
||||
@each $v in (8, 10, 16, 32) {
|
||||
.#{$padMar}-#{$pos+$v} {
|
||||
#{$pm}-#{$p}: #{$v}px
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div[flex] {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.spb {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&.wrap {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
&.column {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
&.start {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
div[shrink] {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
Reference in New Issue
Block a user