From a01523ab9ba314c0eb933160f331de1bca02084e Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期一, 23 六月 2025 14:16:50 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- manager/src/views/activity/index.vue | 139 +++++++++++++++++++++++ manager/src/api/customer.js | 6 + manager/src/views/customer/index.vue | 173 ++++++++++++++++++++++++++++ 3 files changed, 315 insertions(+), 3 deletions(-) diff --git a/manager/src/api/customer.js b/manager/src/api/customer.js index 9128455..9972185 100644 --- a/manager/src/api/customer.js +++ b/manager/src/api/customer.js @@ -78,3 +78,9 @@ }) } +export const getCustomerInfo= (params) =>{ + return service({ + url: '/customerManager/'+ params, + method: 'GET' + }) +} diff --git a/manager/src/views/activity/index.vue b/manager/src/views/activity/index.vue index b1f49f2..26a2c42 100644 --- a/manager/src/views/activity/index.vue +++ b/manager/src/views/activity/index.vue @@ -136,6 +136,11 @@ <Button type="info" size="small" + @click="detail(row)" + >璇︽儏</Button> + <Button + type="info" + size="small" @click="openEdit(row)" >缂栬緫</Button> <Button @@ -336,6 +341,82 @@ </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="previewVisible" title="鍥剧墖棰勮" footer-hide> <img :src="previewImageUrl" style="width: 100%"> @@ -361,6 +442,8 @@ components: {Editor}, data() { return { + infoModelShow:false, + loading: false, membersLoading: false, submitLoading: false, @@ -397,6 +480,24 @@ // 娲诲姩琛ㄥ崟 activityFrom: { + id: '', + activityName: '', + activityType: '', + reportTime: [], + time: [], + activityContent: '', + cover: '', + coverType: '', + status: '', + reportStartTime: '', + reportEndTime: '', + startTime: '', + endTime: '', + recommend: false, + limitUserNum: 0, + activityLocation: '', + }, + activityInfo: { id: '', activityName: '', activityType: '', @@ -645,6 +746,11 @@ this.init() }, methods: { + detail(row){ + this.modelTitle = '娲诲姩璇︽儏' + this.infoModelShow = true + this.activityInfo = row + }, // 鑾峰彇瀵屾枃鏈紪杈戝櫒鐨勫唴瀹� getReason(content) { this.activityFrom.activityContent = content @@ -757,7 +863,9 @@ this.coverType = row.coverType === 'text' ? '杈撳叆鏂囧瓧灏侀潰' : '閫夋嫨鏂囦欢灏侀潰' }) }, - + infoModelClose(){ + this.infoModelShow = false + }, // 鍏抽棴妯℃�佹 modelClose() { this.modelShow = false @@ -1183,4 +1291,33 @@ 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; +} </style> diff --git a/manager/src/views/customer/index.vue b/manager/src/views/customer/index.vue index 40112e7..6208375 100644 --- a/manager/src/views/customer/index.vue +++ b/manager/src/views/customer/index.vue @@ -68,6 +68,7 @@ @on-selection-change="showSelect" > <template slot-scope="{ row, index }" slot="action"> + <Button type="info" size="small" style="margin-right: 5px" @click="openInfo(row)">鏌ョ湅璇︽儏</Button> <Button type="info" size="small" style="margin-right: 5px" @click="openEdit(row)">缂栬緫鏍囩</Button> <Button type="error" size="small" style="margin-right: 5px" @click="joinBlack(row)">鍔犲叆榛戝悕鍗�</Button> </template> @@ -87,6 +88,82 @@ ></Page> </Row> + <Modal + v-model="showCustomerInfo" + :title="modelTitle" + width="700" + :mask-closable="false" + > + <div class="customer-detail"> + <div class="avatar-section"> + <Avatar :src="customerInfo.face" size="large" /> + <div class="basic-info"> + <h3>{{ customerInfo.nickName || '寰俊鐢ㄦ埛' }}</h3> + <p>ID: {{ customerInfo.id }}</p> + <p>鐢ㄦ埛鍚�: {{ customerInfo.username }}</p> + </div> + </div> + + <Divider /> + + <div class="detail-grid"> + <div class="detail-row"> + <span class="detail-label">鎬у埆锛�</span> + <span class="detail-value">{{ customerInfo.sex === 0 ? "濂�" : "鐢�"}}</span> + </div> + <div class="detail-row"> + <span class="detail-label">鍦板尯锛�</span> + <span class="detail-value">{{ customerInfo.region || '鏈缃�' }}</span> + </div> + <div class="detail-row"> + <span class="detail-label">鎵嬫満鍙凤細</span> + <span class="detail-value">{{ customerInfo.mobile || '鏈粦瀹�' }}</span> + </div> + <div class="detail-row"> + <span class="detail-label">褰撳墠绉垎锛�</span> + <span class="detail-value">{{ customerInfo.point }}</span> + </div> + <div class="detail-row"> + <span class="detail-label">鎬荤Н鍒嗭細</span> + <span class="detail-value">{{ customerInfo.totalPoint }}</span> + </div> + <div class="detail-row"> + <span class="detail-label">璐﹀彿鐘舵�侊細</span> + <span class="detail-value"> + <Tag :color="customerInfo.disabled ? 'error' : 'success'"> + {{ customerInfo.disabled ? '宸茬鐢�' : '姝e父' }} + </Tag> + </span> + </div> + <div class="detail-row"> + <span class="detail-label">鏄惁鍏宠仈搴楅摵锛�</span> + <span class="detail-value">{{ customerInfo.haveStore ? '鏄�' : '鍚�' }}</span> + </div> + <div class="detail-row"> + <span class="detail-label">娉ㄥ唽鏃堕棿锛�</span> + <span class="detail-value">{{ customerInfo.createTime }}</span> + </div> + <div class="detail-row"> + <span class="detail-label">鏈�鍚庣櫥褰曟椂闂达細</span> + <span class="detail-value">{{ customerInfo.lastLoginDate }}</span> + </div> + </div> + + <div v-if="customerInfo.customerTagList && customerInfo.customerTagList.length > 0" class="tags-section"> + <h4>鐢ㄦ埛鏍囩</h4> + <div> + <Tag v-for="tag in customerInfo.customerTagList" :key="tag" color="default" style="margin-right: 8px;"> + {{ tag }} + </Tag> + </div> + </div> + </div> + + <div slot="footer"> + <Button type="primary" @click="showCustomerInfo = false">鍏抽棴</Button> + </div> + </Modal> +<!-- 鏍囩寮圭獥--> <Modal v-model="showCustomerTag" :title="modelTitle" @@ -125,7 +202,7 @@ <script> import JsonExcel from "vue-json-excel"; -import {getCustomerList,addCustomerTag,saveCustomerTagById,getTagList,getStoreSelectOptions} from "@/api/customer"; +import {getCustomerList,addCustomerTag,saveCustomerTagById,getTagList,getStoreSelectOptions,getCustomerInfo} from "@/api/customer"; import {addCustomerBlackByPC} from "@/api/customer-black.js" export default { @@ -135,6 +212,30 @@ }, data(){ return{ + customerInfo: { + birthday: null, + blackId: null, + clientEnum: null, + createTime: "", + customerTagList: [], + disabled: true, + experience: null, + face: "", + gradeId: null, + haveStore: false, + id: "", + lastLoginDate: "", + mobile: null, + nickName: "", + openId: null, + point: 10, + region: "", + regionId: "", + sex: 0, + storeId: null, + totalPoint: 0, + username: "" + }, loading: false, // 琛ㄥ崟鍔犺浇鐘舵�� //鏌ヨ瀹㈡埛鍒楄〃璇锋眰鍙傛暟 searchForm:{ @@ -225,8 +326,9 @@ selectCount: 0, // 宸查�夋暟閲� selectList: [], // 宸查�夋暟鎹垪琛� + //瀹㈡埛璇︽儏瀵硅瘽妗�--- + showCustomerInfo:false, //瀹㈡埛鏍囩瀵硅瘽妗�--- - showCustomerTag:false, submitLoading:false, selectLoading:false, @@ -301,6 +403,39 @@ this.selectList = e.map(d => d.id); this.selectCount = e.length; }, + //鏌ョ湅璇︽儏 + openInfo(row){ + this.showCustomerInfo = true; + this.modelTitle = "鐢ㄦ埛璇︽儏" + getCustomerInfo(row.id).then(res =>{ + if(res.code === 200){ + this.customerInfo = { + birthday: res.data.birthday || null, + blackId: res.data.blackId || null, + clientEnum: res.data.clientEnum || null, + createTime: res.data.createTime || '', + customerTagList: res.data.customerTagList || [], + disabled: res.data.disabled || false, + experience: res.data.experience || null, + face: res.data.face || '榛樿澶村儚URL', + gradeId: res.data.gradeId || null, + haveStore: res.data.haveStore || false, + id: res.data.id || '', + lastLoginDate: res.data.lastLoginDate || '', + mobile: res.data.mobile || null, + nickName: res.data.nickName || '寰俊鐢ㄦ埛', + openId: res.data.openId || null, + point: res.data.point || 0, + region: res.data.region || '', + regionId: res.data.regionId || '', + sex: res.data.sex || 0, + storeId: res.data.storeId || null, + totalPoint: res.data.totalPoint || 0, + username: res.data.username || '' + }; + } + }) + }, // 缂栬緫鏍囩 openEdit(row){ this.showCustomerTag = true @@ -360,6 +495,40 @@ </script> <style lang="scss" scoped> +.customer-detail { + padding: 16px; +} + +.avatar-section { + display: flex; + align-items: center; + margin-bottom: 16px; +} + +.basic-info { + margin-left: 16px; +} + +.basic-info h3 { + margin: 0 0 8px 0; + font-size: 18px; +} + +.basic-info p { + margin: 6px 0; + color: #808695; + font-size: 14px; +} + +.tags-section { + margin-top: 16px; + padding-top: 16px; +} + +.tags-section h4 { + margin-bottom: 12px; + color: #17233d; +} .export { margin: 10px 20px 10px 0; } -- Gitblit v1.8.0