Browse Source

爱心互助

master
jiangyy 3 years ago
parent
commit
0cd7874d77
  1. 3
      src/assets/scss/modules/management/form-main.scss
  2. 387
      src/views/modules/communityParty/heart/heartAudit.vue
  3. 374
      src/views/modules/communityParty/heart/heartFinish.vue
  4. 358
      src/views/modules/communityParty/heart/heartForm.vue
  5. 191
      src/views/modules/communityParty/heart/heartList.vue
  6. 338
      src/views/modules/communityParty/heart/heartPerson.vue
  7. 498
      src/views/modules/communityParty/heart/heartReview.vue

3
src/assets/scss/modules/management/form-main.scss

@ -30,6 +30,9 @@
.item_width_5{ .item_width_5{
width: 320px; width: 320px;
} }
.item_width_6{
width: 404px;
}
} }

387
src/views/modules/communityParty/heart/heartAudit.vue

@ -0,0 +1,387 @@
<template>
<div class="dialog-h-content scroll-h">
<div class="div_table">
<el-button size="small"
class="diy-button--add"
@click="handleReject">审核拒绝</el-button>
<el-button size="small"
class="diy-button--add"
@click="handleAudit('pass')">审核通过</el-button>
<el-table class="table"
:data="tableData"
border
@selection-change="selectionChange"
:height="tableHeight"
v-loading="tableLoading"
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}"
style="width: 100%">
<el-table-column type="selection"
:selectable="checkSelect"
width="55">
</el-table-column>
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50">
</el-table-column>
<el-table-column prop="realName"
header-align="center"
align="center"
label="姓名"
width="250">
</el-table-column>
<el-table-column prop="mobile"
header-align="center"
align="center"
label="手机"
width="100">
</el-table-column>
<el-table-column prop="idNum"
header-align="center"
align="center"
label="身份证"
min-width="180">
</el-table-column>
<el-table-column prop="nickName"
header-align="center"
align="center"
label="昵称"
width="120">
</el-table-column>
<el-table-column prop="signUpActNum"
header-align="center"
align="center"
label="报名活动个数"
width="120">
</el-table-column>
<el-table-column prop="signInActNum"
header-align="center"
align="center"
label="实际参加活动个数"
width="120">
</el-table-column>
<el-table-column prop="obtainPointsActNum"
header-align="center"
align="center"
label="获得积分活动个数"
width="120">
</el-table-column>
<el-table-column prop="signUpTime"
header-align="center"
align="center"
label="报名时间"
width="120">
</el-table-column>
<el-table-column prop="statusShow"
header-align="center"
align="center"
label="状态"
width="120">
</el-table-column>
</el-table>
</div>
<!-- 拒绝理由 -->
<el-dialog :visible.sync="cancleShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:append-to-body="true"
:title="'拒绝理由'"
width="550px"
top="5vh"
class="dialog-h"
@closed="cancleDiaClose">
<div style="padding:30px">
<el-input class="item_width_5"
type="textarea"
maxlength="100"
show-word-limit
:rows="4"
placeholder="请输入拒绝理由"
v-model="cancelReason"></el-input>
<div style="display:flex; justify-content: center;margin-top:20px">
<el-button style="margin-left:30px"
size="small"
class="diy-button--search"
@click="cancleDiaClose">取消</el-button>
<el-button style="margin-left:10px"
size="small"
class="diy-button--reset"
@click="handleAudit('refused')">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
let loading //
export default {
data () {
return {
tableLoading: false,
actId: '',
tableData: [],
actUserRelationIdList: [],
cancelReason: '',
cancleShow: false,//
}
},
components: {},
mounted () {
},
methods: {
async initTable (actId) {
this.actId = actId
await this.loadTable()
},
checkSelect (row, index) {
//auditingpassedrefusedcanceled
let isChecked = false;
if (row.status === 'auditing') { //
isChecked = true
} else {
isChecked = false
}
return isChecked
},
selectionChange (selection) {
this.actUserRelationIdList = []
this.actUserRelationIdList = selection
},
//form
async loadTable () {
this.tableLoading = true
// const url = '/heart/work/act/userlist'
const url = 'http://yapi.elinkservice.cn/mock/245/heart/work/act/userlist'
let params = {
actId: this.actId
}
const { data, code, msg } = await requestPost(url, params)
this.tableLoading = false
if (code === 0) {
if (data.list && data.list.length > 0) {
data.list.forEach(item => {
//auditingpassedrefusedcanceled
if (item.status === 'auditing') {
item.statusShow = '待审核'
} else if (item.status === 'passed') {
item.statusShow = '已通过'
} else if (item.status === 'refused') {
item.statusShow = '已拒绝'
} else if (item.status === 'canceled') {
item.statusShow = '已取消'
} else {
item.statusShow = ''
}
});
this.tableData = [...data.list]
} else {
this.tableData = []
}
} else {
this.$message.error(msg)
}
},
handleReject () {
// if (this.actUserRelationIdList.length === 0) {
// this.$message({
// type: "info",
// message: ""
// });
// return false
// }
this.cancleShow = true
},
async handleComfirm (row, tableIndex) {
let valiMsg = this.validata(row)
if (valiMsg) {
this.$message({
type: 'warning',
message: valiMsg
})
return false
}
this.addReview(row, tableIndex)
},
async addReview (row, tableIndex) {
let url = "/gov/org/placepatrolreviewrecord/add"
if (row.placePatrolReviewRecordId) {
url = "/gov/org/placepatrolreviewrecord/edit"
}
let params = JSON.parse(JSON.stringify(row))
params.inspectors = params.inspectorArray.join(',')
params.reviewTime = params.reviewTime + ' 00:00:00'
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
let array = data.reviewTime.split(' ')
data.reviewTime = array[0]
data.isEdit = false
data.isNew = false
this.$set(this.tableData, tableIndex, data)
} else {
this.$message.error(msg)
}
},
async handleAudit (type) {
if (this.actUserRelationIdList.length === 0) {
this.$message({
type: "info",
message: "请选择人员"
});
return false
}
if (type = 'refused' && !this.cancelReason) {
this.$message({
type: "info",
message: "请填写拒绝理由"
});
return false
}
const url = "/heart/work/actuser/audit-user"
// const url = "http://yapi.elinkservice.cn/mock/245/heart/work/actuser/audit-user"
let params = {
actId: this.actId,
type: type,
rejectReason: this.cancelReason,
actUserRelationIdList: this.actUserRelationIdList
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.$message({
type: "success",
message: "操作成功"
});
this.loadTable()
} else {
this.$message.error(msg)
}
},
cancleDiaClose () {
this.cancelReason = ''
this.cancleShow = false//
},
handleCancle () {
this.$emit('dialogCancle')
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
tableHeight () {
return (this.clientHeight - 360)
},
...mapGetters(['clientHeight'])
},
props: {
resultList: {
type: Array,
default: []
}
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/buttonstyle.scss";
.item_width_1 {
width: 250px;
}
.item_width_2 {
width: 100px;
}
.div_table {
margin-top: 10px;
.table {
margin-top: 10px;
}
}
.div_btn {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
</style>

374
src/views/modules/communityParty/heart/heartFinish.vue

@ -0,0 +1,374 @@
<template>
<div class="dialog-h-content scroll-h">
<div>
<el-form ref="ref_form"
:inline="false"
:model="formData"
:rules="dataRule"
class="div_form ">
<el-form-item label="实际活动时间"
label-width="150px"
style="display: block"
prop="actualStartTime">
<el-date-picker v-model="formData.actualStartTime"
class="list_item_width_3"
type="datetime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
placeholder="开始时间">
</el-date-picker>
<span class="data-tag"></span>
<el-date-picker v-model="formData.actualEndTime"
class="list_item_width_3 data-tag"
type="datetime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="积分发放"
label-width="150px"
style="display: block"
prop="actualStartTime">
</el-form-item>
<div class="div_table">
<el-table class="m_table"
:data="tableData"
border
:height="tableHeight"
v-loading="tableLoading"
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}">
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50">
</el-table-column>
<el-table-column prop="realName"
header-align="center"
align="center"
label="姓名"
width="150">
</el-table-column>
<el-table-column prop="nickName"
header-align="center"
align="center"
label="昵称"
width="120">
</el-table-column>
<el-table-column prop="signUpTime"
header-align="center"
align="center"
label="报名时间"
width="150">
</el-table-column>
<el-table-column prop="signInFlagShow"
header-align="center"
align="center"
label="是否签到"
width="100">
</el-table-column>
<el-table-column prop="grantPointShow"
header-align="center"
align="center"
label="操作"
min-width="200">
<template slot-scope="scope">
<el-radio v-model="scope.row.grantPointShow"
label="1">给分</el-radio>
<el-radio v-model="scope.row.grantPointShow"
label="2">不给分</el-radio>
</template>
</el-table-column>
<el-table-column prop="denyRewardReason"
header-align="center"
align="center"
label="理由"
min-width="350">
<template slot-scope="scope">
<el-input class="item_width_5"
placeholder="请输入理由"
v-model="scope.row.denyRewardReason">
</el-input>
</template>
</el-table-column>
</el-table>
</div>
</el-form>
</div>
<div class="div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button type="primary"
size="small"
@click="handleConfirm"> </el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
let loading //
export default {
data () {
return {
tableLoading: false,
actId: '',
tableData: [],
formData: {
actId: '',
actualStartTime: '',
actualEndTime: '',
}
}
},
components: {},
mounted () {
},
methods: {
async initTable (actId) {
this.actId = actId
this.formData.actId = actId
this.formData.actualStartTime = this.actStartTime
this.formData.actualEndTime = this.actEndTime
await this.loadTable()
},
//
async hancleChangeTeam (row, index, tableIndex) {
this.tableData[tableIndex].inspectorArray = [...[]]
let teamId = this.teamsList[index].teamId
await this.loadInspectors(teamId, tableIndex)
},
//
async loadInspectors (teamId, tableIndex) {
const url = '/gov/org/placepatrolteamstaff/getlist'
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteamstaff/getlist'
let params = {
teamId: teamId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// let obj = this.tableData[tableIndex]
this.tableData[tableIndex].inspectorsList = [...data]
// this.tableData[tableIndex]=
// obj.inspectorsList = data
// this.$set(this.tableData, tableIndex, obj)
console.log(this.tableData)
} else {
this.$message.error(msg)
}
},
//form
async loadTable () {
this.tableLoading = true
// const url = '/heart/work/act/userlist'
const url = 'http://yapi.elinkservice.cn/mock/245/heart/work/act/userlist'
let params = {
actId: this.actId
}
const { data, code, msg } = await requestPost(url, params)
this.tableLoading = false
if (code === 0) {
if (data.list && data.list.length > 0) {
data.list.forEach(item => {
if (item.signInFlag) {
item.signInFlagShow = '是'
item.grantPointShow = '1'
item.grantPoint = true
item.denyRewardReason = ''
} else {
item.signInFlagShow = '否'
item.grantPointShow = '2'
item.grantPoint = false
item.denyRewardReason = '活动未签到'
}
});
this.tableData = [...data.list]
} else {
this.tableData = []
}
} else {
this.$message.error(msg)
}
},
async handleConfirm () {
if (!this.formData.actualStartTime || !this.formData.actualEndTime) {
this.$message({
type: "info",
message: '请填写实际活动时间'
});
return false
}
let userList = []
let reqmsg = ''
// actUserRelationId grantPoint true:false denyRewardReason
this.tableData.forEach(item => {
let obj = {}
obj.actUserRelationId = item.userId
obj.denyRewardReason = item.denyRewardReason
if (item.grantPointShow === '1') {
obj.grantPoint = true
} else {
obj.grantPoint = false
if (!item.denyRewardReason) {
reqmsg = '不给分的理由必填'
}
}
userList.push(obj)
});
if (reqmsg) {
this.$message({
type: "info",
message: reqmsg
});
return false
} else {
console.log(userList)
this.finishAct(userList)
}
},
async finishAct (userList) {
// let url = "/heart/work/act/finish"
let url = "http://yapi.elinkservice.cn/mock/245/heart/work/act/finish"
let params = {
userList: userList,
...this.formData
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.$message({
type: "success",
message: '操作成功'
});
} else {
this.$message.error(msg)
}
},
handleCancle () {
this.$emit('finishDiaClose')
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
actualStartTime: [
{ required: true, message: '活动时间不能为空', trigger: 'blur' }
],
}
},
tableHeight () {
return (this.clientHeight - 440)
},
...mapGetters(['clientHeight'])
},
props: {
actStartTime: {
type: String,
default: ''
},
actEndTime: {
type: String,
default: ''
},
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/form-main.scss";
.div_table {
display: flex;
justify-content: center;
.m_table {
flex: 0 0 1200px;
// padding: 20px;
}
}
</style>

358
src/views/modules/communityParty/heart/heartForm.vue

@ -14,7 +14,7 @@
<el-form-item label="主办方" <el-form-item label="主办方"
prop="sponsorId" prop="sponsorId"
label-width="150px"> label-width="150px">
<el-cascader class="customer_cascader" <el-cascader class="item_width_6"
ref="myCascader" ref="myCascader"
v-model="agencyIdArray" v-model="agencyIdArray"
:options="orgOptions" :options="orgOptions"
@ -27,7 +27,7 @@
prop="title" prop="title"
label-width="150px" label-width="150px"
style="display: block"> style="display: block">
<el-input class="item_width_5" <el-input class="item_width_6"
type="textarea" type="textarea"
maxlength="50" maxlength="50"
show-word-limit show-word-limit
@ -37,6 +37,7 @@
</el-form-item> </el-form-item>
<el-form-item label="封面" <el-form-item label="封面"
prop="coverPic"
label-width="150px" label-width="150px"
style="display:block"> style="display:block">
<el-upload :class="['avatar-uploader', {'hide': hideUploadBtn}] " <el-upload :class="['avatar-uploader', {'hide': hideUploadBtn}] "
@ -78,7 +79,7 @@
prop="actQuota" prop="actQuota"
style="display: block" style="display: block"
label-width="150px"> label-width="150px">
<el-input-number class="item_width_5" <el-input-number class="item_width_6"
v-model="formData.actQuota" v-model="formData.actQuota"
label="活动人数"></el-input-number> label="活动人数"></el-input-number>
</el-form-item> </el-form-item>
@ -87,7 +88,7 @@
prop="reward" prop="reward"
style="display: block" style="display: block"
label-width="150px"> label-width="150px">
<el-input-number class="item_width_5" <el-input-number class="item_width_6"
v-model="formData.reward" v-model="formData.reward"
label="活动积分"></el-input-number> label="活动积分"></el-input-number>
</el-form-item> </el-form-item>
@ -95,7 +96,7 @@
prop="sponsorContacts" prop="sponsorContacts"
label-width="150px" label-width="150px"
style="display: block"> style="display: block">
<el-input class="item_width_5" <el-input class="item_width_6"
maxlength="10" maxlength="10"
placeholder="请输入联系人" placeholder="请输入联系人"
v-model="formData.sponsorContacts"> v-model="formData.sponsorContacts">
@ -108,7 +109,7 @@
prop="sponsorTel" prop="sponsorTel"
label-width="150px" label-width="150px"
style="display: block"> style="display: block">
<el-input class="item_width_5" <el-input class="item_width_6"
maxlength="10" maxlength="10"
placeholder="请输入联系电话" placeholder="请输入联系电话"
v-model="formData.sponsorTel"> v-model="formData.sponsorTel">
@ -127,6 +128,7 @@
label-width="150px" label-width="150px"
style="display: block"> style="display: block">
<el-checkbox v-model="formData.auditSwitch"></el-checkbox> <el-checkbox v-model="formData.auditSwitch"></el-checkbox>
<span class="div-tooltip">选中后报名参加活动人员可以直接审核通过</span>
</el-form-item> </el-form-item>
@ -134,11 +136,12 @@
style="display: block" style="display: block"
prop="signUpEndTime" prop="signUpEndTime"
label-width="150px"> label-width="150px">
<el-date-picker v-model="formData.signUpEndTime" <el-date-picker class="item_width_6"
v-model="formData.signUpEndTime"
value-format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"
type="datetime" type="datetime"
placeholder="选择事件"> placeholder="选择时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
@ -146,7 +149,7 @@
prop="requirement" prop="requirement"
label-width="150px" label-width="150px"
style="display: block"> style="display: block">
<el-input class="item_width_5" <el-input class="item_width_6"
type="textarea" type="textarea"
maxlength="200" maxlength="200"
show-word-limit show-word-limit
@ -179,7 +182,7 @@
prop="signInRadius" prop="signInRadius"
style="display: block" style="display: block"
label-width="150px"> label-width="150px">
<el-input-number class="item_width_5" <el-input-number class="item_width_6"
v-model="formData.signInRadius" v-model="formData.signInRadius"
label="签到有效范围"></el-input-number> label="签到有效范围"></el-input-number>
</el-form-item> </el-form-item>
@ -257,20 +260,20 @@
</el-form-item> </el-form-item>
</div> </div>
</div> </div>
<el-form-item label="活动内容" <el-form-item label="活动详情"
prop="actContent" prop="actContentHtml"
label-width="150px"> label-width="150px">
<!-- <div style="width:400px"> --> <!-- <div style="width:400px"> -->
<Tinymce class="tinymce_view" <Tinymce class="tinymce_view"
v-if="formType!='detail'" v-if="formType!='detail'"
v-model="formData.actContent" v-model="formData.actContentHtml"
:height="250" :height="250"
style="width:1000px" style="width:1000px"
:customerId="customerId" :customerId="customerId"
placeholder="在这里输入文字" /> placeholder="在这里输入文字" />
<p v-else <p v-else
class="text_p" class="text_p"
v-html="formData.actContent"></p> v-html="formData.actContentHtml"></p>
<!-- </div> --> <!-- </div> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -325,54 +328,108 @@ export default {
let nowData = Date.now() let nowData = Date.now()
return time.getTime() > nowData return time.getTime() > nowData
} }
const valActTime = (rule, value, callback) => {
if (value === '' || value === null) {
callback(new Error('请选择活动开始时间'))
} else if (!this.formData.actEndTime) {
callback(new Error('请选择活动结束时间'))
} else {
callback()
}
}
const valSigninTime = (rule, value, callback) => {
if (value === '' || value === null) {
callback(new Error('请选择签到开始时间'))
} else if (!this.formData.signInEndTime) {
callback(new Error('请选择签到结束时间'))
} else {
callback()
}
}
return { return {
formType: 'add', // addeditdetail formType: 'add', // addeditdetail
btnDisable: false, btnDisable: false,
customerId: '', customerId: '',
actId: '',
valActTime: valActTime,
valSigninTime: valSigninTime,
placesList: [],//
teamsList: [],//
inspectorsList: [],//
placePatrolRecordId: '',
formData: { formData: {
actAddress: "市北区海泊桥青岛市市北区政府(延吉路北)", actAddress: "",
actContent: "", actContentHtml: "",
actContent: {},
actDraftId: "", actDraftId: "",
actEndTime: "2022-08-30 13:34", actEndTime: "",
actId: "", actId: "",
actLatitude: 36.08743, actLatitude: null,
actLongitude: 120.37479, actLongitude: null,
actQuota: "10", actQuota: undefined,
actStartTime: "2022-07-30 13:34", actStartTime: "",
actType: "heart", actType: "heart",
auditSwitch: true, auditSwitch: false,
coverPic: "https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/20220629/db05fed5cc56417299364ab8362ac9a0.png", coverPic: "",
coverPicAuditStatus: "", coverPicAuditStatus: "",
customerId: "45687aa479955f9d06204d415238f7cc", customerId: "",
noticePassedPeople: false, noticePassedPeople: false,
requirement: "", requirement: "",
reward: "10", reward: undefined,
signInAddress: "市北区海泊桥青岛市市北区政府(延吉路北)", signInAddress: "",
signInEndTime: "2022-07-30 10:34", signInEndTime: "",
signInLatitude: 36.08743, signInLatitude: null,
signInLongitude: 120.37479, signInLongitude: null,
signInRadius: "100", signInRadius: undefined,
signInStartTime: "2022-07-29 13:34", signInStartTime: "",
signUpEndTime: "2022-07-28 13:34", signUpEndTime: "",
sponsorContacts: "张三", sponsorContacts: "",
sponsorId: "7b6f9a9f9f38d5f9fa7ce94a93d6eb28", sponsorId: "",
sponsorName: "市北区", sponsorPath: '',
sponsorTel: "15111111111", sponsorName: "",
sponsorType: "agency", sponsorTel: "",
sponsorType: "",
target: "", target: "",
title: "312313", title: "",
volunteerLimit: false, volunteerLimit: false,
}, },
formDataTemp: {
actAddress: "山东省青岛市市北区安达路",
actContent: {},
actContentHtml: "",
actDraftId: "",
actEndTime: "2022-07-20 00:00",
actId: "",
actLatitude: 36.102321679746424,
actLongitude: 120.37441423359928,
actQuota: 50,
actStartTime: "2022-07-15 00:00",
actType: "heart",
auditSwitch: true,
coverPic: "",
coverPicAuditStatus: "",
customerId: "",
noticePassedPeople: false,
requirement: "报名条件报名条件报名条件",
reward: 100,
signInAddress: "山东省青岛市市南区南京路79号丁",
signInEndTime: "2022-07-14 11:00",
signInLatitude: 36.07208450171733,
signInLongitude: 120.38920734352655,
signInRadius: 100,
signInStartTime: "2022-07-14 10:00",
signUpEndTime: "2022-07-13 00:00",
sponsorContacts: "王二麻",
sponsorPath: "7b6f9a9f9f38d5f9fa7ce94a93d6eb28,63d5ff92ea981b1c58e4914ac894c610",
sponsorId: "7b6f9a9f9f38d5f9fa7ce94a93d6eb28",
sponsorName: "市北区",
sponsorTel: "1511111111",
sponsorType: "agency",
target: "",
title: "31231",
volunteerLimit: true,
},
orgOptions: [], orgOptions: [],
orgOptionProps: { orgOptionProps: {
@ -397,10 +454,10 @@ export default {
// upload_url: '', // URL // upload_url: '', // URL
upload_name: '', // upload_name: '', //
replayImgList: [ replayImgList: [
{ // {
id: '1', // id: '1',
url: 'https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/20220629/db05fed5cc56417299364ab8362ac9a0.png' // url: 'https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/20220629/db05fed5cc56417299364ab8362ac9a0.png'
} // }
], ],
hideUploadBtn: false hideUploadBtn: false
@ -412,23 +469,29 @@ export default {
this.initMap() this.initMap()
this.loadSponsorlist() this.loadSponsorlist()
// this.replayImgList.push() // this.replayImgList.push()
}, },
methods: { methods: {
async initForm (type, placePatrolRecordId) { async initForm (type, actId) {
this.$refs.ref_form.resetFields(); this.$refs.ref_form.resetFields();
this.startLoading()
this.formData = JSON.parse(JSON.stringify(this.formDataTemp));
this.agencyIdArray = this.formData.sponsorPath.split(',')
this.formType = type this.formType = type
if (placePatrolRecordId) { if (actId) {
this.placePatrolRecordId = placePatrolRecordId this.startLoading()
this.formData.placePatrolRecordId = placePatrolRecordId this.actId = actId
this.formData.actId = actId
await this.loadFormData() await this.loadFormData()
this.endLoading()
} }
this.endLoading()
}, },
// //
@ -457,39 +520,53 @@ export default {
if (obj) { if (obj) {
this.formData.sponsorId = obj.gridId this.formData.sponsorId = obj.gridId
this.formData.sponsorName = obj.agencyName this.formData.sponsorName = obj.agencyName
this.formData.sponsorPath = this.agencyIdArray.join(',')
if (obj.level === 'agency') {
if (obj.level === 'agency') {
this.formData.sponsorType = 'agency' this.formData.sponsorType = 'agency'
} else { } else {
this.formData.sponsorType = 'grid' this.formData.sponsorType = 'grid'
} }
} else { } else {
this.formData.sponsorId = '' this.formData.sponsorId = ''
this.formData.sponsorPath = ''
this.formData.sponsorName = '' this.formData.sponsorName = ''
this.formData.sponsorType = '' this.formData.sponsorType = ''
} }
}, },
//form //form
async loadFormData () { async loadFormData () {
const url = '/gov/org/placepatrolrecord/detail' const url = '/heart/work/act/detail'
let params = { let params = {
placePatrolRecordId: this.placePatrolRecordId actId: this.actId
} }
const { data, code, msg } = await requestPost(url, params) const { data, code, msg } = await requestPost(url, params)
if (code === 0) { if (code === 0) {
data.inspectorArray = data.inspectors.split(',') debugger
this.formData = { ...data } this.formData = JSON.parse(JSON.stringify(data));
this.agencyIdArray = this.formData.sponsorPath.split(',')
if (this.formData.actContent && this.formData.actContent.length > 0) {
this.formData.actContentHtml = this.formData.actContent[0].content
}
if (this.formData.coverPic) {
let obj = {
id: '111',
url: this.formData.coverPic
}
this.replayImgList = []
this.replayImgList.push(obj)
this.hideUploadBtn = true
}
} else { } else {
@ -497,30 +574,40 @@ export default {
} }
}, },
async handleComfirm () { async handleComfirm () {
console.log(this.formData) console.log(this.formData)
// this.btnDisable = true
// setTimeout(() => { this.btnDisable = true
// this.btnDisable = false setTimeout(() => {
// }, 10000) this.btnDisable = false
// this.$refs['ref_form'].validate((valid, messageObj) => { }, 3000)
// if (!valid) {
// app.util.validateRule(messageObj) this.$refs['ref_form'].validate((valid, messageObj) => {
// this.btnDisable = false
// } else { if (!valid) {
// this.addRecord()
// } app.util.validateRule(messageObj)
this.btnDisable = false
// }) } else {
this.addHeartAct()
}
})
}, },
async addRecord () { async addHeartAct () {
this.formData.actContent = this.dormatHtml(this.formData.actContent) let obj = {
contentType: 'rich_text',
content: this.dormatHtml(this.formData.actContentHtml)
}
this.formData.actContent = []
this.formData.actContent.push(obj)
this.formData.customerId = this.customerId
let url = "/gov/org/placepatrolrecord/add" let url = "/heart/work/act/publishV2"
// let url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolrecord/add" // let url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolrecord/add"
this.formData.inspectors = this.formData.inspectorArray.join(',')
const { data, code, msg } = await requestPost(url, this.formData) const { data, code, msg } = await requestPost(url, this.formData)
@ -749,39 +836,41 @@ export default {
resetData () { resetData () {
this.formData = { this.formData = {
actAddress: "市北区海泊桥青岛市市北区政府(延吉路北)", actAddress: "",
actContent: "", actContentHtml: "",
actContent: {},
actDraftId: "", actDraftId: "",
actEndTime: "2022-08-30 13:34", actEndTime: "",
actId: "", actId: "",
actLatitude: 36.08743, actLatitude: null,
actLongitude: 120.37479, actLongitude: null,
actQuota: "10", actQuota: undefined,
actStartTime: "2022-07-30 13:34", actStartTime: "",
actType: "heart", actType: "heart",
auditSwitch: true, auditSwitch: false,
coverPic: "https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/20220629/db05fed5cc56417299364ab8362ac9a0.png", coverPic: "",
coverPicAuditStatus: "", coverPicAuditStatus: "",
customerId: "45687aa479955f9d06204d415238f7cc", customerId: "",
noticePassedPeople: false, noticePassedPeople: false,
requirement: "", requirement: "",
reward: "10", reward: undefined,
signInAddress: "市北区海泊桥青岛市市北区政府(延吉路北)", signInAddress: "",
signInEndTime: "2022-07-30 10:34", signInEndTime: "",
signInLatitude: 36.08743, signInLatitude: null,
signInLongitude: 120.37479, signInLongitude: null,
signInRadius: "100", signInRadius: undefined,
signInStartTime: "2022-07-29 13:34", signInStartTime: "",
signUpEndTime: "2022-07-28 13:34", signUpEndTime: "",
sponsorContacts: "张三", sponsorContacts: "",
sponsorId: "7b6f9a9f9f38d5f9fa7ce94a93d6eb28", sponsorId: "",
sponsorName: "市北区", sponsorPath: '',
sponsorTel: "15111111111", sponsorName: "",
sponsorType: "agency", sponsorTel: "",
sponsorType: "",
target: "", target: "",
title: "312313", title: "",
volunteerLimit: false, volunteerLimit: false,
} }
@ -806,31 +895,50 @@ export default {
dataRule () { dataRule () {
return { return {
gridId: [ sponsorId: [
{ required: true, message: '场所网格不能为空', trigger: 'blur' } { required: true, message: '主办方不能为空', trigger: 'change' }
],
ninePlaceVal: [
{ required: true, message: '场所类型不能为空', trigger: 'blur' },
], ],
placeOrgId: [ title: [
{ required: true, message: '场所名称不能为空', trigger: 'blur' } { required: true, message: '活动标题不能为空', trigger: 'change' },
], ],
placePatrolTeamId: [
{ required: true, message: '分队不能为空', trigger: 'blur' } coverPic: [
{ required: true, message: '封面图不能为空', trigger: 'change' }
], ],
inspectorArray: [ actContentHtml: [
{ required: true, message: '巡检人员不能为空', trigger: 'blur' } { required: true, message: '活动详情不能为空', trigger: 'change' }
],
actAddress: [
{ required: true, message: '活动地点不能为空', trigger: 'change' }
], ],
firstTime: [ actStartTime: [
{ required: true, message: '首次巡查时间不能为空', trigger: 'blur' } { required: true, validator: this.valActTime, message: '活动时间不能为空', trigger: 'change' }
], ],
detailed: [ actQuota: [
{ required: true, message: '隐患明细不能为空', trigger: 'blur' } { required: true, message: '活动人数不能为空', trigger: 'change' }
],
reward: [
{ required: true, message: '活动积分不能为空', trigger: 'change' }
],
signUpEndTime: [
{ required: true, message: '报名截止时间不能为空', trigger: 'change' }
],
signInStartTime: [
{ required: true, validator: this.valSigninTime, message: '签到时间不能为空', trigger: 'change' }
],
signInAddress: [
{ required: true, message: '签到地点不能为空', trigger: 'change' }
],
signInRadius: [
{ required: true, message: '签到有效范围不能为空', trigger: 'change' }
],
sponsorContacts: [
{ required: true, message: '联系人不能为空', trigger: 'change' }
],
sponsorTel: [
{ required: true, message: '联系电话不能为空', trigger: 'change' }
], ],
firstResult: [
{ required: true, message: '首次巡查结果不能为空', trigger: 'blur' }
]
} }
}, },
@ -848,6 +956,10 @@ export default {
.avatar-uploader { .avatar-uploader {
margin: 0 0 0 20px; margin: 0 0 0 20px;
} }
.div-tooltip {
margin-left: 10px;
color: red;
}
</style> </style>
<style lang="scss"> <style lang="scss">

191
src/views/modules/communityParty/heart/heartList.vue

@ -97,29 +97,29 @@
min-width="180"> min-width="180">
</el-table-column> </el-table-column>
<el-table-column prop="actactStartTime" <el-table-column prop="actStartTime"
header-align="center" header-align="center"
align="center" align="center"
label="活动时间" label="活动时间"
min-width="180"> min-width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{scope.row.actactStartTime+'至'+scope.row.actactEndTime}}</span> <span>{{scope.row.actStartTime+'至'+scope.row.actEndTime}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="signUpactEndTime" <el-table-column prop="signUpEndTime"
header-align="center" header-align="center"
align="center" align="center"
label="报名截止时间" label="报名截止时间"
min-width="110"> min-width="110">
</el-table-column> </el-table-column>
<el-table-column prop="status" <el-table-column prop="statusShow"
header-align="center" header-align="center"
align="center" align="center"
label="状态" label="状态"
min-width="100"> min-width="100">
</el-table-column> </el-table-column>
<el-table-column prop="firstResult" <el-table-column prop="richTextFlagShow"
header-align="center" header-align="center"
align="center" align="center"
label="来源" label="来源"
@ -128,7 +128,7 @@
<el-table-column label="操作" <el-table-column label="操作"
fixed="right" fixed="right"
width="440" width="240"
header-align="center" header-align="center"
align="center" align="center"
class="operate"> class="operate">
@ -137,27 +137,39 @@
class="div-table-button--detail" class="div-table-button--detail"
size="small" size="small"
@click="handleDetail(scope.row)">查看</el-button> @click="handleDetail(scope.row)">查看</el-button>
<el-button type="text"
<el-button v-if="scope.row.isMyPublish&&(scope.row.status==='signing_up' || scope.row.status==='end_sign_up' || scope.row.status==='enough')&&scope.row.richTextFlag"
type="text"
class="div-table-button--edit" class="div-table-button--edit"
size="small" size="small"
@click="handleEdit(scope.row)">修改</el-button> @click="handleEdit(scope.row)">修改</el-button>
<el-button type="text"
<el-button v-if="scope.row.isMyPublish&&scope.row.status==='signing_up' || scope.row.status==='end_sign_up' || scope.row.status==='enough'"
type="text"
class="div-table-button--edit" class="div-table-button--edit"
size="small" size="small"
@click="handleAudit(scope.row)">报名审核</el-button> @click="handleAudit(scope.row)">报名审核</el-button>
<el-button type="text"
<el-button v-if="scope.row.isMyPublish&&scope.row.status==='signing_up' || scope.row.status==='end_sign_up' || scope.row.status==='enough'"
type="text"
class="div-table-button--edit" class="div-table-button--edit"
size="small" size="small"
@click="handleCancleAct(scope.row)">取消活动</el-button> @click="handleCancleAct(scope.row)">取消活动</el-button>
<el-button type="text"
<el-button v-if="scope.row.isMyPublish&&scope.row.status==='in_progress' || scope.row.status==='finished'"
type="text"
class="div-table-button--edit" class="div-table-button--edit"
size="small" size="small"
@click="handlePerson(scope.row)">查看人员</el-button> @click="handlePerson(scope.row)">查看人员</el-button>
<el-button type="text"
<el-button v-if="scope.row.isMyPublish&&scope.row.status==='in_progress'"
type="text"
class="div-table-button--edit" class="div-table-button--edit"
size="small" size="small"
@click="handleFinishAct(scope.row)">结束活动</el-button> @click="handleFinishAct(scope.row)">结束活动</el-button>
<el-button type="text"
<el-button v-if="scope.row.isMyPublish&&scope.row.status==='finished' && !scope.row.summaryFlag"
type="text"
class="div-table-button--edit" class="div-table-button--edit"
size="small" size="small"
@click="handleReview(scope.row)">添加回顾</el-button> @click="handleReview(scope.row)">添加回顾</el-button>
@ -226,13 +238,13 @@
top="5vh" top="5vh"
class="dialog-h" class="dialog-h"
@closed="cancleDiaClose"> @closed="cancleDiaClose">
<div style="padding:50px"> <div style="padding:30px">
<el-input class="item_width_5" <el-input class="item_width_5"
type="textarea" type="textarea"
maxlength="100" maxlength="100"
show-word-limit show-word-limit
:rows="3" :rows="4"
placeholder="请输入取消理由" placeholder="请输入取消理由"
v-model="cancelReason"></el-input> v-model="cancelReason"></el-input>
<div style="display:flex; justify-content: center;margin-top:20px"> <div style="display:flex; justify-content: center;margin-top:20px">
@ -249,18 +261,56 @@
</el-dialog> </el-dialog>
<!-- 复查记录弹出框 --> <!-- 报名审核弹出框 -->
<el-dialog :visible.sync="auditShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'报名审核'"
width="80%"
top="5vh"
class="dialog-h"
@closed="auditDiaClose">
<heart-audit ref="ref_audit"></heart-audit>
</el-dialog>
<!-- 查看人员弹出框 -->
<el-dialog :visible.sync="personShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'查看人员'"
width="80%"
top="5vh"
class="dialog-h"
@closed="personDiaClose">
<heart-person ref="ref_person"></heart-person>
</el-dialog>
<!-- 活动结束弹出框 -->
<el-dialog :visible.sync="finishShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'活动结束'"
width="1350px"
top="5vh"
class="dialog-h"
@closed="finishDiaClose">
<heart-finish ref="ref_finish"
:actStartTime="actStartTime"
:actEndTime="actEndTime"
@finishDiaClose="finishDiaClose"></heart-finish>
</el-dialog>
<!-- 活动回顾弹出框 -->
<el-dialog :visible.sync="reviewShow" <el-dialog :visible.sync="reviewShow"
:close-on-click-modal="false" :close-on-click-modal="false"
:close-on-press-escape="false" :close-on-press-escape="false"
:title="'活动回顾'" :title="'活动回顾'"
width="80%" width="1350px"
top="5vh" top="5vh"
class="dialog-h" class="dialog-h"
@closed="diaClose"> @closed="reviewDiaClose">
<heart-review ref="ref_review" <heart-review ref="ref_review"
:statusList="statusList" @reviewDiaClose="reviewDiaClose"></heart-review>
@reviewDiaClose="diaClose"></heart-review>
</el-dialog> </el-dialog>
</div> </div>
@ -269,6 +319,9 @@
<script> <script>
import heartForm from './heartForm' import heartForm from './heartForm'
import heartAudit from './heartAudit'
import heartPerson from './heartPerson'
import heartFinish from './heartFinish'
import heartReview from './heartReview' import heartReview from './heartReview'
import { requestPost } from "@/js/dai/request"; import { requestPost } from "@/js/dai/request";
@ -321,7 +374,6 @@ export default {
label: '已取消' label: '已取消'
} }
],//list ],//list
placeTypeList: [],//list
formData: { formData: {
title: '',// title: '',//
@ -334,8 +386,10 @@ export default {
//form //form
formShow: false, formShow: false,
formTitle: '新增巡查', formTitle: '新增爱心互助',
actId: '', actId: '',
actStartTime: '',
actEndTime: '',
cancelReason: '', cancelReason: '',
cancleShow: false,// cancleShow: false,//
@ -347,7 +401,7 @@ export default {
} }
}, },
components: { components: {
heartForm, heartReview heartForm, heartAudit, heartPerson, heartFinish, heartReview
}, },
async created () { async created () {
@ -366,16 +420,13 @@ export default {
this.loadTable() this.loadTable()
}, },
async loadTable () { async loadTable () {
this.tableLoading = true this.tableLoading = true
const url = "/heart/work/act/inprogresslist" const url = "/heart/work/act/pagelist"
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolrecord/getlist" // const url = "http://yapi.elinkservice.cn/mock/245/heart/work/act/pagelist"
let params = { let params = {
customerId: this.customerId,
pageSize: this.pageSize, pageSize: this.pageSize,
pageNo: this.pageNo, pageNo: this.pageNo,
...this.formData ...this.formData
@ -384,10 +435,32 @@ export default {
const { data, code, msg } = await requestPost(url, params) const { data, code, msg } = await requestPost(url, params)
if (code === 0) { if (code === 0) {
this.total = 1000 this.total = data.total
this.tableData = data this.tableData = data.list
if (this.tableData && this.tableData.length > 0) { if (this.tableData && this.tableData.length > 0) {
this.tableData.forEach(element => {
if (element.richTextFlag) {
element.richTextFlagShow = '管理平台'
} else {
element.richTextFlagShow = '小程序'
}
//signing_up: end_sign_up; in_progress; enoughcanceled; finished
if (element.status === 'signing_up') {
element.statusShow = '报名中'
} else if (element.status === 'end_sign_up') {
element.statusShow = '截止报名'
} else if (element.status === 'in_progress') {
element.statusShow = '已开始'
} else if (element.status === 'enough') {
element.statusShow = '已报满'
} else if (element.status === 'canceled') {
element.statusShow = '已取消'
} else if (element.status === 'finished') {
element.statusShow = '已结束'
} else {
element.statusShow = ''
}
});
} }
} else { } else {
@ -396,8 +469,6 @@ export default {
this.tableLoading = false this.tableLoading = false
}, },
diaClose () { diaClose () {
this.$refs.ref_form.resetData() this.$refs.ref_form.resetData()
this.formShow = false this.formShow = false
@ -407,20 +478,12 @@ export default {
this.reviewShow = false this.reviewShow = false
}, },
diaClose () {
this.cancleShow = false//
this.auditShow = false//
this.personShow = false//
this.finishShow = false//
this.reviewShow = false//
},
handleDetail (row) { handleDetail (row) {
this.formTitle = '详情' this.formTitle = '详情'
this.formShow = true this.formShow = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.ref_form.initForm('detail', row.placePatrolRecordId) this.$refs.ref_form.initForm('detail', row.actId)
}) })
}, },
@ -436,14 +499,34 @@ export default {
this.formTitle = '编辑' this.formTitle = '编辑'
this.formShow = true this.formShow = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.ref_form.initForm('edit', row.placePatrolRecordId) this.$refs.ref_form.initForm('edit', row.actId)
}) })
}, },
handleAudit (row) { handleAudit (row) {
this.auditShow = true
this.$nextTick(() => {
this.$refs.ref_audit.initTable(row.actId)
})
},
handlePerson (row) {
this.personShow = true
this.$nextTick(() => {
this.$refs.ref_person.initTable(row.actId)
})
},
handleReview (row) {
this.reviewShow = true this.reviewShow = true
},
handleFinishAct (row) {
this.finishShow = true
// this.actStartTime = row.actStartTime
// this.actEndTime = row.actEndTime
this.actStartTime = '2022-06-30 10:00:00'
this.actEndTime = '2022-06-30 10:00:00'
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.ref_review.initTable(row.placePatrolRecordId) this.$refs.ref_finish.initTable(row.actId)
}) })
}, },
@ -485,19 +568,23 @@ export default {
} }
}, },
auditDiaClose () {
this.auditShow = false//
},
personDiaClose () {
this.personShow = false//
},
finishDiaClose () {
this.finishShow = false//
},
cancleDiaClose () { cancleDiaClose () {
this.cancelReason = '' this.cancelReason = ''
this.cancleShow = false// this.cancleShow = false//
}, },
diaClose () {
this.auditShow = false//
this.personShow = false//
this.finishShow = false//
this.reviewShow = false//
},
// //
resetSearch () { resetSearch () {

338
src/views/modules/communityParty/heart/heartPerson.vue

@ -0,0 +1,338 @@
<template>
<div class="dialog-h-content scroll-h">
<div class="div_table">
<el-table class="table"
:data="tableData"
border
:height="tableHeight"
v-loading="tableLoading"
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}"
style="width: 100%">
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50">
</el-table-column>
<el-table-column prop="realName"
header-align="center"
align="center"
label="姓名"
width="250">
</el-table-column>
<el-table-column prop="mobile"
header-align="center"
align="center"
label="手机"
width="100">
</el-table-column>
<el-table-column prop="idNum"
header-align="center"
align="center"
label="身份证"
min-width="180">
</el-table-column>
<el-table-column prop="nickName"
header-align="center"
align="center"
label="昵称"
width="120">
</el-table-column>
<el-table-column prop="signUpActNum"
header-align="center"
align="center"
label="报名活动个数"
width="120">
</el-table-column>
<el-table-column prop="signInActNum"
header-align="center"
align="center"
label="实际参加活动个数"
width="120">
</el-table-column>
<el-table-column prop="obtainPointsActNum"
header-align="center"
align="center"
label="获得积分活动个数"
width="120">
</el-table-column>
<el-table-column prop="signUpTime"
header-align="center"
align="center"
label="报名时间"
width="120">
</el-table-column>
<el-table-column prop="statusShow"
header-align="center"
align="center"
label="状态"
width="120">
</el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
let loading //
export default {
data () {
return {
tableLoading: false,
actId: '',
tableData: [],
actUserRelationIdList: [],
cancelReason: '',
cancleShow: false,//
}
},
components: {},
mounted () {
},
methods: {
async initTable (actId) {
this.actId = actId
await this.loadTable()
},
checkSelect (row, index) {
//auditingpassedrefusedcanceled
let isChecked = false;
if (row.status === 'auditing') { //
isChecked = true
} else {
isChecked = false
}
return isChecked
},
selectionChange (selection) {
this.actUserRelationIdList = []
this.actUserRelationIdList = selection
},
//form
async loadTable () {
this.tableLoading = true
// const url = '/heart/work/act/userlist'
const url = 'http://yapi.elinkservice.cn/mock/245/heart/work/act/userlist'
let params = {
actId: this.actId
}
const { data, code, msg } = await requestPost(url, params)
this.tableLoading = false
if (code === 0) {
if (data.list && data.list.length > 0) {
data.list.forEach(item => {
//auditingpassedrefusedcanceled
if (item.status === 'auditing') {
item.statusShow = '待审核'
} else if (item.status === 'passed') {
item.statusShow = '已通过'
} else if (item.status === 'refused') {
item.statusShow = '已拒绝'
} else if (item.status === 'canceled') {
item.statusShow = '已取消'
} else {
item.statusShow = ''
}
});
this.tableData = [...data.list]
} else {
this.tableData = []
}
} else {
this.$message.error(msg)
}
},
handleReject () {
// if (this.actUserRelationIdList.length === 0) {
// this.$message({
// type: "info",
// message: ""
// });
// return false
// }
this.cancleShow = true
},
async handleComfirm (row, tableIndex) {
let valiMsg = this.validata(row)
if (valiMsg) {
this.$message({
type: 'warning',
message: valiMsg
})
return false
}
this.addReview(row, tableIndex)
},
async addReview (row, tableIndex) {
let url = "/gov/org/placepatrolreviewrecord/add"
if (row.placePatrolReviewRecordId) {
url = "/gov/org/placepatrolreviewrecord/edit"
}
let params = JSON.parse(JSON.stringify(row))
params.inspectors = params.inspectorArray.join(',')
params.reviewTime = params.reviewTime + ' 00:00:00'
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
let array = data.reviewTime.split(' ')
data.reviewTime = array[0]
data.isEdit = false
data.isNew = false
this.$set(this.tableData, tableIndex, data)
} else {
this.$message.error(msg)
}
},
async handleAudit (type) {
if (this.actUserRelationIdList.length === 0) {
this.$message({
type: "info",
message: "请选择人员"
});
return false
}
if (type = 'refused' && !this.cancelReason) {
this.$message({
type: "info",
message: "请填写拒绝理由"
});
return false
}
const url = "/heart/work/act/audit-user"
// const url = "http://yapi.elinkservice.cn/mock/245/heart/work/act/audit-user"
let params = {
actId: this.actId,
type: type,
rejectReason: this.cancelReason,
actUserRelationIdList: this.actUserRelationIdList
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.$message({
type: "success",
message: "操作成功"
});
this.loadTable()
} else {
this.$message.error(msg)
}
},
cancleDiaClose () {
this.cancelReason = ''
this.cancleShow = false//
},
handleCancle () {
this.$emit('dialogCancle')
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
tableHeight () {
return (this.clientHeight - 360)
},
...mapGetters(['clientHeight'])
},
props: {
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/buttonstyle.scss";
.item_width_1 {
width: 250px;
}
.item_width_2 {
width: 100px;
}
.div_table {
margin-top: 10px;
.table {
margin-top: 10px;
}
}
.div_btn {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
</style>

498
src/views/modules/communityParty/heart/heartReview.vue

@ -1,138 +1,40 @@
<template> <template>
<div class="dialog-h-content scroll-h"> <div>
<div class="div_table"> <div class="dialog-h-content scroll-h">
<el-button size="small"
class="diy-button--add" <el-form ref="ref_form"
@click="handleAdd">新增</el-button> :inline="true"
:model="formData"
<el-table class="table" class="div_form ">
:data="tableData"
border <el-form-item label="活动回顾"
:height="tableHeight" prop="actContent"
v-loading="tableLoading" label-width="150px">
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}" <!-- <div style="width:400px"> -->
style="width: 100%"> <Tinymce class="tinymce_view"
<el-table-column label="序号" v-if="formType!='detail'"
header-align="center" v-model="formData.actContent"
align="center" :height="450"
type="index" style="width:1000px"
width="50"> :customerId="customerId"
</el-table-column> placeholder="在这里输入文字" />
<p v-else
<el-table-column prop="reviewTime" class="text_p"
header-align="center" v-html="formData.actContent"></p>
align="center" <!-- </div> -->
label="复查时间" </el-form-item>
width="250"> </el-form>
<template slot-scope="scope">
<div v-if="scope.row.isEdit">
<el-date-picker v-model="scope.row.reviewTime"
value-format="yyyy-MM-dd"
type="date"
placeholder="选择日期">
</el-date-picker>
</div>
<span v-else>{{scope.row.reviewTime}}</span>
</template>
</el-table-column>
<el-table-column prop="ninePlaceName"
header-align="center"
align="center"
label="分队名称"
width="280">
<template slot-scope="scope">
<div v-if="scope.row.isEdit">
<el-select class="item_width_1"
v-model="scope.row.placePatrolTeamId"
placeholder="请选择"
clearable>
<el-option v-for="(item,index) in teamsList"
@click.native="hancleChangeTeam(scope.row,index,scope.$index)"
:key="item.teamId"
:label="item.teamName"
:value="item.teamId">
</el-option>
</el-select>
</div>
<span v-else>{{scope.row.placePatrolTeamName}}</span>
</template>
</el-table-column>
<el-table-column prop="inspectorsNames"
header-align="center"
align="center"
label="检查人员"
min-width="380">
<template slot-scope="scope">
<div v-if="scope.row.isEdit">
<el-checkbox-group style="display:flex;flex-wrap:wrap"
v-model="scope.row.inspectorArray">
<el-checkbox v-for="item in scope.row.inspectorsList"
:key="item.id"
:label="item.id">{{item.name}}</el-checkbox>
</el-checkbox-group>
</div>
<span v-else>{{scope.row.inspectorsNames}}</span>
</template>
</el-table-column>
<el-table-column prop="reviewResult"
header-align="center"
align="center"
label="复查结论"
width="120">
<template slot-scope="scope">
<div v-if="scope.row.isEdit">
<el-select class="item_width_2"
v-model="scope.row.reviewResult"
placeholder="全部"
clearable>
<el-option v-for="item in resultList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<span v-else>{{scope.row.reviewResult==='0'?'合格':'不合格'}}</span>
</template>
</el-table-column>
<el-table-column label="操作"
fixed="right"
width="180"
header-align="center"
align="center"
class="operate">
<template slot-scope="scope">
<el-button v-if="scope.row.isEdit"
type="text"
style="color:#00A7A9;text-decoration: underline;"
size="small"
@click="handleComfirm(scope.row,scope.$index)">保存</el-button>
<el-button v-if="!scope.row.isEdit"
type="text"
style="color:#1C6AFD;text-decoration: underline;"
size="small"
@click="handleEdit(scope.row,scope.$index)">修改</el-button>
<el-button type="text"
style="color:#D51010;text-decoration: underline;"
size="small"
@click="handleDelete(scope.row,scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div> </div>
<!-- <div class="div_btn"> <div class="div_btn">
<el-button @click="handleCancle"> </el-button> <el-button size="small"
@click="handleCancle"> </el-button>
</div> --> <el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div>
</div> </div>
</template> </template>
@ -141,252 +43,119 @@ import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request' import { requestPost } from '@/js/dai/request'
import Tinymce from '@c/tinymce2/index.vue'
let loading // let loading //
export default { export default {
data () { data () {
return { return {
tableLoading: false, formType: 'add', // addeditdetail
placePatrolRecordId: '', btnDisable: false,
tableData: [], customerId: '',
actId: '',
formData: {
actContent: '',
},
} }
}, },
components: {}, components: { Tinymce },
mounted () { mounted () {
this.customerId = localStorage.getItem('customerId')
}, },
methods: { methods: {
async initTable (placePatrolRecordId) { async initForm (type, actId) {
this.placePatrolRecordId = placePatrolRecordId this.$refs.ref_form.resetFields();
await this.loadTeams() this.startLoading()
await this.loadTable()
},
//
async loadTeams () {
const url = '/gov/org/placepatrolteam/getlist'
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteam/getlist'
let params = {
isPage: false
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.teamsList = data.list
} else {
this.$message.error(msg)
}
},
//
async hancleChangeTeam (row, index, tableIndex) {
this.tableData[tableIndex].inspectorArray = [...[]]
let teamId = this.teamsList[index].teamId
await this.loadInspectors(teamId, tableIndex)
},
// this.formType = type
async loadInspectors (teamId, tableIndex) { if (actId) {
this.actId = actId
this.formData.actId = actId
const url = '/gov/org/placepatrolteamstaff/getlist'
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolteamstaff/getlist'
let params = {
teamId: teamId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// let obj = this.tableData[tableIndex]
this.tableData[tableIndex].inspectorsList = [...data]
// this.tableData[tableIndex]=
// obj.inspectorsList = data
// this.$set(this.tableData, tableIndex, obj)
console.log(this.tableData)
} else {
this.$message.error(msg)
} }
this.endLoading()
}, },
//form
async loadTable () {
this.tableLoading = true
const url = '/gov/org/placepatrolreviewrecord/getlist'
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolreviewrecord/getlist'
let params = {
placePatrolRecordId: this.placePatrolRecordId
}
const { data, code, msg } = await requestPost(url, params)
this.tableLoading = false
if (code === 0) {
if (data.list && data.list.length > 0) {
data.list.forEach(item => {
item.isEdit = false
item.isNew = false
let arrayInspectors = item.inspectors.split(',')
item.inspectorArray = [...arrayInspectors]
let arrayReviewTime = item.reviewTime.split(' ')
item.reviewTime = arrayReviewTime[0]
});
this.tableData = [...data.list] async handleComfirm () {
} else { console.log(this.formData)
this.tableData = [] // this.btnDisable = true
} // setTimeout(() => {
// this.btnDisable = false
// }, 10000)
// this.$refs['ref_form'].validate((valid, messageObj) => {
// if (!valid) {
// app.util.validateRule(messageObj)
// this.btnDisable = false
// } else {
// this.addRecord()
// }
} else { // })
this.$message.error(msg)
}
},
handleAdd () {
let obj = {
isNew: true,//
isEdit: true,//
placePatrolRecordId: this.placePatrolRecordId,
reviewTime: '',
placePatrolTeamId: '',
inspectors: '',
inspectorArray: [],
inspectorsList: [],
reviewResult: '',
}
this.tableData.push(obj)
}, },
async addRecord () {
this.formData.actContent = this.dormatHtml(this.formData.actContent)
async handleEdit (row, tableIndex) { let url = "/gov/org/placepatrolrecord/add"
let teamId = row.placePatrolTeamId // let url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolrecord/add"
await this.loadInspectors(teamId, tableIndex) this.formData.inspectors = this.formData.inspectorArray.join(',')
let rowData = JSON.parse(JSON.stringify(row)) const { data, code, msg } = await requestPost(url, this.formData)
rowData.isEdit = true
rowData.isNew = false
rowData.inspectorArray = rowData.inspectors.split(',')
console.log(rowData) if (code === 0) {
this.$set(this.tableData, tableIndex, rowData)
},
async handleComfirm (row, tableIndex) {
let valiMsg = this.validata(row)
if (valiMsg) {
this.$message({ this.$message({
type: 'warning', type: 'success',
message: valiMsg message: '操作成功'
}) })
return false this.resetData()
} this.$emit('dialogOk')
this.btnDisable = false
this.addReview(row, tableIndex)
},
async addReview (row, tableIndex) {
let url = "/gov/org/placepatrolreviewrecord/add"
if (row.placePatrolReviewRecordId) {
url = "/gov/org/placepatrolreviewrecord/edit"
}
let params = JSON.parse(JSON.stringify(row))
params.inspectors = params.inspectorArray.join(',')
params.reviewTime = params.reviewTime + ' 00:00:00'
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
let array = data.reviewTime.split(' ')
data.reviewTime = array[0]
data.isEdit = false
data.isNew = false
this.$set(this.tableData, tableIndex, data)
} else { } else {
this.btnDisable = false
this.$message.error(msg) this.$message.error(msg)
} }
}, },
validata (row) { dormatHtml (content) {
let message = '' let c = ''
if (row.reviewTime === '') { if (content.indexOf('DOCTYPE') != -1) {
message = message + '复查时间不能为空;' c = content.slice(45, -16);
}
if (row.placePatrolTeamId === '') {
message = message + '分队名称不能为空;'
} }
if (row.inspectorArray.length === 0) { console.log('content', typeof content)
message = message + '检查人员不能为空;' return c || content
}
if (row.reviewResult === '') {
message = message + '复查结论不能为空;'
}
return message
}, },
async handleDelete (row, tableIndex) {
this.$confirm("确认删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
if (row.placePatrolReviewRecordId) {//id
this.deleteRecord(row, tableIndex)
} else {//id
this.tableData.splice(tableIndex, 1);
}
})
.catch(err => {
if (err == "cancel") {
}
});
},
async deleteRecord (row, tableIndex) {
const url = "/gov/org/placepatrolreviewrecord/del"
let params = {
placePatrolReviewRecordId: row.placePatrolReviewRecordId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// this.$message({
// type: "success",
// message: ""
// });
this.tableData.splice(tableIndex, 1);
} else {
this.$message.error(msg)
}
},
handleCancle () { handleCancle () {
this.resetData()
this.$emit('dialogCancle') this.$emit('dialogCancle')
}, },
resetData () {
this.formData = {
actContent: '',
}
},
// //
startLoading () { startLoading () {
loading = Loading.service({ loading = Loading.service({
@ -404,47 +173,62 @@ export default {
} }
}, },
computed: { computed: {
tableHeight () { dataRule () {
return {
return (this.clientHeight - 360)
gridId: [
{ required: true, message: '场所网格不能为空', trigger: 'blur' }
],
ninePlaceVal: [
{ required: true, message: '场所类型不能为空', trigger: 'blur' },
],
placeOrgId: [
{ required: true, message: '场所名称不能为空', trigger: 'blur' }
],
placePatrolTeamId: [
{ required: true, message: '分队不能为空', trigger: 'blur' }
],
inspectorArray: [
{ required: true, message: '巡检人员不能为空', trigger: 'blur' }
],
firstTime: [
{ required: true, message: '首次巡查时间不能为空', trigger: 'blur' }
],
detailed: [
{ required: true, message: '隐患明细不能为空', trigger: 'blur' }
],
firstResult: [
{ required: true, message: '首次巡查结果不能为空', trigger: 'blur' }
]
}
}, },
...mapGetters(['clientHeight'])
}, },
props: { props: {
resultList: {
type: Array,
default: []
}
} }
} }
</script> </script>
<style lang="scss" scoped > <style lang="scss" scoped >
@import "@/assets/scss/buttonstyle.scss"; @import "@/assets/scss/modules/management/form-main.scss";
.item_width_1 {
width: 250px; .avatar-uploader {
margin: 0 0 0 20px;
} }
.item_width_2 { </style>
width: 100px;
<style lang="scss">
.el-dialog__body {
padding: 0 10px 20px !important;
} }
.div_table {
// background: #ffffff;
// box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
// border-radius: 4px;
.table { .hide {
margin-top: 20px; .el-upload--picture-card {
display: none !important;
} }
} }
.div_btn {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
</style> </style>

Loading…
Cancel
Save