标签完善
This commit is contained in:
@@ -3,6 +3,6 @@
|
|||||||
* apiEnv 可选:'local' | 'prod'
|
* apiEnv 可选:'local' | 'prod'
|
||||||
*/
|
*/
|
||||||
export default {
|
export default {
|
||||||
apiEnv: 'local'
|
apiEnv: 'prod'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/insight/insight",
|
"path": "pages/champion/champion",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
@@ -286,11 +286,11 @@
|
|||||||
"iconPath": "static/tabbar/team.png",
|
"iconPath": "static/tabbar/team.png",
|
||||||
"selectedIconPath": "static/tabbar/team_active.png",
|
"selectedIconPath": "static/tabbar/team_active.png",
|
||||||
"text": "团队"
|
"text": "团队"
|
||||||
}, {
|
}, {
|
||||||
"pagePath": "pages/insight/insight",
|
"pagePath": "pages/champion/champion",
|
||||||
"iconPath": "static/tabbar/insight.png",
|
"iconPath": "static/tabbar/insight.png",
|
||||||
"selectedIconPath": "static/tabbar/insight_active.png",
|
"selectedIconPath": "static/tabbar/insight_active.png",
|
||||||
"text": "洞察"
|
"text": "销冠"
|
||||||
}, {
|
}, {
|
||||||
"pagePath": "pages/ucenter/ucenter",
|
"pagePath": "pages/ucenter/ucenter",
|
||||||
"iconPath": "static/tabbar/me.png",
|
"iconPath": "static/tabbar/me.png",
|
||||||
|
|||||||
221
pages/champion/champion.vue
Normal file
221
pages/champion/champion.vue
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
<template>
|
||||||
|
<view class="page">
|
||||||
|
<!-- #ifdef APP -->
|
||||||
|
<statusBar></statusBar>
|
||||||
|
<!-- #endif -->
|
||||||
|
|
||||||
|
<!-- 导航栏 -->
|
||||||
|
<uni-nav-bar
|
||||||
|
:fixed="true"
|
||||||
|
:statusBar="true"
|
||||||
|
title="销冠"
|
||||||
|
leftIcon="left"
|
||||||
|
@clickLeft="goBack"
|
||||||
|
color="#333"
|
||||||
|
backgroundColor="#FFFFFF">
|
||||||
|
</uni-nav-bar>
|
||||||
|
|
||||||
|
<view class="content">
|
||||||
|
<!-- AI功能横幅 -->
|
||||||
|
<view class="ai-banner">
|
||||||
|
<text class="banner-text">AI让销售过程和团队管理更透明</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 标签页 -->
|
||||||
|
<view class="tabs">
|
||||||
|
<view
|
||||||
|
class="tab-item"
|
||||||
|
:class="{ active: activeTab === 'survey' }"
|
||||||
|
@click="switchTab('survey')">
|
||||||
|
<text>摸底</text>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="tab-item"
|
||||||
|
:class="{ active: activeTab === 'practice' }"
|
||||||
|
@click="switchTab('practice')">
|
||||||
|
<text>陪练</text>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="tab-item"
|
||||||
|
:class="{ active: activeTab === 'battle' }"
|
||||||
|
@click="switchTab('battle')">
|
||||||
|
<text>实战</text>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="tab-item"
|
||||||
|
:class="{ active: activeTab === 'quality' }"
|
||||||
|
@click="switchTab('quality')">
|
||||||
|
<text>质检</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 摸底内容 -->
|
||||||
|
<scroll-view
|
||||||
|
class="tab-content"
|
||||||
|
scroll-y
|
||||||
|
v-if="activeTab === 'survey'">
|
||||||
|
<view class="champion-card">
|
||||||
|
<text class="champion-title">摸底</text>
|
||||||
|
<text class="champion-desc">这里是摸底相关的内容展示区域</text>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
|
||||||
|
<!-- 陪练内容 -->
|
||||||
|
<scroll-view
|
||||||
|
class="tab-content"
|
||||||
|
scroll-y
|
||||||
|
v-if="activeTab === 'practice'">
|
||||||
|
<view class="champion-card">
|
||||||
|
<text class="champion-title">陪练</text>
|
||||||
|
<text class="champion-desc">这里是陪练相关的内容展示区域</text>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
|
||||||
|
<!-- 实战内容 -->
|
||||||
|
<scroll-view
|
||||||
|
class="tab-content"
|
||||||
|
scroll-y
|
||||||
|
v-if="activeTab === 'battle'">
|
||||||
|
<view class="champion-card">
|
||||||
|
<text class="champion-title">实战</text>
|
||||||
|
<text class="champion-desc">这里是实战相关的内容展示区域</text>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
|
||||||
|
<!-- 质检内容 -->
|
||||||
|
<scroll-view
|
||||||
|
class="tab-content"
|
||||||
|
scroll-y
|
||||||
|
v-if="activeTab === 'quality'">
|
||||||
|
<view class="champion-card">
|
||||||
|
<text class="champion-title">质检</text>
|
||||||
|
<text class="champion-desc">这里是质检相关的内容展示区域</text>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// #ifdef APP
|
||||||
|
import statusBar from "@/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar";
|
||||||
|
// #endif
|
||||||
|
export default {
|
||||||
|
// #ifdef APP
|
||||||
|
components: {
|
||||||
|
statusBar
|
||||||
|
},
|
||||||
|
// #endif
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeTab: 'survey'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goBack() {
|
||||||
|
uni.navigateBack();
|
||||||
|
},
|
||||||
|
switchTab(tab) {
|
||||||
|
this.activeTab = tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
page {
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding-top: 88rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AI功能横幅 */
|
||||||
|
.ai-banner {
|
||||||
|
background-color: #E3F2FD;
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-text {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #1976D2;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 标签页 */
|
||||||
|
.tabs {
|
||||||
|
display: flex;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-bottom: 1px solid #E0E0E0;
|
||||||
|
padding: 0 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-item {
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-item text {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-item.active text {
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-item.active::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 32rpx;
|
||||||
|
right: 32rpx;
|
||||||
|
height: 4rpx;
|
||||||
|
background-color: #007AFF;
|
||||||
|
border-radius: 2rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 内容区域 */
|
||||||
|
.tab-content {
|
||||||
|
height: calc(100vh - 300rpx);
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.champion-card {
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 32rpx;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 400rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.champion-title {
|
||||||
|
font-size: 36rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.champion-desc {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -254,49 +254,108 @@
|
|||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
<!-- 标签管理 -->
|
<!-- 标签管理 -->
|
||||||
<view class="tag-management" v-if="activeTab === 'tag'">
|
|
||||||
<!-- 标签列表 -->
|
|
||||||
<scroll-view
|
<scroll-view
|
||||||
class="tag-list"
|
class="service-status-list"
|
||||||
scroll-y
|
scroll-y
|
||||||
v-if="tagViewMode === 'list'">
|
v-if="activeTab === 'tag' && tagViewMode === 'list'"
|
||||||
<view class="tag-list-header">
|
@scrolltolower="onTagListReachBottom">
|
||||||
<text class="tag-list-total">共{{ tagList.length }}条</text>
|
<view class="service-status-toolbar">
|
||||||
<view class="tag-list-btn" @click="showAddTag">
|
<text class="toolbar-total">共{{ tagTotal }}条</text>
|
||||||
|
<input
|
||||||
|
class="toolbar-input"
|
||||||
|
v-model="tagQuery.tagType"
|
||||||
|
placeholder="标签分类"
|
||||||
|
placeholder-style="color: #b0b0b0"
|
||||||
|
confirm-type="search"
|
||||||
|
@confirm="onTagListSearch"
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
class="toolbar-input"
|
||||||
|
v-model="tagQuery.tagName"
|
||||||
|
placeholder="标签名称"
|
||||||
|
placeholder-style="color: #b0b0b0"
|
||||||
|
confirm-type="search"
|
||||||
|
@confirm="onTagListSearch"
|
||||||
|
/>
|
||||||
|
<view class="toolbar-actions">
|
||||||
|
<view class="toolbar-btn toolbar-btn--refresh" @click="onTagListRefresh">
|
||||||
|
<uni-icons type="refresh" size="18" color="#2A68FF"></uni-icons>
|
||||||
|
</view>
|
||||||
|
<view class="toolbar-btn toolbar-btn--add" @click="showAddTag">
|
||||||
<uni-icons type="plus" size="18" color="#2A68FF"></uni-icons>
|
<uni-icons type="plus" size="18" color="#2A68FF"></uni-icons>
|
||||||
<text>添加标签</text>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view
|
||||||
|
class="service-card tag-card-item"
|
||||||
|
v-for="(item, index) in tagList"
|
||||||
|
:key="index"
|
||||||
|
:class="{ 'tag-card-item--active': selectedTagItem && selectedTagItem.id === item.id }">
|
||||||
|
<view class="card-header">
|
||||||
|
<view class="staff-info" @click.stop="onTagItemClick(item)">
|
||||||
|
<view class="staff-avatar">
|
||||||
|
<text class="avatar-text">{{ (item.tagName || item.name || '标').charAt(0) }}</text>
|
||||||
|
</view>
|
||||||
|
<text class="staff-name">{{ item.tagName || item.name || '未命名标签' }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="tag-card-action-btn" @click.stop="onTagActionBtnClick(item)">
|
||||||
|
<uni-icons type="more-filled" size="20" color="#999"></uni-icons>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="customer-info" @click.stop="onTagItemClick(item)">
|
||||||
|
<text class="customer-name" v-if="item.industry">所属行业:{{ item.industry }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="customer-tags" v-if="item.tagDetail || item.detail || item.remark" @click.stop="onTagItemClick(item)">
|
||||||
|
<view
|
||||||
|
class="tag-item tag-blue"
|
||||||
|
v-if="item.tagDetail || item.detail">
|
||||||
|
<text>详情:{{ item.tagDetail || item.detail }}</text>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="tag-item tag-orange"
|
||||||
|
v-if="item.remark">
|
||||||
|
<text>备注:{{ item.remark }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 操作菜单 -->
|
||||||
<view
|
<view
|
||||||
class="tag-card"
|
class="tag-action-menu"
|
||||||
v-for="(item, index) in tagList"
|
v-if="selectedTagItem && selectedTagItem.id === item.id && showTagActionMenu"
|
||||||
:key="index">
|
@click.stop>
|
||||||
<view class="tag-card-header">
|
<view class="tag-action-menu-item" @click="editTag(item)">
|
||||||
<text class="tag-card-name">{{ item.name }}</text>
|
<text>编辑</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="tag-card-content">
|
<view class="tag-action-menu-divider"></view>
|
||||||
<view class="tag-card-item" v-if="item.detail">
|
<view class="tag-action-menu-item tag-action-menu-item--danger" @click="deleteTag(item)">
|
||||||
<text class="tag-card-label">详情:</text>
|
<text>删除</text>
|
||||||
<text class="tag-card-value">{{ item.detail }}</text>
|
|
||||||
</view>
|
|
||||||
<view class="tag-card-item" v-if="item.remark">
|
|
||||||
<text class="tag-card-label">备注:</text>
|
|
||||||
<text class="tag-card-value">{{ item.remark }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="tag-list-empty" v-if="!tagList.length">
|
</view>
|
||||||
|
<!-- 遮罩层,点击关闭菜单 -->
|
||||||
|
<view
|
||||||
|
class="tag-action-menu-mask"
|
||||||
|
v-if="showTagActionMenu"
|
||||||
|
@click="closeTagActionMenu">
|
||||||
|
</view>
|
||||||
|
<view class="service-status-empty" v-if="!tagLoading && !tagList.length">
|
||||||
<text>暂无标签</text>
|
<text>暂无标签</text>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="service-status-loading-more" v-if="tagLoading && tagList.length">
|
||||||
|
<text>正在加载更多...</text>
|
||||||
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
|
<!-- 标签管理 - 添加/编辑标签表单 -->
|
||||||
|
<view class="tag-management" v-if="activeTab === 'tag' && (tagViewMode === 'add' || tagViewMode === 'edit')">
|
||||||
<!-- 添加标签表单 -->
|
<!-- 添加标签表单 -->
|
||||||
<scroll-view
|
<scroll-view
|
||||||
class="tag-form"
|
class="tag-form"
|
||||||
scroll-y
|
scroll-y>
|
||||||
v-if="tagViewMode === 'add'">
|
|
||||||
<view class="form-card">
|
<view class="form-card">
|
||||||
<view class="form-item">
|
<view class="form-item" v-if="tagViewMode === 'add'">
|
||||||
<text class="form-item__label">所属行业</text>
|
<text class="form-item__label">所属行业</text>
|
||||||
<input
|
<input
|
||||||
class="form-item__input"
|
class="form-item__input"
|
||||||
@@ -305,7 +364,7 @@
|
|||||||
placeholder-style="color: #9ca3af"
|
placeholder-style="color: #9ca3af"
|
||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="form-item tag-select-wrapper form-item--half">
|
<view class="form-item tag-select-wrapper">
|
||||||
<text class="form-item__label">标签分类</text>
|
<text class="form-item__label">标签分类</text>
|
||||||
<view
|
<view
|
||||||
class="tag-select"
|
class="tag-select"
|
||||||
@@ -347,7 +406,7 @@
|
|||||||
<view class="form-item">
|
<view class="form-item">
|
||||||
<text class="form-item__label">详情</text>
|
<text class="form-item__label">详情</text>
|
||||||
<textarea
|
<textarea
|
||||||
class="form-item__textarea"
|
class="form-item__textarea form-item__textarea--detail"
|
||||||
v-model="tagForm.detail"
|
v-model="tagForm.detail"
|
||||||
placeholder="请输入详情"
|
placeholder="请输入详情"
|
||||||
placeholder-style="color: #9ca3af"
|
placeholder-style="color: #9ca3af"
|
||||||
@@ -357,20 +416,28 @@
|
|||||||
<view class="form-item">
|
<view class="form-item">
|
||||||
<text class="form-item__label">备注</text>
|
<text class="form-item__label">备注</text>
|
||||||
<textarea
|
<textarea
|
||||||
class="form-item__textarea"
|
class="form-item__textarea form-item__textarea--remark"
|
||||||
v-model="tagForm.remark"
|
v-model="tagForm.remark"
|
||||||
placeholder="请输入备注"
|
placeholder="请输入备注"
|
||||||
placeholder-style="color: #9ca3af"
|
placeholder-style="color: #9ca3af"
|
||||||
:maxlength="500"
|
:maxlength="500"
|
||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-item__label">是否启用</text>
|
||||||
|
<switch
|
||||||
|
:checked="tagForm.enabled"
|
||||||
|
@change="onEnabledChange"
|
||||||
|
color="#007AFF"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="form-actions">
|
<view class="form-actions">
|
||||||
<view class="form-btn form-btn--cancel" @click="cancelAddTag">
|
<view class="form-btn form-btn--cancel" @click="cancelAddTag">
|
||||||
<text class="form-btn__text">取消</text>
|
<text class="form-btn__text">取消</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="form-btn form-btn--save" @click="saveTag">
|
<view class="form-btn form-btn--save" @click="saveTag">
|
||||||
<text class="form-btn__text">保存</text>
|
<text class="form-btn__text">{{ tagViewMode === 'edit' ? '更新' : '保存' }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
@@ -432,17 +499,32 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
},
|
},
|
||||||
serviceStatusList: [],
|
serviceStatusList: [],
|
||||||
// 标签管理
|
// 标签管理
|
||||||
tagViewMode: 'list', // 'list' 或 'add'
|
tagViewMode: 'list', // 'list' 或 'add' 或 'edit'
|
||||||
tagList: [],
|
tagList: [],
|
||||||
|
tagLoading: false,
|
||||||
|
tagTotal: 0,
|
||||||
|
tagPage: {
|
||||||
|
current: 1,
|
||||||
|
size: 10
|
||||||
|
},
|
||||||
|
tagQuery: {
|
||||||
|
industry: '',
|
||||||
|
tagType: '',
|
||||||
|
tagName: ''
|
||||||
|
},
|
||||||
tagForm: {
|
tagForm: {
|
||||||
|
id: '',
|
||||||
industry: '家居行业',
|
industry: '家居行业',
|
||||||
tagType: '',
|
tagType: '',
|
||||||
name: '',
|
name: '',
|
||||||
detail: '',
|
detail: '',
|
||||||
remark: ''
|
remark: '',
|
||||||
|
enabled: true
|
||||||
},
|
},
|
||||||
tagTypeOptions: ["接待客户", "质检SOP", "客户画像"],
|
tagTypeOptions: ["接待客户", "质检SOP", "客户画像"],
|
||||||
showTagTypeDropdown: false
|
showTagTypeDropdown: false,
|
||||||
|
selectedTagItem: null,
|
||||||
|
showTagActionMenu: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad() {
|
onLoad() {
|
||||||
@@ -458,6 +540,7 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
this.fetchServiceStatusList();
|
this.fetchServiceStatusList();
|
||||||
} else if (tab === 'tag') {
|
} else if (tab === 'tag') {
|
||||||
this.tagViewMode = 'list';
|
this.tagViewMode = 'list';
|
||||||
|
// 当进入标签管理页面时,请求接口填充数据
|
||||||
this.fetchTagList();
|
this.fetchTagList();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -774,31 +857,190 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 标签管理相关方法
|
// 标签管理相关方法
|
||||||
fetchTagList() {
|
onTagListSearch() {
|
||||||
// TODO: 从API获取标签列表
|
if (this.activeTab !== 'tag') {
|
||||||
// 目前使用模拟数据
|
this.activeTab = 'tag';
|
||||||
|
}
|
||||||
|
this.tagPage.current = 1;
|
||||||
|
this.fetchTagList({ force: true });
|
||||||
|
},
|
||||||
|
onTagListRefresh() {
|
||||||
|
this.tagPage.current = 1;
|
||||||
|
this.fetchTagList({ force: true });
|
||||||
|
},
|
||||||
|
onTagListReachBottom() {
|
||||||
|
// 已在加载中或全部加载完成则不再触发
|
||||||
|
if (this.tagLoading) return;
|
||||||
|
if (this.tagList.length >= this.tagTotal) return;
|
||||||
|
this.tagPage.current += 1;
|
||||||
|
this.fetchTagList();
|
||||||
|
},
|
||||||
|
async fetchTagList({ force = false } = {}) {
|
||||||
|
if (this.tagLoading && !force) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.tagLoading = true;
|
||||||
|
try {
|
||||||
|
const queryParams = {
|
||||||
|
current: this.tagPage.current,
|
||||||
|
size: this.tagPage.size
|
||||||
|
};
|
||||||
|
const trimmedTagType = this.tagQuery?.tagType?.trim();
|
||||||
|
const trimmedTagName = this.tagQuery?.tagName?.trim();
|
||||||
|
if (trimmedTagType) {
|
||||||
|
queryParams.tagType = trimmedTagType;
|
||||||
|
}
|
||||||
|
if (trimmedTagName) {
|
||||||
|
queryParams.tagName = trimmedTagName;
|
||||||
|
}
|
||||||
|
const queryString = Object.keys(queryParams)
|
||||||
|
.map(key => `${key}=${encodeURIComponent(queryParams[key])}`)
|
||||||
|
.join('&');
|
||||||
|
const url = `${getApiUrl('/api/industryTags/list')}?${queryString}`;
|
||||||
|
const res = await uni.request({
|
||||||
|
url,
|
||||||
|
method: 'GET',
|
||||||
|
timeout: 10000
|
||||||
|
});
|
||||||
|
if (res.statusCode === 200 && res.data && res.data.success) {
|
||||||
|
const records = Array.isArray(res.data.data) ? res.data.data : [];
|
||||||
|
// 第一页或强制刷新时重置列表,否则追加
|
||||||
|
if (this.tagPage.current === 1 || force) {
|
||||||
|
this.tagList = records;
|
||||||
|
} else {
|
||||||
|
this.tagList = this.tagList.concat(records);
|
||||||
|
}
|
||||||
|
this.tagTotal = Number(res.data.total) || 0;
|
||||||
|
} else {
|
||||||
this.tagList = [];
|
this.tagList = [];
|
||||||
|
this.tagTotal = 0;
|
||||||
|
uni.showToast({
|
||||||
|
title: res.data?.message || '获取标签列表失败',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取标签列表失败:', error);
|
||||||
|
uni.showToast({
|
||||||
|
title: '获取标签列表失败,请稍后重试',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
this.tagLoading = false;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
showAddTag() {
|
showAddTag() {
|
||||||
this.tagViewMode = 'add';
|
this.tagViewMode = 'add';
|
||||||
this.showTagTypeDropdown = false;
|
this.showTagTypeDropdown = false;
|
||||||
this.tagForm = {
|
this.tagForm = {
|
||||||
|
id: '',
|
||||||
industry: '家居行业',
|
industry: '家居行业',
|
||||||
tagType: '',
|
tagType: '',
|
||||||
name: '',
|
name: '',
|
||||||
detail: '',
|
detail: '',
|
||||||
remark: ''
|
remark: '',
|
||||||
|
enabled: true
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
onTagItemClick(item) {
|
||||||
|
// 点击卡片内容区域,不做任何操作(保留用于其他可能的交互)
|
||||||
|
},
|
||||||
|
onTagActionBtnClick(item) {
|
||||||
|
// 如果已经选中当前项,则关闭菜单
|
||||||
|
if (this.selectedTagItem && this.selectedTagItem.id === item.id && this.showTagActionMenu) {
|
||||||
|
this.closeTagActionMenu();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示菜单
|
||||||
|
this.selectedTagItem = item;
|
||||||
|
this.showTagActionMenu = true;
|
||||||
|
},
|
||||||
|
closeTagActionMenu() {
|
||||||
|
this.showTagActionMenu = false;
|
||||||
|
this.selectedTagItem = null;
|
||||||
|
},
|
||||||
|
editTag(item) {
|
||||||
|
this.closeTagActionMenu();
|
||||||
|
this.tagViewMode = 'edit';
|
||||||
|
this.showTagTypeDropdown = false;
|
||||||
|
this.tagForm = {
|
||||||
|
id: item.id || '',
|
||||||
|
industry: item.industry || '家居行业',
|
||||||
|
tagType: item.tagType || '',
|
||||||
|
name: item.tagName || item.name || '',
|
||||||
|
detail: item.tagDetail || item.detail || '',
|
||||||
|
remark: item.remark || '',
|
||||||
|
enabled: item.enabled !== undefined ? item.enabled : (item.isEnabled !== undefined ? item.isEnabled : true)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
async deleteTag(item) {
|
||||||
|
this.closeTagActionMenu();
|
||||||
|
const tagId = item.id;
|
||||||
|
if (!tagId) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '无法获取标签ID',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uni.showModal({
|
||||||
|
title: '确认删除',
|
||||||
|
content: `确定要删除标签"${item.tagName || item.name || '未命名标签'}"吗?`,
|
||||||
|
success: async (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
try {
|
||||||
|
uni.showLoading({
|
||||||
|
title: '删除中...'
|
||||||
|
});
|
||||||
|
|
||||||
|
const deleteUrl = getApiUrl(`/api/industryTags/delete/${tagId}`);
|
||||||
|
const deleteRes = await uni.request({
|
||||||
|
url: deleteUrl,
|
||||||
|
method: 'DELETE',
|
||||||
|
timeout: 10000
|
||||||
|
});
|
||||||
|
|
||||||
|
uni.hideLoading();
|
||||||
|
|
||||||
|
if (deleteRes.statusCode === 200 && deleteRes.data && deleteRes.data.success) {
|
||||||
|
uni.showToast({
|
||||||
|
title: deleteRes.data?.message || '删除成功',
|
||||||
|
icon: 'success'
|
||||||
|
});
|
||||||
|
// 删除成功后刷新列表
|
||||||
|
this.tagPage.current = 1;
|
||||||
|
this.fetchTagList({ force: true });
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: deleteRes.data?.message || '删除失败',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
uni.hideLoading();
|
||||||
|
console.error('删除标签失败:', error);
|
||||||
|
uni.showToast({
|
||||||
|
title: '删除失败,请重试',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
cancelAddTag() {
|
cancelAddTag() {
|
||||||
this.tagViewMode = 'list';
|
this.tagViewMode = 'list';
|
||||||
this.showTagTypeDropdown = false;
|
this.showTagTypeDropdown = false;
|
||||||
this.tagForm = {
|
this.tagForm = {
|
||||||
|
id: '',
|
||||||
industry: '家居行业',
|
industry: '家居行业',
|
||||||
tagType: '',
|
tagType: '',
|
||||||
name: '',
|
name: '',
|
||||||
detail: '',
|
detail: '',
|
||||||
remark: ''
|
remark: '',
|
||||||
|
enabled: true
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
toggleTagTypeDropdown() {
|
toggleTagTypeDropdown() {
|
||||||
@@ -811,6 +1053,9 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
closeTagTypeDropdown() {
|
closeTagTypeDropdown() {
|
||||||
this.showTagTypeDropdown = false;
|
this.showTagTypeDropdown = false;
|
||||||
},
|
},
|
||||||
|
onEnabledChange(e) {
|
||||||
|
this.tagForm.enabled = e.detail.value;
|
||||||
|
},
|
||||||
async saveTag() {
|
async saveTag() {
|
||||||
// 表单验证
|
// 表单验证
|
||||||
if (!this.tagForm.name || !this.tagForm.name.trim()) {
|
if (!this.tagForm.name || !this.tagForm.name.trim()) {
|
||||||
@@ -823,7 +1068,7 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
uni.showLoading({
|
uni.showLoading({
|
||||||
title: "保存中..."
|
title: this.tagViewMode === 'edit' ? "更新中..." : "保存中..."
|
||||||
});
|
});
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
@@ -831,12 +1076,25 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
tagType: this.tagForm.tagType?.trim() || '',
|
tagType: this.tagForm.tagType?.trim() || '',
|
||||||
tagName: this.tagForm.name.trim(),
|
tagName: this.tagForm.name.trim(),
|
||||||
tagDetail: this.tagForm.detail?.trim() || '',
|
tagDetail: this.tagForm.detail?.trim() || '',
|
||||||
remark: this.tagForm.remark?.trim() || ''
|
remark: this.tagForm.remark?.trim() || '',
|
||||||
|
enabled: this.tagForm.enabled !== undefined ? this.tagForm.enabled : true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 如果是编辑模式,添加id
|
||||||
|
if (this.tagViewMode === 'edit' && this.tagForm.id) {
|
||||||
|
payload.id = this.tagForm.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据模式选择不同的接口
|
||||||
|
const url = this.tagViewMode === 'edit'
|
||||||
|
? getApiUrl('/api/industryTags/update')
|
||||||
|
: getApiUrl('/api/industryTags/add');
|
||||||
|
|
||||||
|
const method = this.tagViewMode === 'edit' ? 'PUT' : 'POST';
|
||||||
|
|
||||||
const res = await uni.request({
|
const res = await uni.request({
|
||||||
url: getApiUrl('/api/industryTags/add'),
|
url: url,
|
||||||
method: "POST",
|
method: method,
|
||||||
data: payload,
|
data: payload,
|
||||||
header: {
|
header: {
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
@@ -847,19 +1105,20 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
const { statusCode, data } = res;
|
const { statusCode, data } = res;
|
||||||
if (statusCode === 200 && data && (data.success || data.code === 200)) {
|
if (statusCode === 200 && data && (data.success || data.code === 200)) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: data?.message || "保存成功",
|
title: data?.message || (this.tagViewMode === 'edit' ? "更新成功" : "保存成功"),
|
||||||
icon: "success"
|
icon: "success"
|
||||||
});
|
});
|
||||||
// 保存成功后返回列表并刷新
|
// 保存成功后返回列表并刷新
|
||||||
this.tagViewMode = 'list';
|
this.tagViewMode = 'list';
|
||||||
this.fetchTagList();
|
this.tagPage.current = 1;
|
||||||
|
this.fetchTagList({ force: true });
|
||||||
} else {
|
} else {
|
||||||
throw new Error(data?.message || "保存失败");
|
throw new Error(data?.message || (this.tagViewMode === 'edit' ? "更新失败" : "保存失败"));
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("保存标签失败:", error);
|
console.error("保存标签失败:", error);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: error?.message || "保存失败,请重试",
|
title: error?.message || (this.tagViewMode === 'edit' ? "更新失败,请重试" : "保存失败,请重试"),
|
||||||
icon: "none"
|
icon: "none"
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
@@ -999,6 +1258,18 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
padding: 32rpx;
|
padding: 32rpx;
|
||||||
margin-bottom: 24rpx;
|
margin-bottom: 24rpx;
|
||||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
|
overflow: visible;
|
||||||
|
/* 确保左右padding完全对称,所有内容都在padding范围内 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 标签卡片特殊处理 */
|
||||||
|
.service-card.tag-card-item {
|
||||||
|
padding-left: 32rpx;
|
||||||
|
padding-right: 32rpx;
|
||||||
|
padding-top: 32rpx;
|
||||||
|
padding-bottom: 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-header {
|
.card-header {
|
||||||
@@ -1006,11 +1277,20 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: 20rpx;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
/* 确保头部内容在卡片padding范围内 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.staff-info {
|
.staff-info {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.staff-avatar {
|
.staff-avatar {
|
||||||
@@ -1022,6 +1302,10 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-right: 16rpx;
|
margin-right: 16rpx;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-text {
|
.avatar-text {
|
||||||
@@ -1052,6 +1336,13 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: 20rpx;
|
||||||
gap: 12rpx;
|
gap: 12rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding: 0;
|
||||||
|
/* 确保标签容器不会超出卡片padding范围 */
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.customer-info {
|
.customer-info {
|
||||||
@@ -1059,6 +1350,13 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 8rpx;
|
gap: 8rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding: 0;
|
||||||
|
/* 确保信息容器不会超出卡片padding范围 */
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.customer-name,
|
.customer-name,
|
||||||
@@ -1070,6 +1368,12 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
.tag-item {
|
.tag-item {
|
||||||
padding: 8rpx 16rpx;
|
padding: 8rpx 16rpx;
|
||||||
border-radius: 8rpx;
|
border-radius: 8rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
word-wrap: break-word;
|
||||||
|
word-break: break-all;
|
||||||
|
/* 确保标签项不会超出卡片padding范围,允许换行 */
|
||||||
|
display: inline-block;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-blue {
|
.tag-blue {
|
||||||
@@ -1305,11 +1609,11 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
|
|
||||||
.tag-select-wrapper {
|
.tag-select-wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 50%;
|
width: 75%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-select {
|
.tag-select {
|
||||||
flex: 1;
|
width: 100%;
|
||||||
height: 88rpx;
|
height: 88rpx;
|
||||||
background-color: #f9fafb;
|
background-color: #f9fafb;
|
||||||
border-radius: 12rpx;
|
border-radius: 12rpx;
|
||||||
@@ -1325,9 +1629,7 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100%;
|
top: 100%;
|
||||||
left: 160rpx;
|
left: 160rpx;
|
||||||
width: calc(100% - 160rpx);
|
right: 0;
|
||||||
min-width: 260rpx;
|
|
||||||
max-width: none;
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
box-shadow: 0 12rpx 30rpx rgba(15, 23, 42, 0.1);
|
box-shadow: 0 12rpx 30rpx rgba(15, 23, 42, 0.1);
|
||||||
@@ -1408,95 +1710,89 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 标签管理样式 */
|
/* 标签管理样式 - 添加表单 */
|
||||||
.tag-management {
|
.tag-management {
|
||||||
height: calc(100vh - 300rpx);
|
height: calc(100vh - 300rpx);
|
||||||
background-color: #F5F5F5;
|
background-color: #F5F5F5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-list {
|
/* 标签卡片操作菜单 */
|
||||||
height: 100%;
|
|
||||||
padding: 24rpx 32rpx;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-list-header {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 24rpx;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-list-total {
|
|
||||||
font-size: 26rpx;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-list-btn {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8rpx;
|
|
||||||
padding: 12rpx 24rpx;
|
|
||||||
background-color: #E3F2FD;
|
|
||||||
border-radius: 12rpx;
|
|
||||||
color: #2A68FF;
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-card {
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
padding: 32rpx;
|
|
||||||
margin-bottom: 24rpx;
|
|
||||||
margin-left: 0;
|
|
||||||
margin-right: 0;
|
|
||||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-card-header {
|
|
||||||
margin-bottom: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-card-name {
|
|
||||||
font-size: 32rpx;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-card-content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 12rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-card-item {
|
.tag-card-item {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-card-action-btn {
|
||||||
|
width: 60rpx;
|
||||||
|
height: 60rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
align-items: center;
|
||||||
gap: 8rpx;
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
flex-grow: 0;
|
||||||
|
position: relative;
|
||||||
|
padding: 0;
|
||||||
|
/* 确保按钮在卡片padding范围内,距离右边框32rpx */
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-card-label {
|
.tag-card-action-btn uni-icons {
|
||||||
font-size: 26rpx;
|
display: block;
|
||||||
color: #666;
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-card-value {
|
.tag-card-action-btn:active {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-action-menu {
|
||||||
|
position: absolute;
|
||||||
|
top: 60rpx;
|
||||||
|
right: 32rpx;
|
||||||
|
width: 160rpx;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.15);
|
||||||
|
z-index: 100;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-action-menu-item {
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
line-height: 1.6;
|
text-align: center;
|
||||||
width: 40%;
|
background-color: #FFFFFF;
|
||||||
max-width: 40%;
|
|
||||||
word-wrap: break-word;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-list-empty {
|
.tag-action-menu-item:active {
|
||||||
padding: 48rpx 0;
|
background-color: #F5F5F5;
|
||||||
text-align: center;
|
}
|
||||||
color: #999;
|
|
||||||
font-size: 28rpx;
|
.tag-action-menu-item--danger {
|
||||||
|
color: #FF5722;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-action-menu-divider {
|
||||||
|
height: 1rpx;
|
||||||
|
background-color: #E0E0E0;
|
||||||
|
margin: 0 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-action-menu-mask {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
z-index: 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-form {
|
.tag-form {
|
||||||
@@ -1516,4 +1812,19 @@ import { getApiUrl } from "@/common/config.js";
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form-item__textarea--detail {
|
||||||
|
min-height: 100rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item__textarea--remark {
|
||||||
|
min-height: 88rpx;
|
||||||
|
height: 88rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 开关样式 */
|
||||||
|
.form-item switch {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user