| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696 |
- <template>
- <div class="app-container">
- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
- <!-- <el-radio-group v-model="queryParams.dimension" @change="handleDimensionChange">-->
- <!-- <el-radio-button label="user">用户维度</el-radio-button>-->
- <!-- <el-radio-button label="sales">销售维度</el-radio-button>-->
- <!-- <el-radio-button label="company">公司维度</el-radio-button>-->
- <!-- </el-radio-group>-->
- <!-- <el-form-item label="公司名" prop="companyId">-->
- <!-- <el-select filterable v-model="queryParams.companyId" placeholder="请选择公司名"-->
- <!-- clearable size="small">-->
- <!-- <el-option-->
- <!-- v-for="item in companys"-->
- <!-- :key="item.companyId"-->
- <!-- :label="item.companyName"-->
- <!-- :value="item.companyId"-->
- <!-- />-->
- <!-- </el-select>-->
- <!-- </el-form-item>-->
- <el-form-item label="所属部门" prop="deptId">
- <treeselect style="width:205.4px" v-model="queryParams.deptId" :options="deptTreeOptions" :show-count="true" placeholder="请选择所属部门" />
- </el-form-item>
- <el-form-item label="项目" prop="project">
- <el-select filterable v-model="queryParams.project" placeholder="请选择项目"
- clearable size="small">
- <el-option
- v-for="item in projectList"
- :key="item.dictValue"
- :label="item.dictLabel"
- :value="item.dictValue"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="训练营" prop="trainingCampId">
- <el-select filterable v-model="queryParams.trainingCampId" placeholder="请选择训练营"
- clearable size="small" @change="handleCampChange">
- <el-option
- v-for="item in camps"
- :key="item.dictValue"
- :label="item.dictLabel"
- :value="item.dictValue"
- />
- </el-select>
- </el-form-item>
- <el-form-item>
- <treeselect style="width: 220px" v-model="queryParams.periodId" :options="deptOptions"
- clearable :show-count="true" placeholder="请选择归属营期" value-consists-of="LEAF_PRIORITY"
- :normalizer="normalizer" />
- </el-form-item>
- <el-form-item>
- <el-form-item label="看课时间" prop="createTime">
- <el-date-picker v-model="createTime" size="small" style="width: 220px" value-format="yyyy-MM-dd"
- type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
- @change="xdChange"></el-date-picker>
- </el-form-item>
- <el-form-item label="下单时间" prop="createTime">
- <el-date-picker v-model="orderTime" size="small" style="width: 220px" value-format="yyyy-MM-dd"
- type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
- @change="ydChange"></el-date-picker>
- </el-form-item>
- </el-form-item>
- <el-form-item label="会员ID" prop="userId">
- <el-input v-model="queryParams.userId" placeholder="请输入会员ID" clearable size="small" />
- </el-form-item>
- <el-form-item label="会员手机号" prop="userPhone">
- <el-input v-model="queryParams.userPhone" placeholder="请输入会员手机号" clearable size="small" />
- </el-form-item>
- <el-form-item label="会员昵称" prop="nickName">
- <el-input v-model="queryParams.nickName" placeholder="请输入会员昵称" clearable size="small" />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
- </el-form-item>
- </el-form>
- <el-table v-loading="loading" border :data="packageList">
- <el-table-column label="会员id" align="center" prop="userId" />
- <el-table-column label="会员昵称" align="center" prop="nickName" />
- <el-table-column label="所属销售" align="center" prop="salesName" />
- <el-table-column label="所属销售部门" align="center" prop="salesDept"/>
- <el-table-column label="所属销售公司" align="center" prop="salesCompany"/>
- <el-table-column label="训练营" align="center" prop="trainingCampName"/>
- <el-table-column label="营期" align="center" prop="periodName"/>
- <el-table-column label="小节名称" align="center" prop="videoTitle" />
- <el-table-column label="看课状态" align="center" prop="watchStatus" />
- <el-table-column label="播放时长" align="center" prop="duration" />
- <el-table-column label="看课时间" align="center" prop="courseTime" />
- <el-table-column label="完课时间" align="center" prop="finishTime" />
- <el-table-column label="答题状态" align="center" prop="answerStatus" />
- <el-table-column label="红包金额" align="center" prop="redPacketAmount" />
- <el-table-column label="历史疗法订单数" align="center" prop="historyOrderCount" />
- </el-table>
- <!-- <div class="total-summary">-->
- <!-- <span class="total-title">总计:</span>-->
- <!-- <span class="total-item">完课数: {{ calculatedTotalData.finishedCount }}</span>-->
- <!-- <span class="total-item">未完课: {{ calculatedTotalData.unfinishedCount }}</span>-->
- <!-- <span class="total-item">完课率: {{ calculatedTotalData.completionRate }}</span>-->
- <!-- <span class="total-item">未看数: {{ calculatedTotalData.notWatchedCount }}</span>-->
- <!-- <span class="total-item">未答题人数: {{ calculatedTotalData.notAnsweredCount }}</span>-->
- <!-- <span class="total-item">红包金额: {{ calculatedTotalData.redPacketAmount }}</span>-->
- <!-- <span class="total-item">历史疗法订单数: {{ calculatedTotalData.historyOrderCount }}</span>-->
- <!-- </div>-->
- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
- @pagination="getList" />
- <!-- 添加或修改套餐包对话框 -->
- <!-- <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
- <el-form ref="form" :model="form" :rules="rules" label-width="110px">
- <el-form-item label="套餐包名称" prop="packageName">
- <el-input v-model="form.packageName" placeholder="请输入套餐包名称" />
- </el-form-item>
- <el-form-item label="排序号" prop="sort">
- <el-input-number v-model="form.sort" :min="0" label="排序号"></el-input-number>
- </el-form-item>
- <el-form-item label="状态">
- <el-radio-group v-model="form.status">
- <el-radio
- v-for="dict in statusOptions"
- :key="dict.dictValue"
- :label="parseInt(dict.dictValue)"
- >{{dict.dictLabel}}</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="价格配置" prop="priceJson">
- <el-table :data="priceJson" :cell-style="{ textAlign: 'center' }" :header-cell-style="{textAlign: 'center'}" >
- <el-table-column label="子套餐标题" prop="title" width="150px">
- <template slot-scope="scope">
- <el-input v-model="scope.row.title" ></el-input>
- </template>
- </el-table-column>
- <el-table-column label="签约时长/日" prop="duration" width="150px">
- <template slot-scope="scope">
- <el-input-number v-model="scope.row.duration" controls-position="right" :min="0" size="small"></el-input-number>
- </template>
- </el-table-column>
- <el-table-column label="价格/元" prop="price" width="150px">
- <template slot-scope="scope">
- <el-input-number v-model="scope.row.price" controls-position="right" :min="0" size="small"></el-input-number>
- </template>
- </el-table-column>
- <el-table-column label="状态" prop="status">
- <template slot-scope="scope">
- <el-switch v-model="scope.row.status" active-color="#13ce66" inactive-color="#ff4949" ></el-switch>
- </template>
- </el-table-column>
- <el-table-column label="操作">
- <template slot-scope="scope">
- <el-button @click="deleteRow(scope.$index)" size="mini" type="text" v-if="priceJson.length>1">删除</el-button>
- <el-button @click="addRow" size="mini" type="text" >新增</el-button>
- </template>
- </el-table-column>
- </el-table>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button type="primary" @click="submitForm">确 定</el-button>
- <el-button @click="cancel">取 消</el-button>
- </div>
- </el-dialog> -->
- </div>
- </template>
- <script>
- import {
- listPackage,
- getPackage,
- delPackage,
- addPackage,
- updatePackage,
- exportPackage,
- userReport, watchLogReport
- } from "@/api/store/package";
- import { getAllFollowTempName } from "@/api/store/followTemp";
- import { allIcd } from "@/api/store/icd";
- import Editor from '@/components/Editor/wang.vue';
- import Material from '@/components/Material/index.vue';
- import Treeselect from "@riophae/vue-treeselect";
- import "@riophae/vue-treeselect/dist/vue-treeselect.css";
- import { listStore,getCampList,getPeriodList} from "@/api/store/storeProduct";
- import { getAllCateList } from "@/api/store/packageCate";
- import { Loading } from 'element-ui';
- import {getCompanyList} from "@/api/company/company";
- import {selectDeptTree} from "@/api/company/companyDept";
- export default {
- name: "WatchlogReport",
- components: {Treeselect},
- watch: {
- imageArr: function (val) {
- this.form.imgUrl = val.join(',')
- },
- photoArr: function (val) {
- this.form.images = val.join(',')
- },
- // 监听公司选择变化,动态加载对应部门
- // 'queryParams.companyId': {
- // handler(newVal) {
- // this.queryParams.deptId = null; // 清空已选择的部门
- // const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}');
- // const companyId = newVal || userInfo.companyId;
- // if (companyId) {
- // this.getTreeselect(companyId); // 根据公司ID获取部门树
- // } else {
- // this.deptTreeOptions = []; // 如果没有选择公司,则清空部门选项
- // }
- // }
- // }
- },
- data() {
- return {
- normalizer: function(node) {
- return {
- id: node.id || node.dictValue,
- label: node.label || node.dictLabel,
- children: node.children
- }
- },
- columnConfig: {
- user: [
- { prop: 'userId', label: '会员id', width: 120 },
- { prop: 'nickName', label: '用户昵称', width: 120 },
- { prop: 'salesName', label: '所属销售', width: 120 },
- { prop: 'salesDept', label: '所属销售部门', width: 120, condition: () => this.showDeptNameColumn },
- { prop: 'salesCompany', label: '所属销售公司', width: 120 },
- { prop: 'trainingCampName', label: '训练营', width: 150 },
- { prop: 'periodName', label: '营期', width: 150 },
- { prop: 'videoTitle', label: '小节名称', width: 100 },
- { prop: 'watchStatus', label: '看课状态', width: 100 },
- { prop: 'duration', label: '播放时长', width: 120 },
- { prop: 'courseTime', label: '看课时间', width: 100 },
- { prop: 'finishTime', label: '完课时间', width: 100 },
- { prop: 'answerStatus', label: '答题状态', width: 100 },
- { prop: 'redPacketAmount', label: '红包金额', width: 120 },
- { prop: 'historyOrderCount', label: '历史疗法订单数', width: 120 }
- ],
- sales: [
- { prop: 'salesName', label: '销售', width: 120 },
- { prop: 'userCount', label: '会员数', width: 120 },
- { prop: 'onlineUserCount', label: '当前线上会员数', width: 120 },
- { prop: 'salesDept', label: '所属销售部门', width: 100, sortable: true },
- { prop: 'salesCompany', label: '所属销售公司', width: 120, sortable: true },
- { prop: 'trainingCampName', label: '训练营', width: 100, sortable: true },
- { prop: 'periodName', label: '营期', width: 100, sortable: true },
- { prop: 'videoTitle', label: '课程小节', width: 100, sortable: true },
- { prop: 'finishedCount', label: '完课数', width: 100, sortable: true },
- { prop: 'unfinishedCount', label: '未完课', width: 120, sortable: true },
- { prop: 'completionRate', label: '完课率', width: 100, sortable: true },
- { prop: 'courseTime', label: '发课时间', width: 100, sortable: true },
- { prop: 'notWatchedCount', label: '未看数', width: 100, sortable: true },
- { prop: 'notAnsweredCount', label: '未答题人数', width: 100, sortable: true },
- { prop: 'redPacketAmount', label: '红包金额', width: 120 },
- { prop: 'historyOrderCount', label: '历史疗法订单数', width: 120 }
- ],
- company: [
- { prop: 'salesDept', label: '销售部门', width: 120 },
- { prop: 'salesCount', label: '销售数', width: 120 },
- { prop: 'userCount', label: '会员数', width: 120 },
- { prop: 'onlineUserCount', label: '当前会员上线数', width: 100, sortable: true },
- { prop: 'salesCompany', label: '所属销售公司', width: 100, sortable: true },
- { prop: 'trainingCampName', label: '训练营', width: 120, sortable: true },
- { prop: 'periodName', label: '营期', width: 100, sortable: true },
- { prop: 'videoTitle', label: '课程小节', width: 100, sortable: true },
- { prop: 'finishedCount', label: '完课数', width: 100, sortable: true },
- { prop: 'unfinishedCount', label: '未完课', width: 120, sortable: true },
- { prop: 'completionRate', label: '完课率', width: 100, sortable: true },
- { prop: 'courseTime', label: '发课时间', width: 100, sortable: true },
- { prop: 'notWatchedCount', label: '未看数', width: 100, sortable: true },
- { prop: 'notAnsweredCount', label: '未答题人数', width: 100, sortable: true },
- { prop: 'redPacketAmount', label: '红包金额', width: 120 },
- { prop: 'historyOrderCount', label: '历史疗法订单数', width: 120 }
- ]
- },
- showDeptNameColumn: false,
- projectList: [],
- companys: [],
- camps: [],
- deptOptions : [],
- deptTreeOptions: [],
- uploadUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS",
- photoArr: [],
- productTypeOptions: [],
- storeId: null,
- storeOPtions: [],
- totalMoney: 0.00,
- drugOpen: false,
- checkList: ['1'],
- drugList: [],
- productJson: [],
- calculatedTotalData: {
- finishedCount: 0,
- unfinishedCount: 0,
- completionRate: 0,
- notWatchedCount: 0,
- notAnsweredCount: 0,
- redPacketAmount: 0,
- historyOrderCount: 0
- },
- describeJson: { usageMethod: "", forPeople: "", tabootPeople: "", use: "" },
- icdList: [],
- show: {
- open: false,
- },
- priceJson: [
- { title: "套餐1", duration: "0", price: "0", status: true },
- ],
- // 遮罩层
- loading: true,
- // 导出遮罩层
- exportLoading: false,
- // 选中数组
- ids: [],
- // 非单个禁用
- single: true,
- // 非多个禁用
- multiple: true,
- // 显示搜索条件
- showSearch: true,
- startTime : null,
- endTime : null,
- // 总条数
- total: 0,
- createTime: null,
- orderTime: null,
- // 套餐包表格数据
- packageList: [],
- // 弹出层标题
- title: "",
- // 是否显示弹出层
- open: false,
- // 状态字典
- tempOptions: [],
- statusOptions: [],
- payTypeOptions: [],
- orOptions: [],
- packageTypeOptions: [],
- diseaseTypeOptions: [],
- packageSubTypeOptions: [],
- solarTermOptions: [],
- // 查询参数
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- packageName: null,
- sort: null,
- priceJson: null,
- status: null,
- isDel: null,
- companyId:null,
- project:null,
- trainingCampId:null,
- periodId:null,
- sTime: null,
- eTime: null,
- orderSTime: null,
- orderETime: null,
- deptId: null,
- dimension: 'user'
- },
- // 表单参数
- form: {},
- };
- },
- computed: {
- // // 计算属性:根据当前维度返回动态列
- // dynamicColumns() {
- // const dimension = this.queryParams.dimension || 'user';
- // return this.columnConfig[dimension] || this.columnConfig.user;
- // }
- },
- created() {
- console.log('公司id是否存在',this.$store.state.user.user)
- this.getTreeselect(this.$store.state.user.user.companyId);
- this.$nextTick(() => {
- console.log('handleDimensionChange 方法是否存在:', typeof this.handleDimensionChange);
- console.log('所有方法:', Object.keys(this));
- });
- // 在调用 getList 前确保 dimension 参数存在
- if (!this.queryParams.dimension) {
- this.queryParams.dimension = 'user';
- }
- getCampList().then(response => {
- this.camps = response.data.list
- if (this.camps != null && this.camps.length > 0) {
- this.companyId = this.camps[0].dictValue;
- }
- this.camps.push({companyId: "-1", companyName: "无"})
- });
- getCompanyList().then(response => {
- this.companys = response.data;
- if (this.companys != null && this.companys.length > 0) {
- this.companyId = this.companys[0].companyId;
- }
- this.companys.push({companyId: "-1", companyName: "无"})
- });
- this.getList();
- this.getDicts("sys_company_status").then(response => {
- this.statusOptions = response.data;
- });
- this.getDicts("sys_company_or").then(response => {
- this.isDelOptions = response.data;
- this.orOptions = response.data;
- });
- this.getDicts("sys_package_pay_type").then(response => {
- this.payTypeOptions = response.data;
- });
- this.getDicts("sys_product_type").then(response => {
- this.productTypeOptions = response.data;
- });
- this.getDicts("sys_package_type").then(response => {
- this.packageTypeOptions = response.data;
- });
- this.getDicts("sys_package_sub_type").then(response => {
- this.packageSubTypeOptions = response.data;
- });
- this.getDicts("sys_course_project").then(e => {
- this.projectList = e.data;
- })
- // this.getDicts("sys_prescribe_disease_type").then(response => {
- // this.diseaseTypeOptions = response.data;
- // });
- },
- methods: {
- handleDimensionChange: function(val) {
- console.log('维度切换到:', val);
- // 重置分页
- this.queryParams.pageNum = 1;
- // 重新获取数据
- this.getList();
- },
- calculateTotals() {
- // 重置总计数据
- this.calculatedTotalData = {
- finishedCount: 0,
- unfinishedCount: 0,
- completionRate: 0,
- notWatchedCount: 0,
- notAnsweredCount: 0,
- redPacketAmount: 0,
- historyOrderCount: 0
- };
- // 遍历当前页数据计算总和
- this.packageList.forEach(item => {
- this.calculatedTotalData.finishedCount += Number(item.finishedCount) || 0;
- this.calculatedTotalData.unfinishedCount += Number(item.unfinishedCount) || 0;
- this.calculatedTotalData.completionRate += Number(item.completionRate) || 0;
- this.calculatedTotalData.notWatchedCount += Number(item.notWatchedCount) || 0;
- this.calculatedTotalData.notAnsweredCount += Number(item.notAnsweredCount) || 0;
- this.calculatedTotalData.redPacketAmount += Number(item.redPacketAmount) || 0;
- this.calculatedTotalData.historyOrderCount += Number(item.historyOrderCount) || 0;
- });
- },
- getTreeselect(companyId) {
- const query = { companyId: companyId };
- selectDeptTree(query).then((response) => {
- this.deptTreeOptions = response.data;
- });
- },
- compute(){
- this.totalMoney=0;
- var that=this;
- this.drugList.forEach (function (value) {
- that.totalMoney += value.money;
- });
- that.totalMoney=that.totalMoney.toFixed(2);
- },
- // saveData(row) {
- // // 在这里可以进行数据保存操作,比如将数据提交到后端进行保存
- // console.log("保存数据", row);
- // },
- /** 查询套餐包列表 */
- getList() {
- this.loading = true;
- // 添加调试日志,确认参数
- console.log('请求参数:', this.queryParams);
- watchLogReport(this.queryParams).then(response => {
- this.packageList = response.rows;
- this.total = response.total;
- this.calculateTotals();
- this.loading = false;
- // 检查是否有数据且 deptName 字段有值,决定是否显示该列
- if (this.packageList && this.packageList.length > 0) {
- this.showDeptNameColumn = this.packageList.some(item => item.deptName);
- } else {
- this.showDeptNameColumn = false;
- }
- });
- },
- /** 训练营变更处理 */
- handleCampChange(val) {
- this.queryParams.trainingCampId = val;
- this.queryParams.periodId = null; // 清空已选择的营期
- if (val) {
- // 获取对应的营期数据
- this.getPeriodByCamp(val);
- } else {
- // 如果清空训练营,也清空营期选项
- this.deptOptions = [];
- }
- // 触发查询
- this.handleQuery();
- },
- /** 根据训练营获取营期数据 */
- getPeriodByCamp(campId) {
- const param = { campId: campId };
- getPeriodList(param).then((response) => {
- console.log('接口返回数据:', response);
- console.log('营期列表数据:', response.data.list);
- this.deptOptions = response.data.list || [];
- console.log('deptOptions 已赋值:', this.deptOptions);
- }).catch(error => {
- console.error('获取营期数据失败:', error);
- this.deptOptions = [];
- });
- },
- // 取消按钮
- cancel() {
- this.open = false;
- this.reset();
- },
- // 表单重置
- reset() {
- this.form = {
- packageId: null,
- packageName: null,
- sort: null,
- productJson: null,
- status: 0,
- createTime: null,
- orderTime: null,
- updateTime: null,
- isDel: null,
- payType: ["1"],
- isShow: "1",
- packageType: "1",
- num: null,
- price: null,
- sales: null,
- diseaseType: null,
- tags: null,
- packageSubType: "1",
- describeJson: null,
- productType: null,
- totalPrice: null,
- inquiryPrice: null,
- productPrice: null,
- cycle: null,
- duration: null,
- imgUrl: null,
- images: null,
- storeId: null,
- recipeType: null,
- counts: null,
- followNum: null,
- secondName: null,
- };
- this.photoArr = [];
- this.resetForm("form");
- },
- /** 搜索按钮操作 */
- handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.resetForm("queryForm");
- this.handleQuery();
- // 清空所有时间相关变量
- this.createTime = null;
- this.orderTime = null;
- this.startTime = null;
- this.endTime = null;
- this.queryParams.sTime = null;
- this.queryParams.orderSTime= null;
- this.queryParams.eTime = null;
- this.queryParams.orderETime= null;
- },
- xdChange() {
- if (this.createTime != null) {
- this.queryParams.sTime = this.createTime[0];
- this.queryParams.eTime = this.createTime[1];
- } else {
- this.queryParams.sTime = null;
- this.queryParams.eTime = null;
- }
- },
- ydChange() {
- if (this.orderTime != null) {
- this.queryParams.orderSTime = this.orderTime[0];
- this.queryParams.orderETime = this.orderTime[1];
- } else {
- this.queryParams.orderSTime = null;
- this.queryParams.orderETime = null;
- }
- }
- }
- };
- </script>
- <style>
- .icon-button {
- border-radius: 0;
- }
- .avatar-uploader .el-upload {
- border: 1px dashed #d9d9d9;
- border-radius: 6px;
- cursor: pointer;
- position: relative;
- overflow: hidden;
- }
- .avatar-uploader .el-upload:hover {
- border-color: #409EFF;
- }
- .avatar-uploader-icon {
- font-size: 28px;
- color: #8c939d;
- width: 150px;
- height: 150px;
- line-height: 150px !important;
- text-align: center;
- }
- .total-summary {
- margin-top: 15px;
- padding: 15px 20px;
- background: linear-gradient(135deg, #f5f7fa 0%, #e4e7f4 100%);
- border: 1px solid #dcdfe6;
- border-radius: 4px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- }
- .total-title {
- font-weight: bold;
- font-size: 16px;
- color: #303133;
- margin-right: 20px;
- flex-shrink: 0;
- }
- .total-item {
- margin-right: 25px;
- padding: 5px 10px;
- background: white;
- border-radius: 3px;
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
- display: inline-block;
- margin-bottom: 5px;
- font-size: 13px;
- color: #606266;
- }
- .total-item::before {
- content: "";
- display: inline-block;
- width: 3px;
- height: 3px;
- background: #409eff;
- border-radius: 50%;
- margin-right: 5px;
- vertical-align: middle;
- }
- /* 响应式处理 */
- @media (max-width: 768px) {
- .total-summary {
- flex-direction: column;
- align-items: flex-start;
- }
- .total-title {
- margin-bottom: 10px;
- }
- .total-item {
- margin-right: 10px;
- margin-bottom: 8px;
- }
- }
- </style>
|