From 34437176cfbc2dc30f786601f5abf27d605e2c15 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 13 四月 2026 20:17:20 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
---
admin/src/components/business/OperaShopInfoSeeWindow.vue | 416 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 416 insertions(+), 0 deletions(-)
diff --git a/admin/src/components/business/OperaShopInfoSeeWindow.vue b/admin/src/components/business/OperaShopInfoSeeWindow.vue
new file mode 100644
index 0000000..4797669
--- /dev/null
+++ b/admin/src/components/business/OperaShopInfoSeeWindow.vue
@@ -0,0 +1,416 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :withFooter="false"
+ :visible.sync="visible"
+ width="80%"
+ >
+ <div class="store-header" v-if="storeInfo">
+ <div class="store-header-left">
+ <el-image :src="storeInfo.payMemberCoverImage ? storeInfo.imgPrefix + storeInfo.payMemberCoverImage : ''" fit="cover" class="store-avatar">
+ <div slot="error" class="image-slot">
+ <i class="el-icon-picture-outline"></i>
+ </div>
+ </el-image>
+ </div>
+ <div class="store-header-right">
+ <div class="store-name">{{ storeInfo.name }}</div>
+ <div class="store-info-row">
+ <span class="info-item">
+ <span class="label">闂ㄥ簵绫诲瀷锛�</span>
+ <span class="value">{{ storeInfo.companyType === 1 ? '浼佷笟' : '涓汉' }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">鑱旂郴浜猴細</span>
+ <span class="value">{{ storeInfo.linkName }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">鑱旂郴鐢佃瘽锛�</span>
+ <span class="value">{{ storeInfo.linkPhone }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">韬唤璇佸彿锛�</span>
+ <span class="value">{{ storeInfo.idcard }}</span>
+ </span>
+ </div>
+ </div>
+ </div>
+
+ <div class="approval-section" v-if="storeInfo && storeInfo.auditStatus !== 0">
+ <div class="approval-result" :class="storeInfo.auditStatus === 1 ? 'approval-pass' : 'approval-reject'">
+ <div class="approval-status" v-if="storeInfo.auditStatus === 1">
+ <i class="el-icon-circle-check"></i>
+ <span>瀹℃牳閫氳繃</span>
+ </div>
+ <div class="approval-status" v-else>
+ <i class="el-icon-circle-close"></i>
+ <span>瀹℃牳鎷掔粷</span>
+ </div>
+ <div class="approval-info" v-if="storeInfo.auditStatus === 1">
+ <span class="info-item">瀹℃牳鏃堕棿锛歿{ storeInfo.auditTime }}</span>
+ <span class="info-item">瀹℃牳浜猴細{{ storeInfo.auditName }}</span>
+ </div>
+ <div class="approval-info" v-else>
+ <div class="info-item" v-if="storeInfo.auditRemark">澶囨敞锛歿{ storeInfo.auditRemark }}</div>
+ <div class="info-item">瀹℃牳鏃堕棿锛歿{ storeInfo.auditTime }}</div>
+ <div class="info-item">瀹℃牳浜猴細{{ storeInfo.auditName }}</div>
+ </div>
+ </div>
+ </div>
+
+ <div class="qualification-content" v-if="storeInfo">
+ <div class="qualification-section">
+ <h4 class="section-title">鍩烘湰淇℃伅</h4>
+ <div class="info-grid">
+ <div class="info-row">
+ <span class="label">鎵�鍦ㄧ渷甯傚尯锛�</span>
+ <span class="value">{{ storeInfo.provinceName || '' }} {{ storeInfo.cityName || '' }} {{ storeInfo.areaName || '' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">闂ㄥ簵鍦板潃锛�</span>
+ <span class="value">{{ storeInfo.address }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">闂ㄥ簵鐘舵�侊細</span>
+ <span class="value">{{ storeInfo.auditStatus === 0 ? '寰呭鎵�' : storeInfo.auditStatus === 1 ? '瀹℃壒閫氳繃' : '瀹℃壒鏈�氳繃' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">閰嶉�佽寖鍥达細</span>
+ <span class="value">{{ storeInfo.deliveryRange || '鏆傛棤' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="qualification-section">
+ <h4 class="section-title">涓讳綋璧勮川</h4>
+ <template v-if="storeInfo.companyType === 1">
+ <div class="info-grid">
+ <div class="info-row">
+ <span class="label">娉曚汉濮撳悕锛�</span>
+ <span class="value">{{ storeInfo.legalPersonName }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">娉曚汉鎵嬫満鍙凤細</span>
+ <span class="value">{{ storeInfo.legalPersonPhone }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">娉曚汉韬唤璇佸彿鐮侊細</span>
+ <span class="value">{{ storeInfo.legalPersonCard }}</span>
+ </div>
+ </div>
+ <div class="image-section">
+ <div class="image-item">
+ <span class="label">娉曚汉韬唤璇佹闈細</span>
+ <el-image :src="storeInfo.idcardImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item">
+ <span class="label">娉曚汉韬唤璇佸弽闈細</span>
+ <el-image :src="storeInfo.idcardImgBack" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgBack]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item">
+ <span class="label">钀ヤ笟鎵х収锛�</span>
+ <el-image :src="storeInfo.businessImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.businessImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </template>
+ <template v-else>
+ <div class="image-item-row">
+ <span class="label">韬唤璇佹闈細</span>
+ <el-image :src="storeInfo.idcardImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item-row">
+ <span class="label">韬唤璇佸弽闈細</span>
+ <el-image :src="storeInfo.idcardImgBack" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgBack]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item-row">
+ <span class="label">鏈夋晥鍔冲姩鍚堝悓锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.laborContractImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.laborContractImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">绀句繚缂寸撼璇佹槑锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.socialSecurityImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.socialSecurityImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </template>
+ </div>
+
+ <div class="qualification-section" v-if="storeInfo.companyType === 1">
+ <h4 class="section-title">闂ㄥ簵鐓х墖鍙婂叾浠栨潗鏂�</h4>
+ <div class="image-item-row">
+ <span class="label">闂ㄥ簵闂ㄥご鐓э細</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.storeFrontImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.storeFrontImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">闂ㄥ簵鍐呴儴鐓х墖锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.storeInteriorImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.storeInteriorImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">鍏跺畠鏉愭枡锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.otherMaterialImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.otherMaterialImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { detail, audit } from '@/api/business/shopInfo'
+
+export default {
+ name: 'OperaShopInfoSeeWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ storeInfo: null,
+ approvalForm: {
+ id: null,
+ auditStatus: 0,
+ auditRemark: ''
+ },
+ approvalRules: {
+ auditRemark: [
+ { required: true, message: '璇疯緭鍏ユ嫆缁濆師鍥�', trigger: 'blur' }
+ ]
+ },
+ isWorking: {
+ submit: false
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/shopInfo',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ this.approvalForm = {
+ id: row.id,
+ auditStatus: 1,
+ auditRemark: ''
+ }
+ detail(row.id)
+ .then(res => {
+ this.storeInfo = res
+ this.visible = true
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleAuditStatusChange (val) {
+ if (val === 1) {
+ this.approvalRules.auditRemark = []
+ } else {
+ this.approvalRules.auditRemark = [{ required: true, message: '璇疯緭鍏ユ嫆缁濆師鍥�', trigger: 'blur' }]
+ }
+ },
+ handleSubmit () {
+ this.$refs.approvalForm.validate(valid => {
+ if (!valid) return
+ this.isWorking.submit = true
+ audit(this.approvalForm)
+ .then(res => {
+ this.$tip.apiSuccess(res || '鎻愪氦鎴愬姛')
+ this.visible = false
+ this.$emit('success')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.submit = false
+ })
+ })
+ },
+ handleCancel () {
+ this.visible = false
+ }
+ }
+}
+</script>
+
+<style scoped>
+.store-header {
+ display: flex;
+ background: #f5f7fa;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+}
+.store-header-left {
+ margin-right: 20px;
+}
+.store-avatar {
+ width: 80px;
+ height: 80px;
+ border-radius: 50%;
+}
+.store-header-right {
+ flex: 1;
+}
+.store-name {
+ font-size: 18px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 10px;
+}
+.store-info-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+.info-item {
+ font-size: 14px;
+ color: #606266;
+}
+.info-item .label {
+ color: #909399;
+}
+.qualification-content {
+ padding: 20px;
+}
+.qualification-section {
+ margin-bottom: 30px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 15px;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ margin-bottom: 20px;
+}
+.info-row {
+ display: flex;
+ font-size: 14px;
+}
+.info-row .label {
+ color: #909399;
+ min-width: 100px;
+}
+.info-row .value {
+ color: #606266;
+}
+.image-section {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 30px;
+}
+.image-item {
+ display: flex;
+ flex-direction: column;
+}
+.image-item-row {
+ display: flex;
+ align-items: flex-start;
+ margin-bottom: 20px;
+}
+.image-item-row .label {
+ color: #909399;
+ font-size: 14px;
+ min-width: 120px;
+}
+.image-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+.image-item .label {
+ color: #909399;
+ font-size: 14px;
+ margin-bottom: 8px;
+}
+.qualification-image {
+ width: 150px;
+ height: 100px;
+ border-radius: 4px;
+ border: 1px solid #eee;
+}
+.image-slot {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ background: #f5f7fa;
+ color: #909399;
+ font-size: 20px;
+}
+.approval-section {
+ padding: 20px;
+}
+.approval-result {
+ border-radius: 8px;
+ padding: 20px;
+}
+.approval-pass {
+ background: #f0f9eb;
+ border: 1px solid #67c23a;
+}
+.approval-reject {
+ background: #fef0f0;
+ border: 1px solid #f56c6c;
+}
+.approval-status {
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 15px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+.approval-pass .approval-status {
+ color: #67c23a;
+}
+.approval-reject .approval-status {
+ color: #f56c6c;
+}
+.approval-info {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 30px;
+ font-size: 14px;
+ color: #606266;
+}
+</style>
--
Gitblit v1.9.3