From f9902f7a3b79d22bde9f199263ac36de26816470 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期五, 08 五月 2026 14:46:10 +0800
Subject: [PATCH] 测试完成
---
src/views/sfstatistics/propaganda/index.vue | 1679 +++++++++++++++++++++++++++++------------------------------
1 files changed, 820 insertions(+), 859 deletions(-)
diff --git a/src/views/sfstatistics/propaganda/index.vue b/src/views/sfstatistics/propaganda/index.vue
index 6d5b549..781ac98 100644
--- a/src/views/sfstatistics/propaganda/index.vue
+++ b/src/views/sfstatistics/propaganda/index.vue
@@ -1,951 +1,912 @@
<template>
- <div class="Questionnairemanagement">
- <!-- 宸︿晶鏍� -->
- <div class="sidecolumn">
- <div class="sidecolumn-top">
- <div class="top-wj">鎮h�呮潵婧�</div>
- </div>
+ <div class="education-statistics">
+ <!-- 鎼滅储鍖哄煙 -->
+ <div class="search-container">
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ label-width="100px"
+ >
+ <el-form-item label="缁熻缁村害" prop="groupType">
+ <el-select
+ v-model="queryParams.groupType"
+ placeholder="璇烽�夋嫨缁熻缁村害"
+ @change="handleGroupTypeChange"
+ style="width: 180px"
+ >
+ <el-option label="鎸夌瀹ょ粺璁�" value="1"></el-option>
+ <el-option label="鎸夌梾鍖虹粺璁�" value="2"></el-option>
+ </el-select>
+ <el-select
+ style="margin-left: 10px"
+ v-if="queryParams.groupType == '2'"
+ v-model="queryParams.hospitaldistrictcodes"
+ size="medium"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨鐥呭尯"
+ >
+ <el-option
+ v-for="item in flatArrayhospit"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ <el-select
+ v-else-if="queryParams.groupType == '1'"
+ v-model="queryParams.deptcodes"
+ size="medium"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨绉戝"
+ >
+ <el-option
+ v-for="item in flatArraydept"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
- <div class="bottom-fl">
- <el-tabs
- tab-position="right"
- v-model="activeName"
- @tab-click="handleClick"
- >
- <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
- <el-tab-pane label="浣忛櫌" name="bhospitalized"></el-tab-pane>
- <el-tab-pane label="鍦ㄩ櫌" name="Inhospital"></el-tab-pane>
- <el-tab-pane label="闂ㄨ瘖" name="outpatient"></el-tab-pane>
- <el-tab-pane label="浣撴" name="physical"></el-tab-pane>
- </el-tabs>
- </div>
+ <el-form-item label="灏辫瘖绫诲瀷" prop="hospType">
+ <el-select
+ v-model="queryParams.hospType"
+ placeholder="璇烽�夋嫨灏辫瘖绫诲瀷"
+ clearable
+ style="width: 150px"
+ >
+ <el-option label="闂ㄨ瘖" value="1"></el-option>
+ <el-option label="鍑洪櫌" value="2"></el-option>
+ <el-option label="涓撶梾" value="3"></el-option>
+ <el-option label="鍏ラ櫌/澶栭儴瀵煎叆" value="4"></el-option>
+ <el-option label="浣撴" value="5"></el-option>
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="鍏ラ櫌鏃堕棿" prop="dateRange">
+ <el-date-picker
+ v-model="queryParams.dateRange"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ style="width: 280px"
+ :picker-options="datePickerOptions"
+ >
+ </el-date-picker>
+ </el-form-item>
+
+ <el-form-item label="瀹f暀鍙戦�佹椂闂�" prop="visittime">
+ <el-date-picker
+ v-model="queryParams.visittime"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ style="width: 180px"
+ >
+ </el-date-picker>
+ </el-form-item>
+
+ <el-form-item>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="handleQuery"
+ :loading="loading"
+ >鎼滅储</el-button
+ >
+ <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
+ >閲嶇疆</el-button
+ >
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="medium"
+ @click="handleExport"
+ v-hasPermi="['system:statistics:export']"
+ >瀵煎嚭</el-button
+ >
+ </el-form-item>
+ </el-form>
</div>
- <!-- 鍙充晶鏁版嵁 -->
- <div class="leftvlue">
- <div class="leftvlue-top">
- <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
- <el-tab-pane name="Local">
- <span class="mulsz" slot="label">鎸夊嚭闄㈢梾鍖虹粺璁� </span>
- </el-tab-pane>
- <el-tab-pane name="sharing">
- <span class="mulsz" slot="label">鎸夊嚭闄㈢瀹ょ粺璁� </span>
- </el-tab-pane>
- </el-tabs>
- </div>
- <div class="leftvlue-bg">
- <el-row :gutter="20">
- <!--鏍囩鏁版嵁-->
- <el-col :span="24" :xs="24">
- <el-form
- :model="queryParams"
- ref="queryForm"
+
+ <!-- 缁熻鏁版嵁姒傝 -->
+ <div class="summary-cards" v-if="statisticsData.total > 0">
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <div class="summary-card">
+ <div class="card-title">鍙戦�佹�婚噺</div>
+ <div class="card-value">{{ totalCount }}</div>
+ <div class="card-desc">鎬诲鏁欏彂閫佹鏁�</div>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="summary-card">
+ <div class="card-title">鍙戦�佹垚鍔熼噺</div>
+ <div class="card-value">{{ sendSuccessCount }}</div>
+ <div class="card-desc">宸叉垚鍔熷彂閫佺殑瀹f暀</div>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="summary-card">
+ <div class="card-title">宸茶閲�</div>
+ <div class="card-value">{{ readCount }}</div>
+ <div class="card-desc">鎮h�呭凡闃呰鐨勫鏁�</div>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="summary-card">
+ <div class="card-title">骞冲潎鍙戦�佹垚鍔熺巼</div>
+ <div class="card-value">{{ avgSendSuccessRate }}%</div>
+ <div class="card-desc">鏁翠綋鍙戦�佹垚鍔熸瘮渚�</div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+
+ <!-- 鏁版嵁琛ㄦ牸 -->
+ <div class="table-container">
+ <el-table
+ v-loading="loading"
+ :data="statisticsData.list"
+ :border="true"
+ style="width: 100%"
+ :default-sort="{ prop: 'totalCount', order: 'descending' }"
+ @sort-change="handleSortChange"
+ >
+ <el-table-column prop="groupName" label="鍒嗙粍鍚嶇О" align="center" fixed>
+ <!-- <template slot-scope="scope">
+ <span class="group-name" @click="handleGroupDetail(scope.row)">
+ {{ scope.row.groupName }}
+ </span>
+ </template> -->
+ </el-table-column>
+
+ <el-table-column
+ prop="groupCode"
+ label="鍒嗙粍缂栫爜"
+ align="center"
+ ></el-table-column>
+
+ <el-table-column
+ prop="totalCount"
+ label="瀹f暀鍙戦�佹�婚噺"
+ align="center"
+ sortable="custom"
+ >
+ <template slot-scope="scope">
+ <span class="count-highlight">{{ scope.row.totalCount }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ prop="sendSuccessCount"
+ label="鍙戦�佹垚鍔熼噺"
+ align="center"
+ sortable="custom"
+ >
+ <template slot-scope="scope">
+ <span class="success-count">{{ scope.row.sendSuccessCount }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ prop="readCount"
+ label="宸茶閲�"
+ align="center"
+ sortable="custom"
+ >
+ <template slot-scope="scope">
+ <span class="read-count">{{ scope.row.readCount }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ prop="sendSuccessRate"
+ label="鍙戦�佹垚鍔熺巼"
+ align="center"
+ width="200"
+ sortable="custom"
+ >
+ <template slot-scope="scope">
+ <el-progress
+ :percentage="scope.row.sendSuccessRate * 100"
+ :stroke-width="8"
+ :show-text="false"
+ style="width: 80px; margin: 0 auto"
+ :color="getRateColor(scope.row.sendSuccessRate)"
+ />
+ <span class="rate-text"
+ >{{ (scope.row.sendSuccessRate * 100).toFixed(1) }}%</span
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column
+ prop="readRate"
+ label="宸茶鐜�"
+ align="center"
+ width="200"
+ sortable="custom"
+ >
+ <template slot-scope="scope">
+ <el-progress
+ :percentage="scope.row.readRate * 100"
+ :stroke-width="8"
+ :show-text="false"
+ style="width: 80px; margin: 0 auto"
+ :color="getRateColor(scope.row.readRate)"
+ />
+ <span class="rate-text"
+ >{{ (scope.row.readRate * 100).toFixed(1) }}%</span
+ >
+ </template>
+ </el-table-column>
+
+ <!-- <el-table-column label="鎿嶄綔" align="center" width="200" fixed="right">
+ <template slot-scope="scope">
+ <el-button
+ type="text"
size="small"
- :inline="true"
- v-show="showSearch"
- label-width="98px"
+ @click="handleDetail(scope.row)"
+ icon="el-icon-document"
+ v-hasPermi="['system:statistics:detail']"
+ >璇︾粏鏁版嵁</el-button
>
- <el-form-item label="鍖婚櫌" prop="userName">
- <el-select
- v-model="queryParams.value1"
- placeholder="榛樿鏄璐﹀彿鎵�灞炲尰闄�"
- >
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="鍑洪櫌鐥呭尯" prop="userName">
- <el-select v-model="queryParams.value2" placeholder="璇烽�夋嫨">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="绠$悊鏂规" prop="userName">
- <el-select v-model="queryParams.value3" placeholder="璇烽�夋嫨">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="鍑洪櫌鏃ユ湡" prop="userName">
- <el-date-picker
- v-model="queryParams.valuetime1"
- align="right"
- type="date"
- placeholder="閫夋嫨鏃ユ湡"
- :picker-options="pickerOptionsa"
- >
- </el-date-picker>
- </el-form-item>
- <el-form-item label="璁″垝鎵ц鏃ユ湡" prop="userName">
- <el-date-picker
- v-model="queryParams.valuetime2"
- align="right"
- type="date"
- placeholder="閫夋嫨鏃ユ湡"
- :picker-options="pickerOptions"
- >
- </el-date-picker>
- </el-form-item>
- <el-form-item label="瀹為檯瀹屾垚鏃ユ湡" prop="userName">
- <el-date-picker
- v-model="queryParams.valuetime2"
- align="right"
- type="date"
- placeholder="閫夋嫨鏃ユ湡"
- :picker-options="pickerOptions"
- >
- </el-date-picker>
- </el-form-item>
+ <el-button
+ type="text"
+ size="small"
+ @click="handleExportGroup(scope.row)"
+ icon="el-icon-download"
+ v-hasPermi="['system:statistics:export']"
+ >瀵煎嚭</el-button
+ >
+ </template>
+ </el-table-column> -->
+ </el-table>
- <el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="medium"
- @click="handleQuery"
- >鎼滅储</el-button
- >
- <el-button
- icon="el-icon-refresh"
- size="medium"
- @click="resetQuery"
- >閲嶇疆</el-button
- >
- </el-form-item>
- </el-form>
+ <!-- 鍒嗛〉 -->
+ <pagination
+ v-show="statisticsData.total > 0"
+ :total="statisticsData.total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ </div>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- type="primary"
- plain
- icon="el-icon-plus"
- size="medium"
- @click="addladeltag"
- v-hasPermi="['system:user:add']"
- >鏂板</el-button
- >
- </el-col>
+ <!-- 鍒嗙粍璇︽儏寮圭獥 -->
+ <el-dialog
+ :title="detailTitle"
+ :visible.sync="detailVisible"
+ width="80%"
+ :before-close="handleCloseDetail"
+ >
+ <div v-loading="detailLoading">
+ <el-row :gutter="20" class="detail-header">
+ <el-col :span="6">
+ <div class="detail-item">
+ <label>鍒嗙粍鍚嶇О锛�</label>
+ <span>{{ currentGroup.groupName }}</span>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="detail-item">
+ <label>鍒嗙粍缂栫爜锛�</label>
+ <span>{{ currentGroup.groupCode }}</span>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="detail-item">
+ <label>鍙戦�佹垚鍔熺巼锛�</label>
+ <span class="rate-highlight"
+ >{{ (currentGroup.sendSuccessRate * 100).toFixed(1) }}%</span
+ >
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="detail-item">
+ <label>宸茶鐜囷細</label>
+ <span class="rate-highlight"
+ >{{ (currentGroup.readRate * 100).toFixed(1) }}%</span
+ >
+ </div>
+ </el-col>
+ </el-row>
- <el-col :span="1.5">
- <el-button
- type="danger"
- plain
- icon="el-icon-delete"
- size="medium"
- :disabled="multiple"
- @click="handleDelete"
- v-hasPermi="['system:user:remove']"
- >鍒犻櫎</el-button
- >
- </el-col>
- <el-col :span="1.5">
- <div class="documentf">
- <div class="document">
- <el-button
- type="warning"
- plain
- icon="el-icon-download"
- size="medium"
- @click="handleExport"
- v-hasPermi="['system:user:export']"
- >瀵煎嚭</el-button
- >
- </div>
- </div>
- </el-col>
-
- <!-- <el-col :span="1.5"> </el-col> -->
- </el-row>
- <!-- <right-toolbar
- :showSearch.sync="showSearch"
- @queryTable="getList"
- :columns="columns"
- ></right-toolbar> -->
+ <el-tabs v-model="detailActiveTab" class="detail-tabs">
+ <el-tab-pane label="瓒嬪娍鍒嗘瀽" name="trend">
+ <!-- 杩欓噷鍙互鏀剧疆鍥捐〃缁勪欢 -->
+ <div class="chart-placeholder">
+ 瓒嬪娍鍥捐〃锛堝彲鏍规嵁闇�姹傛帴鍏Charts锛�
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="鏄庣粏鏁版嵁" name="detail">
<el-table
- v-loading="loading"
- :data="userList"
- :border="true"
- @selection-change="handleSelectionChange"
+ :data="detailList"
+ border
+ style="width: 100%; margin-top: 20px"
>
- <el-table-column type="selection" width="50" align="center" />
<el-table-column
- fixed
- label="搴忓彿"
+ prop="patientName"
+ label="鎮h�呭鍚�"
align="center"
- key="tagid"
- prop="tagid"
- width="50"
- />
- <el-table-column
- fixed
- label="鍑洪櫌鐥呭尯"
- align="center"
- key="tagname"
- prop="tagname"
- width="100"
- :show-overflow-tooltip="true"
- />
- <el-table-column
- label="瀹f暀"
- align="center"
- key="updateTime"
- prop="updateTime"
- >
- </el-table-column>
-
- <el-table-column
- label="瀹f暀鏇存柊鏃ユ湡"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="110"
- >
- </el-table-column>
- <el-table-column
- label="绠$悊鏂规"
- align="center"
- key="isupload"
- prop="isupload"
- >
- </el-table-column>
- <el-table-column
- label="闅忚浠诲姟鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="100"
- >
- </el-table-column>
- <el-table-column
- label="闅忚瀹屾垚鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="100"
- >
- </el-table-column>
- <el-table-column
- label="闅忚瀹屾垚鐜�"
- align="center"
- key="isupload"
- prop="isupload"
- width="100"
- >
- </el-table-column>
- <el-table-column
- label="AI澶栧懠娆℃暟"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="100"
- >
- </el-table-column>
- <el-table-column
- label="AI闅忚瀹屾垚鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
width="120"
- >
- </el-table-column>
+ ></el-table-column>
<el-table-column
- label="AI闅忚瀹屾垚鐜�"
+ prop="patientNo"
+ label="鎮h�呯紪鍙�"
align="center"
- key="tagdescription"
- prop="tagdescription"
width="120"
- >
- </el-table-column>
+ ></el-table-column>
<el-table-column
- label="寰俊鍙戦�佹鏁�"
+ prop="sendTime"
+ label="鍙戦�佹椂闂�"
align="center"
- key="tagdescription"
- prop="tagdescription"
+ width="180"
+ ></el-table-column>
+ <el-table-column
+ prop="readTime"
+ label="闃呰鏃堕棿"
+ align="center"
+ width="180"
+ ></el-table-column>
+ <el-table-column
+ prop="educationTitle"
+ label="瀹f暀鏍囬"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="status"
+ label="鐘舵��"
+ align="center"
width="100"
- >
- </el-table-column>
- <el-table-column
- label="寰俊闅忚瀹屾垚鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="120"
- >
- </el-table-column>
- <el-table-column
- label="寰俊闅忚瀹屾垚鐜�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="120"
- >
- </el-table-column>
- <el-table-column
- label="鐭俊鍙戦�佹鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="100"
- >
- </el-table-column>
- <el-table-column
- label="鐭俊闅忚瀹屾垚鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="120"
- >
- </el-table-column>
- <el-table-column
- label="鐭俊闅忚瀹屾垚鐜�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="120"
- >
- </el-table-column>
- <el-table-column
- label="浜哄伐闅忚娆℃暟"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="100"
- >
- </el-table-column>
- <el-table-column
- label="浜哄伐闅忚瀹屾垚鏁�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="120"
- >
- </el-table-column>
- <el-table-column
- label="浜哄伐闅忚瀹屾垚鐜�"
- align="center"
- key="tagdescription"
- prop="tagdescription"
- width="120"
- >
- </el-table-column>
-
- <el-table-column
- label="鎿嶄綔"
- align="center"
- width="300"
- class-name="small-padding fixed-width"
>
<template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['system:user:edit']"
- ><span class="button-textxg"
- ><i class="el-icon-s-data"></i>鍗曢缁熻</span
- ></el-button
+ <el-tag
+ :type="
+ scope.row.status === '宸茶'
+ ? 'success'
+ : scope.row.status === '鍙戦�佹垚鍔�'
+ ? 'info'
+ : 'danger'
+ "
+ size="small"
>
- <el-button
- size="medium"
- type="text"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:user:remove']"
- ><span class="button-textsc"
- ><i class="el-icon-share"></i>闅忚缁撴灉鏄庣粏</span
- ></el-button
- >
+ {{ scope.row.status }}
+ </el-tag>
</template>
</el-table-column>
</el-table>
-
- <pagination
- v-show="total > 0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
- </el-col>
- </el-row>
- </div>
- </div>
- <!-- 鍗曢灞曠ず寮规 -->
- <el-dialog :visible.sync="topicVisible" width="45%">
- <div class="topicdia">
- <div class="top-text">{{ topicvalue.name }}</div>
- <div class="top-mintext">闅忚瀹屾垚鏁皗{ topicvalue.number }}</div>
- <div style="overflow-x: hidden; overflow-y: auto; max-height: 65vh">
- <div class="ttaabbcc" v-for="item in topiclist" :key="item.name">
- <div class="describe">
- 绗瑊{ item.number }}棰橈細 {{ item.name }}?<span
- >[{{ item.type == 1 ? "鍗曢�夐" : "澶氶�夐" }}]</span
- >
- </div>
- <div>
- <el-table :data="tableData" style="width: 100%">
- <el-table-column prop="date" label="闂閫夐」">
- </el-table-column>
- <el-table-column prop="name" label="閫夋嫨浜烘暟">
- </el-table-column>
- <el-table-column prop="address" label="姣斾緥"> </el-table-column>
- </el-table>
- </div>
- </div>
- </div>
+ </el-tab-pane>
+ </el-tabs>
</div>
<span slot="footer" class="dialog-footer">
- <el-button @click="topicVisible = false">鍏� 闂�</el-button>
- </span>
- </el-dialog>
- <!-- 缁撴灉缁熻寮规 -->
- <el-dialog title="鎻愮ず" :visible.sync="consequenceVisible" width="50%">
- <div class="topicdia">
- <div class="top-text" style="margin-bottom: 20px">瀹f暀缁熻缁撴灉</div>
- <div>
- <el-table :data="tableData" style="width: 100%">
- <el-table-column prop="date" label="鎮h�呭鍚�"> </el-table-column>
- <el-table-column prop="namea" label="鎬у埆"> </el-table-column>
- <el-table-column prop="namec" label="骞撮緞"> </el-table-column>
- <el-table-column prop="named" label="鑱旂郴鏂瑰紡"> </el-table-column>
- <el-table-column prop="namee" label="璁″垝鎵ц鏃堕棿" width="120">
- </el-table-column>
- <el-table-column prop="namex" label="瀹為檯瀹屾垚鏃堕棿" width="120">
- </el-table-column>
- <el-table-column prop="namez" label="瀹屾垚鏂瑰紡"> </el-table-column>
- <el-table-column prop="nameh" label="瀹f暀"> </el-table-column>
- <el-table-column prop="namej" label="寰楀垎"> </el-table-column>
- <!-- 鎴彇鍑犲垪閫夐」灞炴�у悕缁存姢鏁扮粍閬嶅巻 -->
- <!-- <el-table-column prop="namet">
- <template slot="header" slot-scope="scope">
- <div>{{ scope.row.name }}<span>[鍗曢�夐]</span></div>
- </template>
- </el-table-column> -->
- </el-table>
- </div>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="consequenceVisible = false">鍙� 娑�</el-button>
- <el-button type="primary" @click="consequenceVisible = false"
- >纭� 瀹�</el-button
- >
+ <el-button @click="detailVisible = false">鍏� 闂�</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
-import {
- toamendtag,
- addapitag,
- deletetag,
- changetagcategory,
- listtag,
-} from "@/api/system/label";
+import { gethelibraryCount } from "@/api/AiCentre/index";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
- name: "questionnaire",
- dicts: ["sys_normal_disable", "sys_user_sex"],
- components: { Treeselect },
+ name: "EducationStatistics",
data() {
return {
- topactiveName: "Local", //椤堕儴閫夋嫨
- activeName: "first",
- // 閬僵灞�
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ pageNum: 1,
+ pageSize: 1000,
+ groupType: "1", // 1-绉戝锛�2-鐥呭尯
+ deptcodes: ['all'], // 绉戝code鏁扮粍
+ hospitaldistrictcodes: [], // 鐥呭尯code鏁扮粍
+ hospType: undefined, // 灏辫瘖绫诲瀷
+ starttime: undefined, // 鍏ラ櫌寮�濮嬫椂闂�
+ endtime: undefined, // 鍏ラ櫌缁撴潫鏃堕棿
+ visittime: undefined, // 瀹f暀鍙戦�佹椂闂�
+ dateRange: [], // 鍏ラ櫌鏃堕棿鑼冨洿
+ orderBy: "totalCount", // 鎺掑簭瀛楁
+ order: "descending", // 鎺掑簭鏂瑰紡
+ },
+
+ // 缁熻鏁版嵁
+ statisticsData: {
+ total: 0,
+ list: [],
+ },
+
+ // 涓嬫媺閫夐」
+ flatArraydept: [],
+
+ flatArrayhospit: [],
+
+ // 鍔犺浇鐘舵��
loading: false,
- // 閫変腑鏁扮粍
- ids: [],
- // 闈炲崟涓鐢�
- single: true,
- // 闈炲涓鐢�
- multiple: true,
- // 鏄剧ず鎼滅储鏉′欢
- showSearch: true,
- idds: "", //鍒嗙被id
- // 鎬绘潯鏁�
- total: 0,
- lstamendtag: false, //鏄惁淇敼鏍囩
- topicVisible: false, //鎺у埗鍗曢寮规
- consequenceVisible: false, //鎺у埗缁撴灉寮规
- //淇敼娣诲姞鏍囩寮规鏁版嵁
- tagform: {
- isupload: "",
- tagname: "",
- tagcategoryid: "",
- tagdescription: "",
- },
- topicvalue: {
- name: "楠ㄧ闅忚妯$増",
- number: 222,
- },
- classifyform: {
- categoryname: "",
- },
- topiclist: [
- {
- name: "鎮ㄧ殑韬綋搴峰鎯呭喌濡備綍",
- number: 1,
- type: 1,
- },
- {
- name: "鎮ㄧ殑楗鎯呭喌濡備綍",
- number: 2,
- type: 2,
- },
- {
- name: "鎮ㄧ殑鎭㈠鎯呭喌濡備綍",
- number: 3,
- type: 1,
- },
- ],
- tableData: [
- {
- date: "濂�",
- name: 12,
- address: "50%",
- },
- {
- date: "涓�鑸�",
- name: 2,
- address: "6.2%",
- },
- {
- date: "宸�",
- name: 0,
- address: "0%",
- },
- ],
- // 鏍囩琛ㄦ牸鏁版嵁
- userList: [],
- // 寮瑰嚭灞傛爣棰�
- title: "",
- // 鏄惁鏄剧ず寮瑰嚭灞�
- open: false,
- // 鏃ユ湡鑼冨洿
- dateRange: [],
- // 宀椾綅閫夐」
- postOptions: [],
- // 瑙掕壊閫夐」
- roleOptions: [],
- // 琛ㄥ崟鍙傛暟
- form: {},
- forms: {
- name: "",
- },
- numberlb: 22,
- dialogFormVisible: false, //娣诲姞銆佷慨鏀圭被鍒脊妗�
- lstamendtagVisible: false, //娣诲姞銆佷慨鏀规爣绛惧脊妗�
- goQRCodeVisible: false, //浜岀淮鐮佸脊妗�
- sidecolumnval: "", //绫诲埆鎼滅储
- propss: { multiple: true },
- topqueryParams: {}, //瀵煎嚭绛涢�夋潯浠�
- options: [
- {
- value: 1,
- label: "涓滃崡",
- },
- {
- value: 2,
- label: "瑗垮寳",
- },
- {
- value: 3,
- label: "浠ㄤ花浠�",
- },
- {
- value: 4,
- label: "鍏椋掗",
- },
- ],
- pickerOptions: {
- disabledDate(time) {
- return time.getTime() < Date.now() - 3600 * 1000 * 24;
- },
- shortcuts: [
- {
- text: "浠婂ぉ",
- onClick(picker) {
- picker.$emit("pick", new Date());
- },
- },
- {
- text: "鏄ㄥぉ",
- onClick(picker) {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24);
- picker.$emit("pick", date);
- },
- },
- {
- text: "涓�鍛ㄥ墠",
- onClick(picker) {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit("pick", date);
- },
- },
- ],
- },
- pickerOptionsa: {
+ detailLoading: false,
+
+ // 璇︽儏寮圭獥
+ detailVisible: false,
+ detailTitle: "",
+ detailActiveTab: "trend",
+ currentGroup: {},
+ detailList: [],
+
+ // 鏃ユ湡閫夋嫨鍣ㄩ厤缃�
+ datePickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now();
},
shortcuts: [
{
- text: "浠婂ぉ",
+ text: "鏈�杩戜竴鍛�",
onClick(picker) {
- picker.$emit("pick", new Date());
+ const end = new Date();
+ const start = new Date();
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+ picker.$emit("pick", [start, end]);
},
},
{
- text: "鏄ㄥぉ",
+ text: "鏈�杩戜竴涓湀",
onClick(picker) {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24);
- picker.$emit("pick", date);
+ const end = new Date();
+ const start = new Date();
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+ picker.$emit("pick", [start, end]);
},
},
{
- text: "涓�鍛ㄥ墠",
+ text: "鏈�杩戜笁涓湀",
onClick(picker) {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit("pick", date);
+ const end = new Date();
+ const start = new Date();
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+ picker.$emit("pick", [start, end]);
},
},
],
},
- // 鏌ヨ鏍囩鍒楄〃鍙傛暟
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- tagname: undefined,
- tagdescription: undefined,
- },
- // 鍒椾俊鎭�
- columns: [
- { key: 0, label: `鏍囩缂栧彿`, visible: true },
- { key: 1, label: `鏍囩鍚嶇О`, visible: true },
- { key: 2, label: `鏍囩鏄电О`, visible: true },
- { key: 3, label: `閮ㄩ棬`, visible: true },
- { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
- { key: 5, label: `鐘舵�乣, visible: true },
- { key: 6, label: `鍒涘缓鏃堕棿`, visible: true },
- ],
- // 琛ㄥ崟鏍¢獙
- // rules: {
- // userName: [
- // { required: true, message: "鏍囩鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
- // {
- // min: 2,
- // max: 20,
- // message: "鏍囩鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿",
- // trigger: "blur",
- // },
- // ],
- // nickName: [
- // { required: true, message: "鏍囩鏄电О涓嶈兘涓虹┖", trigger: "blur" },
- // ],
- // password: [
- // { required: true, message: "鏍囩瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
- // {
- // min: 5,
- // max: 20,
- // message: "鏍囩瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
- // trigger: "blur",
- // },
- // ],
- // email: [
- // {
- // type: "email",
- // message: "璇疯緭鍏ユ纭殑閭鍦板潃",
- // trigger: ["blur", "change"],
- // },
- // ],
- // phonenumber: [
- // {
- // pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
- // message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
- // trigger: "blur",
- // },
- // ],
- // IDnumber: [
- // {
- // pattern:
- // /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
- // message: "璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�",
- // trigger: "blur",
- // },
- // ],
- // },
};
},
- watch: {},
+
+ computed: {
+ // 璁$畻鎬诲彂閫侀噺
+ totalCount() {
+ return this.statisticsData.list.reduce(
+ (sum, item) => sum + item.totalCount,
+ 0
+ );
+ },
+
+ // 璁$畻鎬诲彂閫佹垚鍔熼噺
+ sendSuccessCount() {
+ return this.statisticsData.list.reduce(
+ (sum, item) => sum + item.sendSuccessCount,
+ 0
+ );
+ },
+
+ // 璁$畻鎬诲凡璇婚噺
+ readCount() {
+ return this.statisticsData.list.reduce(
+ (sum, item) => sum + item.readCount,
+ 0
+ );
+ },
+
+ // 璁$畻骞冲潎鍙戦�佹垚鍔熺巼
+ avgSendSuccessRate() {
+ if (this.statisticsData.list.length === 0) return 0;
+ const totalRate = this.statisticsData.list.reduce(
+ (sum, item) => sum + item.sendSuccessRate,
+ 0
+ );
+ return ((totalRate / this.statisticsData.list.length) * 100).toFixed(1);
+ },
+ },
+
created() {
+ this.flatArrayhospit = this.$store.getters.belongWards.map((ward) => {
+ return {
+ label: ward.districtName,
+ value: ward.districtCode,
+ };
+ });
+ this.flatArraydept = this.$store.getters.belongDepts.map((dept) => {
+ return {
+ label: dept.deptName,
+ value: dept.deptCode,
+ };
+ });
+ console.log(this.flatArrayhospit,'this.flatArrayhospit');
+
+ this.flatArraydept.push({ label: "鍏ㄩ儴", value: "all" });
+ this.flatArrayhospit.push({ label: "鍏ㄩ儴", value: "all" });
this.getList();
- this.gitclasify();
},
methods: {
- /** 鏌ヨ鏍囩鍒楄〃 */
- getList() {
- listtag(this.addDateRange(this.queryParams)).then((response) => {
- console.log(response);
- this.total = response.total;
- this.userList = response.rows;
- });
- },
- /** 淇敼鏍囩 */
- handleUpdate(row) {
- console.log(row, "淇敼鏍囩");
- this.lstamendtagVisible = true;
- this.lstamendtag = true;
- this.tagform = {
- isupload: row.isupload,
- tagname: row.tagname,
- tagcategoryid: row.tagcategoryid,
- tagdescription: row.tagdescription,
- tagid: row.tagid,
- };
- },
- addladeltag() {
- this.lstamendtagVisible = true;
- this.lstamendtag = false;
- this.tagform = {
- isupload: "",
- tagname: "",
- tagcategoryid: "",
- tagdescription: "",
- tagid: "",
- };
- },
- // 娣诲姞/淇敼鏍囩
- Maintenancetag() {
- if (this.lstamendtag) {
- toamendtag(this.addDateRange(this.tagform)).then((response) => {
- console.log(response);
- this.getList();
- });
- } else {
- addapitag(this.addDateRange(this.tagform)).then((response) => {
- console.log(response);
- this.getList();
- });
+ // 鑾峰彇缁熻鏁版嵁鍒楄〃
+ async getList() {
+ this.loading = true;
+ try {
+ console.log(this.queryParams.hospitaldistrictcodes);
+
+ // 鏋勫缓璇锋眰鍙傛暟
+ const params = {
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize,
+ hospitaldistrictcodes:
+ this.queryParams.hospitaldistrictcodes.includes("all")
+ ? this.getAllWardCodes()
+ : this.queryParams.hospitaldistrictcodes,
+ deptcodes: this.queryParams.deptcodes.includes("all")
+ ? this.getAllDeptCodes()
+ : this.queryParams.deptcodes,
+ };
+
+ // 鏍规嵁缁熻缁村害璁剧疆鍙傛暟
+ if (this.queryParams.groupType == "1") {
+ params.hospitaldistrictcodes = [];
+ } else if (this.queryParams.groupType == "2") {
+ params.deptcodes = [];
+ }
+
+ // 璁剧疆鏃堕棿鍙傛暟
+ if (
+ this.queryParams.dateRange &&
+ this.queryParams.dateRange.length === 2
+ ) {
+ params.starttime = this.queryParams.dateRange[0];
+ params.endtime = this.queryParams.dateRange[1];
+ }
+
+ // 璁剧疆鍏朵粬鍙傛暟
+ if (this.queryParams.hospType) {
+ params.hospType = this.queryParams.hospType;
+ }
+ if (this.queryParams.visittime) {
+ params.visittime = this.queryParams.visittime;
+ }
+
+ // 璋冪敤鎺ュ彛
+ const response = await gethelibraryCount(params);
+ this.statisticsData = {
+ total: response.total || 0,
+ list: response.list || [],
+ };
+ } catch (error) {
+ console.error("鑾峰彇缁熻鏁版嵁澶辫触:", error);
+ this.$message.error("鑾峰彇缁熻鏁版嵁澶辫触");
+ this.statisticsData = { total: 0, list: [] };
+ } finally {
+ this.loading = false;
}
- this.tagform = {
- isupload: "",
- tagname: "",
- tagcategoryid: "",
- tagdescription: "",
- tagid: "",
- };
+ },
+ getAllWardCodes() {
+ return this.flatArrayhospit
+ .filter((item) => item.value !== "all")
+ .map((item) => item.value);
},
- // 琛ㄥ崟閲嶇疆
- reset() {
- this.form = {
- userId: undefined,
- deptId: undefined,
- userName: undefined,
- nickName: undefined,
- password: undefined,
- phonenumber: undefined,
- email: undefined,
- sex: undefined,
- status: "0",
- remark: undefined,
- postIds: [],
- roleIds: [],
- };
- this.resetForm("form");
+ getAllDeptCodes() {
+ return this.flatArraydept
+ .filter((item) => item.value !== "all")
+ .map((item) => item.value);
},
- //鍗曢寮规
- handleUpdate() {
- this.topicVisible = true;
+ // 缁熻缁村害鍙樻洿
+ handleGroupTypeChange(value) {
+ // 鍒囨崲缁村害鏃舵竻绌哄搴旂殑閫夋嫨
+ if (value === "dept") {
+ this.queryParams.hospitaldistrictcodes = [];
+ } else if (value === "ward") {
+ this.queryParams.deptcodes = [];
+ }
},
- //缁撴灉寮规
- handleDelete() {
- this.consequenceVisible = true;
- },
- /** 鎼滅储鎸夐挳鎿嶄綔 */
+
+ // 澶勭悊鎼滅储
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
- /** 閲嶇疆鎸夐挳鎿嶄綔 */
+
+ // 閲嶇疆鎼滅储鏉′欢
resetQuery() {
- this.dateRange = [];
- this.resetForm("queryForm");
- this.queryParams.tagname = "";
- this.$refs.tree.setCurrentKey(null);
- this.handleQuery();
- },
- // 澶氶�夋閫変腑鏁版嵁
- handleSelectionChange(selection) {
- this.ids = selection.map((item) => item.tagid);
- this.single = selection.length != 1;
- this.multiple = !selection.length;
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ groupType: "dept",
+ deptcodes: [],
+ hospitaldistrictcodes: [],
+ hospType: undefined,
+ starttime: undefined,
+ endtime: undefined,
+ visittime: undefined,
+ dateRange: [],
+ orderBy: "totalCount",
+ order: "descending",
+ };
+ this.getList();
},
- /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+ // 琛ㄦ牸鎺掑簭
+ handleSortChange({ column, prop, order }) {
+ if (prop) {
+ this.queryParams.orderBy = prop;
+ this.queryParams.order = order;
+ this.getList();
+ }
+ },
+
+ // 鏍规嵁鎴愬姛鐜囪幏鍙栬繘搴︽潯棰滆壊
+ getRateColor(rate) {
+ const percentage = rate * 100;
+ if (percentage >= 90) return "#67C23A";
+ if (percentage >= 80) return "#E6A23C";
+ if (percentage >= 60) return "#409EFF";
+ return "#F56C6C";
+ },
+
+ // 鏌ョ湅鍒嗙粍璇︽儏
+ handleGroupDetail(row) {
+ this.currentGroup = row;
+ this.detailTitle = `${row.groupName} - 瀹f暀缁熻璇︽儏`;
+ this.detailActiveTab = "trend";
+ this.detailVisible = true;
+ this.loadDetailData();
+ },
+
+ // 鍔犺浇璇︽儏鏁版嵁
+ async loadDetailData() {
+ this.detailLoading = true;
+ try {
+ // 杩欓噷搴旇璋冪敤鑾峰彇璇︽儏鐨勬帴鍙�
+ // 妯℃嫙鏁版嵁
+ setTimeout(() => {
+ this.detailList = [
+ {
+ patientName: "寮犱笁",
+ patientNo: "P202312001",
+ sendTime: "2023-12-01 10:30:00",
+ readTime: "2023-12-01 14:20:00",
+ educationTitle: "楠ㄧ鏈悗搴峰鎸囧",
+ status: "宸茶",
+ },
+ {
+ patientName: "鏉庡洓",
+ patientNo: "P202312002",
+ sendTime: "2023-12-01 11:15:00",
+ readTime: "",
+ educationTitle: "蹇冭绠$柧鐥呴闃�",
+ status: "鍙戦�佹垚鍔�",
+ },
+ {
+ patientName: "鐜嬩簲",
+ patientNo: "P202312003",
+ sendTime: "2023-12-02 09:45:00",
+ readTime: "2023-12-02 16:10:00",
+ educationTitle: "绯栧翱鐥呴ギ椋熸寚瀵�",
+ status: "宸茶",
+ },
+ ];
+ this.detailLoading = false;
+ }, 500);
+ } catch (error) {
+ console.error("鍔犺浇璇︽儏鏁版嵁澶辫触:", error);
+ this.$message.error("鍔犺浇璇︽儏鏁版嵁澶辫触");
+ this.detailLoading = false;
+ }
+ },
+
+ // 鏌ョ湅璇︽儏
+ handleDetail(row) {
+ this.currentGroup = row;
+ this.detailTitle = `${row.groupName} - 鏄庣粏鏁版嵁`;
+ this.detailActiveTab = "detail";
+ this.detailVisible = true;
+ this.loadDetailData();
+ },
+
+ // 瀵煎嚭褰撳墠鍒嗙粍鏁版嵁
+ handleExportGroup(row) {
+ this.$confirm(`纭畾瑕佸鍑� "${row.groupName}" 鐨勭粺璁℃暟鎹悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ // 杩欓噷璋冪敤瀵煎嚭鎺ュ彛
+ this.$message.success("瀵煎嚭浠诲姟宸插紑濮嬶紝璇风◢鍚庡湪涓嬭浇涓績鏌ョ湅");
+ })
+ .catch(() => {});
+ },
+
+ // 瀵煎嚭鍏ㄩ儴鏁版嵁
handleExport() {
- this.download(
- "base/tag/export",
- {
- ...this.topqueryParams,
- },
- `user_${new Date().getTime()}.xlsx`
- );
+ this.$confirm("纭畾瑕佸鍑哄叏閮ㄧ粺璁℃暟鎹悧?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ // 鏋勫缓瀵煎嚭鍙傛暟
+ const exportParams = { ...this.queryParams };
+ delete exportParams.pageNum;
+ delete exportParams.pageSize;
+
+ // 杩欓噷璋冪敤瀵煎嚭鎺ュ彛
+ this.$message.success("瀵煎嚭浠诲姟宸插紑濮嬶紝璇风◢鍚庡湪涓嬭浇涓績鏌ョ湅");
+ })
+ .catch(() => {});
+ },
+
+ // 鍏抽棴璇︽儏寮圭獥
+ handleCloseDetail(done) {
+ this.$confirm("纭鍏抽棴锛�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ done();
+ })
+ .catch(() => {});
},
},
};
</script>
<style lang="scss" scoped>
-.Questionnairemanagement {
- display: flex;
-}
-.sidecolumn {
- width: 180px;
- min-height: 100vh;
- text-align: center;
- // display: flex;
- margin-top: 20px;
- margin: 20px;
- padding: 30px;
- background: #edf1f7;
- border: 1px solid #dcdfe6;
- -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
- 0 0 6px 0 rgba(0, 0, 0, 0.04);
- .sidecolumn-top {
- display: flex;
- justify-content: space-between;
- .top-wj {
- font-size: 20px;
- }
- .top-tj {
- font-size: 18px;
+.education-statistics {
+ padding: 20px;
+ background: #fff;
+ min-height: calc(100vh - 84px);
- color: rgb(0, 89, 255);
- cursor: pointer;
- }
- }
- .center-ss {
- margin-top: 30px;
- .input-with-select {
- height: 40px !important;
- }
- }
- .bottom-fl {
- margin-top: 30px;
- display: center !important;
- }
-}
-.topicdia {
- text-align: center;
- margin: 0 20px;
-
- // overflow: scroll;
-
- .top-text {
- font-size: 25px;
- font-weight: 600;
- }
- .top-mintext {
- color: #bdae25;
- font-size: 15px;
- margin: 10px 0;
- }
- .ttaabbcc {
- // background: #edf1f7;
- border: 1px solid #dcdfe6;
- -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
- 0 0 6px 0 rgba(0, 0, 0, 0.04);
- margin: 15px 0;
- margin-top: 30px;
- padding: 30px;
- }
- .describe {
- text-align: left;
+ .search-container {
+ background: #f8f9fa;
+ padding: 20px;
+ border-radius: 8px;
margin-bottom: 20px;
- span {
- color: rgb(23, 140, 235);
- margin-left: 5px;
+ border: 1px solid #ebeef5;
+ }
+
+ .summary-cards {
+ margin-bottom: 20px;
+
+ .summary-card {
+ background: #fff;
+ border-radius: 8px;
+ padding: 20px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+ text-align: center;
+ border: 1px solid #ebeef5;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.15);
+ }
+
+ .card-title {
+ font-size: 14px;
+ color: #909399;
+ margin-bottom: 10px;
+ }
+
+ .card-value {
+ font-size: 28px;
+ font-weight: 600;
+ color: #409eff;
+ margin-bottom: 5px;
+ }
+
+ .card-desc {
+ font-size: 12px;
+ color: #c0c4cc;
+ }
}
}
-}
-::v-deep.el-tabs--left,
-.el-tabs--right {
- overflow: hidden;
- align-items: center;
- display: flex;
-}
-::v-deep.el-input--medium .el-input__inner {
- height: 40px !important;
-}
-::v-deep.el-tabs--right .el-tabs__active-bar.is-right {
- height: 40px;
- width: 5px;
- left: 0;
-}
-::v-deep.el-tabs--right .el-tabs__item.is-right {
- display: block;
- text-align: left;
- font-size: 20px;
-}
-.leftvlue {
- // display: flex;
- // flex: 1;
- width: 80%;
- margin-top: 20px;
- // margin: 20px;
- padding: 30px;
- background: #ffff;
- border: 1px solid #dcdfe6;
- -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
- 0 0 6px 0 rgba(0, 0, 0, 0.04);
- .mulsz {
- font-size: 20px;
+ .table-container {
+ background: #fff;
+ border-radius: 8px;
+ padding: 20px;
+ border: 1px solid #ebeef5;
+
+ .group-name {
+ color: #409eff;
+ cursor: pointer;
+ text-decoration: underline;
+ transition: color 0.3s;
+
+ &:hover {
+ color: #66b1ff;
+ }
+ }
+
+ .count-highlight {
+ font-weight: 600;
+ color: #606266;
+ }
+
+ .success-count {
+ color: #67c23a;
+ font-weight: 600;
+ }
+
+ .read-count {
+ color: #e6a23c;
+ font-weight: 600;
+ }
+
+ .rate-text {
+ display: block;
+ margin-top: 5px;
+ font-size: 12px;
+ color: #606266;
+ }
+ }
+
+ .detail-header {
+ margin-bottom: 20px;
+ padding: 20px;
+ background: #f8f9fa;
+ border-radius: 8px;
+
+ .detail-item {
+ label {
+ color: #909399;
+ font-size: 14px;
+ }
+
+ span {
+ font-size: 16px;
+ font-weight: 500;
+ color: #303133;
+ }
+
+ .rate-highlight {
+ color: #409eff;
+ font-weight: 600;
+ }
+ }
+ }
+
+ .detail-tabs {
+ margin-top: 20px;
+ }
+
+ .chart-placeholder {
+ height: 300px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #f8f9fa;
+ border-radius: 8px;
+ color: #909399;
+ border: 1px dashed #dcdfe6;
}
}
-.document {
- width: 100px;
- height: 50px;
-}
-.documentf {
- display: flex;
- justify-content: flex-end;
-}
-.button-text {
- color: rgb(70, 204, 238);
-}
-.button-textck {
- color: rgb(39, 167, 67);
-}
-.button-textxg {
- font-size: 18px;
- color: rgb(35, 81, 233);
-}
-.button-textsc {
- font-size: 18px;
- color: rgb(23, 140, 235);
+// 鍝嶅簲寮忚皟鏁�
+@media (max-width: 1200px) {
+ .education-statistics {
+ padding: 10px;
+ }
+
+ .summary-cards {
+ .el-col {
+ margin-bottom: 10px;
+ }
+ }
}
</style>
--
Gitblit v1.9.3