城阳pc工作端前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

845 lines
30 KiB

<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form ref="ref_form" :inline="true" :model="formData" :rules="dataRule" class="form">
<el-row>
<!-- <el-col :span="12">
<el-form-item label="所属组织" prop="agencyName" label-width="100px">
<el-input v-model.trim="formData.agencyName" size="small" clearable placeholder="请输入活动名称" :disabled="true"
class="u-item-width-normal"></el-input>
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="类型" prop="type" label-width="100px">
<!-- <el-cascader @change="handleChangeAgency" :options="options" :disabled="showdisabled" :props="{ checkStrictly: true }"></el-cascader>
<el-form-item label="类型" prop="type" label-width="100px"> -->
<el-cascader v-model="this.formData.type" @change="handleChangeAgency" :options="options"
:disabled="showdisabled" :props="{emitPath: false,
multiple: false, }"></el-cascader>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="名称" label-width="100px" prop="name">
<el-input v-model.trim="formData.name" size="small" clearable placeholder="请输入活动名称"
:disabled="showdisabled" class="u-item-width-normal"></el-input>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="组织类型" label-width="100px" prop="orgType">
<el-select class="u-item-width-normal" v-model.trim="formData.orgType" placeholder="请选择"
clearable>
<el-option v-for="item in OrganizationaltypeList" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col> -->
<el-col :span="24">
<el-form-item label="位置" prop="searchValue" label-width="100px" style="display: block">
<div style="width: 634px">
<el-select v-model.trim="searchValue" filterable style="width: 634px" remote
:reserve-keyword="true" :disabled="showdisabled" placeholder="请输入关键词"
:remote-method="remoteMethod">
<el-option v-for="(item, index) in searchOptions"
@click.native="handleClickKey(index)" :key="item.value || index"
:label="item.label" :value="item.value">
</el-option>
</el-select>
<div id="app_activity" class="div_map"></div>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人" prop="linkman" label-width="100px">
<el-input v-model.trim="formData.linkman" size="small" clearable placeholder="请输入联系人"
:disabled="showdisabled" class="u-item-width-normal"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="linkPhone" label-width="100px">
<el-input v-model.trim="formData.linkPhone" size="small" clearable placeholder="请输入手机号"
:disabled="showdisabled" class="u-item-width-normal"></el-input>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<div style="display: flex; ">
<div >
<div v-for="(item, index) in formData.tags" :label="index" :key="item.name" :prop=index style="display: flex;">
<el-form-item label="标签" prop="tags" label-width="100px" >
<el-input :disabled="showdisabled" v-model="formData.tags" placeholder="请输入(最多添加四个)" lass="u-item-width-normal"></el-input>
</el-form-item>
<div v-if="index > 0" @click="removeDomain(item)" style="color: blue; font-size: 12px; margin-top: 15px">删除
</div>
</div>
</div>
<div @click="addDomain" style="color: blue; font-size: 12px; margin-top: 15px">添加
</div>
<i class="el-icon-circle-plus" @click="addDomain" style="font-size: 20px; margin-top:7px;"></i>
</div>
</el-col> -->
<el-col :span="12">
<div v-if="formData.tags1" style="display: flex;">
<div>
<div v-for="(item, index) in formData.tags1" :key="item.name + index"
style="display: flex;">
<el-form-item label="标签" prop="tags1" label-width="100px">
<el-input :disabled="showdisabled" v-model="item.tab" placeholder="请输入(最多添加四个)"
class="u-item-width-normal"></el-input>
</el-form-item>
<div v-if="index > 0" @click="removeDomain(index)"
style="color: blue; font-size: 12px; margin-top: 15px">
删除
</div>
</div>
</div>
<div @click="addDomain" style="color: blue; font-size: 12px; margin-top: 15px">添加</div>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="展示图片" label-width="100px" prop="attrs">
<template>
<upload-image :defaultFileList="fileList" :limit="1" @change="onChangeFileList"
v-if="!showdisabled" @file-removed="removedImg"></upload-image>
<div v-else>
<img :src="formData.coverImg" alt="" style="width: 100px; height: 100px;">
</div>
</template>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="营业时间" label-width="100px" prop="workTime">
<el-input v-model.trim="formData.workTime" size="small" clearable placeholder="请输入营业时间"
:disabled="showdisabled" class="u-item-width-normal"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" label-width="100px" prop="beiremarkzhu">
<el-input v-model.trim="formData.remark" size="small" clearable placeholder="请输入备注"
:disabled="showdisabled" class="u-item-width-normal"></el-input>
</el-form-item>
</el-col>
<!-- <el-form-item label="组织介绍" prop="introduction" label-width="100px" style="display: block">
<div class="item_width_1">
<el-input type="textarea" autosize placeholder="请填写组织介绍"
v-model.trim="formData.introduction" :autosize="{ minRows:4., maxRows: 10}">
</el-input>
</div>
</el-form-item> -->
<!--
<el-form-item label="志愿品牌" prop="brand" label-width="100px" style="display: block">
<div class="item_width_1">
<el-input type="textarea" autosize placeholder="请输入内容" v-model.trim="formData.brand"
:autosize="{ minRows:4., maxRows: 10}">
</el-input>
</div>
</el-form-item>
<el-form-item label="品牌展示图" label-width="100px" prop="brandImg">
<template>
<upload-image :defaultFileList="formData.brandImg" :limit="1" @change="onChangeFileList1"
@file-removed="removedImg"></upload-image>
</template>
</el-form-item> -->
</el-row></el-form>
</div>
<div class="div_btn">
<el-button size="small" @click="handleCancle"> </el-button>
<el-button size="small" type="primary" @click="handleComfirm">
</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
// import { Loading } from 'element-ui' // 引入Loading服务
import { requestPost,requestGet } from '@/js/dai/request'
import Tinymce from '@c/tinymce2/index.vue'
import daiMap from "@/utils/dai-map";
import util from '@js/util.js';
// import UploadImage from './upload-image.vue'
import UploadImage from '@/views/modules/plugins/rent/upload-image.vue'
var map
var search
var markers
var infoWindowList
var geocoder // 新建一个正逆地址解析类
export default {
data() {
return {
orgOptionProps: {
value: 'value',
label: 'label',
children: 'subAgencyList',
emitPath: false,
multiple: false,
checkStrictly: true
},
showdisabled:false,
searchOptions:[],
options:[
{
"children": [
{
"pv":"1",
"value": "11",
"label": "托儿所"
},
{
"pv":"1",
"value": "12",
"label": "幼儿园"
},
{
"pv":"1",
"value": "13",
"label": "小学"
},
{
"pv":"1",
"value": "14",
"label": "中学"
},
{
"pv":"1",
"value": "15",
"label": "培训机构"
},
{
"pv":"1",
"value": "16",
"label": "其它"
}
],
"value": "1",
"label": "教育培训"
},
{
"children": [
{
"pv":"2",
"value": "21",
"label": "门诊"
},
{
"pv":"2",
"value": "22",
"label": "社区医院"
},
{
"pv":"2",
"value": "23",
"label": "医院"
},
{
"pv":"2",
"value": "24",
"label": "其它"
}
],
"value": "2",
"label": "医疗卫生"
},
{
"children": [
{
"pv":"3",
"value": "31",
"label": "餐饮"
},
{
"pv":"3",
"value": "32",
"label": "超市"
},
{
"pv":"3",
"value": "33",
"label": "理发"
},
{
"pv":"3",
"value": "34",
"label": "书店"
},
{
"pv":"3",
"value": "35",
"label": "便利店"
},
{
"pv":"3",
"value": "36",
"label": "市场"
},
{
"pv":"3",
"value": "37",
"label": "五金"
},
{
"pv":"3",
"value": "38",
"label": "照相"
},
{
"pv":"3",
"value": "39",
"label": "综合修理"
},
{
"pv":"3",
"value": "30",
"label": "服务站"
},
{
"pv":"3",
"value": "330",
"label": "农贸市场"
},
{
"pv":"3",
"value": "331",
"label": "其它"
}
],
"value": "3",
"label": "商业服务"
},
{
"children": [
{
"pv":"4",
"value": "41",
"label": "电影院"
},
{
"pv":"4",
"value": "42",
"label": "歌剧院"
},
{
"pv":"4",
"value": "43",
"label": "图书馆"
},
{
"pv":"4",
"value": "44",
"label": "游泳馆"
},
{
"pv":"4",
"value": "45",
"label": "活动中心"
},
{
"pv":"4",
"value": "46",
"label": "体育馆"
},
{
"pv":"4",
"value": "47",
"label": "其它"
}
],
"value": "4",
"label": "文化体育"
},
{
"value": "5",
"label": "其它"
}
],
fileList:[],
searchValue:"",
OrganizationaltypeList:[],
ServicetypeListName:[],
Organizationaltype:[
{ label: "社区", value: 1 },
{ label: "企业", value: 2 },
{ label: "学校", value: 3 },
],
tableDate:{},
formData:
{
agencyName:"",
linkman: "",
linkPhone: "",
workTime: "",
type: "",
tags1: [
{}
],
tags:"",//标签
agencyId: this.$store.state.user.agencyId,
address: "",//地址
longitude: this.$store.state.user.longitude, //经度
latitude: this.$store.state.user.latitude,//纬度
},
corganizerList: [],
uploadUrl: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadqrcodeV2',
customerId: localStorage.getItem('customerId'),
}
},
components: { Tinymce, UploadImage },
mounted() {
this.formData.agencyId=this.$store.state.user.agencyId
this.formData.agencyName=this.$store.state.user.agencyName
let { latitude, longitude } = this.$store.state.user;
if (!latitude || latitude == "" || latitude == "0") {
latitude = 39.9088810666821;
longitude = 116.39743841556731;
}
this.formData.latitude = latitude;
this.formData.longitude = longitude;
this.activityType()
this.listServerOrg()
},
methods: {
//父组件传的
async initForm(type, unitId) {
console.log(type, unitId,"i就理解哦i");
if(type=="info"){
this.showdisabled=true
}
if (type=="edit") {
this.getTableDetail(unitId)
}
// await this.getDemandOptions()
// console.log(this.demandOptions);
// let { latitude, longitude } = this.$store.state.user;
// this.formType = type;
// if (unitId) {
// this.unitId = unitId;
// this.formData.id = unitId;
// await this.loadFormData();
// } else {
// this.formData.latitude = latitude;
// this.formData.longitude = longitude;
// }
// // if (!map) {
// this.initMap(this.formData.latitude, this.formData.longitude);
// // }
// this.endLoading();
},
//获取类型
handleChangeAgency(val) {
console.log(val);
this.formData.type = val
},
//获取详情
getTableDetail(id) {
console.log(id,"dskljfksdljf");
let url = `/voluntary/sphereLife/detail/${id}`;
console.log(url,"url");
requestGet(url).then((res) => {
if (res.code == 0) {
this.formData = res.data
this.fileList=[{fileUrl:res.data.attrs[0].url}]
this.searchValue=res.data.address
this.formData.tags1=res.data.tags.split(',').map(item => ({ tab: item.trim() }));
} else {
this.$message.error(res.msg)
}
})
},
//添加标签
addDomain() {
if (this.formData.tags1.length < 4) {
this.formData.tags1.push({tab: '' });
}else{
this.$message.error("最多添加4个标签");
}
},
//删除动态
removeDomain(item) {
console.log(item);
this.formData.tags1.splice(item, 1);
// var index = this.formData.sponsors.indexOf(item)
// if (index !== -1) {
// this.formData.sponsors.splice(index, 1)
// this.tableDate = {}
// }
},
validateContent() {
// 使用正则表达式去除HTML标签后检查内容
const textContent = this.stripHtml(this.formData.sumUp);
if (textContent.trim() === '') {
this.formData.sumUp = null;
}
},
stripHtml(html) {
const div = document.createElement('div');
div.innerHTML = html;
return div.textContent || div.innerText || '';
},
async activityType() {
this.$nextTick(() => {
if (!map) {
this.initMap(this.formData.latitude, this.formData.longitude);
console.log("map", map,this.formData.latitude, this.formData.longitude)
} else {
map.setCenter(this.formData.latitude, this.formData.longitude);
map.setMarker(this.formData.latitude, this.formData.longitude);
console.log("mapmapmap", map)
}
})
},
handleOnlineRegistration(value) {
//
if (value) {
this.online = true;
this.formData.online = 1;
} else {
this.online = false;
this.formData.cutOffTime = ''
this.formData.online = 0;
}
},
onChangeFileList(e) {
console.log(e, 'sssssb');
this.fileList = e.length > 0 ? e.map(item => ({
fileType: '0',
type:'image',
fileType: '0',
name:item.response.data.fileName,
fileUrl: item.response.data.url,
format: item.response.data.fileName.split('.').pop(),
url: item.response.data.url
})) : []; // 当e为空时清空fileList
if (e.length > 0) {
console.log(this.fileList,"this.fileList");
this.formData.attrs=this.fileList;
console.log(this.formData.attrs,"this.fileList");
} else {
this.formData.coverPic = '';
}
},
removedImg() {
this.formData.coverPic = ''
},
onChangeImgs(e, rowIndex = 0) {
console.log('onChangeFileList', e)
if (e.length > 0) {
this.activityImgs = []
e.forEach(item => {
let ob = {
fileType: '0',
fileUrl: item.response.data.url
}
this.activityImgs.push(ob)
})
}
},
handleTimeChange(time) {
if (time) {
const startTimeArray = util.dateFormatter(time[0], 'time').split('-')
console.log(startTimeArray);
const endTimeArray = util.dateFormatter(time[1], 'time').split('-')
console.log(endTimeArray);
this.formData.startTime = startTimeArray[0] + '-' + startTimeArray[1] + '-' + startTimeArray[2]
this.formData.endTime = endTimeArray[0] + '-' + endTimeArray[1] + '-' + endTimeArray[2]
// this.startTimeShow = startTimeArray[0] + '年' + startTimeArray[1] + '月' + startTimeArray[2] + '日'
// this.endTimeShow = endTimeArray[0] + '年' + endTimeArray[1] + '月' + endTimeArray[2] + '日'
} else {
this.formData.startTime = ''
this.formData.endTime = ''
}
},
async handleComfirm() {
if (this.formData.tags1) {
let one=this.formData.tags1.map(item => item.tab).join(', ')
this.formData.tags=one;
console.log(this.formData,"this.formData");
}
// console.log(this.formData.tags.map(item => item.tab).join(', ')," this.formData");
// if (!this.formData.type) {
// this.$message.error('请选择类型');
// return;
// }
if (!this.formData.name) {
this.$message.error('请输入组织介绍');
return;
}
if (this.formData.attrs.length === 0) {
this.$message.error('请上传封面图片');
return;
}
if (!this.formData.linkPhone) {
this.$message.error('请输入联系电话');
return;
}
if (!this.formData.linkman) {
this.$message.error('请输入联系人');
return;
}
// if (this.formData.tabs.length === 0) {
// this.$message.error('请输入标签');
// return;
// }
// if (!this.formData.serviceTypeList) {
// this.$message.error('请输入服务类型');
// return;
// }
console.log(this.formData,"this.formData");
this.addActivity()
},
//增加
async addActivity() {
let url = '/voluntary/sphereLife/saveOrUpdate'
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
this.$message({
type: 'success',
message: '操作成功'
})
// this.resetData()
this.$emit('showAddClose')
this.btnDisable = false
} else {
this.btnDisable = false
this.$message.error(msg)
}
},
handleCancle() {
console.log("sdlkfjklsdf ");
this.$emit('showAddClose')
},
// 地图初始化函数,本例取名为init,开发者可根据实际情况定义
initMap(latitude, longitude) {
console.log(latitude, longitude,"564564568");
map = new daiMap(
document.getElementById("app_activity"),
{ latitude, longitude },
{
zoom: 16.2, // 设置地图缩放级别
pitch: 43.5, // 设置俯仰角
rotation: 45, // 设置地图旋转角度
}
);
// 监听地图平移结束
/* map.on("dragend", (e) => {
this.handleMoveCenter(e);
});*/
map.on("click", (e) => {
this.handleMoveCenter(e);
});
map.setCenter(latitude, longitude);
map.setMarker(latitude, longitude);
},
async handleMoveCenter(e) {
//修改地图中心点
// const { lat, lng } = map.getCenter();
const { lat, lng } = e.latLng;
this.formData.latitude = lat;
this.formData.longitude = lng;
map.setMarker(lat, lng);
let { msg, data } = await map.getAddress(lat, lng);
if (msg == "success") {
this.formData.address = data.address;
this.searchValue=data.address
console.log(this.formData.address," this.formData.address ");
this.searchValue = data.address
this.searchOptions = []
// console.log('data,this.searchValue ', this.searchValue)
}
},
async remoteMethod(query) {
console.log(query, "sfsvsdv");
if (query !== '') {
const { msg, data } = await map.searchNearby(query);
console.log(data,"sdl;kjfklsjfkld");
this.resultList = []
if (msg == "success" && data.resultList && data.resultList.length > 0) {
if (data.resultList && data.resultList.length > 0) {
this.resultList = data.resultList
console.log(this.resultList, "this.resultList");
this.searchOptions = this.resultList.map(item => {
return { value: `${item.id}`, label: `${item.address + item.title}` };
});
console.log(this.searchOptions, "this.searchOptions");
}
} else {
this.searchOptions = [
{
value: '0',
label: '未检索到结果'
}
]
}
} else {
this.searchOptions = [];
}
},
handleClickKey(index) {
let selPosition = this.resultList[index]
let lonlat = selPosition.lonlat.split(" ")
map.setCenter(lonlat[1], lonlat[0]);
map.setMarker(lonlat[1], lonlat[0]);
this.formData.latitude = lonlat[1];
this.formData.longitude = lonlat[0];
this.formData.address = selPosition.address + selPosition.name
this.searchValue = selPosition.address + selPosition.name
console.log(this.formData.latitude, this.formData.longitude, "this.formData.latitude, this.formData.longitude");
},
},
computed: {
dataRule() {
return {
typeName: [
{ required: true, message: '请选择组织类型', trigger: 'blur' }
],
name: [
{ required: true, message: '请填写名称', trigger: 'blur' }
],
searchValue: [
{ required: true, message: '请选择地址', trigger: 'blur' },
],
linkPhone: [
{ required: true, message: '联系电话不能为空', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
],
linkman: [
{ required: true, message: '请填写联系人', trigger: 'blur' }
],
tags1: [
{ required: true, message: '请填写标签信息', trigger: 'blur' },
],
attrs: [
{ required: true, message: '请选择活动照片', trigger: 'blur' }
]
}
},
},
props: {
},
destroyed () {
map = null
}
}
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/visual/communityManageForm.scss";
</style>
<style lang="scss" scoped>
.item_width_1 {
width: 634px;
/deep/.tox .tox-dialog {
z-index: 20000;
}
}
.u-item-width-normal{
width: 222px;
}
.tinymce_view {
::v-deep .tox .tox-dialog {
z-index: 2000000000;
}
}
.div_map {
position: relative;
}
.div_searchmap {
z-index: 5000;
position: absolute;
top: 5px;
left: 5px;
}
.tinymce_view {
height: 400px;
overflow: auto;
}
.text_p {
margin: 0;
padding: 0 10px;
border: 1px solid #d9d9d9;
border-radius: 5px;
>p {
margin: 0;
}
}
</style>