未央
This commit is contained in:
@@ -146,6 +146,9 @@ export default {
|
||||
if (!this.userPhone) {
|
||||
return this.$u.toast('请输入手机号')
|
||||
}
|
||||
if (!this.vcode) {
|
||||
return this.$u.toast('请输入验证码')
|
||||
}
|
||||
// if (!this.userRealName) {
|
||||
// return this.$u.toast('请输入真实姓名')
|
||||
// }
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<span class="card-right">三角湖居民社群 李毅 小程序填报三角湖居民社群 李毅 小程序填报三角湖居民社群 李毅 小程序填报</span>
|
||||
</div> -->
|
||||
|
||||
<div class="cards">
|
||||
<div class="cards" v-if="data.files && data.files.length">
|
||||
<span class="card-left">照片</span>
|
||||
</div>
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
<div class="lines"/>
|
||||
</div>
|
||||
<div class="cardes-msg-top" v-if="item.doExplain">{{ item.doExplain }}</div>
|
||||
<div class="imgs">
|
||||
<div class="imgs" v-if="item.files && item.files.length">
|
||||
<img :src="e.url" alt="" v-for="(e, index) in item.files" :key="index" @click="previewImage(item.files, e.url)"/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -141,20 +141,23 @@ export default {
|
||||
},
|
||||
process() {
|
||||
const getAvatar = str => str?.substring(str?.length, str?.length - 2)
|
||||
const list = this.data.processList.map(e => ({
|
||||
...e,
|
||||
avatar: getAvatar(e.girdMemberName),
|
||||
statusLabel: this.$dict.getLabel('residentReportDoStatus', e.doStatus)
|
||||
}))
|
||||
if (this.evaluation.id) {
|
||||
const {id, createUserName, score, files, createTime: doTime, content: doExplain} = this.evaluation
|
||||
list.splice(0, 0, {
|
||||
id, doTime, doExplain,
|
||||
statusLabel: `${score}星评价`,
|
||||
avatar: getAvatar(createUserName),
|
||||
systemExplain: `${createUserName}完成评价`,
|
||||
files: files
|
||||
})
|
||||
var list = []
|
||||
if(this.data.processList && this.data.processList.length) {
|
||||
list = this.data.processList.map(e => ({
|
||||
...e,
|
||||
avatar: getAvatar(e.girdMemberName),
|
||||
statusLabel: this.$dict.getLabel('residentReportDoStatus', e.doStatus)
|
||||
}))
|
||||
if (this.evaluation.id) {
|
||||
const {id, createUserName, score, files, createTime: doTime, content: doExplain} = this.evaluation
|
||||
list.splice(0, 0, {
|
||||
id, doTime, doExplain,
|
||||
statusLabel: `${score}星评价`,
|
||||
avatar: getAvatar(createUserName),
|
||||
systemExplain: `${createUserName}完成评价`,
|
||||
files: files
|
||||
})
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
@@ -385,6 +388,8 @@ uni-page-body {
|
||||
font-size: 32px;
|
||||
color: #333;
|
||||
margin-bottom: 8px;
|
||||
font-size: 32px;
|
||||
word-break: break-all;
|
||||
}
|
||||
.time {
|
||||
line-height: 40px;
|
||||
|
||||
@@ -5,46 +5,18 @@
|
||||
<div class="header-content-bg">
|
||||
<img src="https://cdn.sinoecare.com/i/2024/07/12/6690a1303d423.png" alt="">
|
||||
</div>
|
||||
<!-- <AiTopFixed>
|
||||
<div class="areatop">
|
||||
<u-form label-width="auto">
|
||||
<u-form-item label="区域选择" right-icon="arrow-right" class="areaIds">
|
||||
<AiAreaPicker v-model="areaId" :areaId="user.areaId" @input="seachObj" :name.sync="areaName" selectRoot/>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
</div>
|
||||
|
||||
<div class="line"></div>
|
||||
|
||||
<u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" @change="change"></u-tabs>
|
||||
|
||||
<div class="seachObjs">
|
||||
<u-search v-model="keyword" :clearabled="true" placeholder="姓名/联系方式/身份证后6位" :show-action="false"
|
||||
bg-color="#F5F5F5" search-icon-color="#E2E8F1" color="#666" height="58" @search="handerSearch"
|
||||
@clear="handerClear"></u-search>
|
||||
</div>
|
||||
</AiTopFixed> -->
|
||||
|
||||
<div class="top-tabs" :style="{'top': `${statusBarHeight+50}px`}">
|
||||
<div class="top-tabs" :style="{'top': `${statusBarHeight+44}px`}">
|
||||
<u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#fff" inactive-color="#222"
|
||||
active-color="#1D2229" :bar-style="barStyle" font-size="34" @change="change"></u-tabs>
|
||||
<div class="select-content">
|
||||
<!-- <div class="search-input">
|
||||
<img src="./img/search-icon.png" alt=""/>
|
||||
<u-input type="text" placeholder="请输入姓名" placeholder-style="color:#999;font-size:13px;" height="18"
|
||||
v-model="search.name" @confirm="getUserList" :clearable="false" maxlength="6"/>
|
||||
</div> -->
|
||||
<div class="search-input">
|
||||
<u-search placeholder="姓名/联系方式/身份证后6位" :clearabled="true" v-model="keyword" :show-action="false" bg-color="#F4F5FA" search-icon-color="#F4F5FA"
|
||||
color="#666" height="72" @search="handerSearch" @clear="handerClear"></u-search>
|
||||
</div>
|
||||
<div class="area-content fill">
|
||||
<AiPagePicker type="gird" @select="seachObj">
|
||||
<AiMore v-model="gridName" placeholder="选择地区"/>
|
||||
</AiPagePicker>
|
||||
<!-- <AiAreaPicker v-model="areaId" :areaId="user.areaId" @input="seachObj" :name.sync="areaName" selectRoot>
|
||||
<AiMore v-model="areaName" placeholder="选择网格"/>
|
||||
</AiAreaPicker> -->
|
||||
<AiAreaPicker class="ai-area" v-model="areaId" :areaId="$areaId" :fullName.sync="areaName" @input="areaSelect">
|
||||
<AiMore v-model="areaName" placeholder="选择地区"/>
|
||||
</AiAreaPicker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -71,33 +43,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="empty" v-if="!datas.length">
|
||||
<img src="https://cdn.cunwuyun.cn/dvcp/h5/no-data.png" alt="">
|
||||
<p>暂无居民信息<br/>点击<span @click="edit('')">新增按钮</span>新增居民信息,也可在管理系统批量导入</p>
|
||||
</div>
|
||||
<AiEmpty v-if="!datas.length" />
|
||||
</div>
|
||||
|
||||
<!-- <AiEmpty class="emptyWrap" v-else></AiEmpty> -->
|
||||
<div style="height: 60px"></div>
|
||||
<div class="footer" v-if="showBtn" @click="showTag=true">
|
||||
<div class="btn">打标签</div>
|
||||
<div class="footer" @click="showTagClick">
|
||||
<div class="btn" :class="showBtn ? '' : 'bg-gray'">打标签</div>
|
||||
</div>
|
||||
<u-popup v-model="showTag" mode="bottom">
|
||||
<div class="popup-content">
|
||||
<div class="title">111</div>
|
||||
<div class="title">选择标签</div>
|
||||
<div class="tag-list">
|
||||
<div class="item active">2222</div>
|
||||
<div class="item active">2222</div>
|
||||
<div class="item">2222</div>
|
||||
</div>
|
||||
<div class="title">111</div>
|
||||
<div class="tag-list">
|
||||
<div class="item">333</div>
|
||||
<div class="item">333</div>
|
||||
<div class="item" :class="item.isCheck ? 'active' : ''" v-for="(item, index) in tagList" :key="index">{{ item.labelName }}</div>
|
||||
</div>
|
||||
<div class="poup-btn">
|
||||
<div>取消</div>
|
||||
<div class="confirm">确定</div>
|
||||
<div class="confirm" @click="confirmTag">确定</div>
|
||||
</div>
|
||||
</div>
|
||||
</u-popup>
|
||||
@@ -147,7 +108,8 @@ export default {
|
||||
checkImg: 'https://cdn.sinoecare.com/i/2024/07/16/6695ddf91113c.png',
|
||||
circleImg: 'https://cdn.sinoecare.com/i/2024/07/16/6695ddf890b1e.png',
|
||||
userImg: 'https://cdn.sinoecare.com/i/2024/07/16/6695e2a0d95c9.png',
|
||||
showTag: false
|
||||
showTag: false,
|
||||
tagList: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -202,30 +164,25 @@ export default {
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
change(index) {
|
||||
this.currentTabs = index
|
||||
this.current = 1
|
||||
this.datas = []
|
||||
this.getList()
|
||||
},
|
||||
|
||||
toDetailCard(item) {
|
||||
uni.navigateTo({url: `./DetailCard?id=${item.id}`})
|
||||
},
|
||||
|
||||
seachObj(e) {
|
||||
areaSelect(e) {
|
||||
this.areaId = e
|
||||
this.current = 1
|
||||
this.getList()
|
||||
},
|
||||
|
||||
handerSearch(e) {
|
||||
this.keyword = e
|
||||
this.current = 1
|
||||
this.getList()
|
||||
},
|
||||
|
||||
handerClear() {
|
||||
this.keyword = ''
|
||||
this.current = 1
|
||||
@@ -251,6 +208,41 @@ export default {
|
||||
},
|
||||
clickCheck(index) {
|
||||
this.datas[index].isCheck = !this.datas[index].isCheck
|
||||
},
|
||||
showTagClick() {
|
||||
if(!this.showBtn) return
|
||||
this.getTagList()
|
||||
},
|
||||
getTagList() {
|
||||
this.$instance.post('app/appresidentlabelinfo/list?current=1&size=2000').then((res) => {
|
||||
if (res.code == 0) {
|
||||
res.data.records.map((item) => {
|
||||
item.isCheck = false
|
||||
})
|
||||
this.tagList = res.data.records
|
||||
this.showTag = true
|
||||
}
|
||||
})
|
||||
},
|
||||
confirmTag() {
|
||||
var residentId = [], residentLabelList = []
|
||||
this.datas.map((item) => {
|
||||
if(item.isCheck) {
|
||||
residentId.push(id)
|
||||
}
|
||||
})
|
||||
this.tagList.map((item) => {
|
||||
residentLabelList.push(item)
|
||||
})
|
||||
this.$instance.post('/app/appresidentlabel/update', {
|
||||
residentId: residentId.join(','),
|
||||
residentLabelList
|
||||
}).then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$u.toast('操作成功')
|
||||
this.getList()
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
onReachBottom() {
|
||||
@@ -412,8 +404,6 @@ export default {
|
||||
.dataes {
|
||||
width: calc(100% - 64px);
|
||||
margin: 320px 0 0 32px;
|
||||
border-bottom-left-radius: 16px;
|
||||
border-bottom-right-radius: 16px;
|
||||
.datass {
|
||||
display: flex;
|
||||
padding: 24px 0;
|
||||
@@ -478,6 +468,13 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.datass:nth-last-of-type(1) {
|
||||
border-bottom-left-radius: 16px;
|
||||
border-bottom-right-radius: 16px;
|
||||
.right {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
@@ -499,6 +496,9 @@ export default {
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
}
|
||||
.bg-gray {
|
||||
background-color: #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
@@ -540,7 +540,7 @@ export default {
|
||||
.tag-list {
|
||||
.item {
|
||||
display: inline-block;
|
||||
padding: 0 8px;
|
||||
padding: 0 16px;
|
||||
line-height: 44px;
|
||||
border-radius: 8px;
|
||||
margin: 0 16px 16px 0;
|
||||
@@ -581,5 +581,11 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
::v-deep .emptyWrap {
|
||||
background-color: #fff;
|
||||
padding-bottom: 32px;
|
||||
border-bottom-left-radius: 16px;
|
||||
border-bottom-right-radius: 16px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -13,11 +13,10 @@
|
||||
<AiItem label="事件类型" :value="info.groupName"/>
|
||||
<AiItem label="所属网格" :value="info.girdName"/>
|
||||
<AiItem label="上报时间" :value="info.createTime"/>
|
||||
<AiItem label="照片" top-label>
|
||||
<AiItem label="照片" top-label v-if="info.files && info.files.length">
|
||||
<div class="flex wrap">
|
||||
<image class="imageItem" v-for="(item, index) in info.files" @click="preview(item.url)" :key="index" :src="item.url"/>
|
||||
</div>
|
||||
<span v-if="!info.files.length">暂无照片</span>
|
||||
</AiItem>
|
||||
</AiGroup>
|
||||
</div>
|
||||
|
||||
@@ -64,23 +64,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-content" v-if="currentTabBar == 1">
|
||||
<!-- <AiTopFixed>
|
||||
<u-search
|
||||
placeholder="请输入昵称、姓名"
|
||||
:show-action="false"
|
||||
search-icon-color="#ccc"
|
||||
v-model="search.name"
|
||||
@search="(page1.current = 1), getList()"
|
||||
/>
|
||||
<AiCell>
|
||||
<b slot="label" class="title"
|
||||
>共<i v-html="page1.total || 0" />个居民</b
|
||||
>
|
||||
</AiCell>
|
||||
</AiTopFixed> -->
|
||||
|
||||
<div class="search-top">
|
||||
<u-search placeholder="姓名/联系方式/身份证后6位" v-model="search.name" :show-action="false" bg-color="#F4F5FA" search-icon-color="#F4F5FA"
|
||||
<div class="search-top" :style="{'top': `${statusBarHeight+44}px`}">
|
||||
<u-search placeholder="请输入姓名" v-model="search.name" :show-action="false" bg-color="#F4F5FA" search-icon-color="#F4F5FA"
|
||||
color="#666" height="72" @search="(page1.current = 1), getList()" ></u-search>
|
||||
</div>
|
||||
<div class="user-list-content">
|
||||
@@ -104,7 +89,7 @@
|
||||
/>
|
||||
</div>
|
||||
</AiCell> -->
|
||||
<div class="item" v-for="item in data" :key="item.id" @click.native="showResident(item)">
|
||||
<div class="item" v-for="item in data" :key="item.id">
|
||||
<div class="left-img">
|
||||
<img :src="item.avatar" alt="">
|
||||
</div>
|
||||
@@ -117,57 +102,18 @@
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<p class="item-idnumber">真实姓名:{{ item.idNumber }} {{item.realName }}</p>
|
||||
<p class="item-idnumber">昵称:{{ item.remark }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-content" v-if="currentTabBar == 2">
|
||||
<!-- <AiTopFixed>
|
||||
<u-search
|
||||
placeholder="请输入群名、群主名"
|
||||
:show-action="false"
|
||||
search-icon-color="#ccc"
|
||||
v-model="search.name"
|
||||
@search="(page2.current = 1), getList()"
|
||||
/>
|
||||
<AiCell>
|
||||
<b slot="label" class="title"
|
||||
>共<i v-html="page2.total || 0" />个居民群</b
|
||||
>
|
||||
</AiCell>
|
||||
</AiTopFixed> -->
|
||||
<div class="search-top">
|
||||
<div class="search-top" :style="{'top': `${statusBarHeight+44}px`}">
|
||||
<u-search placeholder="请输入群名、群主名" v-model="search.name" :show-action="false" bg-color="#F4F5FA" search-icon-color="#F4F5FA"
|
||||
color="#666" height="72" @search="(page2.current = 1), getList()" ></u-search>
|
||||
</div>
|
||||
|
||||
<!-- <div class="mainPane">
|
||||
<AiCell
|
||||
v-for="(item, i) in list"
|
||||
:key="i"
|
||||
@click.native="toGroupList(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> -->
|
||||
<div class="user-list-content">
|
||||
<div class="item group-item" v-for="item in list" :key="item.id" @click.native="toGroupList(item)">
|
||||
<div class="item group-item" v-for="item in list" :key="item.id">
|
||||
<div class="left-img">
|
||||
<img src="https://cdn.sinoecare.com/i/2024/07/12/66908ea79780f.png" alt="">
|
||||
</div>
|
||||
@@ -259,12 +205,13 @@ export default {
|
||||
todayList2: [],
|
||||
counts1: "",
|
||||
counts2: "",
|
||||
page2: { current: 1, size: 10, total: 0 },
|
||||
page2: { current: 1, size: 10, total: 0, pages: 2},
|
||||
search2: { name: "" },
|
||||
page1: { current: 1, size: 10, total: 0 },
|
||||
page1: { current: 1, size: 10, total: 0, pages: 2},
|
||||
search1: { name: "" },
|
||||
cWidth: 750,
|
||||
cHeight: 500,
|
||||
statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -325,12 +272,14 @@ export default {
|
||||
},
|
||||
// 居民列表
|
||||
getList() {
|
||||
if(this.page1.current > this.page1.pages) return
|
||||
this.$instance
|
||||
.post("/app/wxcp/wxcustomer/list", null, {
|
||||
params: { ...this.page1, ...this.search, type: 1 },
|
||||
})
|
||||
.then((res) => {
|
||||
if (res?.data) {
|
||||
this.page1.pages = res.data.pages
|
||||
if (this.page1.current > 1) {
|
||||
this.data = [...this.data, ...res.data.records];
|
||||
} else this.data = res.data.records;
|
||||
@@ -355,12 +304,14 @@ export default {
|
||||
|
||||
// 居民群列表
|
||||
getList2() {
|
||||
if(this.page2.current > this.page2.pages) return
|
||||
this.$instance
|
||||
.post("/app/wxcp/wxgroup/list", null, {
|
||||
params: { ...this.page2, ...this.search },
|
||||
})
|
||||
.then((res) => {
|
||||
if (res?.data) {
|
||||
this.page2.pages = res.data.pages
|
||||
let meta = res.data.records?.map((e) => ({
|
||||
...e,
|
||||
avatar: e?.avatar || this.$cdn + "groupAvatar.png",
|
||||
@@ -399,7 +350,7 @@ export default {
|
||||
),
|
||||
series: [
|
||||
{
|
||||
name: "居民总数",
|
||||
name: "群成员总数",
|
||||
data: Object.values(this.weekList).map((e) => e.total),
|
||||
},
|
||||
{
|
||||
@@ -581,25 +532,26 @@ uni-page-body {
|
||||
}
|
||||
|
||||
.list-content {
|
||||
width: 686px;
|
||||
height: calc(100% - 216px);
|
||||
background: #FFF;
|
||||
border-radius: 16px;
|
||||
margin: 32px 0 0 32px;
|
||||
position: relative;
|
||||
width: calc(100% - 64px);
|
||||
margin: 0 0 0 32px;
|
||||
padding-bottom: 200px;
|
||||
.search-top {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: 28px 32px;
|
||||
width: 686px;
|
||||
width: calc(100% - 64px);
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
margin-left: 32px;
|
||||
background-color: #fff;
|
||||
z-index: 99;
|
||||
border-top-left-radius: 16px;
|
||||
border-top-right-radius: 16px;
|
||||
z-index: 9;
|
||||
}
|
||||
.user-list-content {
|
||||
background-color: #fff;
|
||||
padding-top: 128px;
|
||||
border-bottom-left-radius: 16px;
|
||||
border-bottom-right-radius: 16px;
|
||||
margin-top: 128px;
|
||||
.item {
|
||||
display: flex;
|
||||
padding: 24px 32px 0;
|
||||
|
||||
Reference in New Issue
Block a user