From 121b714d710cf3c865f4a1b5efe81abec11056d1 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Sat, 01 Nov 2025 14:36:36 +0800
Subject: [PATCH] 修复名片模板生成失败问题 修复后台名片查看不显示头像和logo问题

---
 mobile/manifest.json                                 |    4 
 admin/app/shop/controller/plus/business/Business.php |    6 
 shop_vue/src/views/plus/business/business/index.vue  | 1484 ++++++++++++++++++++++++++--------------------------
 admin/app/shop/controller/plus/business/Template.php |    4 
 shop_vue/src/views/plus/business/template/add.vue    |  140 ++--
 admin/app/common/service/business/Poster.php         |    4 
 admin/app/common/model/plus/business/Business.php    |    9 
 7 files changed, 821 insertions(+), 830 deletions(-)

diff --git a/admin/app/common/model/plus/business/Business.php b/admin/app/common/model/plus/business/Business.php
index ce2cc76..58a6405 100644
--- a/admin/app/common/model/plus/business/Business.php
+++ b/admin/app/common/model/plus/business/Business.php
@@ -65,7 +65,7 @@
     public function logoImage()
     {
         $model = self::getCalledModule() ?: 'common';
-        return $this->hasOne("app\\$model\\model\\file\\UploadFile", 'file_id', 'logo')->bind(['file_path']);
+        return $this->hasOne("app\\$model\\model\\file\\UploadFile", 'file_id', 'logo');
     }
 
     /**
@@ -76,6 +76,11 @@
     {
         $model = self::getCalledModule() ?: 'common';
         return $this->hasOne("app\\$model\\model\\plus\\business\\Grade", 'grade_id', 'grade_id');
+    }
+    public function industry()
+    {
+        $model = self::getCalledModule() ?: 'common';
+        return $this->hasOne("app\\$model\\model\\plus\\business\\Industry", 'industry_id', 'industry_id');
     }
 
     /**
@@ -163,6 +168,6 @@
      */
     public static function detail($business_card_id)
     {
-        return (new self())->with(['user', 'image', 'logoImage', 'grade'])->where(['business_card_id' => $business_card_id])->find();
+        return (new self())->with(['user', 'image', 'logoImage', 'grade', 'industry'])->where(['business_card_id' => $business_card_id])->find();
     }
 }
\ No newline at end of file
diff --git a/admin/app/common/service/business/Poster.php b/admin/app/common/service/business/Poster.php
index 2296aaa..8546466 100644
--- a/admin/app/common/service/business/Poster.php
+++ b/admin/app/common/service/business/Poster.php
@@ -324,11 +324,11 @@
             while ($width < ($titleNum * $this->config['address'][0]['fontSize'] + $the_box + $fontX)) {
                 $titleNum--;
             };
-            if ($strlen > $titleNum && $titleNum) {
+            if ($strlen > $titleNum && $titleNum>0) {
                 $strArr = self::mbStrSplit($title, $titleNum);
             }
             $colorResource=self::colorResource($this->config['address'][0]['color'],$editor);
-            if ($strlen > $titleNum && $titleNum) {
+            if ($strlen > $titleNum && $titleNum>0) {
                 $y = $fontY + 10;
                 foreach ($strArr as $k => $v) {
                     if ($k == 0) {
diff --git a/admin/app/shop/controller/plus/business/Business.php b/admin/app/shop/controller/plus/business/Business.php
index 31413d0..2fdc6a8 100644
--- a/admin/app/shop/controller/plus/business/Business.php
+++ b/admin/app/shop/controller/plus/business/Business.php
@@ -66,7 +66,7 @@
         $this->processArrayFields($param);
         
         // 查找要编辑的名片
-        $model = (new BusinessModel())->get($param['business_card_id']);
+        $model = (new BusinessModel())->where('business_card_id',$param['business_card_id'])->find();
         if (!$model) {
             return $this->renderError('名片不存在');
         }
@@ -81,7 +81,7 @@
         if (file_exists($image)) {
             unlink($image);
         }
-        
+        unset($param['sex']);
         // 更新数据
         if ($model->save($param)) {
             return $this->renderSuccess('编辑成功');
@@ -165,6 +165,8 @@
     public function detail($business_card_id) {
         $data = BusinessModel::detail($business_card_id);
         if ($data) {
+            $Qrcode = new Poster($data, 'business');
+            $data['mp'] = $Qrcode->getImage();
             return $this->renderSuccess('', $data);
         }
         return $this->renderError('名片不存在');
diff --git a/admin/app/shop/controller/plus/business/Template.php b/admin/app/shop/controller/plus/business/Template.php
index 9f41648..6f9c3f2 100644
--- a/admin/app/shop/controller/plus/business/Template.php
+++ b/admin/app/shop/controller/plus/business/Template.php
@@ -49,7 +49,7 @@
         $paramL['image'] = $Qrcode->getImageE($param['template'], $template_id);
         $paramL['style'] = json_encode($param['template'], JSON_UNESCAPED_UNICODE);
         if ($model->add($paramL)) {
-            return $this->renderSuccess('编辑成功', url('business.template/index'));
+            return $this->renderSuccess('编辑成功');
         }
         return $this->renderError('编辑失败');
     }
@@ -176,7 +176,7 @@
             $paramI['image'] = $Qrcode->getImageE($param['template'], $template_id);
             $modelBusiness = (new BusinessTemplate())->where(['template_id' => $template_id])->find();
             $modelBusiness->where(['template_id' => $template_id])->update($paramI);
-            return $this->renderSuccess('添加成功', url('business.template/index'));
+            return $this->renderSuccess('添加成功');
         }
         return $this->renderError('添加失败');
     }
diff --git a/mobile/manifest.json b/mobile/manifest.json
index b8f8b0d..97fabb4 100644
--- a/mobile/manifest.json
+++ b/mobile/manifest.json
@@ -1,6 +1,6 @@
 {
     "name" : "连盟汇",
-    "appid" : "__UNI__AAA479C",
+    "appid" : "__UNI__6A10109",
     "description" : "连盟汇",
     "versionName" : "1.0.0",
     "versionCode" : 100,
@@ -134,7 +134,7 @@
     "quickapp" : {},
     /* 快应用特有相关 */
     "mp-weixin" : {
-        "appid" : "wxd6c0cd5d638175bc",
+        "appid" : "wxd03115abc6c4283d",
         "setting" : {
             "urlCheck" : false,
             "es6" : true,
diff --git a/shop_vue/src/views/plus/business/business/index.vue b/shop_vue/src/views/plus/business/business/index.vue
index 8902c90..03e859c 100644
--- a/shop_vue/src/views/plus/business/business/index.vue
+++ b/shop_vue/src/views/plus/business/business/index.vue
@@ -26,13 +26,16 @@
           <template slot-scope="scope">
             <div class="business-card-info">
               <div class="avatar">
-                <img v-if="scope.row.image && scope.row.image.file_path" :src="scope.row.image.file_path" alt="头像" class="avatar-img">
+                <img v-if="scope.row.file_path" :src="scope.row.file_path" alt="头像" class="avatar-img">
                 <div v-else class="avatar-placeholder">默认头像</div>
               </div>
               <div class="info">
                 <div class="name">{{ scope.row.name }}</div>
-                <div class="position">{{ Array.isArray(scope.row.duties) ? scope.row.duties.join(', ') : scope.row.duties }}</div>
-                <div class="company">{{ Array.isArray(scope.row.unit) ? scope.row.unit.join(', ') : scope.row.unit }}</div>
+                <div class="position">
+                  {{ Array.isArray(scope.row.duties) ? scope.row.duties.join(', ') : scope.row.duties }}
+                </div>
+                <div class="company">{{ Array.isArray(scope.row.unit) ? scope.row.unit.join(', ') : scope.row.unit }}
+                </div>
               </div>
             </div>
           </template>
@@ -47,9 +50,12 @@
         <el-table-column prop="create_time" label="创建时间" width="180" align="center"></el-table-column>
         <el-table-column label="操作" width="180" align="center">
           <template slot-scope="scope">
-            <el-button type="text" v-auth="'/plus/business/business/view'" @click="viewBusiness(scope.row)">查看</el-button>
-            <el-button type="text" v-auth="'/plus/business/business/edit'" @click="editBusiness(scope.row)">编辑</el-button>
-            <el-button type="text" v-auth="'/plus/business/business/delete'" @click="deleteBusiness(scope.row)"></el-button>
+            <el-button type="text" v-auth="'/plus/business/business/view'"
+              @click="viewBusiness(scope.row)">查看</el-button>
+            <el-button type="text" v-auth="'/plus/business/business/edit'"
+              @click="editBusiness(scope.row)">编辑</el-button>
+            <el-button type="text" v-auth="'/plus/business/business/delete'"
+              @click="deleteBusiness(scope.row)"></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -57,13 +63,8 @@
 
     <!-- 分页 -->
     <div class="pagination">
-      <el-pagination
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-        :current-page="curPage"
-        :page-sizes="[10, 20, 50, 100]"
-        :page-size="pageSize"
-        layout="total, sizes, prev, pager, next, jumper"
+      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="curPage"
+        :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper"
         :total="totalDataNumber">
       </el-pagination>
     </div>
@@ -81,7 +82,8 @@
                     <div class="img" style="margin-top: 10px;">
                       <img :src="selectedUser.avatarUrl" width="100" height="100" />
                     </div>
-                    <el-tag closable @close="clearSelectedUser" style="margin-top: 10px;">{{ selectedUser.nickName }}</el-tag>
+                    <el-tag closable @close="clearSelectedUser"
+                      style="margin-top: 10px;">{{ selectedUser.nickName }}</el-tag>
                   </div>
                 </el-form-item>
               </el-col>
@@ -91,7 +93,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="联系电话" prop="mobile">
@@ -107,7 +109,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="微信">
@@ -120,7 +122,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="座机">
@@ -130,107 +132,97 @@
               <el-col :span="12">
                 <el-form-item label="名片等级">
                   <el-select v-model="formData.grade_id" placeholder="请选择名片等级">
-                    <el-option
-                      v-for="item in gradeList"
-                      :key="item.grade_id"
-                      :label="item.name"
-                      :value="item.grade_id">
+                    <el-option v-for="item in gradeList" :key="item.grade_id" :label="item.name" :value="item.grade_id">
                     </el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="行业" prop="industry_id">
-            <el-cascader
-              v-model="formData.industry_id"
-              placeholder="请选择行业"
-              :options="industryList"
-              :props="{ label: 'name', value: 'industry_id', children: 'child' }"
-              style="width: 100%;"
-            ></el-cascader>
-          </el-form-item>
+                  <el-cascader v-model="formData.industry_id" placeholder="请选择行业" :options="industryList"
+                    :props="{ label: 'name', value: 'industry_id', children: 'child' }"
+                    style="width: 100%;"></el-cascader>
+                </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="是否默认">
-                  <el-switch
-                    v-model="formData.is_default"
-                    :active-value="1"
-                    :inactive-value="0">
+                  <el-switch v-model="formData.is_default" :active-value="1" :inactive-value="0">
                   </el-switch>
                 </el-form-item>
               </el-col>
             </el-row>
           </el-tab-pane>
-          
+
           <el-tab-pane label="详细信息" name="detail">
             <el-form-item label="职务">
               <el-input v-model="formData.duties" placeholder="请输入职务"></el-input>
             </el-form-item>
-            
+
             <el-form-item label="单位">
               <el-input v-model="formData.unit" placeholder="请输入单位"></el-input>
             </el-form-item>
-            
+
             <el-form-item label="地区">
               <el-select v-model="formData.province_id" placeholder="省" @change="initCity">
-                <el-option :label="item.name" :value="item.id" v-for="(item,index) in areaList" :key='index'></el-option>
+                <el-option :label="item.name" :value="item.id" v-for="(item,index) in areaList"
+                  :key='index'></el-option>
               </el-select>
               <el-select v-if="formData.province_id" v-model="formData.city_id" placeholder="市" @change="initRegion">
-                <el-option :label="item1.name" :value="item1.id" v-for="(item1,index1) in areaList[formData.province_id]['city']" :key='index1'></el-option>
+                <el-option :label="item1.name" :value="item1.id"
+                  v-for="(item1,index1) in areaList[formData.province_id]['city']" :key='index1'></el-option>
               </el-select>
               <el-select v-if="formData.city_id" v-model="formData.region_id" placeholder="区">
-                <el-option :label="item2.name" :value="item2.id" v-for="(item2,index2) in areaList[formData.province_id]['city'][formData.city_id]['region']" :key='index2'></el-option>
+                <el-option :label="item2.name" :value="item2.id"
+                  v-for="(item2,index2) in areaList[formData.province_id]['city'][formData.city_id]['region']"
+                  :key='index2'></el-option>
               </el-select>
             </el-form-item>
-            
+
             <el-form-item label="地址">
               <el-input v-model="formData.address" placeholder="请输入地址"></el-input>
             </el-form-item>
-            
+
             <el-form-item label="简介">
-              <el-input 
-                type="textarea" 
-                v-model="formData.Introduction" 
-                placeholder="请输入个人或公司简介"
-                :rows="3">
+              <el-input type="textarea" v-model="formData.Introduction" placeholder="请输入个人或公司简介" :rows="3">
               </el-input>
             </el-form-item>
           </el-tab-pane>
-          
+
           <el-tab-pane label="图片设置" name="images">
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="头像">
                   <el-button icon="el-icon-picture" @click="selectAvatar">选择头像</el-button>
-                  <div v-if="avatarImage" class="image-preview">
-                    <img :src="avatarImage.file_path" class="preview-img">
-                    <i class="el-icon-delete delete-icon" @click="clearAvatar"></i>
+                  <div>
+                    <div v-if="avatarImage" class="image-preview">
+                      <img :src="avatarImage.file_path" class="preview-img">
+                      <i class="el-icon-delete delete-icon" @click="clearAvatar"></i>
+                    </div>
                   </div>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="Logo">
                   <el-button icon="el-icon-picture" @click="selectLogo">选择Logo</el-button>
-                  <div v-if="logoImage" class="image-preview">
-                    <img :src="logoImage.file_path" class="preview-img">
-                    <i class="el-icon-delete delete-icon" @click="clearLogo"></i>
+                  <div>
+                    <div v-if="logoImage" class="image-preview">
+                      <img :src="logoImage.file_path" class="preview-img">
+                      <i class="el-icon-delete delete-icon" @click="clearLogo"></i>
+                    </div>
                   </div>
                 </el-form-item>
               </el-col>
             </el-row>
           </el-tab-pane>
-          
+
           <el-tab-pane label="模板设置" name="template">
             <el-form-item label="选择模板">
               <el-select v-model="formData.template_id" placeholder="请选择名片模板" @change="handleTemplateChange">
-                <el-option
-                  v-for="item in templateList"
-                  :key="item.template_id"
-                  :label="item.name || '模板' + item.template_id"
-                  :value="item.template_id">
+                <el-option v-for="item in templateList" :key="item.template_id"
+                  :label="item.name || '模板' + item.template_id" :value="item.template_id">
                   <div class="template-option">
                     <img :src="item.image" class="template-thumb" />
                     <span>{{ item.name || '模板' + item.template_id }}</span>
@@ -238,7 +230,7 @@
                 </el-option>
               </el-select>
             </el-form-item>
-            
+
             <el-form-item label="模板预览" v-if="selectedTemplate">
               <div class="template-preview">
                 <img :src="selectedTemplate.image" class="template-image" />
@@ -247,7 +239,7 @@
           </el-tab-pane>
         </el-tabs>
       </el-form>
-      
+
       <div slot="footer" class="dialog-footer">
         <el-button @click="dialogVisible = false">取 消</el-button>
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -271,7 +263,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="名片类型">
@@ -284,7 +276,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="微信">
@@ -297,7 +289,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="座机">
@@ -310,7 +302,7 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="12">
                 <el-form-item label="是否默认">
@@ -320,53 +312,41 @@
             </el-row>
           </el-form>
         </el-tab-pane>
-        
+
         <el-tab-pane label="详细信息" name="detail">
           <el-form label-width="100px">
             <el-form-item label="职务">
               <span>{{ Array.isArray(detailData.duties) ? detailData.duties.join(', ') : detailData.duties }}</span>
             </el-form-item>
-            
+
             <el-form-item label="单位">
               <span>{{ Array.isArray(detailData.unit) ? detailData.unit.join(', ') : detailData.unit }}</span>
             </el-form-item>
-            
-            
             <el-row :gutter="20">
               <el-col :span="8">
-                <el-form-item label="行业ID">
-                  <span>{{ detailData.industry_id }}</span>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="省份ID">
-                  <span>{{ detailData.province_id }}</span>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="城市ID">
-                  <span>{{ detailData.city_id }}</span>
+                <el-form-item label="行业">
+                  <span>{{ detailData.industry.name }}</span>
                 </el-form-item>
               </el-col>
             </el-row>
-            
+
             <el-row :gutter="20">
               <el-col :span="8">
-                <el-form-item label="区域ID">
-                  <span>{{ detailData.region_id }}</span>
+                <el-form-item label="省份">
+                  <span>{{ detailData.region.province }}</span>
                 </el-form-item>
               </el-col>
-              <el-col :span="16">
-                <el-form-item label="地区信息">
-                  <span>
-                    {{ detailData.region ?
-                      (detailData.region.province + (detailData.region.city ? ' ' + detailData.region.city : '') + (detailData.region.region ? ' ' + detailData.region.region : ''))
-                      : '' }}
-                  </span>
+              <el-col :span="8">
+                <el-form-item label="城市">
+                  <span>{{ detailData.region.city}}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="区域">
+                  <span>{{ detailData.region.region}}</span>
                 </el-form-item>
               </el-col>
             </el-row>
-            
             <el-form-item label="地址">
               <span>{{ Array.isArray(detailData.address) ? detailData.address.join(', ') : detailData.address }}</span>
             </el-form-item>
@@ -375,536 +355,539 @@
             </el-form-item>
           </el-form>
         </el-tab-pane>
-        
+
         <el-tab-pane label="图片信息" name="images">
           <el-form label-width="100px">
-            <el-row :gutter="20">
-              <el-col :span="12">
-                <el-form-item label="头像ID">
-                  <span>{{ detailData.file_id }}</span>
-                </el-form-item>
-              </el-col>
-              <el-col :span="12">
-                <el-form-item label="Logo ID">
-                  <span>{{ detailData.logo }}</span>
-                </el-form-item>
-              </el-col>
-            </el-row>
             <el-form-item label="头像预览">
-              <img v-if="detailData.image && detailData.image.file_path" :src="detailData.image.file_path" class="preview-image" />
+              <img v-if="detailData.file_path" :src="detailData.file_path" class="preview-image" />
               <div v-else class="no-image">暂无头像</div>
             </el-form-item>
-            
+
             <el-form-item label="Logo预览">
-              <img v-if="detailData.logoImage && detailData.logoImage.file_path" :src="detailData.logoImage.file_path" class="preview-image" />
+              <img v-if="detailData.logoImage && detailData.logoImage.file_path" :src="detailData.logoImage.file_path"
+                class="preview-image" />
               <div v-else class="no-image">暂无Logo</div>
             </el-form-item>
           </el-form>
         </el-tab-pane>
-        
-        <el-tab-pane label="模板信息" name="template">
+
+        <el-tab-pane label="名片预览" name="template">
           <el-form label-width="100px">
-            <el-form-item label="模板ID">
-              <span>{{ detailData.template_id }}</span>
-            </el-form-item>
-            
-            <el-form-item label="模板预览" v-if="detailData.template">
+            <el-form-item label="名片预览" v-if="detailData.mp">
               <div class="template-preview">
-                <img :src="detailData.template.image" class="template-image" />
+                <img :src="detailData.mp" class="template-image" />
               </div>
-            </el-form-item>
-            
-            <el-form-item label="模板预览" v-else>
-              <div class="no-template">暂无模板信息</div>
-            </el-form-item>
-          </el-form>
-        </el-tab-pane>
-        
-        <el-tab-pane label="时间信息" name="time">
-          <el-form label-width="100px">
-            <el-form-item label="创建时间">
-              <span>{{ detailData.create_time }}</span>
-            </el-form-item>
-            <el-form-item label="更新时间">
-              <span>{{ detailData.update_time }}</span>
             </el-form-item>
           </el-form>
         </el-tab-pane>
       </el-tabs>
-      
+
       <div slot="footer" class="dialog-footer">
         <el-button @click="detailDialogVisible = false">关 闭</el-button>
       </div>
     </el-dialog>
-    
+
     <!-- 用户选择组件 -->
     <GetUser :is_open="showUserSelector" @close="handleUserSelect"></GetUser>
-    
+
     <!-- 图片选择组件 -->
-    <Upload 
-      v-if="showImageSelector" 
-      :config="uploadConfig"
-      :isupload="showImageSelector"
+    <Upload v-if="showImageSelector" :config="uploadConfig" :isupload="showImageSelector"
       @returnImgs="handleImageSelect">
     </Upload>
   </div>
 </template>
 
 <script>
-import BusinessApi from '@/api/business.js';
-import StoreApi from '@/api/store.js';
-import GetUser from '@/components/user/GetUser';
-import Upload from '@/components/file/Upload';
+  import BusinessApi from '@/api/business.js';
+  import StoreApi from '@/api/store.js';
+  import GetUser from '@/components/user/GetUser';
+  import Upload from '@/components/file/Upload';
 
-export default {
-  components: {
-    GetUser,
-    Upload
-  },
-  data() {
-    return {
-      loading: false,
-      listData: [],
-      gradeList: [],
-      templateList: [],
-      selectedTemplate: null,
-      searchForm: {
-        search: ''
-      },
-      formData: {
-        business_card_id: '',
-        user_id: '',
-        name: '',
-        sex: 10,
-        mobile: '',
-        mobile_phone: '',
-        wechat: '',
-        mailbox: '',
-        phone: '',
-        duties: '',
-        unit: '',
-        address: '',
-        industry_id: [],
-        province_id: '',
-        city_id: '',
-        region_id: '',
-        ilk: '',
-        grade_id: '',
-        is_default: 0,
-        file_id: '',
-        logo: '',
-        logo_width: '',
-        logo_height: '',
-        template_id: '',
-        Introduction: ''
-      },
-      detailData: {
-        business_card_id: '',
-        user_id: '',
-        name: '',
-        sex: 10,
-        mobile: '',
-        mobile_phone: '',
-        wechat: '',
-        mailbox: '',
-        phone: '',
-        duties: '',
-        unit: '',
-        address: '',
-        industry_id: '',
-        province_id: '',
-        city_id: '',
-        region_id: '',
-        ilk: '',
-        grade: null,
-        is_default: 0,
-        file_id: '',
-        logo: '',
-        logo_width: '',
-        logo_height: '',
-        template_id: '',
-        Introduction: '',
-        create_time: '',
-        update_time: '',
-        region: null
-      },
-      rules: {
-        user_id: [
-          { required: true, message: '请输入用户ID', trigger: 'blur' },
-          { type: 'number', message: '用户ID必须为数字', trigger: 'blur' }
-        ],
-        name: [
-          { required: true, message: '请输入姓名', trigger: 'blur' }
-        ],
-        mobile: [
-          { required: false, pattern: /^1[3-9]\d{9}$|^$/, message: '请输入正确的手机号', trigger: 'blur' }
-        ],
-        province_id: [
-          { type: 'number', message: '省份ID必须为数字', trigger: 'blur' }
-        ],
-        city_id: [
-          { type: 'number', message: '城市ID必须为数字', trigger: 'blur' }
-        ],
-        region_id: [
-          { type: 'number', message: '区域ID必须为数字', trigger: 'blur' }
-        ],
-        file_id: [
-          { type: 'number', message: '头像ID必须为数字', trigger: 'blur' }
-        ],
-        logo: [
-          { type: 'number', message: 'Logo ID必须为数字', trigger: 'blur' }
-        ]
-      },
-      dialogVisible: false,
-      detailDialogVisible: false,
-      dialogTitle: '',
-      isEdit: false,
-      activeTab: 'basic',
-      detailActiveTab: 'basic',
-      showUserSelector: false,
-      showImageSelector: false,
-      imageSelectType: '', // 'avatar' or 'logo'
-      uploadConfig: {
-        total: 1,
-        file_type: 'image'
-      },
-      // 分页相关
-      curPage: 1,
-      pageSize: 15,
-      totalDataNumber: 0,
-      industryList: [],
-      areaList: [],
-      selectedUser: null,
-      avatarImage: null,
-      logoImage: null,
-    };
-  },
-  filters: {
-    sexFilter(val) {
-      const sexMap = { 10: '未知', 20: '男', 30: '女' };
-      return sexMap[val] || '未知';
-    }
-  },
-  mounted() {
-    this.loadData();
-    this.loadGradeList();
-    this.loadTemplateList();
-    this.loadIndustryList(); // 加载行业列表
-    this.loadRegionList(); // 加载地区列表
-  },
-  methods: {
-    // 加载数据
-    loadData() {
-      this.loading = true;
-      const params = {
-        page: this.curPage,
-        listRow: this.pageSize,
-        search: this.searchForm.search
+  export default {
+    components: {
+      GetUser,
+      Upload
+    },
+    data() {
+      return {
+        loading: false,
+        listData: [],
+        gradeList: [],
+        templateList: [],
+        selectedTemplate: null,
+        searchForm: {
+          search: ''
+        },
+        formData: {
+          business_card_id: '',
+          user_id: '',
+          name: '',
+          sex: 10,
+          mobile: '',
+          mobile_phone: '',
+          wechat: '',
+          mailbox: '',
+          phone: '',
+          duties: '',
+          unit: '',
+          address: '',
+          industry_id: [],
+          province_id: '',
+          city_id: '',
+          region_id: '',
+          ilk: '',
+          grade_id: '',
+          is_default: 0,
+          file_id: '',
+          logo: '',
+          logo_width: '',
+          logo_height: '',
+          template_id: '',
+          Introduction: ''
+        },
+        detailData: {
+          business_card_id: '',
+          user_id: '',
+          name: '',
+          sex: 10,
+          mobile: '',
+          mobile_phone: '',
+          wechat: '',
+          mailbox: '',
+          phone: '',
+          duties: '',
+          unit: '',
+          address: '',
+          industry_id: '',
+          province_id: '',
+          city_id: '',
+          region_id: '',
+          ilk: '',
+          grade: null,
+          is_default: 0,
+          file_id: '',
+          logo: '',
+          logo_width: '',
+          logo_height: '',
+          template_id: '',
+          Introduction: '',
+          create_time: '',
+          update_time: '',
+          industry:{name:[]},
+          region: {province: "", city: "", region: ""}
+
+        },
+        rules: {
+          user_id: [{
+              required: true,
+              message: '请输入用户ID',
+              trigger: 'blur'
+            },
+            {
+              type: 'number',
+              message: '用户ID必须为数字',
+              trigger: 'blur'
+            }
+          ],
+          name: [{
+            required: true,
+            message: '请输入姓名',
+            trigger: 'blur'
+          }],
+          mobile: [{
+            required: false,
+            pattern: /^1[3-9]\d{9}$|^$/,
+            message: '请输入正确的手机号',
+            trigger: 'blur'
+          }],
+          province_id: [{
+            type: 'number',
+            message: '省份ID必须为数字',
+            trigger: 'blur'
+          }],
+          city_id: [{
+            type: 'number',
+            message: '城市ID必须为数字',
+            trigger: 'blur'
+          }],
+          region_id: [{
+            type: 'number',
+            message: '区域ID必须为数字',
+            trigger: 'blur'
+          }],
+          file_id: [{
+            type: 'number',
+            message: '头像ID必须为数字',
+            trigger: 'blur'
+          }],
+          logo: [{
+            type: 'number',
+            message: 'Logo ID必须为数字',
+            trigger: 'blur'
+          }]
+        },
+        dialogVisible: false,
+        detailDialogVisible: false,
+        dialogTitle: '',
+        isEdit: false,
+        activeTab: 'basic',
+        detailActiveTab: 'basic',
+        showUserSelector: false,
+        showImageSelector: false,
+        imageSelectType: '', // 'avatar' or 'logo'
+        uploadConfig: {
+          total: 1,
+          file_type: 'image'
+        },
+        // 分页相关
+        curPage: 1,
+        pageSize: 15,
+        totalDataNumber: 0,
+        industryList: [],
+        areaList: [],
+        selectedUser: null,
+        avatarImage: null,
+        logoImage: null,
       };
-
-      BusinessApi.businessList(params).then(res => {
-        this.loading = false;
-        if (res.data.list) {
-          // 适配后端实际返回的数据结构
-          this.listData = res.data.list.data || [];
-          this.totalDataNumber = res.data.list.total || 0;
-        } else {
-          this.listData = [];
-          this.totalDataNumber = 0;
-        }
-      }).catch(() => {
-        this.loading = false;
-        this.$message.error('获取数据失败');
-      });
     },
-
-    // 加载名片等级列表
-    loadGradeList() {
-      BusinessApi.gradeList().then(res => {
-        this.gradeList = res.data.list || [];
-      }).catch(() => {
-        this.$message.error('获取名片等级失败');
-      });
-    },
-
-    // 加载模板列表
-    loadTemplateList() {
-      BusinessApi.businessTemplateList().then(res => {
-        this.templateList = res.data.list.data || [];
-      }).catch(() => {
-        this.$message.error('获取名片模板失败');
-      });
-    },
-
-    // 加载行业列表
-    loadIndustryList() {
-      BusinessApi.industryList().then(res => {
-        // 使用树形结构的数据作为行业列表
-        this.industryList = res.data.list && res.data.list.tree ? res.data.list.tree : [];
-      }).catch(() => {
-        this.$message.error('获取行业列表失败');
-      });
-    },
-    
-    // 加载地区列表
-    loadRegionList() {
-      // 参考门店添加页面,调用获取地区数据的API
-      BusinessApi.businessList({}, true).then(res => {
-        if (res.data && res.data.regionData) {
-          this.areaList = res.data.regionData;
-        }
-      }).catch(() => {
-        this.areaList = [];
-      });
-    },
-    
-    /*初始化城市id*/
-    initCity() {
-      this.formData.city_id = '';
-      this.formData.region_id = '';
-    },
-    
-    /*初始化区id*/
-    initRegion() {
-      this.formData.region_id = '';
-    },
-    
-    // 选择用户
-    selectUser() {
-      this.showUserSelector = true;
-    },
-    
-    // 用户选择回调
-    handleUserSelect(selectedUsers) {
-      this.showUserSelector = false;
-      if (selectedUsers && selectedUsers.params && selectedUsers.params.length > 0) {
-        const user = selectedUsers.params[0];
-        this.formData.user_id = user.user_id;
-        this.selectedUser = user;
-        // 自动填充姓名和手机号
-        if (user.real_name) {
-          this.formData.name = user.real_name;
-        }
-        if (user.mobile) {
-          this.formData.mobile = user.mobile;
-        }
+    filters: {
+      sexFilter(val) {
+        const sexMap = {
+          10: '未知',
+          20: '男',
+          30: '女'
+        };
+        return sexMap[val] || '未知';
       }
     },
-    
-    // 清除选择的用户
-    clearSelectedUser() {
-      this.formData.user_id = '';
-      this.selectedUser = null;
-    },
-    
-    // 选择头像
-    selectAvatar() {
-      this.imageSelectType = 'avatar';
-      this.uploadConfig = {
-        total: 1,
-        file_type: 'image'
-      };
-      this.showImageSelector = true;
-    },
-    
-    // 选择Logo
-    selectLogo() {
-      this.imageSelectType = 'logo';
-      this.uploadConfig = {
-        total: 1,
-        file_type: 'image'
-      };
-      this.showImageSelector = true;
-    },
-    
-    // 图片选择回调
-    handleImageSelect(images) {
-      this.showImageSelector = false;
-      if (images && images.length > 0) {
-        const fileId = images[0].file_id;
-        const fileData = images[0];
-        if (this.imageSelectType === 'avatar') {
-          this.formData.file_id = fileId;
-          this.avatarImage = fileData;
-        } else if (this.imageSelectType === 'logo') {
-          this.formData.logo = fileId;
-          this.logoImage = fileData;
-        }
-      }
-    },
-    
-    // 清除头像
-    clearAvatar() {
-      this.formData.file_id = '';
-      this.avatarImage = null;
-    },
-    
-    // 清除Logo
-    clearLogo() {
-      this.formData.logo = '';
-      this.logoImage = null;
-    },
-    
-    // 搜索
-    search() {
-      this.curPage = 1;
+    mounted() {
       this.loadData();
+      this.loadGradeList();
+      this.loadTemplateList();
+      this.loadIndustryList(); // 加载行业列表
+      this.loadRegionList(); // 加载地区列表
     },
+    methods: {
+      // 加载数据
+      loadData() {
+        this.loading = true;
+        const params = {
+          page: this.curPage,
+          listRow: this.pageSize,
+          search: this.searchForm.search
+        };
 
-    // 重置搜索
-    reset() {
-      this.searchForm.search = '';
-      this.curPage = 1;
-      this.loadData();
-    },
-
-    // 添加名片
-    addBusiness() {
-      this.dialogTitle = '添加名片';
-      this.isEdit = false;
-      this.formData = {
-        business_card_id: '',
-        user_id: '',
-        name: '',
-        sex: 10,
-        mobile: '',
-        mobile_phone: '',
-        wechat: '',
-        mailbox: '',
-        phone: '',
-        duties: '',
-        unit: '',
-        address: '',
-        industry_id: '',
-        province_id: '',
-        city_id: '',
-        region_id: '',
-        ilk: '',
-        grade_id: '',
-        is_default: 0,
-        file_id: '',
-        logo: '',
-        logo_width: '',
-        logo_height: '',
-        template_id: '',
-        Introduction: ''
-      };
-      // 清空选择的数据
-      this.selectedUser = null;
-      this.avatarImage = null;
-      this.logoImage = null;
-
-      this.activeTab = 'basic';
-      this.dialogVisible = true;
-    },
-
-    // 编辑名片
-    editBusiness(row) {
-      this.dialogTitle = '编辑名片';
-      this.isEdit = true;
-      this.formData = {
-        business_card_id: row.business_card_id,
-        user_id: row.user_id,
-        name: row.name,
-        sex: row.sex && typeof row.sex === 'object' ?
-             (row.sex === '未知' ? 10 : row.sex === '男' ? 20 : 30) :
-             (row.sex || 10),
-        mobile: row.mobile,
-        mobile_phone: row.mobile_phone,
-        wechat: row.wechat || '',
-        mailbox: row.mailbox || '',
-        phone: row.phone || '',
-        duties: Array.isArray(row.duties) ? row.duties.join(', ') : (row.duties || ''),
-        unit: Array.isArray(row.unit) ? row.unit.join(', ') : (row.unit || ''),
-        address: Array.isArray(row.address) ? row.address.join(', ') : (row.address || ''),
-        industry_id: row.industry_id || '',
-        province_id: row.province_id || '',
-        city_id: row.city_id || '',
-        region_id: row.region_id || '',
-        ilk: row.ilk || '',
-        grade_id: row.grade_id,
-        is_default: row.is_default,
-        file_id: row.file_id || '',
-        logo: row.logo || '',
-        logo_width: row.logo_width || '',
-        logo_height: row.logo_height || '',
-        template_id: row.template_id || '',
-        Introduction: row.Introduction || ''
-      };
-      
-      // 设置选中的用户
-      if (row.user) {
-        this.selectedUser = row.user;
-      }
-      
-      // 设置选中的图片
-      if (row.image) {
-        this.avatarImage = row.image;
-      }
-      
-      if (row.logoImage) {
-        this.logoImage = row.logoImage;
-      }
-      
-      // 地区信息已经通过formData绑定,无需额外设置
-      
-      // 设置选中的模板
-      if (row.template_id) {
-        this.selectedTemplate = this.templateList.find(template => template.template_id == row.template_id) || null;
-      } else {
-        this.selectedTemplate = null;
-      }
-      
-      this.activeTab = 'basic';
-      this.dialogVisible = true;
-    },
-
-    // 查看详情
-    viewBusiness(row) {
-      BusinessApi.businessDetail({ business_card_id: row.business_card_id }).then(res => {
-        if (res.code === 1) {
-          this.detailData = res.data;
-          this.detailActiveTab = 'basic';
-          this.detailDialogVisible = true;
-        } else {
-          this.$message.error(res.msg || '获取详情失败');
-        }
-      }).catch(() => {
-        this.$message.error('获取详情失败');
-      });
-    },
-
-    // 删除名片
-    deleteBusiness(row) {
-      this.$confirm('确定要删除该名片吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        BusinessApi.businessDelete({ business_card_id: row.business_card_id }).then(res => {
-          if (res.code === 1) {
-            this.$message.success('删除成功');
-            this.loadData();
+        BusinessApi.businessList(params).then(res => {
+          this.loading = false;
+          if (res.data.list) {
+            // 适配后端实际返回的数据结构
+            this.listData = res.data.list.data || [];
+            this.totalDataNumber = res.data.list.total || 0;
           } else {
-            this.$message.error(res.msg || '删除失败');
+            this.listData = [];
+            this.totalDataNumber = 0;
           }
         }).catch(() => {
-          this.$message.error('删除失败');
+          this.loading = false;
+          this.$message.error('获取数据失败');
         });
-      }).catch(() => {});
-    },
+      },
 
-    // 关闭对话框
-    handleClose() {
-      this.$refs.formData.resetFields();
-    },
+      // 加载名片等级列表
+      loadGradeList() {
+        BusinessApi.gradeList().then(res => {
+          this.gradeList = res.data.list || [];
+        }).catch(() => {
+          this.$message.error('获取名片等级失败');
+        });
+      },
 
-    // 提交表单
-    submitForm() {
-      this.$refs.formData.validate((valid) => {
+      // 加载模板列表
+      loadTemplateList() {
+        BusinessApi.businessTemplateList().then(res => {
+          this.templateList = res.data.list.data || [];
+        }).catch(() => {
+          this.$message.error('获取名片模板失败');
+        });
+      },
+
+      // 加载行业列表
+      loadIndustryList() {
+        BusinessApi.industryList().then(res => {
+          // 使用树形结构的数据作为行业列表
+          this.industryList = res.data.list && res.data.list.tree ? res.data.list.tree : [];
+        }).catch(() => {
+          this.$message.error('获取行业列表失败');
+        });
+      },
+
+      // 加载地区列表
+      loadRegionList() {
+        // 参考门店添加页面,调用获取地区数据的API
+        BusinessApi.businessList({}, true).then(res => {
+          if (res.data && res.data.regionData) {
+            this.areaList = res.data.regionData;
+          }
+        }).catch(() => {
+          this.areaList = [];
+        });
+      },
+
+      /*初始化城市id*/
+      initCity() {
+        this.formData.city_id = '';
+        this.formData.region_id = '';
+      },
+
+      /*初始化区id*/
+      initRegion() {
+        this.formData.region_id = '';
+      },
+
+      // 选择用户
+      selectUser() {
+        this.showUserSelector = true;
+      },
+
+      // 用户选择回调
+      handleUserSelect(selectedUsers) {
+        this.showUserSelector = false;
+        if (selectedUsers && selectedUsers.params && selectedUsers.params.length > 0) {
+          const user = selectedUsers.params[0];
+          this.formData.user_id = user.user_id;
+          this.selectedUser = user;
+          // 自动填充姓名和手机号
+          if (user.real_name) {
+            this.formData.name = user.real_name;
+          }
+          if (user.mobile) {
+            this.formData.mobile = user.mobile;
+          }
+        }
+      },
+
+      // 清除选择的用户
+      clearSelectedUser() {
+        this.formData.user_id = '';
+        this.selectedUser = null;
+      },
+
+      // 选择头像
+      selectAvatar() {
+        this.imageSelectType = 'avatar';
+        this.uploadConfig = {
+          total: 1,
+          file_type: 'image'
+        };
+        this.showImageSelector = true;
+      },
+
+      // 选择Logo
+      selectLogo() {
+        this.imageSelectType = 'logo';
+        this.uploadConfig = {
+          total: 1,
+          file_type: 'image'
+        };
+        this.showImageSelector = true;
+      },
+
+      // 图片选择回调
+      handleImageSelect(images) {
+        this.showImageSelector = false;
+        if (images && images.length > 0) {
+          const fileId = images[0].file_id;
+          const fileData = images[0];
+          if (this.imageSelectType === 'avatar') {
+            this.formData.file_id = fileId;
+            this.avatarImage = fileData;
+          } else if (this.imageSelectType === 'logo') {
+            this.formData.logo = fileId;
+            this.logoImage = fileData;
+          }
+        }
+      },
+
+      // 清除头像
+      clearAvatar() {
+        this.formData.file_id = '';
+        this.avatarImage = null;
+      },
+
+      // 清除Logo
+      clearLogo() {
+        this.formData.logo = '';
+        this.logoImage = null;
+      },
+
+      // 搜索
+      search() {
+        this.curPage = 1;
+        this.loadData();
+      },
+
+      // 重置搜索
+      reset() {
+        this.searchForm.search = '';
+        this.curPage = 1;
+        this.loadData();
+      },
+
+      // 添加名片
+      addBusiness() {
+        this.dialogTitle = '添加名片';
+        this.isEdit = false;
+        this.formData = {
+          business_card_id: '',
+          user_id: '',
+          name: '',
+          sex: 10,
+          mobile: '',
+          mobile_phone: '',
+          wechat: '',
+          mailbox: '',
+          phone: '',
+          duties: '',
+          unit: '',
+          address: '',
+          industry_id: '',
+          province_id: '',
+          city_id: '',
+          region_id: '',
+          ilk: '',
+          grade_id: '',
+          is_default: 0,
+          file_id: '',
+          logo: '',
+          logo_width: '',
+          logo_height: '',
+          template_id: '',
+          Introduction: ''
+        };
+        // 清空选择的数据
+        this.selectedUser = null;
+        this.avatarImage = null;
+        this.logoImage = null;
+
+        this.activeTab = 'basic';
+        this.dialogVisible = true;
+      },
+
+      // 编辑名片
+      editBusiness(row) {
+        this.dialogTitle = '编辑名片';
+        this.isEdit = true;
+        this.formData = {
+          business_card_id: row.business_card_id,
+          user_id: row.user_id,
+          name: row.name,
+          sex: row.sex && typeof row.sex === 'object' ?
+            (row.sex === '未知' ? 10 : row.sex === '男' ? 20 : 30) : (row.sex || 10),
+          mobile: row.mobile,
+          mobile_phone: row.mobile_phone,
+          wechat: row.wechat || '',
+          mailbox: row.mailbox || '',
+          phone: row.phone || '',
+          duties: Array.isArray(row.duties) ? row.duties.join(', ') : (row.duties || ''),
+          unit: Array.isArray(row.unit) ? row.unit.join(', ') : (row.unit || ''),
+          address: Array.isArray(row.address) ? row.address.join(', ') : (row.address || ''),
+          industry_id: row.industry_id || '',
+          province_id: row.province_id || '',
+          city_id: row.city_id || '',
+          region_id: row.region_id || '',
+          ilk: row.ilk || '',
+          grade_id: row.grade_id,
+          is_default: row.is_default,
+          file_id: row.file_id || '',
+          logo: row.logo || '',
+          logo_width: row.logo_width || '',
+          logo_height: row.logo_height || '',
+          template_id: row.template_id || '',
+          Introduction: row.Introduction || ''
+        };
+
+        // 设置选中的用户
+        if (row.user) {
+          this.selectedUser = row.user;
+        }
+        console.log(row);
+        // 设置选中的图片
+        if (row.file_id) {
+          this.avatarImage = {
+            file_id: row.file_id,
+            file_path: row.file_path
+          };
+        }
+
+        if (row.logoImage) {
+          this.logoImage = row.logoImage;
+        }
+
+        // 地区信息已经通过formData绑定,无需额外设置
+
+        // 设置选中的模板
+        if (row.template_id) {
+          this.selectedTemplate = this.templateList.find(template => template.template_id == row.template_id) || null;
+        } else {
+          this.selectedTemplate = null;
+        }
+
+        this.activeTab = 'basic';
+        this.dialogVisible = true;
+      },
+
+      // 查看详情
+      viewBusiness(row) {
+        BusinessApi.businessDetail({
+          business_card_id: row.business_card_id
+        }).then(res => {
+          if (res.code === 1) {
+            this.detailData = res.data;
+            this.detailActiveTab = 'basic';
+            this.detailDialogVisible = true;
+          } else {
+            this.$message.error(res.msg || '获取详情失败');
+          }
+        }).catch(() => {
+          this.$message.error('获取详情失败');
+        });
+      },
+
+      // 删除名片
+      deleteBusiness(row) {
+        this.$confirm('确定要删除该名片吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          BusinessApi.businessDelete({
+            business_card_id: row.business_card_id
+          }).then(res => {
+            if (res.code === 1) {
+              this.$message.success('删除成功');
+              this.loadData();
+            } else {
+              this.$message.error(res.msg || '删除失败');
+            }
+          }).catch(() => {
+            this.$message.error('删除失败');
+          });
+        }).catch(() => {});
+      },
+
+      // 关闭对话框
+      handleClose() {
+        this.$refs.formData.resetFields();
+      },
+
+      // 提交表单
+      submitForm() {
+        this.$refs.formData.validate((valid) => {
           if (valid) {
             // 处理数组字段
-            const paramsData = { ...this.formData };
+            const paramsData = {
+              ...this.formData
+            };
             // 处理行业级联值,取最后一级的值并确保为数字类型
             if (Array.isArray(paramsData.industry_id) && paramsData.industry_id.length > 0) {
               paramsData.industry_id = Number(paramsData.industry_id[paramsData.industry_id.length - 1]);
@@ -913,202 +896,203 @@
               paramsData.industry_id = Number(paramsData.industry_id);
             }
 
-          // 处理职务字段
-          if (paramsData.duties && typeof paramsData.duties === 'string') {
-            paramsData.duties = paramsData.duties.split(',').map(item => item.trim()).filter(item => item);
+            // 处理职务字段
+            if (paramsData.duties && typeof paramsData.duties === 'string') {
+              paramsData.duties = paramsData.duties.split(',').map(item => item.trim()).filter(item => item);
+            }
+
+            // 处理单位字段
+            if (paramsData.unit && typeof paramsData.unit === 'string') {
+              paramsData.unit = paramsData.unit.split(',').map(item => item.trim()).filter(item => item);
+            }
+
+            // 处理地址字段
+            if (paramsData.address && typeof paramsData.address === 'string') {
+              paramsData.address = paramsData.address.split(',').map(item => item.trim()).filter(item => item);
+            }
+
+            const params = {
+              business: paramsData
+            };
+
+            if (this.isEdit) {
+              // 编辑
+              BusinessApi.businessEdit(params).then(res => {
+                if (res.code === 1) {
+                  this.$message.success('编辑成功');
+                  this.dialogVisible = false;
+                  this.loadData();
+                } else {
+                  this.$message.error(res.msg || '编辑失败');
+                }
+              }).catch(() => {
+                this.$message.error('编辑失败');
+              });
+            } else {
+              // 添加
+              BusinessApi.businessAdd(params).then(res => {
+                if (res.code === 1) {
+                  this.$message.success('添加成功');
+                  this.dialogVisible = false;
+                  this.loadData();
+                } else {
+                  this.$message.error(res.msg || '添加失败');
+                }
+              }).catch(() => {
+                this.$message.error('添加失败');
+              });
+            }
           }
+        });
+      },
 
-          // 处理单位字段
-          if (paramsData.unit && typeof paramsData.unit === 'string') {
-            paramsData.unit = paramsData.unit.split(',').map(item => item.trim()).filter(item => item);
-          }
+      // 模板选择变更
+      handleTemplateChange(templateId) {
+        this.selectedTemplate = this.templateList.find(template => template.template_id == templateId) || null;
+      },
 
-          // 处理地址字段
-          if (paramsData.address && typeof paramsData.address === 'string') {
-            paramsData.address = paramsData.address.split(',').map(item => item.trim()).filter(item => item);
-          }
+      // 分页相关方法
+      handleSizeChange(val) {
+        this.pageSize = val;
+        this.curPage = 1;
+        this.loadData();
+      },
 
-          const params = {
-            business: paramsData
-          };
-
-          if (this.isEdit) {
-            // 编辑
-            BusinessApi.businessEdit(params).then(res => {
-              if (res.code === 1) {
-                this.$message.success('编辑成功');
-                this.dialogVisible = false;
-                this.loadData();
-              } else {
-                this.$message.error(res.msg || '编辑失败');
-              }
-            }).catch(() => {
-              this.$message.error('编辑失败');
-            });
-          } else {
-            // 添加
-            BusinessApi.businessAdd(params).then(res => {
-              if (res.code === 1) {
-                this.$message.success('添加成功');
-                this.dialogVisible = false;
-                this.loadData();
-              } else {
-                this.$message.error(res.msg || '添加失败');
-              }
-            }).catch(() => {
-              this.$message.error('添加失败');
-            });
-          }
-        }
-      });
-    },
-
-    // 模板选择变更
-    handleTemplateChange(templateId) {
-      this.selectedTemplate = this.templateList.find(template => template.template_id == templateId) || null;
-    },
-
-    // 分页相关方法
-    handleSizeChange(val) {
-      this.pageSize = val;
-      this.curPage = 1;
-      this.loadData();
-    },
-
-    handleCurrentChange(val) {
-      this.curPage = val;
-      this.loadData();
+      handleCurrentChange(val) {
+        this.curPage = val;
+        this.loadData();
+      }
     }
-  }
-};
+  };
 </script>
 
 <style scoped>
-.common-seach-wrap {
-  padding: 20px;
-  background-color: #fff;
-  min-height: calc(100vh - 60px);
-}
+  .common-seach-wrap {
+    padding: 20px;
+    background-color: #fff;
+    min-height: calc(100vh - 60px);
+  }
 
-.search-left {
-  margin-bottom: 20px;
-}
+  .search-left {
+    margin-bottom: 20px;
+  }
 
-.business-card-info {
-  display: flex;
-  align-items: center;
-  text-align: left;
-}
+  .business-card-info {
+    display: flex;
+    align-items: center;
+    text-align: left;
+  }
 
-.avatar {
-  margin-right: 15px;
-}
+  .avatar {
+    margin-right: 15px;
+  }
 
-.avatar-img {
-  width: 50px;
-  height: 50px;
-  border-radius: 50%;
-  object-fit: cover;
-}
+  .avatar-img {
+    width: 50px;
+    height: 50px;
+    border-radius: 50%;
+    object-fit: cover;
+  }
 
-.avatar-placeholder {
-  width: 50px;
-  height: 50px;
-  border-radius: 50%;
-  background-color: #f0f0f0;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  color: #999;
-  font-size: 12px;
-}
+  .avatar-placeholder {
+    width: 50px;
+    height: 50px;
+    border-radius: 50%;
+    background-color: #f0f0f0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: #999;
+    font-size: 12px;
+  }
 
-.info .name {
-  font-weight: bold;
-  font-size: 16px;
-  margin-bottom: 5px;
-}
+  .info .name {
+    font-weight: bold;
+    font-size: 16px;
+    margin-bottom: 5px;
+  }
 
-.info .position,
-.info .company {
-  font-size: 14px;
-  color: #666;
-  margin-bottom: 3px;
-}
+  .info .position,
+  .info .company {
+    font-size: 14px;
+    color: #666;
+    margin-bottom: 3px;
+  }
 
-.pagination {
-  margin-top: 20px;
-  text-align: right;
-}
+  .pagination {
+    margin-top: 20px;
+    text-align: right;
+  }
 
-.dialog-footer {
-  text-align: right;
-}
+  .dialog-footer {
+    text-align: right;
+  }
 
-.template-option {
-  display: flex;
-  align-items: center;
-}
+  .template-option {
+    display: flex;
+    align-items: center;
+  }
 
-.template-thumb {
-  width: 40px;
-  height: 40px;
-  margin-right: 10px;
-  object-fit: cover;
-}
+  .template-thumb {
+    width: 40px;
+    height: 40px;
+    margin-right: 10px;
+    object-fit: cover;
+  }
 
-.template-preview {
-  text-align: center;
-  margin-top: 10px;
-}
+  .template-preview {
+    text-align: center;
+    margin-top: 10px;
+  }
 
-.template-image {
-  max-width: 100%;
-  max-height: 400px;
-  border: 1px solid #eee;
-  border-radius: 4px;
-}
+  .template-image {
+    max-width: 100%;
+    max-height: 400px;
+    border: 1px solid #eee;
+    border-radius: 4px;
+  }
 
-.preview-image {
-  max-width: 200px;
-  max-height: 200px;
-  border: 1px solid #eee;
-  border-radius: 4px;
-}
+  .preview-image {
+    max-width: 200px;
+    max-height: 200px;
+    border: 1px solid #eee;
+    border-radius: 4px;
+  }
 
-.no-image,
-.no-template {
-  color: #999;
-  font-style: italic;
-}
+  .no-image,
+  .no-template {
+    color: #999;
+    font-style: italic;
+  }
 
-.selected-user {
-  margin-top: 10px;
-}
-.img {
-  margin-top: 10px;
-}
+  .selected-user {
+    margin-top: 10px;
+  }
 
-.image-preview {
-  position: relative;
-  display: inline-block;
-  margin-top: 10px;
-}
+  .img {
+    margin-top: 10px;
+  }
 
-.preview-img {
-  width: 100px;
-  height: 100px;
-  border-radius: 4px;
-}
+  .image-preview {
+    position: relative;
+    display: inline-block;
+    margin-top: 10px;
+  }
 
-.delete-icon {
-  position: absolute;
-  top: -8px;
-  right: -8px;
-  background: #fff;
-  border-radius: 50%;
-  cursor: pointer;
-  color: #F56C6C;
-  font-size: 16px;
-}
-</style>
\ No newline at end of file
+  .preview-img {
+    width: 100px;
+    height: 100px;
+    border-radius: 4px;
+  }
+
+  .delete-icon {
+    position: absolute;
+    top: -8px;
+    right: -8px;
+    background: #fff;
+    border-radius: 50%;
+    cursor: pointer;
+    color: #F56C6C;
+    font-size: 16px;
+  }
+</style>
diff --git a/shop_vue/src/views/plus/business/template/add.vue b/shop_vue/src/views/plus/business/template/add.vue
index da24152..876a449 100644
--- a/shop_vue/src/views/plus/business/template/add.vue
+++ b/shop_vue/src/views/plus/business/template/add.vue
@@ -7,7 +7,7 @@
   <div class="user" v-loading="loading">
     <div class="common-form">名片模板添加</div>
     <div class="poster-box d-s-s">
-      <div class="left-box">
+      <div class="left-box" style="width: auto;height: auto;">
         <div v-if="form.backdrop" class="img"><img v-img-url="form.backdrop.src" /></div>
         <div class="userinfo">
           <!-- 头像 -->
@@ -18,7 +18,7 @@
                :style="'width:' + form.avatar.width + 'px;height:' + form.avatar.width + 'px;top:' + form.avatar.top + 'px;left:' + form.avatar.left + 'px;background-color:#f0f0f0;display:flex;align-items:center;justify-content:center;color:#999'">
             <span>头像</span>
           </div>
-          
+
           <!-- Logo -->
           <div v-if="form.logo.display == 1"
                class="logo pa"
@@ -27,21 +27,21 @@
                :style="'width:' + form.logo.width + 'px;height:' + form.logo.height + 'px;top:' + form.logo.top + 'px;left:' + form.logo.left + 'px;'">
             <img v-img-url="form.logo.src" alt="" />
           </div>
-          
+
           <!-- 姓名 -->
           <div class="name pa"
                v-drag="{type:'name',obj:this}"
                :style="'font-size:' + form.name.fontSize + 'px;color:' + form.name.color + ';top:' + form.name.top + 'px;left:' + form.name.left + 'px;'">
             这里是姓名
           </div>
-          
+
           <!-- 手机 -->
           <div class="mobile pa"
                v-drag="{type:'mobile',obj:this}"
                :style="'font-size:' + form.mobile.fontSize + 'px;color:' + form.mobile.color + ';top:' + form.mobile.top + 'px;left:' + form.mobile.left + 'px;'">
             手机:134xxxxxxxx
           </div>
-          
+
           <!-- 公司 -->
           <div v-for="(item, index) in form.unit" :key="'unit' + index"
                :class="'unit' + index + ' pa'"
@@ -49,7 +49,7 @@
                :style="'font-size:' + form.unit[index].fontSize + 'px;color:' + form.unit[index].color + ';top:' + form.unit[index].top + 'px;left:' + form.unit[index].left + 'px;'">
             这是公司
           </div>
-          
+
           <!-- 职位 -->
           <div v-for="(item, index) in form.duties" :key="'duties' + index"
                :class="'duties' + index + ' pa'"
@@ -57,7 +57,7 @@
                :style="'font-size:' + form.duties[index].fontSize + 'px;color:' + form.duties[index].color + ';top:' + form.duties[index].top + 'px;left:' + form.duties[index].left + 'px;'">
             这是职位
           </div>
-          
+
           <!-- 地址 -->
           <div v-for="(item, index) in form.address" :key="'address' + index"
                :class="'address' + index + ' pa'"
@@ -65,28 +65,28 @@
                :style="'font-size:' + form.address[index].fontSize + 'px;color:' + form.address[index].color + ';top:' + form.address[index].top + 'px;left:' + form.address[index].left + 'px;'">
             地址:广西壮族自治区南宁市江南区壮锦大道八桂绿城·龙湖御景-A栋-2单元xxxx号
           </div>
-          
+
           <!-- 微信 -->
           <div class="wechat pa"
                v-drag="{type:'wechat',obj:this}"
                :style="'font-size:' + form.wechat.fontSize + 'px;color:' + form.wechat.color + ';top:' + form.wechat.top + 'px;left:' + form.wechat.left + 'px;'">
             微信:134xxxxxxxx
           </div>
-          
+
           <!-- 邮箱 -->
           <div class="mailbox pa"
                v-drag="{type:'mailbox',obj:this}"
                :style="'font-size:' + form.mailbox.fontSize + 'px;color:' + form.mailbox.color + ';top:' + form.mailbox.top + 'px;left:' + form.mailbox.left + 'px;'">
             邮箱:134xxxxxxxx@.xxx.com
           </div>
-          
+
           <!-- 电话 -->
           <div class="phone pa"
                v-drag="{type:'phone',obj:this}"
                :style="'font-size:' + form.phone.fontSize + 'px;color:' + form.phone.color + ';top:' + form.phone.top + 'px;left:' + form.phone.left + 'px;'">
             电话:xxx-xxx-xxx
           </div>
-          
+
           <!-- 自定义图标 -->
           <div v-for="(item, index) in form.iconL" :key="'iconL' + index"
                :class="'iconL' + index + ' pa icon'"
@@ -96,7 +96,7 @@
           </div>
         </div>
       </div>
-      
+
       <div class="right-box flex-1">
         <el-form size="small" ref="form" :model="form" label-width="150px">
           <!-- 背景图 -->
@@ -104,7 +104,7 @@
             <el-button type="primary" @click="openUpload(1)">上传图片</el-button>
             <div class="tips">尺寸建议:宽750像素 高大于(等于)1200像素</div>
           </el-form-item>
-          
+
           <!-- 头像设置 -->
           <el-form-item label="是否显示头像">
             <el-radio v-model="form.avatar.display" label="1">显示</el-radio>
@@ -124,7 +124,7 @@
               <el-input v-model.number="form.avatar.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
+
           <!-- Logo设置 -->
           <el-form-item label="是否显示Logo">
             <el-radio v-model="form.logo.display" label="1">显示</el-radio>
@@ -151,7 +151,7 @@
               <el-input v-model.number="form.logo.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
+
           <!-- 姓名设置 -->
           <el-form-item label="姓名字体大小" prop="name.fontSize" :rules="[{ required: true, message: '请输入字体大小' }]">
             <el-input v-model.number="form.name.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -166,7 +166,7 @@
               <el-input v-model.number="form.name.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
+
           <!-- 手机设置 -->
           <el-form-item label="手机字体大小" prop="mobile.fontSize" :rules="[{ required: true, message: '请输入字体大小' }]">
             <el-input v-model.number="form.mobile.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -181,8 +181,8 @@
               <el-input v-model.number="form.mobile.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
-          <!-- 图标数量设置 
+
+          <!-- 图标数量设置
           <el-form-item label="图标数量">
             <div class="d-s-r">
               <el-button type="text" @click="editIcon" :disabled="form.iconL.length <= 0">
@@ -194,7 +194,7 @@
               </el-button>
             </div>
           </el-form-item>-->
-          
+
           <!-- 图标设置 -->
           <div v-for="(item, index) in form.iconL" :key="'icon_setting' + index" class="icon-setting">
             <el-form-item :label="'图标' + (index + 1)">
@@ -215,8 +215,8 @@
               </div>
             </el-form-item>
           </div>
-          
-          <!-- 公司数量设置 
+
+          <!-- 公司数量设置
           <el-form-item label="公司数量">
             <div class="d-s-r">
               <el-button type="text" @click="editUnit" :disabled="form.unit.length <= 0">
@@ -228,7 +228,7 @@
               </el-button>
             </div>
           </el-form-item>-->
-          
+
           <!-- 公司设置 -->
           <div v-for="(item, index) in form.unit" :key="'unit_setting' + index" class="unit-setting">
             <el-form-item :label="'公司字体大小'">
@@ -245,8 +245,8 @@
               </div>
             </el-form-item>
           </div>
-          
-          <!-- 职位数量设置 
+
+          <!-- 职位数量设置
           <el-form-item label="职位数量">
             <div class="d-s-r">
               <el-button type="text" @click="editDuties" :disabled="form.duties.length <= 0">
@@ -258,13 +258,13 @@
               </el-button>
             </div>
           </el-form-item>-->
-          
+
           <!-- 职位设置 -->
           <div v-for="(item, index) in form.duties" :key="'duties_setting' + index" class="duties-setting">
             <el-form-item :label="'职位字体大小'">
               <el-input v-model.number="form.duties[index].fontSize" min="12" type="number" class="max-w460"></el-input>
             </el-form-item>
-            <el-form-item :label="'职位字体颜色'"> 
+            <el-form-item :label="'职位字体颜色'">
               <el-color-picker v-model="form.duties[index].color"></el-color-picker>
             </el-form-item>
             <el-form-item :label="'职位位置'">
@@ -275,8 +275,8 @@
               </div>
             </el-form-item>
           </div>
-          
-          <!-- 地址数量设置 
+
+          <!-- 地址数量设置
           <el-form-item label="地址数量">
             <div class="d-s-r">
               <el-button type="text" @click="editAddress" :disabled="form.address.length <= 0">
@@ -288,7 +288,7 @@
               </el-button>
             </div>
           </el-form-item>-->
-          
+
           <!-- 地址设置 -->
           <div v-for="(item, index) in form.address" :key="'address_setting' + index" class="address-setting">
             <el-form-item :label="'地址字体大小'">
@@ -305,7 +305,7 @@
               </div>
             </el-form-item>
           </div>
-          
+
           <!-- 微信设置 -->
           <el-form-item label="微信字体大小">
             <el-input v-model.number="form.wechat.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -320,7 +320,7 @@
               <el-input v-model.number="form.wechat.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
+
           <!-- 邮箱设置 -->
           <el-form-item label="邮箱字体大小">
             <el-input v-model.number="form.mailbox.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -335,7 +335,7 @@
               <el-input v-model.number="form.mailbox.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
+
           <!-- 电话设置 -->
           <el-form-item label="电话字体大小">
             <el-input v-model.number="form.phone.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -350,7 +350,7 @@
               <el-input v-model.number="form.phone.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
             </div>
           </el-form-item>
-          
+
           <!-- 提交按钮 -->
           <div class="common-button-wrapper">
             <el-button @click="back">返回</el-button>
@@ -359,7 +359,7 @@
         </el-form>
       </div>
     </div>
-    
+
     <!-- 上传图片组件 -->
     <Upload v-if="isupload" :isupload="isupload" :type="uploadType" :index="uploadIndex" @returnImgs="returnImgsFunc">上传图片</Upload>
   </div>
@@ -483,7 +483,7 @@
   },
   created() {
     this.loadData();
-    
+
     // 在组件创建后初始化拖拽事件
     this.$nextTick(() => {
       // 通过遍历this.form对象动态调用dragEventArray方法
@@ -499,7 +499,7 @@
         const type = binding.value.type;
         el.classList.add('drag');
         el.classList.add(type);
-        
+
         // 避免指令和dragEventArray方法重复绑定拖拽事件
         // 实际的拖拽逻辑由dragEventArray方法处理
         el.style.position = 'absolute';
@@ -511,50 +511,50 @@
     dragEventArray(type) {
       // 使用类选择器获取对应的元素,更准确高效
       const elements = document.querySelectorAll(`.${type}`);
-        
+
       elements.forEach((el, index) => {
         // 检查是否已经绑定过拖拽事件,避免重复绑定
         if (el.getAttribute('drag-handler') === 'true') return;
         el.setAttribute('drag-handler', 'true');
-        
+
         // 为每个元素添加拖拽事件
         el.onmousedown = (event) => {
           event.preventDefault();
-          
+
           // 计算鼠标按下位置与元素左上角的偏移
           let sentX = event.clientX - el.offsetLeft;
           let sentY = event.clientY - el.offsetTop;
-          
+
           // 获取父容器的边界
           let parent = el.parentElement;
           let l = 0;
           let t = 0;
           let r = parent.offsetWidth - el.offsetWidth;
           let b = parent.offsetHeight - el.offsetHeight;
-          
+
           document.onmousemove = (event) => {
             event.preventDefault();
-            
+
             // 计算新位置
             let slideLeft = event.clientX - sentX;
             let slideTop = event.clientY - sentY;
-            
+
             // 限制在父容器内
             slideLeft <= l && (slideLeft = l);
             slideLeft >= r && (slideLeft = r);
             slideTop <= t && (slideTop = t);
             slideTop >= b && (slideTop = b);
-            
+
             // 更新位置
               if (Array.isArray(this.form[type]) && this.form[type][index]) {
                 // 使用Vue.set确保响应式更新,这样右侧表单的位置输入框也能同步更新
                 this.$set(this.form[type][index], 'left', slideLeft);
                 this.$set(this.form[type][index], 'top', slideTop);
-                
+
                 // 直接更新DOM样式,确保视觉效果即时生效
                 el.style.left = slideLeft + 'px';
                 el.style.top = slideTop + 'px';
-                
+
                 // 强制Vue更新,确保表单输入框同步更新
                 this.$forceUpdate();
               } else { // 使用Vue.set确保响应式更新,这样右侧表单的位置输入框也能同步更新
@@ -567,17 +567,17 @@
                 this.$forceUpdate();
               }
           };
-          
+
           document.onmouseup = () => {
             document.onmousemove = null;
             document.onmouseup = null;
           };
-          
+
           return false;
         };
       });
     },
-    
+
     // 加载数据
     loadData() {
       let self = this;
@@ -599,19 +599,19 @@
           console.error('加载数据失败', error);
         });
     },
-    
+
     // 拖动处理
     dragDiv(x, y, type, index) {
       // 确保坐标值有效
       x = Math.max(0, x || 0);
       y = Math.max(0, y || 0);
-      
+
       // 确保form对象存在
       if (!this.form) {
         console.warn('Form object not initialized');
         return;
       }
-      
+
       switch (type) {
         case 'avatar':
           if (this.form.avatar) {
@@ -711,14 +711,14 @@
           console.warn('Unknown drag type:', type);
       }
     },
-    
+
     // 打开上传
     openUpload(type, index) {
       this.uploadType = type;
       this.uploadIndex = index;
       this.isupload = true;
     },
-    
+
     // 返回图片
     returnImgsFunc(e) {
       if (e && e.length > 0) {
@@ -740,7 +740,7 @@
       }
       this.isupload = false;
     },
-    
+
     // 添加图标
     addIcon() {
       this.form.iconL.push({
@@ -754,14 +754,14 @@
         this.dragEventArray('iconL');
       });
     },
-    
+
     // 减少图标
     editIcon() {
       if (this.form.iconL.length > 0) {
         this.form.iconL.pop();
       }
     },
-    
+
     // 添加公司
     addUnit() {
       const index = this.form.unit.length;
@@ -773,20 +773,20 @@
         fontWeight: 100,
         type: 'text'
       });
-      
+
       // 添加后重新初始化拖拽事件
       this.$nextTick(() => {
         this.dragEventArray('unit');
       });
     },
-    
+
     // 减少公司
     editUnit() {
       if (this.form.unit.length > 0) {
         this.form.unit.pop();
       }
     },
-    
+
     // 添加职位
     addDuties() {
       const index = this.form.duties.length;
@@ -798,20 +798,20 @@
         fontWeight: 400,
         type: 'text'
       });
-      
+
       // 添加后重新初始化拖拽事件
       this.$nextTick(() => {
         this.dragEventArray('duties');
       });
     },
-    
+
     // 减少职位
     editDuties() {
       if (this.form.duties.length > 0) {
         this.form.duties.pop();
       }
     },
-    
+
     // 添加地址
     addAddress() {
       const index = this.form.address.length;
@@ -823,34 +823,34 @@
         fontWeight: 400,
         type: 'text'
       });
-      
+
       // 添加后重新初始化拖拽事件
       this.$nextTick(() => {
         this.dragEventArray('address');
       });
     },
-    
+
     // 减少地址
     editAddress() {
       if (this.form.address.length > 0) {
         this.form.address.pop();
       }
     },
-    
+
     // 提交表单
     onSubmit() {
       let self = this;
       self.$refs.form.validate(valid => {
         if (valid) {
           self.loading = true;
-          
+
           // 确保必要字段存在
           if (!self.form.backdrop.src) {
             self.$message.error('请上传背景图');
             self.loading = false;
             return;
           }
-          
+
           BusinessApi.templateSave({
             template: self.form
           }, true)
@@ -869,7 +869,7 @@
         }
       });
     },
-    
+
     // 返回
     back() {
       this.$router.push('/plus/business/template/index');
@@ -990,4 +990,4 @@
   margin-bottom: 10px;
   border-radius: 4px;
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.2