Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_wxcp_app into dev
This commit is contained in:
@@ -24,6 +24,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<AiEmpty description="暂无数据" v-if="!list.length"/>
|
<AiEmpty description="暂无数据" v-if="!list.length"/>
|
||||||
|
|
||||||
|
<AiConsole></AiConsole>
|
||||||
|
|
||||||
<u-popup v-model="filterShow" mode="bottom" border-radius="14">
|
<u-popup v-model="filterShow" mode="bottom" border-radius="14">
|
||||||
<div class="popup">
|
<div class="popup">
|
||||||
<div class="tips"></div>
|
<div class="tips"></div>
|
||||||
|
|||||||
@@ -247,6 +247,7 @@ export default {
|
|||||||
sendStatus: this.tabIndex==0? this.subIndex0: this.subIndex1,
|
sendStatus: this.tabIndex==0? this.subIndex0: this.subIndex1,
|
||||||
taskId: this.id,
|
taskId: this.id,
|
||||||
current: this.current,
|
current: this.current,
|
||||||
|
size: 3000
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="btn" v-if="data.status==0 && data.haveExaminPower">
|
<div class="btn" v-if="data.status==0 && data.haveExaminPower">
|
||||||
<div class="refuse" @click="refuseBtn">审核拒绝</div>
|
<div class="refuse" @click="refuseBtn">审核拒绝</div>
|
||||||
<div class="pass" @click="passBtn">审核通过</div>
|
<div class="pass" @click="passBtn">审核通过</div>
|
||||||
@@ -88,6 +89,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapState ,mapActions } from "vuex";
|
import { mapState ,mapActions } from "vuex";
|
||||||
export default {
|
export default {
|
||||||
|
name : "detail",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
id: "",
|
id: "",
|
||||||
@@ -110,6 +112,9 @@ export default {
|
|||||||
...mapState(['user'])
|
...mapState(['user'])
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
toMassDispatch() {
|
||||||
|
uni.navigateTo({ url: `./massDispatch?id=${this.id}`})
|
||||||
|
},
|
||||||
getDetail() {
|
getDetail() {
|
||||||
this.$http.post(`/app/appmasssendingtask/queryDetailById?id=${this.id}`).then(res=> {
|
this.$http.post(`/app/appmasssendingtask/queryDetailById?id=${this.id}`).then(res=> {
|
||||||
if (res?.data) {
|
if (res?.data) {
|
||||||
|
|||||||
368
src/apps/AppCooperationPropaganda/massDispatch.vue
Normal file
368
src/apps/AppCooperationPropaganda/massDispatch.vue
Normal file
@@ -0,0 +1,368 @@
|
|||||||
|
<template>
|
||||||
|
<div class="massDispatch">
|
||||||
|
<div class="tips">
|
||||||
|
<u-icon name="error-circle-fill" size="30" color="#ff9900"></u-icon>请于12月13日24点前完成群发任务</div>
|
||||||
|
<div class="task">
|
||||||
|
<div class="task_title">群发客户群</div>
|
||||||
|
<div class="task_content">
|
||||||
|
<div class="item">
|
||||||
|
<span>任务名称</span>
|
||||||
|
<span>{{ data.taskTitle }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<span>创建人</span>
|
||||||
|
<span>{{ data.createUserName }}</span>
|
||||||
|
</div>
|
||||||
|
<!-- <div class="item" v-if="data.enableExamine == 1">
|
||||||
|
<span>审批人</span>
|
||||||
|
<span>
|
||||||
|
<span v-for="(item, index) in approver" :key="index" style="color: #333;">
|
||||||
|
{{ item.examineUserName }}
|
||||||
|
<span v-show="index < approver.length - 1">、</span>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<span>所在部门</span>
|
||||||
|
<span style="display: flex;">
|
||||||
|
<div v-if="data.createUserDeptName">{{ data.createUserDeptName }}</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<span>群发时间</span>
|
||||||
|
<span>{{ data.choiceTime }}</span>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
<div class="task_results" v-if="data.enableExamine == 1">
|
||||||
|
<img v-if="data.status == 1" src="./images/refuse.png" alt="">
|
||||||
|
<img v-if="data.status == 2" src="./images/pass.png" alt="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<div class="scope">
|
||||||
|
<span>群发范围</span>
|
||||||
|
<span>我的全部居民群</span>
|
||||||
|
<!-- <span v-if="data.sendScope==0">全部{{ data.receiveGroupCount || 0}}个居民群</span> -->
|
||||||
|
<!-- <span v-if="data.sendScope==1 || data.sendScope==2">按条件筛选的{{ data.receiveGroupCount || 0}}个居民群</span> -->
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>群发内容</p>
|
||||||
|
<div>
|
||||||
|
<!-- 文本 -->
|
||||||
|
<div class="textarea" v-show="content.length">{{ content }}</div>
|
||||||
|
<!-- 图片 -->
|
||||||
|
<div class="pictures" v-show="picList.length">
|
||||||
|
<image v-for="(item, index) in picList" :key="index" :src="item.imgPicUrl" @click.stop="previewImages(picList, item.imgPicUrl)"/>
|
||||||
|
</div>
|
||||||
|
<!-- 视频 -->
|
||||||
|
<div class="video" v-show="videoList.length">
|
||||||
|
<video v-for="(item, index) in videoList" :key="index" :src="item.imgPicUrl"/>
|
||||||
|
</div>
|
||||||
|
<!-- 文件 -->
|
||||||
|
<div class="file" v-show="fileList.length">
|
||||||
|
<div class="file_item" v-for="(item,index) in fileList" :key="index" @click="prevFile(item.sysFile)">
|
||||||
|
<img src="./images/files.png" alt="">
|
||||||
|
<div>{{ item.sysFile.name }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 网页 -->
|
||||||
|
<div class="webpage" v-show="webpage.length">
|
||||||
|
<p>链接地址</p>
|
||||||
|
<a v-for="(item, index) in webpage" :key="index" :href="item.linkUrl">
|
||||||
|
<div v-if="item.linkTitle">{{item.linkTitle}}</div>
|
||||||
|
<div v-else>{{ item.linkUrl }}</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<!-- 小程序 -->
|
||||||
|
<div class="miniapp" v-show="miniapp.length">
|
||||||
|
<p>小程序</p>
|
||||||
|
<div v-for="(item, index) in miniapp" :key="index">{{item.mpTitle}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="subBtn" @click="toSend">
|
||||||
|
<div>前往群发</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState ,mapActions } from "vuex";
|
||||||
|
export default {
|
||||||
|
name: "massDispatch",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
id: "",
|
||||||
|
data: {},
|
||||||
|
content: '',
|
||||||
|
picList: [],
|
||||||
|
videoList: [],
|
||||||
|
fileList: [],
|
||||||
|
webpage: [],
|
||||||
|
miniapp: [],
|
||||||
|
pictres: [],
|
||||||
|
options: '',
|
||||||
|
approver: [], //审批人
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(o) {
|
||||||
|
console.log(o)
|
||||||
|
this.id = o.id
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['user'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions(['shareToExternalChat']),
|
||||||
|
getDetail() {
|
||||||
|
this.$http.post(`/app/appmasssendingtask/queryDetailById?id=${this.id}`).then(res=> {
|
||||||
|
if (res?.data) {
|
||||||
|
this.data = res.data
|
||||||
|
this.content = res.data.contents.filter(v=> v.msgType == 0)?.[0].content
|
||||||
|
this.picList = res.data.contents.filter(v=> v.msgType == 1)
|
||||||
|
this.videoList = res.data.contents.filter(v=> v.msgType == 2)
|
||||||
|
this.fileList = res.data.contents.filter(v=> v.msgType == 3)
|
||||||
|
this.webpage = res.data.contents.filter(v=> v.msgType == 4)
|
||||||
|
this.miniapp = res.data.contents.filter(v=> v.msgType == 5)
|
||||||
|
this.approver = res.data.examines
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
previewImages(images, img) {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: images.map(v => v.imgPicUrl),
|
||||||
|
current: img
|
||||||
|
})
|
||||||
|
},
|
||||||
|
...mapActions(['previewFile']),
|
||||||
|
prevFile(file) {
|
||||||
|
this.$loading()
|
||||||
|
this.previewFile({ ...file }).then(()=>{
|
||||||
|
this.$hideLoading()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// msgtype: "miniprogram", // 消息类型,必填
|
||||||
|
// miniprogram: {
|
||||||
|
// appid: "", // 小程序的appid
|
||||||
|
// title: "", // 小程序消息的title
|
||||||
|
// imgUrl : "", //小程序消息的封面图。必须带http或者https协议头
|
||||||
|
// page: "", //小程序消息打开后的路径,注意要以.html作为后缀,否则在微信端打开会提示找不到页面
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
|
||||||
|
// {
|
||||||
|
// msgtype: "file", // 消息类型,必填,从3.1.12版本开始支持
|
||||||
|
// file:{
|
||||||
|
// mediaid:"", // 文件的素材id,必填
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
|
||||||
|
toSend() {
|
||||||
|
// 文本
|
||||||
|
const text = {
|
||||||
|
content: this.content
|
||||||
|
}
|
||||||
|
const attachments = []
|
||||||
|
// 图片
|
||||||
|
const imgs = this.picList.map(v =>{
|
||||||
|
return {
|
||||||
|
msgtype: "image",
|
||||||
|
image: {
|
||||||
|
mediaid: v.mediaId,
|
||||||
|
imgUrl: v.imgPicUrl,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
attachments.push(imgs)
|
||||||
|
// 视频
|
||||||
|
const videos = this.videoList.map(v =>{
|
||||||
|
return {
|
||||||
|
msgtype: "video",
|
||||||
|
video:{
|
||||||
|
mediaid: v.mediaId,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
attachments.push(videos)
|
||||||
|
// 文件
|
||||||
|
const files = this.fileList.map(v => {
|
||||||
|
return {
|
||||||
|
msgtype: "file",
|
||||||
|
file:{
|
||||||
|
mediaid: v.mediaId,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
attachments.push(files)
|
||||||
|
|
||||||
|
// 链接
|
||||||
|
// const links = this.webpage.map(v =>{
|
||||||
|
// return {
|
||||||
|
// msgtype: "link", // 消息类型,必填
|
||||||
|
// link: {
|
||||||
|
// title: "", // H5消息标题
|
||||||
|
// imgUrl: "", // H5消息封面图片URL
|
||||||
|
// desc: "", // H5消息摘要
|
||||||
|
// url: "", // H5消息页面url 必填
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
this.shareToExternalChat({ ...text, ...data })
|
||||||
|
},
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
document.title = "群发居民群任务"
|
||||||
|
this.getDetail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.massDispatch {
|
||||||
|
padding: 32px 32px 140px 32px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.tips {
|
||||||
|
width: 100%;
|
||||||
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
background: #fff1e8;
|
||||||
|
border: 1px solid #ff9e61;
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding: 0 30px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
background: #FFF;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: inset 0px -1px 0px 0px #DDDDDD;
|
||||||
|
.task_title {
|
||||||
|
padding: 26px 32px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-bottom: 2px solid #DDDDDD;
|
||||||
|
}
|
||||||
|
.task_content {
|
||||||
|
padding: 0 32px 26px 32px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
padding-top: 26px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
span:first-child {
|
||||||
|
width: 160px;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
span:last-child {
|
||||||
|
width: calc(100% - 160px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.task_results {
|
||||||
|
position: absolute;
|
||||||
|
right: 30px;
|
||||||
|
top: 30px;
|
||||||
|
img {
|
||||||
|
width: 160px;
|
||||||
|
height: 130px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
background: #FFF;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 26px 32px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.scope {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
span:first-child {
|
||||||
|
width: 160px;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
span:last-child {
|
||||||
|
width: calc(100% - 160px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
p {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.textarea,
|
||||||
|
.pictures,
|
||||||
|
.video,
|
||||||
|
.file,
|
||||||
|
.webpage,
|
||||||
|
.miniapp {
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-top: 26px;
|
||||||
|
}
|
||||||
|
.pictures {
|
||||||
|
margin-top: 16px;
|
||||||
|
image {
|
||||||
|
width: 190px;
|
||||||
|
height: 190px;
|
||||||
|
margin-right: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
image:nth-child(3n) {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.video {
|
||||||
|
video {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.file {
|
||||||
|
.file_item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
img {
|
||||||
|
width: 96px;
|
||||||
|
height: 96px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.subBtn {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 118px;
|
||||||
|
background: #f4f8fb;
|
||||||
|
padding: 18px 32px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
div {
|
||||||
|
width: 100%;
|
||||||
|
height: 80px;
|
||||||
|
line-height: 80px;
|
||||||
|
text-align: center;
|
||||||
|
background: #1365dd;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 32px;
|
||||||
|
color: #fff;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -250,6 +250,8 @@ export const wxwork = {
|
|||||||
}
|
}
|
||||||
timer.injectJWeixin = setTimeout(() => {
|
timer.injectJWeixin = setTimeout(() => {
|
||||||
const sdk = wx?.agentConfig ? wx : jWeixin
|
const sdk = wx?.agentConfig ? wx : jWeixin
|
||||||
|
console.log("agentConfig配置:")
|
||||||
|
console.log({...state.config, jsApiList})
|
||||||
sdk?.agentConfig({
|
sdk?.agentConfig({
|
||||||
...state.config, jsApiList,
|
...state.config, jsApiList,
|
||||||
success: res => resolve(res),
|
success: res => resolve(res),
|
||||||
|
|||||||
@@ -147,15 +147,13 @@ export default {
|
|||||||
this.$dict.load('mstStatus').then(() => {
|
this.$dict.load('mstStatus').then(() => {
|
||||||
this.getList()
|
this.getList()
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
toDetail(item) {
|
toDetail(item) {
|
||||||
if(this.tabIndex == 0) {
|
if(this.tabIndex == 0) {
|
||||||
uni.navigateTo({url: `./cooperationDetail?id=${item.id}&time=${item.createTime}`})
|
uni.navigateTo({url: `./cooperationDetail?id=${item.id}&time=${item.createTime}`})
|
||||||
} else {
|
} else {
|
||||||
alert('hhh')
|
uni.navigateTo({url: `./circleDetail??id=${item.id}&time=${item.createTime}&type=${this.sendType}`})
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
searchBtn() {
|
searchBtn() {
|
||||||
this.current = 1
|
this.current = 1
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div><span class="color_red">*</span><span class="title">发送范围</span></div>
|
<div><span class="color_red">*</span><span class="title">发送范围</span></div>
|
||||||
<div @click="toSleectScoped">
|
<div @click="toSleectScoped">
|
||||||
<span>
|
<span>
|
||||||
<span class="color_gray" v-if="!form.sendScope || sum==0">请选择</span>
|
<span class="color_gray" v-if="!form.wxGroups || sum==0">请选择</span>
|
||||||
<span v-if="type=='ResidentsGroup' && form.wxGroups.length">预计送达{{ form.wxGroups.length }}名成员</span>
|
<span v-if="type=='ResidentsGroup' && form.wxGroups.length">预计送达{{ form.wxGroups.length }}名成员</span>
|
||||||
<span v-if="type!='ResidentsGroup' && sum != 0">预计送达{{ sum }}名成员</span>
|
<span v-if="type!='ResidentsGroup' && sum != 0">预计送达{{ sum }}名成员</span>
|
||||||
<u-icon name="arrow-right" color="#CCD0D3"></u-icon>
|
<u-icon name="arrow-right" color="#CCD0D3"></u-icon>
|
||||||
@@ -192,7 +192,11 @@ export default {
|
|||||||
sendScope: '', // 0:全部居民群、1:按部门选择、2:按网格选择
|
sendScope: '', // 0:全部居民群、1:按部门选择、2:按网格选择
|
||||||
sendType: '0', // 0:立即发送、1:定时发送
|
sendType: '0', // 0:立即发送、1:定时发送
|
||||||
gender: '', // 性别:0-女、1-男、2-全部
|
gender: '', // 性别:0-女、1-男、2-全部
|
||||||
filterCriteria: ''
|
filterCriteria: '',
|
||||||
|
filterTags: [], //过滤标签id集合
|
||||||
|
excludeFilterTags: [], // 剔除标签集合
|
||||||
|
addFromTime: '',
|
||||||
|
addEndTime: '',
|
||||||
},
|
},
|
||||||
enableExamine: false,
|
enableExamine: false,
|
||||||
isTimedTask: false,
|
isTimedTask: false,
|
||||||
@@ -255,8 +259,15 @@ export default {
|
|||||||
upload: [],
|
upload: [],
|
||||||
midiaIds: [],
|
midiaIds: [],
|
||||||
sum: '',
|
sum: '',
|
||||||
girdListIds: [],
|
// 筛选条件
|
||||||
deptListIds: [],
|
girdListIds: [], // 网格id集合
|
||||||
|
deptListIds: [], // 部门id集合
|
||||||
|
ResidentTags: [], // 居民包含
|
||||||
|
ResidentTagsRemove: [], // 居民剔除
|
||||||
|
circleTags: [], // 朋友圈包含
|
||||||
|
circleTagsRemove: [], // 朋友圈剔除
|
||||||
|
startTime: '',
|
||||||
|
endTime: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -469,14 +480,11 @@ export default {
|
|||||||
if(this.type=='Residents') {
|
if(this.type=='Residents') {
|
||||||
url = `/app/whchatmomentstask/addOrUpdate`
|
url = `/app/whchatmomentstask/addOrUpdate`
|
||||||
this.forms.filterCriteria = this.girdListIds.toString() || this.deptListIds.toString() || ''
|
this.forms.filterCriteria = this.girdListIds.toString() || this.deptListIds.toString() || ''
|
||||||
this.forms.filterTags = ''
|
this.forms.filterTags = this.ResidentTags.toString() || this.circleTags.toString() || ''
|
||||||
this.forms.excludeFilterTags = '剔除标签'
|
this.forms.excludeFilterTags = this.ResidentTagsRemove.toString() || this.circleTagsRemove.toString() || ''
|
||||||
formData = this.forms
|
this.forms.gender = this.sex
|
||||||
} else if(this.type=='CircleOfFriends') {
|
this.forms.addFromTime = this.startTime
|
||||||
url = `/app/whchatmomentstask/addOrUpdate`
|
this.forms.addEndTime = this.endTime
|
||||||
this.forms.filterCriteria = this.girdListIds.toString() || this.deptListIds.toString() || ''
|
|
||||||
this.forms.filterTags = '过滤标签'
|
|
||||||
this.forms.excludeFilterTags = '剔除标签'
|
|
||||||
formData = this.forms
|
formData = this.forms
|
||||||
} else if(this.type=='ResidentsGroup') {
|
} else if(this.type=='ResidentsGroup') {
|
||||||
url = `/app/appmasssendingtask/addOrUpdate`
|
url = `/app/appmasssendingtask/addOrUpdate`
|
||||||
@@ -488,7 +496,7 @@ export default {
|
|||||||
this.flag = false
|
this.flag = false
|
||||||
this.$u.toast("新增成功")
|
this.$u.toast("新增成功")
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
navigateBack()
|
uni.navigateBack()
|
||||||
}, 600)
|
}, 600)
|
||||||
}
|
}
|
||||||
}).catch((err)=>{
|
}).catch((err)=>{
|
||||||
@@ -549,6 +557,19 @@ export default {
|
|||||||
if(deptArr.length) {
|
if(deptArr.length) {
|
||||||
this.deptListIds = deptArr.map(v=>v.id)
|
this.deptListIds = deptArr.map(v=>v.id)
|
||||||
}
|
}
|
||||||
|
// 性别
|
||||||
|
this.sex = uni.getStorageSync('gender')
|
||||||
|
// 标签
|
||||||
|
if(this.sendType == 'Residents') {
|
||||||
|
this.ResidentTags = uni.getStorageSync('ResidentTags') // 居民包含
|
||||||
|
this.ResidentTagsRemove = uni.getStorageSync('ResidentTagsRemove') // 居民剔除
|
||||||
|
} else if(this.sendType == 'CircleOfFriends') {
|
||||||
|
this.circleTags = uni.getStorageSync('circleTags') // 朋友圈包含
|
||||||
|
this.circleTagsRemove = uni.getStorageSync('circleTagsRemove') // 朋友圈剔除
|
||||||
|
}
|
||||||
|
// 时间
|
||||||
|
this.startTime = uni.getStorageSync('startTime')
|
||||||
|
this.endTime = uni.getStorageSync('endTime')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,19 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="circleDetail">
|
<div class="circleDetail">
|
||||||
<!-- <AiTopFixed>
|
|
||||||
<div class="tab-select">
|
|
||||||
<div
|
|
||||||
class="item"
|
|
||||||
:class="tabIndex == index ? 'active' : ''"
|
|
||||||
v-for="(item, index) in tabs"
|
|
||||||
:key="index"
|
|
||||||
@click="tabClick(index)"
|
|
||||||
>
|
|
||||||
{{ item }}<span></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</AiTopFixed> -->
|
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="header_left">
|
<div class="header_left">
|
||||||
@@ -35,27 +21,19 @@
|
|||||||
<div id="pieEcharts"></div>
|
<div id="pieEcharts"></div>
|
||||||
<div class="pie_right">
|
<div class="pie_right">
|
||||||
<div>
|
<div>
|
||||||
<span>{{
|
<span>计划执行成员:</span>
|
||||||
tabIndex == 0 ? "计划执行成员:" : "计划送达居民群:"
|
|
||||||
}}</span>
|
|
||||||
<span>{{ info.planCount || 0 }}</span>
|
<span>{{ info.planCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{
|
<span>未执行成员:</span>
|
||||||
tabIndex == 0 ? "未执行成员:" : "未送达居民群:"
|
|
||||||
}}</span>
|
|
||||||
<span>{{ info.unExecutedCount || 0 }}</span>
|
<span>{{ info.unExecutedCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{
|
<span>已执行成员:</span>
|
||||||
tabIndex == 0 ? "已执行成员:" : "已送达居民群:"
|
|
||||||
}}</span>
|
|
||||||
<span>{{ info.executedCount || 0 }}</span>
|
<span>{{ info.executedCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>{{
|
<span>无法执行成员:</span>
|
||||||
tabIndex == 0 ? "无法执行成员:" : "无法送达居民群:"
|
|
||||||
}}</span>
|
|
||||||
<span>{{ info.cannotExecuteCount || 0 }}</span>
|
<span>{{ info.cannotExecuteCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -78,7 +56,7 @@
|
|||||||
|
|
||||||
<AiTable
|
<AiTable
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
:colConfigs="tabIndex == 0 ? colConfigs0 : colConfigs1"
|
:colConfigs="colConfigs"
|
||||||
v-if="tableData.length"/>
|
v-if="tableData.length"/>
|
||||||
<AiEmpty v-if="!tableData.length" description="暂无数据"></AiEmpty>
|
<AiEmpty v-if="!tableData.length" description="暂无数据"></AiEmpty>
|
||||||
</div>
|
</div>
|
||||||
@@ -95,8 +73,7 @@ export default {
|
|||||||
tabs: ["成员统计", "居民群统计"],
|
tabs: ["成员统计", "居民群统计"],
|
||||||
tabIndex: 0,
|
tabIndex: 0,
|
||||||
pieEcharts: null,
|
pieEcharts: null,
|
||||||
subIndex0: 0,
|
subIndex: 0,
|
||||||
subIndex1: 0,
|
|
||||||
tableData: [],
|
tableData: [],
|
||||||
createTime: "",
|
createTime: "",
|
||||||
id: "",
|
id: "",
|
||||||
@@ -112,56 +89,25 @@ export default {
|
|||||||
{ name: "无法执行" },
|
{ name: "无法执行" },
|
||||||
],
|
],
|
||||||
update: true,
|
update: true,
|
||||||
|
type: "",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
colConfigs0() {
|
colConfigs() {
|
||||||
return [
|
return [
|
||||||
{ prop: "groupOwnerName", label: "成员" },
|
{ prop: "userName", label: "成员" },
|
||||||
{ label: "预计送达居民", prop: "groupCount" },
|
{ prop: "customerCount", label: "预计送达居民"},
|
||||||
];
|
|
||||||
},
|
|
||||||
colConfigs1() {
|
|
||||||
return [
|
|
||||||
{ label: "居民群", prop: "groupName" },
|
|
||||||
{ label: "群人数", prop: "memberCount" },
|
|
||||||
{ slot: "groupOwnerId", label: "群主" },
|
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
onLoad(o) {
|
onLoad(o) {
|
||||||
this.id = o.id;
|
this.id = o.id;
|
||||||
this.createTime = o.time;
|
this.createTime = o.time;
|
||||||
|
this.type = o.type
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
tabClick(index) {
|
|
||||||
this.tabIndex = index;
|
|
||||||
if(this.tabIndex == 0) {
|
|
||||||
this.subsection = [
|
|
||||||
{ name: "未执行" },
|
|
||||||
{ name: "已执行" },
|
|
||||||
{ name: "无法执行" },
|
|
||||||
]
|
|
||||||
this.update0 = true
|
|
||||||
this.update1 = false
|
|
||||||
this.$forceUpdate()
|
|
||||||
} else if(this.tabIndex == 1) {
|
|
||||||
this.subsection = [
|
|
||||||
{ name: "未送达" },
|
|
||||||
{ name: "已送达" },
|
|
||||||
{ name: "无法送达" },
|
|
||||||
]
|
|
||||||
this.update0 = false
|
|
||||||
this.update1 = true
|
|
||||||
this.$forceUpdate()
|
|
||||||
}
|
|
||||||
this.getStatistics();
|
|
||||||
},
|
|
||||||
|
|
||||||
getDetail() {
|
getDetail() {
|
||||||
this.$http
|
this.$http.post(`/app/whchatmomentstask/queryDetailById?id=${this.id}`).then((res) => {
|
||||||
.post(`/app/appmasssendingtask/queryDetailById?id=${this.id}`)
|
|
||||||
.then((res) => {
|
|
||||||
if (res?.data) {
|
if (res?.data) {
|
||||||
this.detail = res.data;
|
this.detail = res.data;
|
||||||
}
|
}
|
||||||
@@ -169,7 +115,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
toDetail() {
|
toDetail() {
|
||||||
uni.navigateTo({ url: `./detail?id=${this.id}` });
|
uni.navigateTo({ url: `./detail?id=${this.id}&type=${this.type}` });
|
||||||
},
|
},
|
||||||
// 提醒发送
|
// 提醒发送
|
||||||
remindSend() {
|
remindSend() {
|
||||||
@@ -184,8 +130,8 @@ export default {
|
|||||||
});
|
});
|
||||||
this.currentClickTime = +new Date();
|
this.currentClickTime = +new Date();
|
||||||
let time = this.currentClickTime - this.firstClickTime;
|
let time = this.currentClickTime - this.firstClickTime;
|
||||||
if (time >= 3600000) {
|
if (time >= 3600000) {
|
||||||
this.$http.post("/app/appmasssendingtask/remindSend", null, {
|
this.$http.post("/app/whchatmomentstask/remindSend", null, {
|
||||||
params: {
|
params: {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
},
|
},
|
||||||
@@ -220,25 +166,23 @@ export default {
|
|||||||
},
|
},
|
||||||
// 获取数据
|
// 获取数据
|
||||||
getStatistics() {
|
getStatistics() {
|
||||||
this.$http
|
this.$http.post('/app/whchatmomentstask/detailStatistics', null, {
|
||||||
.post(`/app/appmasssendingtask/detailStatistics`, null, {
|
params: {
|
||||||
params: {
|
sendStatus: this.subIndex,
|
||||||
type: this.tabIndex,
|
taskId: this.id,
|
||||||
sendStatus: this.tabIndex==0? this.subIndex0: this.subIndex1,
|
current: this.current,
|
||||||
taskId: this.id,
|
size: 3000,
|
||||||
current: this.current,
|
},
|
||||||
size: 3000,
|
})
|
||||||
},
|
.then((res) => {
|
||||||
})
|
if (res?.data) {
|
||||||
.then((res) => {
|
this.info = res.data
|
||||||
if (res?.data) {
|
this.tableData = res.data.executedList.records
|
||||||
this.info = res.data;
|
setTimeout(()=>{
|
||||||
this.tableData = res.data.executedList.records;
|
this.getPieEcharts()
|
||||||
setTimeout(()=>{
|
}, 1000)
|
||||||
this.getPieEcharts();
|
}
|
||||||
}, 1000)
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 饼图
|
// 饼图
|
||||||
@@ -251,7 +195,7 @@ export default {
|
|||||||
color: ["#1684fc", "#ccc"],
|
color: ["#1684fc", "#ccc"],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: this.tabIndex == 0 ? "任务完成率" : "群发送达率",
|
name: "任务完成率",
|
||||||
type: "pie",
|
type: "pie",
|
||||||
radius: ["50%", "70%"],
|
radius: ["50%", "70%"],
|
||||||
avoidLabelOverlap: false,
|
avoidLabelOverlap: false,
|
||||||
@@ -273,11 +217,7 @@ export default {
|
|||||||
show: true,
|
show: true,
|
||||||
formatter: ({ name, value }) => {
|
formatter: ({ name, value }) => {
|
||||||
let num = value / this.info.planCount * 100
|
let num = value / this.info.planCount * 100
|
||||||
if (this.tabIndex == 0) {
|
return `{name|任务达成率\n\n}{value|${num}%}`
|
||||||
return num % 1==0? `{name|任务达成率\n\n}{value|${num}%}`: `{name|任务达成率\n\n}{value|${ num.toFixed(1) }%}`;
|
|
||||||
} else {
|
|
||||||
return num % 1==0? `{name|群发送达率\n\n}{value|${num}%}`: `{name|群发送达率\n\n}{value|${ num.toFixed(1) }%}`;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
|
|||||||
@@ -230,14 +230,18 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 切换分段器
|
// 切换分段器
|
||||||
changeSub(index) {
|
// 切换分段器
|
||||||
this.subIndex = index;
|
changeSub0(index) {
|
||||||
|
this.subIndex0 = index;
|
||||||
|
this.getStatistics();
|
||||||
|
},
|
||||||
|
changeSub1(index) {
|
||||||
|
this.subIndex1 = index;
|
||||||
this.getStatistics();
|
this.getStatistics();
|
||||||
},
|
},
|
||||||
// 获取数据
|
// 获取数据
|
||||||
getStatistics() {
|
getStatistics() {
|
||||||
this.$http
|
this.$http.post(`/app/appmasssendingtask/detailStatistics`, null, {
|
||||||
.post(`/app/appmasssendingtask/detailStatistics`, null, {
|
|
||||||
params: {
|
params: {
|
||||||
type: this.tabIndex,
|
type: this.tabIndex,
|
||||||
sendStatus: this.tabIndex==0? this.subIndex0: this.subIndex1,
|
sendStatus: this.tabIndex==0? this.subIndex0: this.subIndex1,
|
||||||
|
|||||||
@@ -103,17 +103,25 @@ export default {
|
|||||||
pictres: [],
|
pictres: [],
|
||||||
options: '',
|
options: '',
|
||||||
approver: [], //审批人
|
approver: [], //审批人
|
||||||
|
type: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad(o) {
|
onLoad(o) {
|
||||||
this.id = o.id
|
this.id = o.id
|
||||||
|
this.type = o.type
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(['user'])
|
...mapState(['user'])
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getDetail() {
|
getDetail() {
|
||||||
this.$http.post(`/app/appmasssendingtask/queryDetailById?id=${this.id}`).then(res=> {
|
let url = ''
|
||||||
|
if(this.type == 'ResidentsGroup') {
|
||||||
|
url = `/app/appmasssendingtask/queryDetailById?id=${this.id}`
|
||||||
|
} else {
|
||||||
|
url = `/app/whchatmomentstask/queryDetailById?id=${this.id}`
|
||||||
|
}
|
||||||
|
this.$http.post(url).then(res=> {
|
||||||
if (res?.data) {
|
if (res?.data) {
|
||||||
this.data = res.data
|
this.data = res.data
|
||||||
this.content = res.data.contents.filter(v=> v.msgType == 0)?.[0].content
|
this.content = res.data.contents.filter(v=> v.msgType == 0)?.[0].content
|
||||||
@@ -159,7 +167,14 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
examine() {
|
examine() {
|
||||||
this.$http.post(`/app/appmasssendingtask/examine`,null,{
|
// /app/whchatmomentstask/examine
|
||||||
|
let url = ''
|
||||||
|
if(this.type == 'ResidentsGroup') {
|
||||||
|
url = `/app/appmasssendingtask/examine`
|
||||||
|
} else {
|
||||||
|
url = `/app/whchatmomentstask/examine`
|
||||||
|
}
|
||||||
|
this.$http.post(url,null,{
|
||||||
params: {
|
params: {
|
||||||
pass: this.pass,
|
pass: this.pass,
|
||||||
id: this.id,
|
id: this.id,
|
||||||
|
|||||||
@@ -56,19 +56,14 @@ export default {
|
|||||||
},
|
},
|
||||||
submit() {
|
submit() {
|
||||||
if(this.sendType == 'ResidentsGroup') {
|
if(this.sendType == 'ResidentsGroup') {
|
||||||
this.getWxGroups().then(()=>{
|
this.getWxGroups()
|
||||||
setTimeout(() => {
|
|
||||||
uni.navigateBack()
|
|
||||||
}, 600)
|
|
||||||
})
|
|
||||||
} else if(this.sendType == 'Residents' || this.sendType == 'CircleOfFriends') {
|
} else if(this.sendType == 'Residents' || this.sendType == 'CircleOfFriends') {
|
||||||
this.getSendScope().then(()=>{
|
this.getSendScope()
|
||||||
setTimeout(() => {
|
|
||||||
uni.navigateBack()
|
|
||||||
}, 600)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
uni.setStorageSync('sendScope', this.sendScope)
|
uni.setStorageSync('sendScope', this.sendScope)
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateBack()
|
||||||
|
}, 600)
|
||||||
},
|
},
|
||||||
// 群发居民群
|
// 群发居民群
|
||||||
getWxGroups() {
|
getWxGroups() {
|
||||||
@@ -120,6 +115,7 @@ export default {
|
|||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.sendScope = uni.getStorageSync('sendScope') || ''
|
this.sendScope = uni.getStorageSync('sendScope') || ''
|
||||||
|
// 部门、网格
|
||||||
const girdArr = uni.getStorageSync('girdSelect')
|
const girdArr = uni.getStorageSync('girdSelect')
|
||||||
if(girdArr.length) {
|
if(girdArr.length) {
|
||||||
this.girdListIds = girdArr.map(e=>e.id)
|
this.girdListIds = girdArr.map(e=>e.id)
|
||||||
@@ -128,6 +124,7 @@ export default {
|
|||||||
if(deptArr.length) {
|
if(deptArr.length) {
|
||||||
this.deptListIds = deptArr.map(v=>v.id)
|
this.deptListIds = deptArr.map(v=>v.id)
|
||||||
}
|
}
|
||||||
|
// 性别
|
||||||
this.sex = uni.getStorageSync('gender')
|
this.sex = uni.getStorageSync('gender')
|
||||||
// 标签
|
// 标签
|
||||||
if(this.sendType == 'Residents') {
|
if(this.sendType == 'Residents') {
|
||||||
|
|||||||
Reference in New Issue
Block a user