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

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

@ -97,29 +97,29 @@
min-width="180">
</el-table-column>
<el-table-column prop="actactStartTime"
<el-table-column prop="actStartTime"
header-align="center"
align="center"
label="活动时间"
min-width="180">
<template slot-scope="scope">
<span>{{scope.row.actactStartTime+'至'+scope.row.actactEndTime}}</span>
<span>{{scope.row.actStartTime+'至'+scope.row.actEndTime}}</span>
</template>
</el-table-column>
<el-table-column prop="signUpactEndTime"
<el-table-column prop="signUpEndTime"
header-align="center"
align="center"
label="报名截止时间"
min-width="110">
</el-table-column>
<el-table-column prop="status"
<el-table-column prop="statusShow"
header-align="center"
align="center"
label="状态"
min-width="100">
</el-table-column>
<el-table-column prop="firstResult"
<el-table-column prop="richTextFlagShow"
header-align="center"
align="center"
label="来源"
@ -128,7 +128,7 @@
<el-table-column label="操作"
fixed="right"
width="440"
width="240"
header-align="center"
align="center"
class="operate">
@ -137,27 +137,39 @@
class="div-table-button--detail"
size="small"
@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"
size="small"
@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"
size="small"
@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"
size="small"
@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"
size="small"
@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"
size="small"
@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"
size="small"
@click="handleReview(scope.row)">添加回顾</el-button>
@ -226,13 +238,13 @@
top="5vh"
class="dialog-h"
@closed="cancleDiaClose">
<div style="padding:50px">
<div style="padding:30px">
<el-input class="item_width_5"
type="textarea"
maxlength="100"
show-word-limit
:rows="3"
:rows="4"
placeholder="请输入取消理由"
v-model="cancelReason"></el-input>
<div style="display:flex; justify-content: center;margin-top:20px">
@ -249,18 +261,56 @@
</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"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'活动回顾'"
width="80%"
width="1350px"
top="5vh"
class="dialog-h"
@closed="diaClose">
@closed="reviewDiaClose">
<heart-review ref="ref_review"
:statusList="statusList"
@reviewDiaClose="diaClose"></heart-review>
@reviewDiaClose="reviewDiaClose"></heart-review>
</el-dialog>
</div>
@ -269,6 +319,9 @@
<script>
import heartForm from './heartForm'
import heartAudit from './heartAudit'
import heartPerson from './heartPerson'
import heartFinish from './heartFinish'
import heartReview from './heartReview'
import { requestPost } from "@/js/dai/request";
@ -321,7 +374,6 @@ export default {
label: '已取消'
}
],//list
placeTypeList: [],//list
formData: {
title: '',//
@ -334,8 +386,10 @@ export default {
//form
formShow: false,
formTitle: '新增巡查',
formTitle: '新增爱心互助',
actId: '',
actStartTime: '',
actEndTime: '',
cancelReason: '',
cancleShow: false,//
@ -347,7 +401,7 @@ export default {
}
},
components: {
heartForm, heartReview
heartForm, heartAudit, heartPerson, heartFinish, heartReview
},
async created () {
@ -366,16 +420,13 @@ export default {
this.loadTable()
},
async loadTable () {
this.tableLoading = true
const url = "/heart/work/act/inprogresslist"
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolrecord/getlist"
const url = "/heart/work/act/pagelist"
// const url = "http://yapi.elinkservice.cn/mock/245/heart/work/act/pagelist"
let params = {
customerId: this.customerId,
pageSize: this.pageSize,
pageNo: this.pageNo,
...this.formData
@ -384,10 +435,32 @@ export default {
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.total = 1000
this.tableData = data
this.total = data.total
this.tableData = data.list
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 {
@ -396,8 +469,6 @@ export default {
this.tableLoading = false
},
diaClose () {
this.$refs.ref_form.resetData()
this.formShow = false
@ -407,20 +478,12 @@ export default {
this.reviewShow = false
},
diaClose () {
this.cancleShow = false//
this.auditShow = false//
this.personShow = false//
this.finishShow = false//
this.reviewShow = false//
},
handleDetail (row) {
this.formTitle = '详情'
this.formShow = true
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.formShow = true
this.$nextTick(() => {
this.$refs.ref_form.initForm('edit', row.placePatrolRecordId)
this.$refs.ref_form.initForm('edit', row.actId)
})
},
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
},
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.$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 () {
this.cancelReason = ''
this.cancleShow = false//
},
diaClose () {
this.auditShow = false//
this.personShow = false//
this.finishShow = false//
this.reviewShow = false//
},
//
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>
<div class="dialog-h-content scroll-h">
<div class="div_table">
<el-button size="small"
class="diy-button--add"
@click="handleAdd">新增</el-button>
<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="reviewTime"
header-align="center"
align="center"
label="复查时间"
width="250">
<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 class="dialog-h-content scroll-h">
<el-form ref="ref_form"
:inline="true"
:model="formData"
class="div_form ">
<el-form-item label="活动回顾"
prop="actContent"
label-width="150px">
<!-- <div style="width:400px"> -->
<Tinymce class="tinymce_view"
v-if="formType!='detail'"
v-model="formData.actContent"
:height="450"
style="width:1000px"
:customerId="customerId"
placeholder="在这里输入文字" />
<p v-else
class="text_p"
v-html="formData.actContent"></p>
<!-- </div> -->
</el-form-item>
</el-form>
</div>
<!-- <div class="div_btn">
<el-button @click="handleCancle"> </el-button>
</div> -->
<div class="div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div>
</div>
</template>
@ -141,252 +43,119 @@ import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
import Tinymce from '@c/tinymce2/index.vue'
let loading //
export default {
data () {
return {
tableLoading: false,
placePatrolRecordId: '',
tableData: [],
formType: 'add', // addeditdetail
btnDisable: false,
customerId: '',
actId: '',
formData: {
actContent: '',
},
}
},
components: {},
components: { Tinymce },
mounted () {
this.customerId = localStorage.getItem('customerId')
},
methods: {
async initTable (placePatrolRecordId) {
this.placePatrolRecordId = placePatrolRecordId
await this.loadTeams()
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)
},
async initForm (type, actId) {
this.$refs.ref_form.resetFields();
this.startLoading()
//
async loadInspectors (teamId, tableIndex) {
this.formType = type
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]
} else {
this.tableData = []
}
async handleComfirm () {
console.log(this.formData)
// 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 teamId = row.placePatrolTeamId
await this.loadInspectors(teamId, tableIndex)
let url = "/gov/org/placepatrolrecord/add"
// let url = "http://yapi.elinkservice.cn/mock/245/gov/org/placepatrolrecord/add"
this.formData.inspectors = this.formData.inspectorArray.join(',')
let rowData = JSON.parse(JSON.stringify(row))
rowData.isEdit = true
rowData.isNew = false
rowData.inspectorArray = rowData.inspectors.split(',')
const { data, code, msg } = await requestPost(url, this.formData)
console.log(rowData)
this.$set(this.tableData, tableIndex, rowData)
},
async handleComfirm (row, tableIndex) {
let valiMsg = this.validata(row)
if (valiMsg) {
if (code === 0) {
this.$message({
type: 'warning',
message: valiMsg
type: 'success',
message: '操作成功'
})
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)
this.resetData()
this.$emit('dialogOk')
this.btnDisable = false
} else {
this.btnDisable = false
this.$message.error(msg)
}
},
validata (row) {
let message = ''
if (row.reviewTime === '') {
message = message + '复查时间不能为空;'
}
if (row.placePatrolTeamId === '') {
message = message + '分队名称不能为空;'
dormatHtml (content) {
let c = ''
if (content.indexOf('DOCTYPE') != -1) {
c = content.slice(45, -16);
}
if (row.inspectorArray.length === 0) {
message = message + '检查人员不能为空;'
}
if (row.reviewResult === '') {
message = message + '复查结论不能为空;'
}
return message
console.log('content', typeof content)
return c || content
},
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 () {
this.resetData()
this.$emit('dialogCancle')
},
resetData () {
this.formData = {
actContent: '',
}
},
//
startLoading () {
loading = Loading.service({
@ -404,47 +173,62 @@ export default {
}
},
computed: {
tableHeight () {
return (this.clientHeight - 360)
dataRule () {
return {
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: {
resultList: {
type: Array,
default: []
}
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/buttonstyle.scss";
.item_width_1 {
width: 250px;
@import "@/assets/scss/modules/management/form-main.scss";
.avatar-uploader {
margin: 0 0 0 20px;
}
.item_width_2 {
width: 100px;
</style>
<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 {
margin-top: 20px;
.hide {
.el-upload--picture-card {
display: none !important;
}
}
.div_btn {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
</style>

Loading…
Cancel
Save