Browse Source

Merge branch 'featrue-lingshan' of http://120.46.222.128:10021/elink-star/epmet-work-pc into featrue-lingshan

featrue-lingshan
zhouh 4 months ago
parent
commit
522f22f19a
  1. 334
      src/views/modules/communityParty/promotion/components/promotionDialog.vue
  2. 979
      src/views/modules/communityParty/promotion/index.vue

334
src/views/modules/communityParty/promotion/components/promotionDialog.vue

@ -0,0 +1,334 @@
<template>
<el-dialog :visible.sync="visible" :title="title" :close-on-click-modal="false" :close-on-press-escape="false"
width="950px" top="5vh" class="dialog-h" :before-close="handleCancel">
<div class="dialog-h-content scroll-h">
<el-form ref="ref_form" :inline="true" :model="formData" :rules="dataRule" class="form">
<el-form-item label="党建类型" label-width="150px" prop="tagId">
<el-select class="item_width_1" v-model="formData.tagId" placeholder="请选择" clearable>
<el-option v-for="item in typeList" :key="item.id" :label="item.tagName" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="标题名称" prop="title" label-width="150px">
<el-input v-model.trim="formData.title" size="small" clearable placeholder="请输入活动名称"
class="item_width_1"></el-input>
</el-form-item>
<el-form-item label="上传照片" label-width="150px" prop="coverPic">
<div class="item_width_1">
<upload-image :defaultFileList="fileList" :limit="1" @change="onChangeFileList"
@file-removed="removedImg"></upload-image>
</div>
</el-form-item>
<el-form-item label="详细内容" prop="content" label-width="150px" style="display: block">
<div class="item_width_1">
<Tinymce class="tinymce_view " v-model.trim="formData.content" :height="250" placeholder="请输入活动内容" />
</div>
</el-form-item>
<el-form-item label="是否置顶" prop="top" label-width="150px" style="display: block">
<el-switch v-model="formData.top" :active-value="1" :inactive-value="0"></el-switch>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button size="small" @click="handleCancel" :loading="btnDisable"> </el-button>
<el-button size="small" type="primary" :loading="btnDisable" @click="handleConfirm"> </el-button>
</div>
</el-dialog>
</template>
<script>
import _ from 'lodash'
import dayjs from 'dayjs'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
import Tinymce from '@c/tinymce2/index.vue'
import UploadImage from '@/views/modules/plugins/rent/upload-image.vue'
const defaultFormData = {
id: undefined,
title: '',
tagId: '',
coverPic: '',
content: '',
top: 0,
status: 0,
releaseTime: '',
}
let loading //
export default {
components: { Tinymce, UploadImage },
props: {
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: ''
}
},
data() {
return {
formData: _.cloneDeep(defaultFormData),
fileList: [],//
activityImgs: [],//
loading: false,
btnDisable: false,
typeList: [],
uploadUrl: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadqrcodeV2',
}
},
created() {
this.promotionType()
},
methods: {
async promotionType() {
const url = "/actual/base/advertisingTag/page"
let params = {
pageSize: 100,
pageNo: 1,
typeName: "",
enabled: 0
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.typeList = data.list
} else {
this.$message.error(msg)
}
},
//
async initForm(row) {
if (row && row.id) {
let url = `/actual/base/partyPublicity/${row.id}`
const { data, code, msg } = await requestPost(url)
this.formData = data ? data : _.cloneDeep(defaultFormData)
if (data && data.coverPic) {
this.fileList = [{
fileType: '0',
fileUrl: data.coverPic
}]
} else {
this.fileList = []
}
// this.startLoading()
// this.endLoading()
} else {
}
},
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 || '';
},
//
handleImgSuccess(res, file, fileList) {
if (res.code === 0 && res.msg === 'success') {
let format = file.name.split('.').pop();
let srcType = file.raw.type;
let type = 'file';
if (srcType.indexOf('image') != -1) {
type = 'image';
} else if (srcType.indexOf('video') != -1) {
type = 'video';
}
this.formData.coverPic = res.data.url;
} else {
this.$message.error(res.msg);
}
},
//
handleImgRemove(file) {
console.log('handleImgRemove', file);
if (file.response) {
let index = this.formData.activityImgs.findIndex(item => item.url == file.response.data.url);
this.formData.activityImgs.splice(index, 1);
} else if (file.url) {
let index = this.formData.activityImgs.findIndex(item => item.url == file.url);
this.formData.activityImgs.splice(index, 1);
}
},
//
handleImgPreview(file) {
console.log(file);
window.open(file.url || file.response.data.url);
},
//
handleImgExceed() {
this.$message({
type: 'warning',
message: '文件数量最多不超过三个'
});
},
//
beforeImgUpload(file) {
const isLt1M = file.size / 1024 / 1024 < 10;
const srcType = file.type;
const format = file.name.split('.').pop();
if (!isLt1M) {
this.$message.error('上传文件大小不能超过 10MB!');
return false;
}
if (srcType.indexOf('image') == -1) {
this.$message.error('仅限图片格式');
return false;
}
return true;
},
removedImg() {
this.formData.coverPic = ''
},
onChangeFileList(e) {
this.fileList = e.length > 0 ? e.map(item => ({
fileType: '0',
fileUrl: item.response.data.url
})) : []; // efileList
if (e.length > 0) {
this.formData.coverPic = e[0].response.data.url;
} else {
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)
})
}
},
async handleConfirm() {
this.$refs['ref_form'].validate(async valid => {
if (valid) {
this.btnDisable = true
let url = this.formData.id ? '/actual/base/partyPublicity/update' : '/actual/base/partyPublicity/save'
this.formData.releaseTime = this.formData.releaseTime || dayjs().format("YYYY-MM-DD HH:mm:ss")
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
this.$message.success(this.formData.id ? '更新成功' : '新增成功')
this.resetData()
this.$emit('update:visible', false)
this.$emit('success')
} else {
this.$message.error(msg)
}
this.btnDisable = false
}
})
},
//
handleCancel() {
this.resetData()
this.$emit('update:visible', false)
},
resetData() {
this.formData = _.cloneDeep(defaultFormData)
this.fileList = []
this.$refs['ref_form'].resetFields()
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule() {
return {
tagId: [
{ required: true, message: '请选择活动类型', trigger: 'change' }
],
title: [
{ required: true, message: '请输入标题名称', trigger: 'blur' }
],
coverPic: [
{ required: true, message: '请选择封面图', trigger: 'blur' }
],
content: [
{ required: true, message: '请输入详细内容', trigger: 'blur' }
],
}
},
}
}
</script>
<style lang="scss" scoped>
.form {
margin-top: 16px;
}
.item_width_1 {
width: 560px;
/deep/.tox .tox-dialog {
z-index: 20000;
}
}
.tinymce_view {
::v-deep .tox .tox-dialog {
z-index: 2000000000;
}
}
.tinymce_view {
height: 400px;
overflow: auto;
}
.div_btn {
width: 100%;
text-align: right;
padding-right: 20px;
}
</style>

979
src/views/modules/communityParty/promotion/index.vue

File diff suppressed because it is too large
Loading…
Cancel
Save