| | |
| | | --> |
| | | <div class="common-seach-wrap"> |
| | | <div class="search-left"> |
| | | <el-button type="primary" @click="addBusiness">添加名片</el-button> |
| | | <el-button type="primary" v-auth="'/plus/business/business/add'" @click="addBusiness">添加名片</el-button> |
| | | </div> |
| | | |
| | | <el-form :inline="true" :model="searchForm" class="demo-form-inline"> |
| | |
| | | <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> |
| | |
| | | <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" @click="viewBusiness(scope.row)">查看</el-button> |
| | | <el-button type="text" @click="editBusiness(scope.row)">编辑</el-button> |
| | | <el-button type="text" @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> |
| | |
| | | |
| | | <!-- 分页 --> |
| | | <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> |
| | |
| | | <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> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系电话" prop="mobile"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="微信"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="座机"> |
| | |
| | | <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> |
| | |
| | | </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" /> |
| | |
| | | </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> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="名片类型"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="微信"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="座机"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="是否默认"> |
| | |
| | | </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> |
| | |
| | | </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]); |
| | |
| | | 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> |
| | | .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> |