1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162 |
- <template>
- <div class="container-addAct">
- <el-card class="card-top">
- <div class="top-box">
- <div>
- <el-select
- placeholder="请选择行业"
- :disabled="!isShowSelect"
- @change="clearTopIndustry"
- @clear="clearTopIndustry"
- clearable
- v-model="optionFormregion"
- style="width: 360px; margin-right: 30px"
- >
- <el-option v-for="item in chartPermissionList" :label="item.PermissionName" :key="item.PermissionName" :value="item.PermissionName"></el-option>
- </el-select>
- <el-select placeholder="请选择活动类型" :disabled="!isShowSelect" clearable v-model="cactivityType" @change="activityTypeDetail" style="width: 360px">
- <el-option v-for="item in cactivityTypeList" :label="item.ActivityTypeName" :key="item.ActivityTypeId" :value="item.ActivityTypeId"></el-option>
- </el-select>
- </div>
- <div>
- <el-button v-if="isShowSelect" type="primary" @click="templateBtn">活动内容输入模板</el-button>
- </div>
- </div>
- </el-card>
- <el-card style="margin-top: 30px">
- <froala id="froala-editor" ref="froalaEditor" :tag="'textarea'" :config="froalaConfig" v-model="content"></froala>
- <div style="margin-top: 25px" v-if="optionFormregion">
- <template v-if="cactivityType == 1">
- <el-radio style="margin: 0 0 20px 30px" v-model="subjectRadio" label="1">单主题标签:</el-radio>
- <el-radio v-model="subjectRadio" label="2">多主题标签:</el-radio>
- </template>
- <div style="display: flex; align-items: center">
- <span style="width: 98px; flex-shrink: 0">
- 主题标签:
- <el-tooltip placement="top-start">
- <div slot="content">
- 1、小程序内默认显示产业名称,也可勾选【小程序内显示标的名称】更改显示<br />2、若该活动暂无相关联产业,请联系内容组添加,或勾选并填写【临时标签】用于小程序内展示<br />
- 3、选择产业和关联标的后,即完成对活动的标签定义;可同时勾选并填写【临时标签】,小程序内将显示临时标签名称
- </div>
- <i class="el-icon-info" />
- </el-tooltip>
- </span>
- <el-cascader
- key="multipleTrue"
- style="margin-right: 10px"
- v-model="industryCascade"
- :disabled="selectDisabled"
- @change="propertyChange"
- placeholder="请选择产业名称"
- :show-all-levels="false"
- :options="industryArr"
- :props="{ ...defaultProps, multiple: true }"
- filterable
- >
- </el-cascader>
- <template v-if="isShowAddIcon">
- <img v-if="!optionFormregion.includes('策略') && !selectDisabled" src="~@/assets/img/set_m/add_ico.png" style="margin: 0 30px 0 0" @click="addIndustryDlg = true" />
- <img v-if="!optionFormregion.includes('策略') && selectDisabled" src="~@/assets/img/set_m/slide.png" style="margin: 0 30px 0 0" />
- </template>
- <el-select v-model="markValue" :disabled="selectDisabled" @focus="markSelectFocus" multiple placeholder="请选择关联标的">
- <el-option v-for="item in markOptions" :key="item.IndustrialSubjectId" :value="item.IndustrialSubjectId" :label="item.SubjectName"> </el-option>
- </el-select>
- <template v-if="isShowAddIcon">
- <img v-if="!optionFormregion.includes('策略') && !selectDisabled" src="~@/assets/img/set_m/add_ico.png" style="margin: 0 10px" @click="isAddMarketDlg" />
- <img v-if="!optionFormregion.includes('策略') && selectDisabled" src="~@/assets/img/set_m/slide.png" style="margin: 0 10px" />
- </template>
- <el-checkbox style="margin-left: 20px" v-model="isMark">小程序内显示标的名称</el-checkbox>
- <div style="display: flex; align-items: center; margin-left: 40px">
- <el-checkbox v-model="radioTemporary">临时标签</el-checkbox>
- <el-input style="width: 350px; margin: 0 20px" v-model="valTemporary" @focus="radioTemporary = true" placeholder="请输入标签名称" type="text"></el-input>
- <div class="editsty" style="flex-shrink: 0" @click="dialogVisibleSubject = true">查询标的</div>
- </div>
- </div>
- <!-- 复选 模块 -->
- <div style="margin-top: 20px">
- <research-deduct ref="researchSelect" :cactivityType="cactivityType" :optionFormregion="optionFormregion" />
- </div>
- <div style="margin: 20px 0 0 98px" class="add-delete" v-for="(item, index) in addSubjectLabel" :key="index">
- <template v-if="subjectRadio == 2">
- <el-cascader
- v-model="item.IndustrialManagementIdS"
- :disabled="item.forbidden"
- @change="propertyChange"
- placeholder="请选择产业名称"
- :show-all-levels="false"
- :options="industryArr"
- :props="{ ...defaultProps, multiple: true }"
- filterable
- >
- </el-cascader>
- <el-select style="margin: 0 10px" v-model="item.IndustrialSubjectIdS" :disabled="item.forbidden" @focus="markSelectFocusAdd(index, item)" multiple placeholder="请选择关联标的">
- <el-option v-for="val in item.markOptions" :key="val.IndustrialSubjectId" :value="val.IndustrialSubjectId" :label="val.SubjectName"> </el-option>
- </el-select>
- <el-checkbox style="margin: 0 0 0 10px" v-model="item.isMark">小程序内显示标的名称</el-checkbox>
- <div style="display: flex; align-items: center; margin-left: 40px">
- <el-checkbox v-model="item.temporary" @change="temporaryChangeHandler(item)">临时标签</el-checkbox>
- <el-input
- style="width: 350px; margin: 0 20px"
- v-model="item.temporaryText"
- @focus="
- item.forbidden = true;
- item.temporary = true;
- "
- placeholder="请输入标签名称"
- type="text"
- ></el-input>
- </div>
- <img @click="deleteSubject(index, item)" src="~@/assets/img/icons/delete-Item.png" />
- <el-checkbox style="margin-left: 30px" v-model="item.subscribe">可预约纪要</el-checkbox>
- </template>
- </div>
- <div style="margin: 20px 0 0 30px; display: flex; align-items: center" v-if="subjectRadio == 2">
- <img @click="addLabelClick" class="editsty" src="~@/assets/img/set_m/add_ico.png" style="margin: 0 10px" />
- <span @click="addLabelClick" class="editsty"> 添加主题标签</span>
- </div>
- </div>
- <div style="margin-top: 15px" v-if="showType !== '1' && showType !== '9' && subjectRadio != 2">
- <div class="radio-input" style="margin-bottom: 15px; height: 35px">
- <span style="width: 98px"> 参会人数限制: </span>
- <template v-if="showType != 3">
- <el-radio v-model="radio" label="1">不限制</el-radio>
- <el-radio v-model="radio" label="2">限制</el-radio>
- </template>
- <el-input placeholder="输入人数上限" v-if="radio == 2 || showType !== '2'" class="astrict-inpt" onkeyup="value=value.replace(/[^\d]/g,'')" v-model="astrict" />
- </div>
- <div v-if="radio == 2 || showType !== '2'">
- <div class="checkbox-box">
- <span style="width: 98px; flex-shrink: 0">
- 活动可见:
- <el-tooltip :content="checkboxTooltip('活动可见')" placement="top-start">
- <i class="el-icon-info" />
- </el-tooltip>
- </span>
- <div>
- <div class="is-visible">
- <el-radio-group v-model="radioVisibleActivity">
- <el-radio :label="1">仅本组客户可见</el-radio>
- <el-radio :label="2">全部客户可见</el-radio>
- </el-radio-group>
- <el-checkbox v-model="decisionChecked">仅决策人可见</el-checkbox>
- </div>
- <div style="display: flex">
- <span style="width: 70px; flex-shrink: 0" class="text-right"> 套餐类型: </span>
- <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" :disabled="checkAllIs">
- 全选
- <el-tooltip :content="checkboxTooltip('全选')" placement="top-start">
- <i class="el-icon-info" />
- </el-tooltip>
- </el-checkbox>
- <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
- <el-checkbox v-for="item in cities" :label="item.CustomerTypeId" :key="item.CustomerTypeId" :disabled="forbidden.includes(String(item.CustomerTypeId))">
- {{ item.CustomerName }}
- <el-tooltip :content="item.Explain" placement="top-start" v-if="item.Explain">
- <i class="el-icon-info" />
- </el-tooltip>
- </el-checkbox>
- </el-checkbox-group>
- </div>
- <div class="checkbox-box" style="margin-top: 20px">
- <span class="text-right"> 管理规模: </span>
- <el-checkbox-group v-model="checkScaleList">
- <el-checkbox :disabled="scaleIsDisabled.includes('3')" label="3">100亿以上</el-checkbox>
- <el-checkbox :disabled="scaleIsDisabled.includes('2')" label="2">50~100亿</el-checkbox>
- </el-checkbox-group>
- </div>
- </div>
- </div>
- </div>
- </div>
- <template v-if="activeIsState == 3">
- <div class="audio-content">
- <span class="text">会议音频:</span>
- <el-button v-if="addEditVideo.length > 0" size="small" type="primary" @click="errorUpload">上传会议音频</el-button>
- <el-upload
- v-else
- class="upload-demo"
- action=""
- :http-request="handleUploadAudio"
- accept="audio/*"
- :on-remove="handleRemoveAudio"
- :before-remove="beforeRemoveAudio"
- :limit="1"
- :file-list="fileListAudio"
- >
- <el-button size="small" type="primary">上传会议音频</el-button>
- </el-upload>
- </div>
- <div class="audio-content" style="margin-top: 10px">
- <span class="text">会议视频:</span>
- <el-button v-if="fileListAudio.length" size="small" type="primary" @click="errorUpload">上传会议视频</el-button>
- <el-upload
- v-else
- class="upload-demo"
- action=""
- accept=".mp4"
- :http-request="handleUpload"
- :before-upload="handelBeforeUploadVideo"
- :before-remove="beforeRemoveAudio"
- :on-remove="handleRemoveVideo"
- :file-list="addEditVideo"
- :disabled="startUpload"
- :limit="1"
- >
- <el-button size="small" type="primary" :loading="startUpload">上传会议视频</el-button>
- </el-upload>
- <el-progress type="circle" :percentage="percentage" width="40" style="margin-left: 10px" v-if="startUpload"></el-progress>
- </div>
- <div class="audio-content cover-content" style="margin-top: 10px" v-if="(fileListAudio.length || addEditVideo.length) && defaultImage">
- <span class="text" style="width: 70px; text-align: right">封面:</span>
- <div class="img-content">
- <img :src="defaultImage" alt="" />
- <div class="modify" @click="modifyImgHandler">修改</div>
- </div>
- </div>
- </template>
- <div style="text-align: center; margin-top: 30px">
- <el-button type="primary" @click="submitForm('保存')">保存</el-button>
- <el-button v-if="isShow" type="primary" @click="submitForm('发布')">发布</el-button>
- <el-button @click="cancelBtn">取消</el-button>
- </div>
- </el-card>
- <el-dialog
- v-dialogDrag
- :close-on-click-modal="false"
- :modal-append-to-body="false"
- center
- :title="activityTypeName"
- :visible.sync="dialogVisible"
- customClass="customWidth"
- :before-close="handleClose"
- >
- <div id="dialog" v-html="copyText"></div>
- <div style="margin-bottom: 60px">
- <div class="content-template" v-if="activityTypeName == '公司调研电话会'">
- <div @click="contentTemplate('1')" :class="contentTemplateTitle == '1' ? 'active' : ''">进门财经模板</div>
- <div @click="contentTemplate('2')" :class="contentTemplateTitle == '2' ? 'active' : ''">zoom模板</div>
- </div>
- <div v-html="templatePText" v-if="contentTemplateTitle == '1'"></div>
- <div v-html="ZoomTemplateP" v-else></div>
- <p v-if="cactivityType == 1" class="no-cv" style="color: #f00">注:多个活动同时输入时,请用分割线隔开</p>
- <p v-else class="no-cv" style="color: #f00">注:每次只能输入一场活动信息{{ cactivityType == 6 ? ",多篇相关报告时,用分号“;”隔开" : "" }}</p>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="dialogVisible = false">取消</el-button>
- <el-button id="copy_text" type="primary" v-if="contentTemplateTitle == '1'" :data-clipboard-text="copyTxt" @click="handleCopyFun">复制模版</el-button>
- <el-button id="copy_text" type="primary" v-else :data-clipboard-text="zoomTemplate" @click="handleCopyFun">复制模版</el-button>
- </span>
- </el-dialog>
- <add-industry-mark
- :optionFormregion="optionFormregion.includes('研选') ? '研选' : optionFormregion"
- :addIndustryDlg.sync="addIndustryDlg"
- :addMarkDlg.sync="addMarkDlg"
- @commitIndustryDlg="commitIndustryDlg"
- @commitMarkDlg="commitMarkDlg"
- :addMarkUpVal="addMarkUpVal"
- :source="3"
- />
- <el-dialog v-dialogDrag :close-on-click-modal="false" :modal-append-to-body="false" center title="查询标的" :visible.sync="dialogVisibleSubject" width="500px" :before-close="handleCloseSubject">
- <div>
- <el-select style="width: 100%" v-model="addSubjectName" remote :remote-method="remoteMethod" clearable filterable @change="searchInfo" placeholder="请输入标的名称">
- <el-option v-for="item in addSubjectOptions" :key="item.IndustrialSubjectId" :label="item.SubjectName" :value="item.SubjectName"> </el-option>
- </el-select>
- </div>
- <p class="subject-text" v-if="isShowSubject">暂无数据</p>
- <template v-else>
- <p class="subject-text" v-for="(item, index) in nameSubjectOptions" :key="index">{{ item.Name }} : {{ item.value }}</p>
- </template>
- <p style="padding-bottom: 50px"></p>
- </el-dialog>
- <modify-img-dlg :modifyImgVisible.sync="modifyImgVisible" :videoAndVoiceList.sync="videoAndVoiceList" />
- </div>
- </template>
- <script>
- import { raiInterface, customInterence, getOSSSign, resourceVoiceupload } from "@/api/api.js";
- import VueFroala from "vue-froala-wysiwyg";
- import Clipboard from "clipboard";
- import AddIndustryMark from "../../components/addIndustryMark.vue";
- import richTextMixins from "../../components/apply/RichTextMixins";
- import MD5 from "js-md5";
- import ResearchDeduct from "./addComopnents/ResearchDeduct.vue";
- import ModifyImgDlg from "./addComopnents/modifyImgDlg.vue";
- export default {
- name: "",
- components: { AddIndustryMark, ResearchDeduct, ModifyImgDlg },
- props: {},
- data() {
- return {
- cactivityType: "",
- content: "", //内容
- optionFormregion: "", //行业选择
- radio: "1", //单选按钮
- isOptionRef: false,
- chartPermissionList: [], //行业的数组
- cactivityTypeList: [], //活动类型
- dialogVisible: false, //弹框
- astrict: "", //人数限制
- copyTxt: "1", //复制的模版
- templatePText: "",
- checkedCities: [], //
- checkedCitiesTwo: "",
- cities: [], //
- isIndeterminate: false, //是否
- checkAll: false,
- showType: "9",
- activityTypeName: "纪要内容模板",
- isShow: true,
- isShowSelect: true,
- forbidden: [],
- checkAllIs: false,
- contentTemplateTitle: "1",
- zoomTemplate: "",
- zoomTemplateP: "",
- industryArr: [], //所有的行业
- industryCascade: "", //所有行业及联的选择
- markValue: "", //添加标的
- markOptions: [], ///添加标的的数组
- addMarkUpVal: {
- industrialName: "",
- industrialId: "",
- }, //弹框里的
- radioTemporary: false, //临时标签
- valTemporary: "", //临时标签的输入框
- selectDisabled: false, //临时标签的输入后全部禁用
- defaultProps: {
- label: "PermissionName",
- children: "List",
- value: "ChartPermissionId",
- },
- addIndustryDlg: false,
- addMarkDlg: false,
- subjectRadio: "1",
- addSubjectLabel: [],
- dialogVisibleSubject: false,
- addSubjectName: "",
- addSubjectOptions: "",
- nameSubjectOptions: [],
- isShowSubject: false,
- ListSubject: [],
- checkScaleList: [], //选择规模
- scaleIsDisabled: "", //选择规模 禁用
- isMark: false,
- radioVisibleActivity: 2,
- decisionChecked: false,
- fileListAudio: [],
- baseApi: process.env.API_ROOT,
- activeIsState: "",
- addEditVideo: [],
- startUpload: false, //开始上传
- percentage: 0,
- isShowAddIcon: true, //主题标签的添加的iocn 是否显示
- modifyImgVisible: false,
- defaultImage: "",
- shareImg:'',
- videoAndVoiceList: [],
- };
- },
- computed: {},
- mixins: [richTextMixins],
- watch: {
- radio: {
- handler(newVal) {
- if (newVal == 1) {
- this.astrict = "";
- }
- if (this.$route.query.id) return;
- this.isCheckAllType(this.cactivityType == 3 && newVal == 2 ? true : false);
- },
- },
- radioTemporary() {
- if (this.radioTemporary) {
- this.selectDisabled = true;
- } else {
- this.valTemporary = "";
- this.selectDisabled = false;
- }
- },
- subjectRadio() {
- this.addSubjectLabel = [];
- },
- cactivityType: {
- handler(newval) {
- if (this.$route.query.id) return;
- this.isCheckAllType(newval === 4 ? true : false);
- },
- },
- },
- created() {},
- mounted() {
- this.chartPermission();
- this.getActivityType();
- this.customerTypelist();
- this.getIndustry();
- if (this.$route.query.id) {
- this.getDetail();
- }
- if (this.$route.query.isShow == 1) {
- this.isShow = false;
- }
- if (this.$route.query.isShow >= 0) {
- this.isShowSelect = false;
- }
- },
- methods: {
- // 上传音频
- async handleUploadAudio(e) {
- const loading = this.$loading({
- lock: true,
- text: "上传音频中...",
- spinner: "el-icon-loading",
- background: "rgba(0, 0, 0, 0.7)",
- });
- let form = new FormData();
- form.append("file", e.file);
- const res = await resourceVoiceupload(form);
- if (res.Ret === 200) {
- this.getVideoAndImg(1);
- let obj = {
- name: res.Data.ResourceName,
- url: res.Data.ResourceUrl,
- PlaySeconds: res.Data.PlaySeconds,
- };
- this.fileListAudio = [obj];
- loading.close();
- }
- },
- //删除新增的主题标签
- deleteSubject(index, item) {
- this.addSubjectLabel.splice(index, 1);
- },
- markSelectFocusAdd(index, item) {
- item.markOptions = [];
- item.IndustrialSubjectIdS = [];
- let arr = [];
- arr = item.IndustrialManagementIdS.map((key) => {
- return key[1];
- });
- raiInterface
- .getindustrialSubjectlistIds({
- IndustrialManagementIdStr: arr.join(","),
- })
- .then((res) => {
- if (res.Ret === 200) {
- item.markOptions = res.Data.List || [];
- }
- });
- },
- addLabelClick() {
- if (this.addSubjectLabel.length) {
- let index = this.addSubjectLabel.length - 1;
- this.addSubjectLabel.push({
- IndustrialManagementIdS: this.addSubjectLabel[index].IndustrialManagementIdS,
- IndustrialSubjectIdS: this.addSubjectLabel[index].IndustrialSubjectIdS,
- markOptions: this.addSubjectLabel[index].markOptions,
- isMark: this.addSubjectLabel[index].isMark,
- forbidden: this.addSubjectLabel[index].forbidden,
- temporary: this.addSubjectLabel[index].temporary,
- temporaryText: this.addSubjectLabel[index].temporaryText,
- subscribe: this.addSubjectLabel[index].subscribe,
- });
- } else {
- this.addSubjectLabel = [
- {
- IndustrialManagementIdS: this.industryCascade,
- IndustrialSubjectIdS: this.markValue,
- markOptions: this.markOptions,
- isMark: this.isMark,
- forbidden: this.selectDisabled,
- temporary: this.radioTemporary,
- temporaryText: this.valTemporary,
- subscribe: this.$refs.researchSelect.isCanAppointmentMinutes,
- },
- ];
- }
- },
- propertyChange() {
- if (this.subjectRadio == 2) return;
- this.markOptions = [];
- this.markValue = "";
- },
- //添加后的 临时标签
- temporaryChangeHandler(item) {
- item.forbidden = item.temporary;
- !item.forbidden ? (item.temporaryText = "") : "";
- },
- //编辑进来的详情
- getDetail() {
- raiInterface.activityDetail({ ActivityId: Number(this.$route.query.id) }).then((res) => {
- if (res.Ret !== 200) return;
- const { Data } = res;
- this.defaultImage = Data.BackgroundImg
- this.shareImg = Data.ShareImg
- this.activeIsState = Data.ActiveState;
- this.cactivityType = Data.ActivityTypeId;
- this.optionFormregion = Data.ChartPermissionName;
- this.checkedCities = Data.CustomerTypeIds ? Data.CustomerTypeIds.split(",").map((item) => Number(item)) : [];
- this.astrict = Data.LimitPeopleNum == "0" ? "" : Data.LimitPeopleNum;
- this.showType = Data.ShowType;
- this.content = Data.Body;
- this.checkScaleList = Data.Scale ? Data.Scale.split(",") : [];
- this.scaleIsDisabled = Data.Scale;
- this.radioVisibleActivity = Data.VisibleRange > 0 ? Data.VisibleRange : 1;
- this.decisionChecked = Data.IsMakerShow == 1 ? true : false;
- let checkedCount = Data.CustomerTypeIds ? Data.CustomerTypeIds.split(",").length : "";
- this.checkAll = checkedCount === this.cities.length;
- this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
- this.isMark = Data.IsShowSubjectName == 1 ? true : false;
- this.valTemporary = Data.TemporaryLabel;
- this.radioTemporary = this.valTemporary ? true : false;
- // 复选框模块
- this.$nextTick(() => {
- let RefPage = this.$refs.researchSelect;
- RefPage.isCanAppointmentMinutes = Data.IsCanAppointmentMinutes == 1 ? true : false;
- RefPage.isYidongConduct = Data.IsYidongConduct == 1 ? true : false;
- RefPage.isExternalLabel = Data.IsExternalLabel == 1 ? true : false;
- RefPage.isCanOutboundCall = Data.IsCanOutboundCall == 1 ? true : false;
- RefPage.isDeduct = Data.IsResearchPoints == 1 ? true : false;
- RefPage.provideEmail = Data.IsNeedEmail == 1 ? true : false;
- RefPage.isBClass = Data.IsBClass == 1 ? true : false;
- RefPage.SiginupDeadline = Data.SiginupDeadline;
- RefPage.PointsSet = Data.PointsSet;
- RefPage.institutionName = Data.PointsSet.CompanyName;
- });
- this.addEditVideo = Data.VideoDetail
- ? [Data.VideoDetail].map((item) => {
- return { name: item.VideoName, PlaySeconds: item.VideoDuration, url: item.VideoUrl };
- })
- : [];
- this.fileListAudio = Data.VoiceList
- ? Data.VoiceList.map((item) => {
- return { name: item.Name, PlaySeconds: item.PlaySeconds, url: item.Url };
- })
- : [];
- if (Data.PublishStatus == 1) {
- this.forbidden = Data.CustomerTypeIds ? Data.CustomerTypeIds.split(",") : [];
- this.checkAllIs = this.forbidden.length >= 1;
- }
- if (this.astrict > 0 && this.showType == 2) {
- this.radio = "2";
- }
- this.valTemporary = res.Data.TemporaryLabel;
- this.radioTemporary = this.valTemporary ? true : false;
- this.industryCascade = res.Data.ListIndustrial ? res.Data.ListIndustrial.map((item) => [item.ChartPermissionId, item.IndustrialManagementId]) : "";
- this.markValue = res.Data.ListSubject ? res.Data.ListSubject.map((item) => item.IndustrialSubjectId) : "";
- if (this.markValue) {
- this.markSelectFocus();
- }
- });
- },
- //提交发布活保存前的校验
- submitForm(type) {
- if (this.checkedCities) {
- this.checkedCitiesTwo = this.checkedCities.join(",");
- }
- if (!this.radioTemporary && !this.industryCascade.length) return this.$message.error("请选择产业!");
- if (this.radioTemporary && !this.valTemporary) return this.$message.error("请输入临时标签!");
- let arr = [];
- if (this.industryCascade.length) {
- arr = this.industryCascade.map((item) => {
- return item[1];
- });
- }
- if (this.showType == "3" || this.radio == "2") {
- if (!this.astrict) return this.$message.error("请在输入框输入人数上限!");
- }
- if (!this.cactivityType || !this.optionFormregion) return this.$message.error("请选择行业或活动类型");
- if (this.subjectRadio == 2) {
- let labelArr = this.addSubjectLabel.map((item) => {
- let labelArrList = [];
- item.IndustrialManagementIdS.forEach((val) => {
- labelArrList.push(val[1]);
- });
- return {
- IndustrialManagementIdS: labelArrList.join(","),
- IndustrialSubjectIdS: item.IndustrialSubjectIdS.join(","),
- IsShowSubjectName: item.isMark ? 1 : 0,
- TemporaryLabel: item.temporary ? item.temporaryText : "",
- IsCanAppointmentMinutes: item.subscribe ? 1 : 0,
- };
- });
- this.ListSubject = [
- {
- IndustrialManagementIdS: arr.length ? arr.join(",") : "",
- IndustrialSubjectIdS: this.markValue.length ? this.markValue.join(",") : "",
- IsShowSubjectName: this.isMark ? 1 : 0,
- TemporaryLabel: this.radioTemporary ? this.valTemporary : "",
- IsCanAppointmentMinutes: this.$refs.researchSelect.isCanAppointmentMinutes ? 1 : 0,
- },
- ...labelArr,
- ];
- } else {
- this.ListSubject = [
- {
- IndustrialManagementIdS: arr.length ? arr.join(",") : "",
- IndustrialSubjectIdS: this.markValue.length ? this.markValue.join(",") : "",
- IsShowSubjectName: this.isMark ? 1 : 0,
- TemporaryLabel: this.radioTemporary ? this.valTemporary : "",
- IsCanAppointmentMinutes: this.$refs.researchSelect.isCanAppointmentMinutes ? 1 : 0,
- },
- ];
- }
- let VoiceList = this.fileListAudio.map((item) => {
- return {
- Name: item.name,
- PlaySeconds: item.PlaySeconds.toString(),
- Url: item.url,
- };
- });
- let VideoDetail = this.addEditVideo.map((item) => {
- return {
- VideoName: item.name,
- VideoDuration: item.PlaySeconds.toString(),
- VideoUrl: item.url,
- };
- });
- this.saveTheRelease(type, arr, VoiceList, VideoDetail[0]);
- },
- //保存或发布
- async saveTheRelease(type, arr, VoiceList, VideoDetail) {
- let RefPage = this.$refs.researchSelect;
- let PointsSet = RefPage.PointsSet;
- const res = await raiInterface.preserveAndPublishAdd({
- DoType: type == "发布" ? 1 : 0,
- ActivityId: Number(this.$route.query.id) || 0,
- ActivityTypeId: Number(this.cactivityType),
- Body: this.content,
- PermissionName: this.optionFormregion,
- CustomerTypeIds: this.checkedCitiesTwo,
- IsAllCustomerType: this.checkAll ? 1 : 0,
- LimitPeopleNum: Number(this.astrict) || 0,
- IndustrialManagementIdS: arr.length ? arr.join(",") : "",
- IndustrialSubjectIdS: this.markValue.length ? this.markValue.join(",") : "",
- List: this.ListSubject,
- Scale: this.checkScaleList.length ? this.checkScaleList.join(",") : "",
- LabelType: Number(this.subjectRadio),
- IsShowSubjectName: this.isMark ? 1 : 0,
- IsMakerShow: this.decisionChecked ? 1 : 0,
- VisibleRange: this.radioVisibleActivity,
- VoiceList,
- VideoDetail,
- IsYidongConduct: RefPage.isYidongConduct ? 1 : 0,
- IsExternalLabel: RefPage.isExternalLabel ? 1 : 0,
- IsCanOutboundCall: RefPage.isCanOutboundCall ? 1 : 0,
- IsResearchPoints: RefPage.isDeduct ? 1 : 0,
- IsNeedEmail: RefPage.provideEmail ? 1 : 0,
- IsBClass: RefPage.isBClass ? 1 : 0,
- SiginupDeadline: RefPage.SiginupDeadline,
- PointsSet,
- BackgroundImg:this.defaultImage,
- ShareImg:this.shareImg,
- });
- if (res.Ret !== 200) return;
- this.$message.success("操作成功!");
- this.$router.back();
- },
- //获取行业
- chartPermission() {
- raiInterface.chartPermissionList().then((res) => {
- if (res.Ret === 200) {
- this.chartPermissionList = res.Data.List;
- }
- });
- },
- //获取活动类型
- getActivityType() {
- raiInterface.getActivityType().then((res) => {
- if (res.Ret === 200) {
- this.isShowAddIcon = res.Data.IsShowAddIcon;
- this.cactivityTypeList = res.Data.List;
- }
- });
- },
- //获取活动类型详情
- activityTypeDetail(e) {
- this.radio = "1"; //单选按钮
- this.astrict = ""; //人数限制
- this.contentTemplateTitle = "1";
- this.subjectRadio = "1";
- this.checkedCities = [];
- this.$refs.researchSelect.isBClass = false;
- this.radioVisibleActivity = this.cactivityType == 7 ? 1 : 2;
- if (!this.cactivityType) return;
- raiInterface
- .activityTypeDetail({
- ActivityTypeId: this.cactivityType - 0,
- })
- .then((res) => {
- if (res.Ret === 200) {
- this.copyTxt = res.Data.Template;
- this.templatePText = res.Data.TemplateP;
- this.zoomTemplate = res.Data.ZoomTemplate;
- this.ZoomTemplateP = res.Data.ZoomTemplateP;
- this.showType = res.Data.ShowType;
- this.activityTypeName = res.Data.ActivityTypeName;
- }
- });
- },
- // 操作:点击了复制按钮
- handleCopyFun() {
- let clipboard = new Clipboard("#copy_text");
- clipboard.on("success", (e) => {
- this.$message({
- type: "success",
- message: "复制成功!",
- });
- this.dialogVisible = false;
- clipboard.destroy(); // 释放内存
- });
- clipboard.on("error", (e) => {
- // 不支持复制
- this.$Message.info("该浏览器不支持自动复制");
- clipboard.destroy(); // 释放内存
- });
- },
- //点击了复制模版
- templateBtn() {
- if (!this.cactivityType) return this.$message.error("请选择活动类型");
- this.dialogVisible = true;
- },
- //获取多选的客户列表
- customerTypelist() {
- raiInterface.customerTypelist().then((res) => {
- if (res.Ret === 200) {
- this.cities = res.Data.List;
- }
- });
- },
- // 子组件来的事件 产业
- commitIndustryDlg(data, type = "") {
- this.getIndustry();
- this.industryCascade.push([Number(data.ChartPermissionId), Number(data.NewId)]);
- },
- // 子组件来的事件 标的
- commitMarkDlg(data) {
- let arr = this.industryCascade.flat(Infinity);
- raiInterface
- .getindustrialSubjectlistIds({
- IndustrialManagementIdStr: arr[1],
- })
- .then((res) => {
- if (res.Ret === 200) {
- this.markOptions = res.Data.List || [];
- }
- });
- this.markValue = data.split(",").map((item) => Number(item));
- },
- /* 获取全部的行业 */
- getIndustry() {
- raiInterface.getListIndustrial().then((res) => {
- if (res.Ret === 200) {
- this.industryArr = res.Data.List || [];
- }
- });
- },
- //top 行业清除的事件
- clearTopIndustry() {
- this.industryCascade = [];
- this.radioTemporary = false;
- this.valTemporary = "";
- this.markValue = "";
- this.radioVisibleActivity = 2;
- },
- //添加标的的点击事件
- isAddMarketDlg() {
- let arr = this.industryCascade.flat(Infinity);
- this.industryArr.forEach((item) => {
- if (item.ChartPermissionId == arr[0]) {
- this.addMarkUpVal.industrialId = arr[1];
- item.List.forEach((key) => {
- if (key.ChartPermissionId == arr[1]) {
- this.addMarkUpVal.industrialName = key.PermissionName;
- }
- });
- }
- });
- if (this.industryCascade.length == 1) {
- this.addMarkDlg = true;
- } else if (this.industryCascade.length > 1) {
- this.$message.error("已选多个产业,无法添加标的");
- } else {
- this.$message.error("请先选择产业");
- }
- },
- //点击添加标的的下拉选择框
- markSelectFocus() {
- if (!this.industryCascade.length) {
- this.$message.error("请先选择产业");
- } else {
- let arr = [];
- arr = this.industryCascade.map((item) => {
- return item[1];
- });
- raiInterface
- .getindustrialSubjectlistIds({
- IndustrialManagementIdStr: arr.join(","),
- })
- .then((res) => {
- if (res.Ret === 200) {
- this.markOptions = res.Data.List || [];
- }
- });
- }
- },
- handleCheckAllChange(val) {
- if (val) {
- let newCodeList = this.cities.map((item) => item.CustomerTypeId);
- this.checkedCities = newCodeList;
- } else {
- this.checkedCities = [];
- }
- this.checkedCitiesTwo = this.checkedCities.join(",");
- this.isIndeterminate = false;
- },
- handleCheckedCitiesChange(value) {
- let checkedCount = value.length;
- this.checkAll = checkedCount === this.cities.length;
- this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
- },
- cancelBtn() {
- this.$router.back();
- },
- contentTemplate(type) {
- this.contentTemplateTitle = type;
- },
- handleCloseSubject() {
- this.nameSubjectOptions = [];
- this.addSubjectName = "";
- this.addSubjectOptions = [];
- this.dialogVisibleSubject = false;
- },
- async remoteMethod(query) {
- if (query !== "") {
- const res = await raiInterface.industrialSubjectSearch({
- KeyWord: query,
- });
- if (res.Ret === 200) {
- this.addSubjectOptions = res.Data.List || [];
- }
- }
- },
- async searchInfo(val) {
- if (val !== "") {
- const res = await raiInterface.industrialSubjectSearchInfo({
- KeyWord: val,
- });
- if (res.Ret === 200) {
- this.isShowSubject = res.Data.List ? false : true;
- let arrList = [];
- arrList = res.Data.List
- ? res.Data.List.map((item) => {
- let arr = [];
- item.List.forEach((key) => {
- arr.push(key.Name);
- });
- return {
- ...item,
- value: arr.join(","),
- };
- })
- : [];
- this.nameSubjectOptions = arrList;
- }
- } else {
- this.nameSubjectOptions = [];
- }
- },
- //套餐类型的 提升文本
- checkboxTooltip(val) {
- let str = "";
- switch (val) {
- case "全选":
- str = "所有客户均可看到该活动(冻结、流失客户也可看到,但会提示无权限参会)";
- break;
- case "活动可见":
- str = "套餐类型和管理规模两项下,均有勾选时,只要满足其中之一的条件,客户就可见此活动。例如:勾选了大套餐客户和100亿以上,则大套餐客户和100亿以上规模的客户都可以看到此活动";
- break;
- }
- return str;
- },
- //删除上传
- handleRemoveAudio(file, fileList) {
- this.fileListAudio = [];
- },
- //删除上传前得确认
- beforeRemoveAudio(file, fileList) {
- return this.$confirm(`确定移除 ${file.name}?`);
- },
- //删除视频的上传
- handleRemoveVideo(file, fileList) {
- this.addEditVideo = [];
- },
- //获取视频时长的promise
- handleGetDuration(file) {
- return new Promise((resolve, reject) => {
- const fileUrl = URL.createObjectURL(file);
- const audioEl = new Audio(fileUrl);
- audioEl.addEventListener("loadedmetadata", (e) => {
- resolve(audioEl.duration);
- });
- });
- },
- //上传视频判断格式
- handelBeforeUploadVideo(e) {
- if (e.type != "video/mp4") {
- this.$message.warning("上传失败,上传视频格式不正确");
- return false;
- }
- },
- // 上传视频
- async handleUpload(e) {
- const duration = await this.handleGetDuration(e.file);
- this.addEditVideo.push({
- name: e.file.name,
- PlaySeconds: duration + "",
- url: "",
- });
- const res = await getOSSSign();
- if (res.Ret === 200) {
- let accessKeyId = res.Data.AccessKeyId;
- let accessKeySecret = res.Data.AccessKeySecret;
- let stsToken = res.Data.SecurityToken;
- this.handleUploadToOSS(e.file, accessKeyId, accessKeySecret, stsToken);
- }
- },
- //上传到阿里云
- async handleUploadToOSS(file, accessKeyId, accessKeySecret, stsToken) {
- this.startUpload = true;
- const ALOSSINS = new OSS({
- // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
- region: "oss-cn-shanghai",
- // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
- accessKeyId: accessKeyId,
- accessKeySecret: accessKeySecret,
- // 从STS服务获取的安全令牌(SecurityToken)。
- stsToken: stsToken,
- // 填写Bucket名称,例如examplebucket。
- bucket: "hzchart",
- endpoint: "hzstatic.hzinsights.com",
- cname: true,
- timeout: 600000,
- });
- // 生成文件名
- const t = new Date().getTime().toString();
- const temName = `static/yb/video/${MD5(t)}.${file.name.split(".")[1]}`;
- console.log(temName);
- const options = {
- // 获取分片上传进度、断点和返回值。
- progress: (p, cpt, res) => {
- console.log(p);
- this.percentage = parseInt(p * 100);
- },
- // 设置并发上传的分片数量。
- parallel: 10,
- // 设置分片大小。默认值为1 MB,最小值为100 KB。
- partSize: 1024 * 1024 * 10, // 10MB
- };
- try {
- const res = await ALOSSINS.multipartUpload(temName, file, { ...options });
- console.log("上传结果", res);
- if (res.res.status === 200) {
- this.getVideoAndImg(2);
- let VideoUrl = "https://hzstatic.hzinsights.com/" + res.name;
- this.addEditVideo[0].url = VideoUrl;
- this.startUpload = false;
- this.percentage = 0;
- }
- } catch (error) {
- this.$message.warning("上传失败,请刷新重试");
- this.startUpload = false;
- this.percentage = 0;
- }
- },
- errorUpload() {
- this.$message.error("音频文件和视频文件,仅支•持•上•传一个");
- },
- // 公司线下调研 调研电话会 的选择
- isCheckAllType(newval) {
- if (newval) {
- let newCodeList = [];
- this.cities.forEach((item) => {
- if (![5, 6, 7].includes(item.CustomerTypeId)) {
- newCodeList.push(item.CustomerTypeId);
- }
- });
- this.checkedCities = newCodeList;
- this.checkedCitiesTwo = this.checkedCities.join(",");
- this.isIndeterminate = true;
- this.checkAll = false;
- } else {
- this.checkedCities = [];
- this.checkedCitiesTwo = "";
- this.checkAll = false;
- }
- },
- // 点击修改图片的弹框
- modifyImgHandler() {
- let type = this.addEditVideo.length > 0 ? 2 : 1;
- this.getVideoAndImg(type, "修改");
- this.modifyImgVisible = true;
- },
- // video_and_voiceImgActivityVideo()
- async getVideoAndImg(type, isOne = "") {
- const res = await raiInterface.video_and_voiceImgActivityVideo({
- FileType: type,
- ActivityId: Number(this.$route.query.id),
- });
- if (res.Ret === 200) {
- isOne == "修改" ? "" : (this.defaultImage = res.Data.List[0].ImgUrl);
- this.videoAndVoiceList = res.Data.List;
- }
- },
- },
- };
- </script>
- <style lang="scss">
- .container-addAct {
- .content-template {
- display: flex;
- div {
- margin-right: 20px;
- padding-bottom: 4px;
- }
- .active {
- border-bottom: 4px solid #409eff;
- }
- margin-bottom: 20px;
- }
- .customWidth {
- width: 550px !important;
- }
- .top-box {
- display: flex;
- justify-content: space-between;
- }
- .fr-second-toolbar {
- display: none;
- }
- #dialog {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- color: #333;
- font-size: 14px;
- div {
- margin-bottom: 40px;
- }
- }
- .no-cv {
- margin-top: 30px;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- }
- .text-right {
- display: inline-block;
- text-align: right;
- }
- .radio-input {
- display: flex;
- align-items: center;
- .el-input__inner {
- box-sizing: border-box;
- line-height: 30px;
- width: 112px;
- height: 28px !important;
- background: #ffffff;
- border: 1px solid #aab4cc;
- border-radius: 4px;
- }
- }
- .astrict-inpt {
- box-sizing: border-box;
- line-height: 30px;
- width: 112px;
- height: 28px !important;
- background: #ffffff;
- input {
- padding: 10px;
- }
- }
- .checkbox-box {
- display: flex;
- margin-bottom: 10px;
- .el-checkbox {
- margin-left: 5px;
- margin-right: 30px;
- }
- }
- .subject-text {
- padding-top: 20px;
- }
- .is-visible {
- margin-bottom: 20px;
- .el-checkbox {
- margin-left: 20px;
- }
- }
- .audio-content {
- display: flex;
- align-items: center;
- .test {
- flex-shrink: 0;
- }
- .upload-demo {
- display: flex;
- .el-upload-list {
- margin-left: 20px;
- }
- }
- }
- .cover-content {
- align-items: stretch;
- vertical-align: bottom;
- .img-content {
- position: relative;
- height: 200px;
- width: 200px;
- border: 1px solid #ccc;
- img {
- width: 100%;
- height: 100%;
- }
- }
- .modify {
- position: absolute;
- bottom: 0;
- right: -50px;
- height: 20px;
- cursor: pointer;
- color: #409eff;
- }
- }
- .el-upload-list__item.is-success.focusing .el-icon-close-tip {
- display: none !important;
- }
- }
- .fr-visible {
- display: none !important;
- }
- .add-delete {
- display: flex;
- align-items: center;
- img {
- width: 18px;
- }
- }
- </style>
|