From e890f87ea274436461aacca1391bb9717240f210 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期四, 04 九月 2025 14:21:39 +0800 Subject: [PATCH] 商家端订单列表 --- manager/src/views/activity/index.vue | 1684 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 1,225 insertions(+), 459 deletions(-) diff --git a/manager/src/views/activity/index.vue b/manager/src/views/activity/index.vue index b1f49f2..fafe6a6 100644 --- a/manager/src/views/activity/index.vue +++ b/manager/src/views/activity/index.vue @@ -38,6 +38,24 @@ </Option> </Select> </FormItem> + <FormItem label="瀹℃牳鎯呭喌" prop="audit"> + <Select + v-model="searchForm.audit" + placeholder="璇烽�夋嫨瀹℃牳鎯呭喌" + style="width: 180px" + clearable + @on-clear="handleSearch" + @on-change="handleSearch" + > + <Option + v-for="item in auditSelect" + :value="item.value" + :key="item.id" + > + {{ item.label }} + </Option> + </Select> + </FormItem> <FormItem label="鎶ュ悕寮�濮嬫椂闂�" prop="reportStartTime"> <DatePicker :value="searchForm.reportStartTime" @@ -136,6 +154,11 @@ <Button type="info" size="small" + @click="detail(row)" + >璇︽儏</Button> + <Button + type="info" + size="small" @click="openEdit(row)" >缂栬緫</Button> <Button @@ -148,6 +171,12 @@ size="small" @click="openMembersModal(row)" >鎶ュ悕浜哄憳</Button> + <Button + type="success" + size="small" + :disabled="row.auditStatus !== 0" + @click="openAuditModal(row)" + >瀹℃牳娲诲姩</Button> </div> </template> </Table> @@ -283,8 +312,8 @@ /> </FormItem> </Col> - <Col span="12"> - <FormItem label="娲诲姩鍦扮偣" prop="activityLocation"> + <Col span="12" v-if="activityFrom.activityType === 'offline'"> + <FormItem label="娲诲姩鍦扮偣" prop="activityLocation" > <Input v-model="activityFrom.activityLocation" placeholder="璇疯緭鍏ユ椿鍔ㄥ湴鐐�" @@ -293,7 +322,30 @@ </Col> <Col span="24"> <FormItem label="娲诲姩鍐呭锛�" prop="activityContent"> - <editor ref="editor" @input="getReason" /> + + <!-- 鍩轰簬elementUi鐨勪笂浼犵粍浠� el-upload begin--> + <Upload + :show-upload-list="false" + ref="upload" + style="display: none" + :before-upload="handleUploadEdit" + :format="['jpg','jpeg','png','gif','mp4','mov']" + :max-size="20480" + action="" + accept="image/*,video/*" + > + </Upload> + <!-- 鍩轰簬elementUi鐨勪笂浼犵粍浠� el-upload end--> + <quill-editor + v-model="activityFrom.activityContent" + ref="QuillEditor" + class="editor" + :options="editorOption" + @blur="onEditorBlur($event)" + @focus="onEditorFocus($event)" + @ready="onEditorReady($event)" + > + </quill-editor> </FormItem> </Col> </Row> @@ -336,6 +388,186 @@ </Row> </Modal> + <Modal + v-model="infoModelShow" + :title="modelTitle" + @on-cancel="infoModelClose" + width="800" + :mask-closable="false" + > + <div class="detail-container"> + <Row :gutter="16"> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩鍚嶇О锛�</label> + <span>{{ activityInfo.activityName || '-' }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩绫诲瀷锛�</label> + <span>{{activityInfo.activityType === 'online' ? '绾夸笂':'绾夸笅'}}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>鎶ュ悕鏃堕棿娈碉細</label> + <span>{{ activityInfo.reportStartTime }} - {{ activityInfo.reportEndTime }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩鏃堕棿娈碉細</label> + <span>{{ activityInfo.startTime }} - {{ activityInfo.endTime }}</span> + </div> + </Col> + + <Col span="24" v-if="coverType === '杈撳叆鏂囧瓧灏侀潰'"> + <div class="detail-item"> + <label>灏侀潰鏂囧瓧锛�</label> + <span>{{ activityInfo.cover || '-' }}</span> + </div> + </Col> + <Col span="24" v-if="coverType === '閫夋嫨鏂囦欢灏侀潰'"> + <div class="detail-item"> + <label>涓婁紶灏侀潰锛�</label> + <span>{{ activityInfo.cover }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>浜烘暟闄愬埗锛�</label> + <span>{{ activityInfo.limitUserNum || '鏃犻檺鍒�' }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩鍦扮偣锛�</label> + <span>{{ activityInfo.activityLocation || '-' }}</span> + </div> + </Col> + <Col span="24"> + <div class="detail-item"> + <label>娲诲姩鍐呭锛�</label> + <div + class="activity-content" + v-html="activityInfo.activityContent || '鏃犲唴瀹�'" + ></div> + </div> + </Col> + </Row> + </div> + + <div slot="footer"> + <Button @click="infoModelClose">鍏抽棴</Button> + </div> + </Modal> + + + <Modal + v-model="auditModelShow" + :title="modelTitle" + @on-cancel="closeAuditModel" + width="800" + :mask-closable="false" + > + <div class="detail-container"> + <Row :gutter="16"> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩鍚嶇О锛�</label> + <span>{{ activityInfo.activityName || '-' }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩绫诲瀷锛�</label> + <span>{{activityInfo.activityType === 'online' ? '绾夸笂':'绾夸笅'}}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>鎶ュ悕鏃堕棿娈碉細</label> + <span>{{ activityInfo.reportStartTime }} - {{ activityInfo.reportEndTime }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩鏃堕棿娈碉細</label> + <span>{{ activityInfo.startTime }} - {{ activityInfo.endTime }}</span> + </div> + </Col> + + <Col span="24" v-if="coverType === '杈撳叆鏂囧瓧灏侀潰'"> + <div class="detail-item"> + <label>灏侀潰鏂囧瓧锛�</label> + <span>{{ activityInfo.cover || '-' }}</span> + </div> + </Col> + <Col span="24" v-if="coverType === '閫夋嫨鏂囦欢灏侀潰'"> + <div class="detail-item"> + <label>涓婁紶灏侀潰锛�</label> + <span>{{ activityInfo.cover }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>浜烘暟闄愬埗锛�</label> + <span>{{ activityInfo.limitUserNum || '鏃犻檺鍒�' }}</span> + </div> + </Col> + <Col span="12"> + <div class="detail-item"> + <label>娲诲姩鍦扮偣锛�</label> + <span>{{ activityInfo.activityLocation || '-' }}</span> + </div> + </Col> + <Col span="24"> + <div class="detail-item"> + <label>娲诲姩鍐呭锛�</label> + <div + class="activity-content" + v-html="activityInfo.activityContent || '鏃犲唴瀹�'" + ref="鈥渁ctivityHTMLContent" + ></div> + </div> + </Col> + <Col span="24"> + <Form :model="auditForm" :rules="auditRules" ref="auditForm" class="audit-form"> + <FormItem label="瀹℃牳缁撴灉锛�" prop="audit"> + <RadioGroup v-model="auditForm.audit"> + <Radio label="1">閫氳繃</Radio> + <Radio label="2">鏈�氳繃</Radio> + </RadioGroup> + </FormItem> + <FormItem label="瀹℃牳澶囨敞锛�" prop="remarks"> + <Input + v-model="auditForm.remarks" + type="textarea" + :rows="4" + placeholder="璇疯緭鍏ュ鏍稿娉紙閫夊~锛�" + :disabled="!auditForm.audit" + /> + </FormItem> + </Form> + </Col> + </Row> + </div> + + <!-- 瀹℃牳琛ㄥ崟 --> + + + <div slot="footer"> + <Button @click="closeAuditModel">鍏抽棴</Button> + <Button + type="primary" + @click="handleAuditSubmit(activityInfo.id)" + :disabled="!auditForm.audit" + >鎻愪氦瀹℃牳</Button> + </div> + </Modal> + + <!-- 鍥剧墖棰勮妯℃�佹 --> <Modal v-model="previewVisible" title="鍥剧墖棰勮" footer-hide> <img :src="previewImageUrl" style="width: 100%"> @@ -350,23 +582,113 @@ addActivity, editActivity, delActivityById, + delActivityBatch, activityChangeStatus, activityChangeRecommend, - activityMembersPage + activityMembersPage, + auditActivity } from "@/api/activity.js" -import Editor from '@/components/editor/index.vue' import { uploadFileByLmk, delByKey } from "@/api/common.js" + +import { quillEditor } from 'vue-quill-editor' +import 'quill/dist/quill.core.css'; +import 'quill/dist/quill.snow.css'; +import 'quill/dist/quill.bubble.css'; + +import * as Quill from 'quill' //寮曞叆缂栬緫鍣� +import VideoBlot from './video.js'; + +const toolbarOptions = [ + ['bold', 'italic', 'underline', 'strike'], // 鍔犵矖锛屾枩浣擄紝涓嬪垝绾匡紝鍒犻櫎绾� + ['blockquote', 'code-block'], //寮曠敤锛屼唬鐮佸潡 + [{ 'header': 1 }, { 'header': 2 }], // 鍑犵骇鏍囬 + [{ 'list': 'ordered' }, { 'list': 'bullet' }], // 鏈夊簭鍒楄〃锛屾棤搴忓垪琛� + [{ 'script': 'sub' }, { 'script': 'super' }], // 涓嬭鏍囷紝涓婅鏍� + [{ 'indent': '-1' }, { 'indent': '+1' }], // 缂╄繘 + [{ 'direction': 'rtl' }], // 鏂囧瓧杈撳叆鏂瑰悜 + [{ 'size': ['small', false, 'large', 'huge'] }], // 瀛椾綋澶у皬 + [{ 'header': [1, 2, 3, 4, 5, 6, false] }], // 鏍囬 + [{ 'color': [] }, { 'background': [] }], // 棰滆壊閫夋嫨 + // [{ 'font': [] }], // 瀛椾綋 + [{ 'align': [] }], // 灞呬腑 + ['clean'], // 娓呴櫎鏍峰紡, + ['link'], + ['myUploadBtn'], +] + +// toolbar鏍囬 +const titleConfig = [ + { Choice: '.ql-insertMetric', title: '璺宠浆閰嶇疆' }, + { Choice: '.ql-bold', title: '鍔犵矖' }, + { Choice: '.ql-italic', title: '鏂滀綋' }, + { Choice: '.ql-underline', title: '涓嬪垝绾�' }, + { Choice: '.ql-header', title: '娈佃惤鏍煎紡' }, + { Choice: '.ql-strike', title: '鍒犻櫎绾�' }, + { Choice: '.ql-blockquote', title: '鍧楀紩鐢�' }, + { Choice: '.ql-code', title: '鎻掑叆浠g爜' }, + { Choice: '.ql-code-block', title: '鎻掑叆浠g爜娈�' }, + { Choice: '.ql-font', title: '瀛椾綋' }, + { Choice: '.ql-size', title: '瀛椾綋澶у皬' }, + { Choice: '.ql-list[value="ordered"]', title: '缂栧彿鍒楄〃' }, + { Choice: '.ql-list[value="bullet"]', title: '椤圭洰鍒楄〃' }, + { Choice: '.ql-direction', title: '鏂囨湰鏂瑰悜' }, + { Choice: '.ql-header[value="1"]', title: 'h1' }, + { Choice: '.ql-header[value="2"]', title: 'h2' }, + { Choice: '.ql-align', title: '瀵归綈鏂瑰紡' }, + { Choice: '.ql-color', title: '瀛椾綋棰滆壊' }, + { Choice: '.ql-background', title: '鑳屾櫙棰滆壊' }, + { Choice: '.ql-image', title: '鍥惧儚' }, + { Choice: '.ql-video', title: '瑙嗛' }, + { Choice: '.ql-link', title: '娣诲姞閾炬帴' }, + { Choice: '.ql-formula', title: '鎻掑叆鍏紡' }, + { Choice: '.ql-clean', title: '娓呴櫎瀛椾綋鏍煎紡' }, + { Choice: '.ql-script[value="sub"]', title: '涓嬫爣' }, + { Choice: '.ql-script[value="super"]', title: '涓婃爣' }, + { Choice: '.ql-indent[value="-1"]', title: '鍚戝乏缂╄繘' }, + { Choice: '.ql-indent[value="+1"]', title: '鍚戝彸缂╄繘' }, + { Choice: '.ql-header .ql-picker-label', title: '鏍囬澶у皬' }, + { Choice: '.ql-header .ql-picker-item[data-value="1"]', title: '鏍囬涓�' }, + { Choice: '.ql-header .ql-picker-item[data-value="2"]', title: '鏍囬浜�' }, + { Choice: '.ql-header .ql-picker-item[data-value="3"]', title: '鏍囬涓�' }, + { Choice: '.ql-header .ql-picker-item[data-value="4"]', title: '鏍囬鍥�' }, + { Choice: '.ql-header .ql-picker-item[data-value="5"]', title: '鏍囬浜�' }, + { Choice: '.ql-header .ql-picker-item[data-value="6"]', title: '鏍囬鍏�' }, + { Choice: '.ql-header .ql-picker-item:last-child', title: '鏍囧噯' }, + { Choice: '.ql-size .ql-picker-item[data-value="small"]', title: '灏忓彿' }, + { Choice: '.ql-size .ql-picker-item[data-value="large"]', title: '澶у彿' }, + { Choice: '.ql-size .ql-picker-item[data-value="huge"]', title: '瓒呭ぇ鍙�' }, + { Choice: '.ql-size .ql-picker-item:nth-child(2)', title: '鏍囧噯' }, + { Choice: '.ql-align .ql-picker-item:first-child', title: '灞呭乏瀵归綈' }, + { Choice: '.ql-align .ql-picker-item[data-value="center"]', title: '灞呬腑瀵归綈' }, + { Choice: '.ql-align .ql-picker-item[data-value="right"]', title: '灞呭彸瀵归綈' }, + { Choice: '.ql-align .ql-picker-item[data-value="justify"]', title: '涓ょ瀵归綈' } +] + export default { name: "ActivityManagement", - components: {Editor}, + components: { quillEditor}, data() { return { + auditForm: { + activityId: '', + audit: null, + remarks: '' + }, + auditRules: { + audit: [ + {required: true, message: '璇烽�夋嫨瀹℃牳缁撴灉', trigger: 'change'} + ] + }, + infoModelShow: false, + auditModelShow: false, + loading: false, membersLoading: false, submitLoading: false, // 鎼滅储琛ㄥ崟 searchForm: { + audit: '', activityName: '', activityType: '', reportStartTime: '', @@ -383,14 +705,18 @@ // 娲诲姩绫诲瀷閫夐」 typeSelect: [ - { id: 1, value: 'online',label:'绾夸笂' }, - { id: 2, value: 'offline',label:'绾夸笅' } + {id: 1, value: 'online', label: '绾夸笂'}, + {id: 2, value: 'offline', label: '绾夸笅'} + ], + auditSelect: [ + {id: 1, value: '1', label: '宸插鏍�'}, + {id: 2, value: '0', label: '鏈鏍�'} ], // 灏侀潰绫诲瀷閫夐」 coverTypeOptions: [ - { id: 1, value: '杈撳叆鏂囧瓧灏侀潰' }, - { id: 2, value: '閫夋嫨鏂囦欢灏侀潰' } + {id: 1, value: '杈撳叆鏂囧瓧灏侀潰'}, + {id: 2, value: '閫夋嫨鏂囦欢灏侀潰'} ], coverType: '', file: null, @@ -414,40 +740,58 @@ limitUserNum: 0, activityLocation: '', }, + activityInfo: { + id: '', + activityName: '', + activityType: '', + reportTime: [], + time: [], + activityContent: '', + cover: '', + coverType: '', + status: '', + reportStartTime: '', + reportEndTime: '', + startTime: '', + endTime: '', + recommend: false, + limitUserNum: 0, + activityLocation: '', + }, // 琛ㄥ崟楠岃瘉瑙勫垯 rules: { activityName: [ - { required: true, message: '璇疯緭鍏ユ椿鍔ㄥ悕绉�', trigger: 'blur' }, - { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' } + {required: true, message: '璇疯緭鍏ユ椿鍔ㄥ悕绉�', trigger: 'blur'}, + {max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur'} ], activityType: [ - { required: true, message: '璇烽�夋嫨娲诲姩绫诲瀷', trigger: 'change' } + {required: true, message: '璇烽�夋嫨娲诲姩绫诲瀷', trigger: 'change'} ], reportTime: [ - { type: 'array', required: true, message: '璇烽�夋嫨鎶ュ悕鏃堕棿娈�', trigger: 'change' }, - { validator: this.validateReportTime, trigger: 'change' } + {type: 'array', required: true, message: '璇烽�夋嫨鎶ュ悕鏃堕棿娈�', trigger: 'change'}, + {validator: this.validateReportTime, trigger: 'change'} ], time: [ - { type: 'array', required: true, message: '璇烽�夋嫨娲诲姩鏃堕棿娈�', trigger: 'change' }, - { validator: this.validateActivityTime, trigger: 'change' } + {type: 'array', required: true, message: '璇烽�夋嫨娲诲姩鏃堕棿娈�', trigger: 'change'}, + {validator: this.validateActivityTime, trigger: 'change'} ], cover: [ - { required: true, message: '璇疯緭鍏ュ皝闈㈠唴瀹�', trigger: 'blur' } + {required: true, message: '璇疯緭鍏ュ皝闈㈠唴瀹�', trigger: 'blur'} ], coverType: [ - { required: true, message: '璇烽�夋嫨灏侀潰绫诲瀷', trigger: 'blur' } + {required: true, message: '璇烽�夋嫨灏侀潰绫诲瀷', trigger: 'blur'} ], limitUserNum: [ - { required: true, type: 'number', message: '璇疯緭鍏ヤ汉鏁伴檺鍒�', trigger: 'blur' }, - { type: 'number', min: 1, message: '浜烘暟涓嶈兘灏戜簬1浜�', trigger: 'blur' } + {required: true, type: 'number', message: '璇疯緭鍏ヤ汉鏁伴檺鍒�', trigger: 'blur'}, + {type: 'number', min: 1, message: '浜烘暟涓嶈兘灏戜簬1浜�', trigger: 'blur'} ], activityLocation: [ - { required: true, message: '璇疯緭鍏ユ椿鍔ㄥ湴鐐�', trigger: 'blur' }, - { max: 100, message: '闀垮害涓嶈兘瓒呰繃100涓瓧绗�', trigger: 'blur' } + {required: true, message: '璇疯緭鍏ユ椿鍔ㄥ湴鐐�', trigger: 'blur'}, + {max: 100, message: '闀垮害涓嶈兘瓒呰繃100涓瓧绗�', trigger: 'blur'} ], activityContent: [ - { required: true, message: '璇疯緭鍏ユ椿鍔ㄥ唴瀹�', trigger: 'blur' } + {required: false, message: '璇疯緭鍏ユ椿鍔ㄥ唴瀹�', trigger: 'blur'} ] }, @@ -470,8 +814,7 @@ width: 100, align: 'center', render: (h, params) => { - return h('Tag', { - }, params.row.activityType === 'online' ? '绾夸笂' : '绾夸笅') + return h('Tag', {}, params.row.activityType === 'online' ? '绾夸笂' : '绾夸笅') } }, { @@ -501,6 +844,41 @@ } }, { + title: '瀹℃牳鐘舵��', + key: 'auditStatus', + width: 100, + align: 'center', + render: (h, params) => { + const status = params.row.auditStatus; + let tagText, tagColor; + + // 鏍规嵁鐘舵�佽缃枃妗堝拰棰滆壊 + switch (status) { + case 0: + tagText = '瀹℃牳涓�'; + tagColor = 'orange'; // 姗欒壊琛ㄧず杩涜涓� + break; + case 1: + tagText = '宸查�氳繃'; + tagColor = 'green'; // 缁胯壊琛ㄧず閫氳繃 + break; + case 2: + tagText = '鏈�氳繃'; + tagColor = 'red'; // 绾㈣壊琛ㄧず鎷掔粷 + break; + default: + tagText = '鏈煡鐘舵��'; + tagColor = 'default'; // 榛樿鐏拌壊 + } + + return h('Tag', { + props: { + color: tagColor, + }, + }, tagText); + }, + }, + { title: '鐘舵��', key: 'status', width: 100, @@ -508,17 +886,28 @@ render: (h, params) => { const status = params.row.status; const statusMap = { - 'noStart': { text: '鏈紑濮�', color: 'default' }, - 'report': { text: '鎶ュ悕涓�', color: 'green' }, - 'inProgress':{ text:'杩涜涓�',color:'cyan'}, - 'end': { text: '宸茬粨鏉�', color: 'red' } + 'noStart': {text: '鏈紑濮�', color: 'default'}, + 'report': {text: '鎶ュ悕涓�', color: 'green'}, + 'inProgress': {text: '杩涜涓�', color: 'cyan'}, + 'end': {text: '宸茬粨鏉�', color: 'red'} }; - const currentStatus = statusMap[status] || { text: status, color: 'default' }; + const currentStatus = statusMap[status] || {text: status, color: 'default'}; return h('Tag', { props: { color: currentStatus.color } }, currentStatus.text); + } + }, + { + title: '娲诲姩鎶ュ悕鏃堕棿娈�', + key: 'activityReportTimeRange', + width: 300, + render: (h, params) => { + return h('div', [ + h('div', `寮�濮�: ${this.formatDate(params.row.reportStartTime)}`), + h('div', `缁撴潫: ${this.formatDate(params.row.reportEndTime)}`) + ]) } }, { @@ -625,9 +1014,9 @@ render: (h, params) => { return h('Tag', { props: { - color: params.row.disabled ? 'red' : 'green' + color: params.row.disabled ? 'green' : 'red' //true 姝e父 false琚鐢� } - }, params.row.disabled ? '绂佺敤' : '姝e父') + }, params.row.disabled ? '姝e父' : '绂佺敤') } } ], @@ -638,453 +1027,719 @@ // 妯℃�佹鎺у埗 modelShow: false, - modelTitle: '' + modelTitle: '', + + //缂栬緫鍣ㄩ厤缃� + // 瀵屾枃鏈紪杈戝櫒閰嶇疆 + Quill:'', + defaultValue: '', + editorOption: { + placeholder: '璇峰湪杩欓噷杈撳叆', + theme: 'snow', //涓婚 snow/bubble + modules: { + history: { + delay: 1000, + maxStack: 50, + userOnly: false + }, + toolbar: { + container: toolbarOptions, + handlers: { + myUploadBtn: this.myMethod, + } + } + } + } + } + }, + // 鍦ㄧ粍浠跺垱寤哄墠娉ㄥ唽 + beforeCreate() { + Quill.register(VideoBlot, true); }, mounted() { + //鍒濆鍖� + this.Quill=this.$refs.QuillEditor.quill this.init() + this.initTitle() + this.initButton(); }, methods: { - // 鑾峰彇瀵屾枃鏈紪杈戝櫒鐨勫唴瀹� - getReason(content) { - this.activityFrom.activityContent = content + myMethod(){ + this.$refs.upload.handleClick(); }, - // 鍒濆鍖栨暟鎹� - init() { - this.getActivityList() + initButton(){ + const editorButton = document.querySelector('.ql-myUploadBtn') + editorButton.innerHTML = '<svg t="1751966766109" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1530" fill="currentColor" style="width: 1em; height: 1em; vertical-align: middle;"><path d="M1024 693.248q0 25.6-8.704 48.128t-24.576 40.448-36.864 30.208-45.568 16.384l1.024 1.024-17.408 0-4.096 0-4.096 0-675.84 0q-5.12 1.024-16.384 1.024-39.936 0-74.752-15.36t-60.928-41.472-40.96-60.928-14.848-74.752 14.848-74.752 40.96-60.928 60.928-41.472 74.752-15.36l1.024 0q-1.024-8.192-1.024-15.36l0-16.384q0-72.704 27.648-137.216t75.776-112.128 112.128-75.264 136.704-27.648 137.216 27.648 112.64 75.264 75.776 112.128 27.648 137.216q0 37.888-8.192 74.24t-22.528 69.12q5.12-1.024 10.752-1.536t10.752-0.512q27.648 0 52.736 10.752t43.52 29.696 29.184 44.032 10.752 53.76zM665.6 571.392q20.48 0 26.624-4.608t-8.192-22.016q-14.336-18.432-31.744-48.128t-36.352-60.416-38.4-57.344-37.888-38.912q-18.432-13.312-27.136-14.336t-25.088 12.288q-18.432 15.36-35.84 38.912t-35.328 50.176-35.84 52.224-36.352 45.056q-18.432 18.432-13.312 32.768t25.6 14.336l16.384 0q9.216 0 19.968 0.512t20.992 0.512l17.408 0q14.336 1.024 18.432 9.728t4.096 24.064q0 17.408-0.512 30.72t-0.512 25.6-0.512 25.6-0.512 30.72q0 7.168 1.536 15.36t5.632 15.36 12.288 11.776 21.504 4.608l23.552 0q9.216 0 27.648 1.024 24.576 0 28.16-12.288t3.584-38.912q0-23.552 0.512-42.496t0.512-51.712q0-23.552 4.608-36.352t19.968-12.8q11.264 0 32.256-0.512t32.256-0.512z" p-id="1531"></path></svg>' }, - // 鑾峰彇娲诲姩鍒楄〃 - getActivityList() { - this.loading = true - getActivityList(this.searchForm).then(res => { - this.loading = false - if (res.code === 200) { - // 涓烘瘡涓�琛屾坊鍔爈oading鐘舵�� - this.activityList = res.data.map(item => ({ - ...item, - recommendLoading: false, - statusLoading: false - })) - this.total = res.total - } - }).catch(() => { - this.loading = false - }) - }, - - // 鎼滅储娲诲姩 - handleSearch(type, value) { - if (type === 'reportStart') { - this.searchForm.reportStartTime = value - } else if (type === 'reportEnd') { - this.searchForm.reportEndTime = value - } - - this.searchForm.pageNumber = 1 - this.getActivityList() - }, - - // 閲嶇疆鎼滅储 - resetSearch() { - this.$refs.searchForm.resetFields() - this.searchForm.pageNumber = 1 - this.getActivityList() - }, - - // 鏀瑰彉椤电爜 - changePage(page) { - this.searchForm.pageNumber = page - this.getActivityList() - }, - - // 鏀瑰彉姣忛〉鏉℃暟 - changePageSize(pageSize) { - this.searchForm.pageNumber = 1 - this.searchForm.pageSize = pageSize - this.getActivityList() - }, - - // 琛ㄦ牸閫夋嫨鍙樺寲 - showSelect(selection) { - this.selectList = selection.map(item => item.id) - this.selectCount = selection.length - }, - - // 鎵撳紑鏂板妯℃�佹 - openAdd() { - this.modelTitle = '鏂板娲诲姩' - this.modelShow = true - this.coverType = '杈撳叆鏂囧瓧灏侀潰' - this.file = null - this.$refs.form.resetFields() - this.activityFrom.id = '' - }, - - // 鎵撳紑缂栬緫妯℃�佹 - openEdit(row) { - this.modelTitle = '缂栬緫娲诲姩' - this.modelShow = true - this.$nextTick(() => { - this.$refs.form.resetFields() - // 濉厖琛ㄥ崟鏁版嵁 - this.activityFrom = { - id: row.id, - activityName: row.activityName, - activityType: row.activityType, - reportTime: [ - this.formatDate(row.reportStartTime, 'YYYY-MM-DD HH:mm:ss'), - this.formatDate(row.reportEndTime, 'YYYY-MM-DD HH:mm:ss') - ], - time: [ - this.formatDate(row.startTime, 'YYYY-MM-DD HH:mm:ss'), - this.formatDate(row.endTime, 'YYYY-MM-DD HH:mm:ss') - ], - activityContent: row.activityContent, - cover: row.cover, - coverType: row.coverType, - status: row.status, - reportStartTime: row.reportStartTime, - reportEndTime: row.reportEndTime, - startTime: row.startTime, - endTime: row.endTime, - recommend: row.recommend, - limitUserNum: row.limitUserNum, - activityLocation: row.activityLocation - } - this.$refs.editor.setContent(this.activityFrom.activityLocation) - // 璁剧疆灏侀潰绫诲瀷 - this.coverType = row.coverType === 'text' ? '杈撳叆鏂囧瓧灏侀潰' : '閫夋嫨鏂囦欢灏侀潰' - }) - }, - - // 鍏抽棴妯℃�佹 - modelClose() { - this.modelShow = false - this.file = null - this.submitLoading = false - this.handleRemove(); - this.$refs.form.resetFields() - }, - - // 淇濆瓨鎴栨洿鏂版椿鍔� - saveOrUpdate() { - // 璁剧疆灏侀潰绫诲瀷 - this.activityFrom.coverType = this.coverType === '杈撳叆鏂囧瓧灏侀潰' ? '鏂囧瓧' : - this.file ? this.getFileCategory(this.file.type) : - this.activityFrom.coverType - this.$refs.form.validate(valid => { - if (valid) { - this.submitLoading = true - - // 澶勭悊鏃堕棿鏁版嵁 - if (this.activityFrom.reportTime && this.activityFrom.reportTime.length === 2) { - this.activityFrom.reportStartTime = this.formatDate(this.activityFrom.reportTime[0], 'YYYY-MM-DD HH:mm:ss') - this.activityFrom.reportEndTime = this.formatDate(this.activityFrom.reportTime[1], 'YYYY-MM-DD HH:mm:ss') - } - - if (this.activityFrom.time && this.activityFrom.time.length === 2) { - this.activityFrom.startTime = this.formatDate(this.activityFrom.time[0], 'YYYY-MM-DD HH:mm:ss') - this.activityFrom.endTime = this.formatDate(this.activityFrom.time[1], 'YYYY-MM-DD HH:mm:ss') - } - - const api = this.activityFrom.id ? editActivity : addActivity - api(this.activityFrom).then(res => { - this.submitLoading = false - if (res.code === 200) { - this.$Message.success(res.msg) - this.modelClose() - this.getActivityList() - } - }).catch(() => { - this.submitLoading = false - }) - } - }) - }, - - // 鍒犻櫎娲诲姩 - delById(row) { - this.$Modal.confirm({ - title: '纭鍒犻櫎', - content: `纭畾瑕佸垹闄ゆ椿鍔� "${row.activityName}" 鍚�?`, - onOk: () => { - delActivityById(row.id).then(res => { - if (res.code === 200) { - this.$Message.success(res.msg) - this.getActivityList() - } - }) - } - }) - }, - - // 鎵归噺鍒犻櫎 - delBatch() { - if (this.selectCount === 0) { - this.$Message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�') - return - } - - this.$Modal.confirm({ - title: '纭鍒犻櫎', - content: `纭畾瑕佸垹闄ら�変腑鐨� ${this.selectCount} 鏉℃暟鎹悧?`, - onOk: () => { - delActivityBatch({ ids: this.selectList }).then(res => { - if (res.code === 200) { - this.$Message.success(res.msg) - this.selectList = [] - this.selectCount = 0 - this.getActivityList() - } else { - this.$Message.error(res.msg || '鍒犻櫎澶辫触') - } - }) - } - }) - }, - - // 鏀瑰彉鎺ㄨ崘鐘舵�� - changeRecommend(row, action) { - row.recommendLoading = true - const recommend = action === '鎺ㄨ崘' - - activityChangeRecommend({ - id: row.id, - recommend: recommend - }).then(res => { - row.recommendLoading = false - if (res.code === 200) { - this.$Message.success(res.msg) - row.recommend = recommend - } - }).catch(() => { - row.recommendLoading = false - }) - }, - - // 鏀瑰彉娲诲姩鐘舵�� - changeStatus(row, action) { - row.statusLoading = true - const publish = action === '鍙戝竷' - - activityChangeStatus({ - id: row.id, - publish: publish - }).then(res => { - row.statusLoading = false - if (res.code === 200) { - this.$Message.success(res.msg) - row.publish = publish - } - }).catch(() => { - row.statusLoading = false - }) - }, - - // 鎵撳紑鎶ュ悕浜哄憳妯℃�佹 - openMembersModal(row) { - this.membersModelTitle = `${row.activityName} - 鎶ュ悕浜哄憳` - this.membersModelShow = true - this.memberForm.id = row.id - this.memberForm.pageNumber = 1 - this.activityMembersPage() - }, - - // 鑾峰彇鎶ュ悕浜哄憳鍒楄〃 - activityMembersPage() { - this.membersLoading = true - activityMembersPage(this.memberForm).then(res => { - this.membersLoading = false - if (res.code === 200) { - this.membersList = res.data - this.memberTotal = res.total - } - }).catch(() => { - this.membersLoading = false - }) - }, - - // 鏀瑰彉鎶ュ悕浜哄憳椤电爜 - memberChangePage(page) { - this.memberForm.pageNumber = page - this.activityMembersPage() - }, - - // 鏀瑰彉鎶ュ悕浜哄憳姣忛〉鏉℃暟 - memberChangePageSize(pageSize) { - this.memberForm.pageNumber = 1 - this.memberForm.pageSize = pageSize - this.activityMembersPage() - }, - - // 鍏抽棴鎶ュ悕浜哄憳妯℃�佹 - membersModelClose() { - this.membersModelShow = false - }, - - // 灏侀潰绫诲瀷鍙樺寲澶勭悊 - handleCoverTypeChange(type) { - if (type === '閫夋嫨鏂囦欢灏侀潰') { - this.activityFrom.cover = '' - } else { - this.file = null + initTitle() { + document.getElementsByClassName('ql-editor')[0].dataset.placeholder = '' + for (let item of titleConfig) { + let tip = document.querySelector('.quill-editor ' + item.Choice) + if (!tip) continue + tip.setAttribute('title', item.title) } }, - // 鏂囦欢涓婁紶鍓嶅鐞� - handleBeforeUpload(file) { - const fileType = file.type - const isImage = fileType.includes('image') - const isVideo = fileType.includes('video') + // 澶卞幓鐒︾偣 + onEditorBlur(editor) { + }, - if (!isImage && !isVideo) { - this.$Message.error('璇蜂笂浼犲浘鐗囨垨瑙嗛鏂囦欢') - return false - } + // 鑾峰緱鐒︾偣 + onEditorFocus(editor) { - if (file.size > 20 * 1024 * 1024) { - this.$Message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃20MB') - return false - } + }, - this.file = file - this.uploadFile() + // 寮�濮� + onEditorReady(editor) { + }, + handleUploadEdit(file){ + const fileType = file.type + const isImage = fileType.includes('image') + const isVideo = fileType.includes('video') + + if (!isImage && !isVideo) { + this.$Message.error('璇蜂笂浼犲浘鐗囨垨瑙嗛鏂囦欢') return false - }, - - // 涓婁紶鏂囦欢 - uploadFile() { - if (!this.file) return - - this.submitLoading = true - const formData = new FormData() - formData.append('file', this.file) - - uploadFileByLmk(formData).then(res => { - this.submitLoading = false - if (res.code === 200) { - this.activityFrom.cover = res.data.fileKey - this.$Message.success('涓婁紶鎴愬姛') - } - }).catch(() => { - this.submitLoading = false - }) - }, - - // 鍒犻櫎鏂囦欢 - handleRemove() { - //鐐瑰嚮鍏抽棴绐楀彛鏃剁‘淇濇枃浠跺凡琚竻闄� - if(this.file === null){ - return; - } - if (!this.activityFrom.cover) { - this.file = null - return - } - delByKey(this.activityFrom.cover).then(res => { - if (res.code === 200) { - this.file = null - this.activityFrom.cover = '' - } - }) - }, - - // 棰勮鍥剧墖 - previewImage(url) { - this.previewImageUrl = url - this.previewVisible = true - }, - - // 鑾峰彇鏂囦欢鍒嗙被 - getFileCategory(mimeType) { - const typeMap = { - 'image': 'image', - 'video': 'video', - 'audio': 'audio', - 'application': 'application' - } - - const typePrefix = mimeType.split('/')[0] - return typeMap[typePrefix] || 'unknown' - }, - - // 鏍煎紡鍖栨棩鏈� - formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { - if (!date) return ''; - - const d = new Date(date); - if (isNaN(d.getTime())) return ''; - - const padZero = (num) => String(num).padStart(2, '0'); // 鏇村彲闈犵殑琛ラ浂鏂规硶 - - const year = d.getFullYear(); - const month = padZero(d.getMonth() + 1); // 鏈堜唤 0-11 鈫� +1 - const day = padZero(d.getDate()); - const hours = padZero(d.getHours()); - const minutes = padZero(d.getMinutes()); - const seconds = padZero(d.getSeconds()); - return format - .replace('YYYY', year) - .replace('MM', month) - .replace('DD', day) - .replace('HH', hours) - .replace('mm', minutes) - .replace('ss', seconds); - }, - - // 楠岃瘉鎶ュ悕鏃堕棿 - validateReportTime(rule, value, callback) { - if (!value || value.length !== 2) { - callback(new Error('璇烽�夋嫨瀹屾暣鐨勬姤鍚嶆椂闂存')) - return - } - - const [start, end] = value - if (new Date(start) >= new Date(end)) { - callback(new Error('鎶ュ悕缁撴潫鏃堕棿蹇呴』鏅氫簬寮�濮嬫椂闂�')) - return - } - - if (this.activityFrom.time && this.activityFrom.time.length === 2) { - const activityStart = this.activityFrom.time[0] - if (new Date(end) > new Date(activityStart)) { - callback(new Error('鎶ュ悕缁撴潫鏃堕棿涓嶈兘鏅氫簬娲诲姩寮�濮嬫椂闂�')) - return - } - } - - callback() - }, - - // 楠岃瘉娲诲姩鏃堕棿 - validateActivityTime(rule, value, callback) { - if (!value || value.length !== 2) { - callback(new Error('璇烽�夋嫨瀹屾暣鐨勬椿鍔ㄦ椂闂存')) - return - } - - const [start, end] = value - if (new Date(start) >= new Date(end)) { - callback(new Error('娲诲姩缁撴潫鏃堕棿蹇呴』鏅氫簬寮�濮嬫椂闂�')) - return - } - - if (this.activityFrom.reportTime && this.activityFrom.reportTime.length === 2) { - const reportEnd = this.activityFrom.reportTime[1] - if (new Date(reportEnd) > new Date(start)) { - callback(new Error('娲诲姩寮�濮嬫椂闂村繀椤绘櫄浜庢姤鍚嶇粨鏉熸椂闂�')) - return - } - } - - callback() } - } + + if (file.size > 20 * 1024 * 1024) { + this.$Message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃20MB') + return false + } + + this.file = file + this.uploadFile2() + return false + }, +// 涓婁紶鏂囦欢 + uploadFile2() { + if (!this.file) return + + this.submitLoading = true + const formData = new FormData() + formData.append('file', this.file) + uploadFileByLmk(formData).then(res => { + this.submitLoading = false + if (res.code === 200) { + let url = res.data.url; + let fileKey = res.data.fileKey; + let fileType = this.getFileType(this.file); + + const range = this.Quill.getSelection(); + const index = range ? range.index : this.Quill.getLength(); + + + if (fileType === 'video') { + this.Quill.insertEmbed(index, 'video', { + url:url, + controls:'controls', + width:'100%', + height:'auto' + }); + } else if (fileType === 'image') { + this.Quill.insertEmbed(index, "image", url); + } else { + // 濡傛灉涓嶆槸鍥剧墖鎴栬棰戯紝鍙互澶勭悊鍏朵粬绫诲瀷鎴栫粰鍑烘彁绀� + this.$Message.warning('涓嶆敮鎸佺殑鏂囦欢绫诲瀷'); + return; + } + console.log(this.activityFrom.activityContent) + this.Quill.setSelection(index + 1); + this.$Message.success('涓婁紶鎴愬姛') + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + this.submitLoading = false + }) + }, + getFileType(file) { + // 鑾峰彇鏂囦欢绫诲瀷鎴栨墿灞曞悕 + let type, extension; + + if (file instanceof File) { + // 濡傛灉鏄疐ile瀵硅薄 + type = file.type; + const name = file.name.toLowerCase(); + extension = name.substring(name.lastIndexOf('.') + 1); + } else if (typeof file === 'string') { + // 濡傛灉鏄瓧绗︿覆锛堟枃浠跺悕鎴朥RL锛� + const name = file.toLowerCase(); + extension = name.substring(name.lastIndexOf('.') + 1); + + // 灏濊瘯浠嶶RL涓彁鍙朚IME绫诲瀷锛堝鏋滄湁锛� + const mimeMatch = file.match(/^data:(.+?);/); + if (mimeMatch) { + type = mimeMatch[1]; + } + } else { + return 'unknown'; + } + + // 甯歌鍥剧墖鍜岃棰戠殑MIME绫诲瀷 + const imageTypes = [ + 'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/bmp', 'image/svg+xml' + ]; + + const videoTypes = [ + 'video/mp4', 'video/webm', 'video/ogg', 'video/quicktime', 'video/x-msvideo', 'video/x-matroska' + ]; + + // 妫�鏌IME绫诲瀷 + if (type) { + if (imageTypes.includes(type)) return 'image'; + if (videoTypes.includes(type)) return 'video'; + } + + // 甯歌鍥剧墖鍜岃棰戠殑鎵╁睍鍚� + const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp', 'svg']; + const videoExtensions = ['mp4', 'webm', 'ogg', 'mov', 'avi', 'mkv']; + + // 妫�鏌ユ枃浠舵墿灞曞悕 + if (extension) { + if (imageExtensions.includes(extension)) return 'image'; + if (videoExtensions.includes(extension)) return 'video'; + } + + return 'unknown'; + }, + + handleAuditSubmit(activityId) { + console.log(this.auditForm) + this.$refs.auditForm.validate(valid => { + if (valid) { + const form = { + activityId: activityId, + audit: this.auditForm.audit, + remarks: this.auditForm.remarks, + } + // 鎻愪氦鏃� auditForm.audit 宸茬粡鏄暟瀛楃被鍨嬶紙0 鎴� 1锛� + auditActivity(form).then(res => { + if (res.code === 200) { + // 涓烘瘡涓�琛屾坊鍔爈oading鐘舵�� + this.$Message.success(res.msg); + this.getActivityList(); + this.closeAuditModel(); + }else{ + this.$Message.error(res.msg) + } + }) + } + }); + + + }, + openAuditModal(row) { + this.modelTitle = '娲诲姩瀹℃牳' + this.auditModelShow = true + this.activityInfo = row + }, + closeAuditModel() { + this.$refs.auditForm.resetFields(); + this.auditModelShow = false + }, + escapeStringHTML(str) { + if (!str) return str; + str = str.replace(/</g, '<'); + str = str.replace(/>/g, '>'); + return str; + }, + // 鎻愪氦 + detail(row) { + this.modelTitle = '娲诲姩璇︽儏' + this.infoModelShow = true + this.activityInfo = row + this.activityInfo.activityContent = this.escapeStringHTML(this.activityInfo.activityContent); + this.$nextTick(() => { + this.processVideos(); + }); + + }, + processVideos() { + const videos = this.$el.querySelectorAll('video'); + videos.forEach(video => { + // 纭繚瑙嗛鍏冪礌鏈夊繀瑕佺殑灞炴�� + video.setAttribute('controls', ''); + video.setAttribute('playsinline', ''); // 閽堝绉诲姩绔� + video.load(); + }); + }, + // 鑾峰彇瀵屾枃鏈紪杈戝櫒鐨勫唴瀹� + // 鍒濆鍖栨暟鎹� + init() { + this.getActivityList() + }, + + // 鑾峰彇娲诲姩鍒楄〃 + getActivityList() { + this.loading = true + getActivityList(this.searchForm).then(res => { + this.loading = false + if (res.code === 200) { + // 涓烘瘡涓�琛屾坊鍔爈oading鐘舵�� + this.activityList = res.data.map(item => ({ + ...item, + recommendLoading: false, + statusLoading: false + })) + this.total = res.total + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + this.loading = false + }) + }, + + // 鎼滅储娲诲姩 + handleSearch(type, value) { + if (type === 'reportStart') { + this.searchForm.reportStartTime = value + } else if (type === 'reportEnd') { + this.searchForm.reportEndTime = value + } + + this.searchForm.pageNumber = 1 + this.getActivityList() + }, + + // 閲嶇疆鎼滅储 + resetSearch() { + this.$refs.searchForm.resetFields() + this.searchForm.pageNumber = 1 + this.getActivityList() + }, + + // 鏀瑰彉椤电爜 + changePage(page) { + this.searchForm.pageNumber = page + this.getActivityList() + }, + + // 鏀瑰彉姣忛〉鏉℃暟 + changePageSize(pageSize) { + this.searchForm.pageNumber = 1 + this.searchForm.pageSize = pageSize + this.getActivityList() + }, + + // 琛ㄦ牸閫夋嫨鍙樺寲 + showSelect(selection) { + this.selectList = selection.map(item => item.id) + this.selectCount = selection.length + }, + + // 鎵撳紑鏂板妯℃�佹 + openAdd() { + this.modelTitle = '鏂板娲诲姩' + this.modelShow = true + this.coverType = '杈撳叆鏂囧瓧灏侀潰' + this.file = null + this.$refs.form.resetFields() + this.activityFrom.id = '' + }, + + // 鎵撳紑缂栬緫妯℃�佹 + openEdit(row) { + this.modelTitle = '缂栬緫娲诲姩' + this.modelShow = true + this.$nextTick(() => { + this.$refs.form.resetFields() + console.log(row) + // 濉厖琛ㄥ崟鏁版嵁 + this.activityFrom = { + id: row.id, + activityName: row.activityName, + activityType: row.activityType, + reportTime: [ + this.formatDate(row.reportStartTime, 'YYYY-MM-DD HH:mm:ss'), + this.formatDate(row.reportEndTime, 'YYYY-MM-DD HH:mm:ss') + ], + time: [ + this.formatDate(row.startTime, 'YYYY-MM-DD HH:mm:ss'), + this.formatDate(row.endTime, 'YYYY-MM-DD HH:mm:ss') + ], + activityContent: row.activityContent, + cover: row.cover, + coverType: row.coverType, + status: row.status, + reportStartTime: row.reportStartTime, + reportEndTime: row.reportEndTime, + startTime: row.startTime, + endTime: row.endTime, + recommend: row.recommend, + limitUserNum: row.limitUserNum, + activityLocation: row.activityLocation + } + // 璁剧疆灏侀潰绫诲瀷 + this.coverType = row.coverType === 'text' ? '杈撳叆鏂囧瓧灏侀潰' : '閫夋嫨鏂囦欢灏侀潰' + }) + }, + + infoModelClose() { + this.infoModelShow = false + }, + // 鍏抽棴妯℃�佹 + modelClose() { + this.modelShow = false + this.file = null + this.submitLoading = false + this.handleRemove(); + this.$refs.form.resetFields() + }, + + // 淇濆瓨鎴栨洿鏂版椿鍔� + saveOrUpdate() { + // 璁剧疆灏侀潰绫诲瀷 + this.activityFrom.coverType = this.coverType === '杈撳叆鏂囧瓧灏侀潰' ? 'text' : + this.file ? this.getFileCategory(this.file.type) : + this.activityFrom.coverType + + this.$refs.form.validate(valid => { + if (valid) { + this.submitLoading = true + + // 澶勭悊鏃堕棿鏁版嵁 + if (this.activityFrom.reportTime && this.activityFrom.reportTime.length === 2) { + this.activityFrom.reportStartTime = this.formatDate(this.activityFrom.reportTime[0], 'YYYY-MM-DD HH:mm:ss') + this.activityFrom.reportEndTime = this.formatDate(this.activityFrom.reportTime[1], 'YYYY-MM-DD HH:mm:ss') + } + + if (this.activityFrom.time && this.activityFrom.time.length === 2) { + this.activityFrom.startTime = this.formatDate(this.activityFrom.time[0], 'YYYY-MM-DD HH:mm:ss') + this.activityFrom.endTime = this.formatDate(this.activityFrom.time[1], 'YYYY-MM-DD HH:mm:ss') + } + + const api = this.activityFrom.id ? editActivity : addActivity + api(this.activityFrom).then(res => { + this.submitLoading = false + if (res.code === 200) { + this.$Message.success(res.msg) + this.modelClose() + this.getActivityList() + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + this.submitLoading = false + }) + } + }) + }, + + // 鍒犻櫎娲诲姩 + delById(row) { + this.$Modal.confirm({ + title: '纭鍒犻櫎', + content: `纭畾瑕佸垹闄ゆ椿鍔� "${row.activityName}" 鍚�?`, + onOk: () => { + //TODO 鍏堝垽鏂椿鍔ㄦ槸鍚﹀彂甯冿紝鍙戝竷鍒欓渶瑕佸厛涓嬫灦 + + delActivityById(row.id).then(res => { + if (res.code === 200) { + this.$Message.success(res.msg) + this.getActivityList() + }else{ + this.$Message.error(res.msg) + } + }) + } + }) + }, + + // 鎵归噺鍒犻櫎 + delBatch() { + //TODO 鍏堝垽鏂椿鍔ㄦ槸鍚﹀彂甯冿紝鍙戝竷鍒欓渶瑕佸厛涓嬫灦 + if (this.selectCount === 0) { + this.$Message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�') + return + } + + this.$Modal.confirm({ + title: '纭鍒犻櫎', + content: `纭畾瑕佸垹闄ら�変腑鐨� ${this.selectCount} 鏉℃暟鎹悧?`, + onOk: () => { + delActivityBatch(this.selectList).then(res => { + if (res.code === 200) { + this.$Message.success(res.msg) + this.selectList = [] + this.selectCount = 0 + this.getActivityList() + } else { + this.$Message.error(res.msg || '鍒犻櫎澶辫触') + } + }) + } + }) + }, + + // 鏀瑰彉鎺ㄨ崘鐘舵�� + changeRecommend(row, action) { + row.recommendLoading = true + const recommend = action === '鎺ㄨ崘' + + activityChangeRecommend({ + id: row.id, + recommend: recommend + }).then(res => { + row.recommendLoading = false + if (res.code === 200) { + this.$Message.success(res.msg) + row.recommend = recommend + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + row.recommendLoading = false + }) + }, + + // 鏀瑰彉娲诲姩鐘舵�� + changeStatus(row, action) { + //鍒ゆ柇鏄惁瀛樺湪瀹℃牳璁板綍 + if (row.audit === null) { + this.$Message.error("鍙戝竷鍓嶈鍏堝鏍�!") + return + } + + row.statusLoading = true + const publish = action === '鍙戝竷' + + activityChangeStatus({ + id: row.id, + publish: publish + }).then(res => { + row.statusLoading = false + if (res.code === 200) { + this.$Message.success(res.msg) + row.publish = publish + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + row.statusLoading = false + }) + }, + + // 鎵撳紑鎶ュ悕浜哄憳妯℃�佹 + openMembersModal(row) { + this.membersModelTitle = `${row.activityName} - 鎶ュ悕浜哄憳` + this.membersModelShow = true + this.memberForm.id = row.id + this.memberForm.pageNumber = 1 + this.activityMembersPage() + }, + + // 鑾峰彇鎶ュ悕浜哄憳鍒楄〃 + activityMembersPage() { + this.membersLoading = true + activityMembersPage(this.memberForm).then(res => { + this.membersLoading = false + if (res.code === 200) { + this.membersList = res.data + this.memberTotal = res.total + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + this.membersLoading = false + }) + }, + + // 鏀瑰彉鎶ュ悕浜哄憳椤电爜 + memberChangePage(page) { + this.memberForm.pageNumber = page + this.activityMembersPage() + }, + + // 鏀瑰彉鎶ュ悕浜哄憳姣忛〉鏉℃暟 + memberChangePageSize(pageSize) { + this.memberForm.pageNumber = 1 + this.memberForm.pageSize = pageSize + this.activityMembersPage() + }, + + // 鍏抽棴鎶ュ悕浜哄憳妯℃�佹 + membersModelClose() { + this.membersModelShow = false + }, + + // 灏侀潰绫诲瀷鍙樺寲澶勭悊 + handleCoverTypeChange(type) { + if (type === '閫夋嫨鏂囦欢灏侀潰') { + this.activityFrom.cover = '' + } else { + this.file = null + } + }, + // 鏂囦欢涓婁紶鍓嶅鐞� + handleBeforeUpload(file) { + const fileType = file.type + const isImage = fileType.includes('image') + const isVideo = fileType.includes('video') + + if (!isImage && !isVideo) { + this.$Message.error('璇蜂笂浼犲浘鐗囨垨瑙嗛鏂囦欢') + return false + } + + if (file.size > 20 * 1024 * 1024) { + this.$Message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃20MB') + return false + } + + this.file = file + this.uploadFile() + return false + }, + // 涓婁紶鏂囦欢 + uploadFile() { + if (!this.file) return + + this.submitLoading = true + const formData = new FormData() + formData.append('file', this.file) + + uploadFileByLmk(formData).then(res => { + this.submitLoading = false + if (res.code === 200) { + this.activityFrom.cover = res.data.fileKey + this.$Message.success('涓婁紶鎴愬姛') + }else{ + this.$Message.error(res.msg) + } + }).catch(() => { + this.submitLoading = false + }) + }, + + // 鍒犻櫎鏂囦欢 + handleRemove() { + //鐐瑰嚮鍏抽棴绐楀彛鏃剁‘淇濇枃浠跺凡琚竻闄� + if (this.file === null) { + return; + } + if (!this.activityFrom.cover) { + this.file = null + return + } + delByKey(this.activityFrom.cover).then(res => { + if (res.code === 200) { + this.file = null + this.activityFrom.cover = '' + }else{ + this.$Message.error(res.msg) + } + }) + }, + + // 棰勮鍥剧墖 + previewImage(url) { + this.previewImageUrl = url + this.previewVisible = true + }, + + // 鑾峰彇鏂囦欢鍒嗙被 + getFileCategory(mimeType) { + const typeMap = { + 'image': 'image', + 'video': 'video', + 'audio': 'audio', + 'application': 'application' + } + + const typePrefix = mimeType.split('/')[0] + return typeMap[typePrefix] || 'unknown' + }, + + // 鏍煎紡鍖栨棩鏈� + formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { + if (!date) return ''; + + const d = new Date(date); + if (isNaN(d.getTime())) return ''; + + const padZero = (num) => String(num).padStart(2, '0'); // 鏇村彲闈犵殑琛ラ浂鏂规硶 + + const year = d.getFullYear(); + const month = padZero(d.getMonth() + 1); // 鏈堜唤 0-11 鈫� +1 + const day = padZero(d.getDate()); + const hours = padZero(d.getHours()); + const minutes = padZero(d.getMinutes()); + const seconds = padZero(d.getSeconds()); + return format + .replace('YYYY', year) + .replace('MM', month) + .replace('DD', day) + .replace('HH', hours) + .replace('mm', minutes) + .replace('ss', seconds); + }, + + // 楠岃瘉鎶ュ悕鏃堕棿 + validateReportTime(rule, value, callback) { + if (!value || value.length !== 2) { + callback(new Error('璇烽�夋嫨瀹屾暣鐨勬姤鍚嶆椂闂存')) + return + } + + const [start, end] = value + if (new Date(start) >= new Date(end)) { + callback(new Error('鎶ュ悕缁撴潫鏃堕棿蹇呴』鏅氫簬寮�濮嬫椂闂�')) + return + } + + if (this.activityFrom.time && this.activityFrom.time.length === 2) { + const activityStart = this.activityFrom.time[0] + if (new Date(end) > new Date(activityStart)) { + callback(new Error('鎶ュ悕缁撴潫鏃堕棿涓嶈兘鏅氫簬娲诲姩寮�濮嬫椂闂�')) + return + } + } + + callback() + }, + + // 楠岃瘉娲诲姩鏃堕棿 + validateActivityTime(rule, value, callback) { + if (!value || value.length !== 2) { + callback(new Error('璇烽�夋嫨瀹屾暣鐨勬椿鍔ㄦ椂闂存')) + return + } + + const [start, end] = value + if (new Date(start) >= new Date(end)) { + callback(new Error('娲诲姩缁撴潫鏃堕棿蹇呴』鏅氫簬寮�濮嬫椂闂�')) + return + } + + if (this.activityFrom.reportTime && this.activityFrom.reportTime.length === 2) { + const reportEnd = this.activityFrom.reportTime[1] + if (new Date(reportEnd) > new Date(start)) { + callback(new Error('娲诲姩寮�濮嬫椂闂村繀椤绘櫄浜庢姤鍚嶇粨鏉熸椂闂�')) + return + } + } + + callback() + } + }, } </script> <style lang="scss" scoped> +.quill-editor { + +} + +.ql-editor .ql-video { + width: 50%; + height: auto; /* 鏍规嵁浣犵殑闇�姹傝皟鏁撮珮搴� */ + max-width: 100%; +} + .activity-management { .search-form { padding: 16px; @@ -1183,4 +1838,115 @@ margin-top: 4px; } } +.detail-container { + padding: 16px; +} + +.detail-item { + margin-bottom: 18px; + line-height: 1.5; + + label { + display: inline-block; + width: 100px; + color: #666; + font-weight: bold; + vertical-align: top; + } + + span { + display: inline-block; + width: calc(100% - 110px); + } +} + +.activity-content { + border: 1px solid #dcdee2; + border-radius: 4px; + padding: 12px; + min-height: 100px; + margin-top: 8px; +} +/* + 鏂囧瓧澶у皬 +*/ +.ql-snow .ql-picker.ql-size{ + width: 70px; // 鑿滃崟鏍忓崰姣斿搴� +} +/* + 瀛椾綋 +*/ +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimHei]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimHei]::before { + content: "榛戜綋"; + font-family: "SimHei"; +} + +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft-YaHei]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft-YaHei]::before { + content: "寰蒋闆呴粦"; + font-family: "Microsoft YaHei"; +} + +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=KaiTi]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=KaiTi]::before { + content: "妤蜂綋"; + font-family: "KaiTi"; +} + +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=FangSong]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=FangSong]::before { + content: "浠垮畫"; + font-family: "FangSong"; +} + +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Arial]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Arial]::before { + content: "Arial"; + font-family: "Arial"; +} + +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Times-New-Roman]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Times-New-Roman]::before { + content: "Times New Roman"; + font-family: "Times New Roman"; +} + +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=sans-serif]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=sans-serif]::before { + content: "sans-serif"; + font-family: "sans-serif"; +} + +.ql-font-SimSun { + font-family: "SimSun"; +} + +.ql-font-SimHei { + font-family: "SimHei"; +} + +.ql-font-Microsoft-YaHei { + font-family: "Microsoft YaHei"; +} + +.ql-font-KaiTi { + font-family: "KaiTi"; +} + +.ql-font-FangSong { + font-family: "FangSong"; +} + +.ql-font-Arial { + font-family: "Arial"; +} + +.ql-font-Times-New-Roman { + font-family: "Times New Roman"; +} + +.ql-font-sans-serif { + font-family: "sans-serif"; +} </style> -- Gitblit v1.8.0