You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

699 lines
21 KiB

4 months ago
2 months ago
3 months ago
2 months ago
3 months ago
2 months ago
3 months ago
2 months ago
2 months ago
3 months ago
2 months ago
3 months ago
2 months ago
2 months ago
2 months ago
2 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. <script setup>
  2. import { computed, onMounted, ref, watch } from 'vue'
  3. import { dayjs, ElMessage } from 'element-plus'
  4. import request from '@/util/http.js'
  5. import API from '@/util/http.js'
  6. import moment from 'moment'
  7. import { ar } from 'element-plus/es/locales.mjs'
  8. import { useAdminStore } from "@/store/index.js";
  9. import { storeToRefs } from "pinia";
  10. const adminStore = useAdminStore();
  11. const { flag } = storeToRefs(adminStore);
  12. // 监听全局flag状态变化
  13. watch(flag, (newFlag, oldFlag) => {
  14. // 当flag状态改变时,重新发送请求
  15. if (newFlag !== oldFlag) {
  16. ConsumeSelectBy()
  17. }
  18. })
  19. // 之后整理一下
  20. const defaultTime = [
  21. new Date(2000, 1, 1, 0, 0, 0),
  22. new Date(2000, 2, 1, 23, 59, 59),
  23. ]
  24. /*
  25. ====================工具方法==============================
  26. */
  27. // 时间格式化
  28. const formatTime = (val) => val ? dayjs(val).format('YYYY-MM-DD HH:mm:ss') : ''
  29. /*
  30. ====================数据=================================
  31. */
  32. //这是获取用户信息的接口
  33. const adminData = ref({})
  34. // 充值明细表格
  35. const tableData = ref([])
  36. // 搜索articleVideo 表单
  37. const beanConsumeArticle = ref({
  38. jwcode: null,
  39. dept: "",
  40. type: "",
  41. payMode: "",
  42. articleId: "",
  43. articleName: "",
  44. author: "",
  45. startTime: '',
  46. endTime: '',
  47. })
  48. // 频道列表
  49. const channels = ref([])
  50. // 抽离类型选项到响应式数组
  51. const consumeTypes = ref([
  52. { label: '打赏', value: 9 },
  53. { label: '打赏', value: 10 },
  54. { label: '付费购买', value: 11 },
  55. ])
  56. // 处理 payMode 选择变化
  57. const handlePayModeChange = (value) => {
  58. beanConsumeArticle.value.payMode = value;
  59. // 触发搜索
  60. ConsumeSelectBy();
  61. }
  62. //------------------------
  63. // 标记当前激活的时间范围按钮
  64. const activeTimeRange = ref('')
  65. // 日期选择器变化时清除按钮激活状态
  66. const handleDatePickerChange = () => {
  67. activeTimeRange.value = ''
  68. }
  69. // 搜索对象
  70. const getObj = ref({
  71. pageNum: 1,
  72. pageSize: 50
  73. })
  74. //分页总条目
  75. const total = ref(100)
  76. // 搜索对象时间
  77. const getTime = ref({
  78. startTime: '',
  79. endTime: ''
  80. })
  81. // 搜索地区列表
  82. const dept = ref([])
  83. // 获取地区列表的方法
  84. const getDept = async function () {
  85. try {
  86. // 发送请求获取地区列表
  87. const result = await request({
  88. // url: '/general/dept',
  89. url: '/beanConsume/getDept', // todo 换成实际接口地址
  90. data: { account: adminData.value.account }
  91. })
  92. console.log('请求地区列表成功', result)
  93. // 存储地区数据
  94. dept.value = result.data
  95. console.log('地区数据', dept.value)
  96. } catch (error) {
  97. console.log('请求地区列表失败', error)
  98. ElMessage({
  99. type: 'error',
  100. message: '获取地区列表失败,请稍后重试'
  101. })
  102. }
  103. }
  104. // // 频道模糊查询方法
  105. // const filterChannel = (query) => {
  106. // if (query) {
  107. // return channels.value.filter(item => item.toLowerCase().includes(query.toLowerCase()));
  108. // }
  109. // return channels.value;
  110. // };
  111. // 新增排序字段和排序方式
  112. const sortField = ref('')
  113. const sortOrder = ref('')
  114. // 合计数
  115. const permanentBean = ref(0)
  116. const freeBean = ref(0)
  117. const totalNum = ref(0)
  118. /*
  119. ====================方法=================================
  120. */
  121. // 获取登录用户信息
  122. const getAdminData = async function () {
  123. try {
  124. const result = await request({
  125. url: '/admin/userinfo',
  126. data: {}
  127. })
  128. adminData.value = result
  129. console.log('请求成功', result)
  130. console.log('用户信息', adminData.value)
  131. } catch (error) {
  132. console.log('请求失败', error)
  133. }
  134. }
  135. const ConsumeSelectBy = async function (val) {
  136. try {
  137. // 搜索参数页码赋值
  138. if (typeof val === 'number') {
  139. getObj.value.pageNum = val
  140. }
  141. // 搜索参数时间赋值
  142. if (getTime.value != null) {
  143. if (getTime.value.startTime != '' && getTime.value.endTime != '') {
  144. beanConsumeArticle.value.startTime = formatTime(getTime.value[0])
  145. beanConsumeArticle.value.endTime = formatTime(getTime.value[1])
  146. }
  147. } else {
  148. beanConsumeArticle.value.startTime = ''
  149. beanConsumeArticle.value.endTime = ''
  150. }
  151. beanConsumeArticle.value.sortField = sortField.value
  152. beanConsumeArticle.value.sortOrder = sortOrder.value
  153. console.log('搜索参数_时间', beanConsumeArticle.value.startTime)
  154. console.log('搜索参数1', getObj.value)
  155. console.log('搜索参数2', beanConsumeArticle.value)
  156. // 发送POST请求
  157. const result = await request({
  158. url: '/beanConsume/selectArticleBy',
  159. data: {
  160. pageNum: getObj.value.pageNum,
  161. pageSize: getObj.value.pageSize,
  162. beanConsumeArticle: {
  163. ...beanConsumeArticle.value,
  164. jwcode: beanConsumeArticle.value.jwcode,
  165. dept: beanConsumeArticle.value.dept,
  166. payMode: beanConsumeArticle.value.payMode,
  167. articleId: beanConsumeArticle.value.articleId,
  168. articleName: beanConsumeArticle.value.articleName,
  169. author: beanConsumeArticle.value.author,
  170. startTime: beanConsumeArticle.value.startTime,
  171. endTime: beanConsumeArticle.value.endTime,
  172. sortField: beanConsumeArticle.value.sortField,
  173. sortOrder: beanConsumeArticle.value.sortOrder,
  174. flag: flag.value
  175. }
  176. }
  177. })
  178. console.log('请求成功4', sortField)
  179. console.log('接口响应结果', result); // 打印接口响应结果
  180. if (result.code === 200 && result.data && result.data.list) {
  181. // 过滤返回的数据,确保 type 值符合 payMode 规则
  182. const filteredList = result.data.list.filter(item => {
  183. if (beanConsumeArticle.value.payMode === '0') {
  184. return [9, 10].includes(Number(item.type));
  185. } else if (beanConsumeArticle.value.payMode === '1') {
  186. return Number(item.type) === 11;
  187. }
  188. return true;
  189. });
  190. tableData.value = filteredList;
  191. }
  192. // 合计数的接口
  193. // 复制一份 beanConsumeArticle.value 并设置固定的 payType 值 8是文章的
  194. const sumConsumeParams = {
  195. payType: 8, // 固定传入 payType 值 8
  196. beanConsumeArticle: {
  197. ...beanConsumeArticle.value,
  198. flag: flag.value
  199. }
  200. };
  201. // 发送 POST 请求获取合计数
  202. const resultTotalGold = await request({
  203. url: '/beanConsume/sumConsumeGold',
  204. data: sumConsumeParams
  205. });
  206. console.log("总计", resultTotalGold);
  207. const data = resultTotalGold.data || resultTotalGold;
  208. console.log('请求成功3', resultTotalGold.data)
  209. console.log('permanentBean3', data.permanentBean)
  210. // 返回字段为 permanentBean、freeBean、totalNum
  211. permanentBean.value = Number(data.permanentBean) || 0;
  212. freeBean.value = Number(data.freeBean) || 0;
  213. totalNum.value = Number(data.totalNum) || 0;
  214. // 存储分页总数
  215. total.value = result.data.total
  216. console.log('total', total.value)
  217. } catch (error) {
  218. console.log('请求失败', error)
  219. }
  220. }
  221. // 搜索
  222. const search = function () {
  223. getObj.value.pageNum = 1
  224. if (beanConsumeArticle.value.jwcode) {
  225. const numRef = /^\d{1,9}$/;
  226. if (!numRef.test(beanConsumeArticle.value.jwcode)) {
  227. ElMessage.error('请检查精网号格式')
  228. return
  229. }
  230. }
  231. if (beanConsumeArticle.value.articleId) {
  232. const numRef = /^\d{1,9}$/;
  233. if (!numRef.test(beanConsumeArticle.value.articleId)) {
  234. ElMessage.error('请检查文章ID格式')
  235. return
  236. }
  237. }
  238. ConsumeSelectBy()
  239. }
  240. // 重置
  241. const reset = function () {
  242. console.log('文章/视频的重置')
  243. beanConsumeArticle.value.jwcode = null
  244. beanConsumeArticle.value.dept = ''
  245. beanConsumeArticle.value.type = ''
  246. beanConsumeArticle.value.payMode = ''
  247. beanConsumeArticle.value.articleId = ''
  248. beanConsumeArticle.value.articleName = ''
  249. beanConsumeArticle.value.author = ''
  250. beanConsumeArticle.value.startTime = ''
  251. beanConsumeArticle.value.endTime = ''
  252. sortField.value = ''
  253. sortOrder.value = ''
  254. getTime.value = {}
  255. activeTimeRange.value = '' // 清除激活状态
  256. // 点完重置后,重新请求数据
  257. ConsumeSelectBy()
  258. console.log(' beanConsumeArticle', beanConsumeArticle.value)
  259. }
  260. // 今天
  261. const getToday = function () {
  262. const today = dayjs()
  263. const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
  264. const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
  265. getTime.value = [startTime, endTime]
  266. console.log('getTime', getTime.value)
  267. activeTimeRange.value = 'today' // 标记当前激活状态
  268. ConsumeSelectBy()
  269. }
  270. // 昨天
  271. const getYesterday = function () {
  272. const today = dayjs()
  273. const startTime = today.subtract(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')
  274. const endTime = today.subtract(1, 'day').endOf('day').format('YYYY-MM-DD HH:mm:ss')
  275. getTime.value = [startTime, endTime]
  276. console.log('getTime', getTime.value)
  277. activeTimeRange.value = 'yesterday' // 标记当前激活状态
  278. ConsumeSelectBy()
  279. }
  280. // 近7天
  281. const get7Days = function () {
  282. const today = dayjs()
  283. const startTime = today.subtract(6, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')
  284. const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
  285. getTime.value = [startTime, endTime]
  286. console.log('getTime', getTime.value)
  287. activeTimeRange.value = '7days' // 标记当前激活状态
  288. ConsumeSelectBy()
  289. }
  290. // 处理排序事件
  291. const handleSortChange = (column) => {
  292. console.log('排序字段:', column.prop)
  293. console.log('排序方式:', column.order)
  294. if (column.prop === 'beanNum') {
  295. sortField.value = 'beanNum'
  296. } else if (column.prop === 'consumeTime') {
  297. sortField.value = 'consumeTime'
  298. } else if (column.prop === 'buyBean') {
  299. sortField.value = 'buyBean'
  300. } else if (column.prop === 'freeBean') {
  301. sortField.value = 'freeBean'
  302. }
  303. sortOrder.value = column.order === 'ascending' ? 'DESC' : 'ASC'
  304. ConsumeSelectBy()
  305. }
  306. const handlePageSizeChange = function (val) {
  307. getObj.value.pageSize = val
  308. ConsumeSelectBy()
  309. }
  310. const handleCurrentChange = function (val) {
  311. getObj.value.pageNum = val
  312. ConsumeSelectBy()
  313. }
  314. /*
  315. ====================计算属性=================================
  316. */
  317. // 计算总金币数
  318. // const totalBean = computed(() => permanentBean.value + freeBean.value)
  319. /*
  320. ====================监听=================================
  321. */
  322. /*
  323. ====================挂载=================================
  324. */
  325. const format3 = (num) => {
  326. // 每三位添加逗号
  327. return num.toLocaleString('en-US')
  328. }
  329. onMounted(async function () {
  330. await getAdminData()
  331. await ConsumeSelectBy()
  332. await getDept()
  333. })
  334. const exportExcel = async function () {
  335. const params = { //需要修改
  336. ...getObj.value,
  337. "beanConsumeArticle": {
  338. ...beanConsumeArticle.value,
  339. sortField: sortField.value,
  340. sortOrder: sortOrder.value,
  341. },
  342. }
  343. const res = await API({ url: '/export/exportArticle', data: params })
  344. if (res.code === 200) {
  345. ElMessage.success('导出成功')
  346. }
  347. }
  348. const exportListVisible = ref(false)
  349. // 打开导出列表弹窗
  350. const openExportList = () => {
  351. getExportList()
  352. exportListVisible.value = true
  353. }
  354. // 导出列表数据
  355. const exportList = ref([])
  356. // 导出列表加载状态
  357. const exportListLoading = ref(false)
  358. // 获取导出列表
  359. const getExportList = async () => {
  360. exportListLoading.value = true
  361. try {
  362. const result = await API({ url: '/export/export' })
  363. if (result.code === 200) {
  364. const filteredData = result.data.filter(item => {
  365. return item.type === 8; //4表示金币消耗列表 // todo 修改对应type 8表示文章/视频
  366. });
  367. exportList.value = filteredData
  368. } else {
  369. ElMessage.error(result.msg || '获取导出列表失败')
  370. }
  371. } catch (error) {
  372. console.error('获取导出列表出错:', error)
  373. ElMessage.error('获取导出列表失败,请稍后重试')
  374. } finally {
  375. exportListLoading.value = false
  376. }
  377. }
  378. // 下载导出文件
  379. const downloadExportFile = (item) => {
  380. if (item.state === 2) {
  381. const link = document.createElement('a')
  382. link.href = item.url
  383. link.download = item.fileName
  384. link.click()
  385. } else {
  386. ElMessage.warning('文件还在导出中,请稍后再试')
  387. }
  388. }
  389. //根据状态返回对应的标签类型
  390. const getTagType = (state) => {
  391. switch (state) {
  392. case 0:
  393. return 'info';
  394. case 1:
  395. return 'primary';
  396. case 2:
  397. return 'success';
  398. case 3:
  399. return 'danger';
  400. default:
  401. return 'info';
  402. }
  403. }
  404. //根据状态返回对应的标签文案
  405. const getTagText = (state) => {
  406. switch (state) {
  407. case 0:
  408. return '待执行';
  409. case 1:
  410. return '执行中';
  411. case 2:
  412. return '执行完成';
  413. case 3:
  414. return '执行出错';
  415. default:
  416. return '未知状态';
  417. }
  418. }
  419. </script>
  420. <template>
  421. <el-card class="card1" style="margin-bottom: 0.5vh">
  422. <el-col style="margin-bottom: 1vh; ">
  423. <div class="select">
  424. <div class="selectRow">
  425. <el-text class="text" size="large">精网号</el-text>
  426. <el-input class="selectContent" v-model="beanConsumeArticle.jwcode" placeholder="请输入精网号" clearable />
  427. </div>
  428. <div class="selectRow">
  429. <el-text class="text" size="large">地区</el-text>
  430. <el-select class="selectContent" v-model="beanConsumeArticle.dept" placeholder="请选择地区" clearable>
  431. <el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
  432. </el-select>
  433. </div>
  434. <div class="selectRow">
  435. <el-text class="text" size="large">类型</el-text>
  436. <el-select class="selectContent" style="width: 20px" v-model="beanConsumeArticle.payMode" placeholder="请选择类型"
  437. clearable @change="handlePayModeChange">
  438. <el-option label="打赏" value="0" />
  439. <el-option label="付费购买" value="1" />
  440. <el-option label="其他" value="2" />
  441. </el-select>
  442. </div>
  443. <div class="selectRow">
  444. <el-text class="textB" size="large">文章/视频ID:</el-text>
  445. <el-input class="selectContent" v-model="beanConsumeArticle.articleId" placeholder="请输入文章/视频ID" clearable />
  446. </div>
  447. </div>
  448. </el-col>
  449. <el-col>
  450. <div class="select">
  451. <div class="selectRow" style="width: 33vw;">
  452. <el-text class="text" size="large">付费时间</el-text>
  453. <el-date-picker class="selectContent" v-model="getTime" type="datetimerange" range-separator=""
  454. start-placeholder="起始时间" end-placeholder="结束时间" style="width:25vw" @change="handleDatePickerChange"
  455. value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" />
  456. <div v-if="false">
  457. <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
  458. <el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>
  459. <el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>
  460. </div>
  461. </div>
  462. <div class="selectRow">
  463. <el-text class="text" size="large">作者</el-text>
  464. <el-input class="selectContent" v-model="beanConsumeArticle.author" placeholder="请输入作者" clearable />
  465. </div>
  466. <div class="selectRow">
  467. <el-text class="textB" size="large">文章/视频标题</el-text>
  468. <el-input class="selectContent" v-model="beanConsumeArticle.articleName" placeholder="请输入文章/视频标题" clearable />
  469. </div>
  470. </div>
  471. </el-col>
  472. <el-col>
  473. <div class="selectButton">
  474. <el-button type="primary" @click="search()">查询</el-button>
  475. <el-button type="primary" @click="exportExcel()">导出Excel</el-button>
  476. <el-button type="primary" @click="openExportList">查看导出列表</el-button>
  477. <el-button type="success" @click="reset()">重置</el-button>
  478. </div>
  479. </el-col>
  480. </el-card>
  481. <el-card class="card2">
  482. <div class="goldStatistics">
  483. 金豆总数{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
  484. 付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
  485. 免费金豆数{{ format3(Math.abs(freeBean)) }}
  486. </div>
  487. <div style="overflow-y: auto">
  488. <el-table :data="tableData" style="width: 82vw" height="57vh" @sort-change="handleSortChange"
  489. :row-style="{ height: '50px' }">
  490. <el-table-column type="index" label="序号" width="80px" fixed="left">
  491. <template #default="scope">
  492. <span>{{
  493. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  494. }}</span>
  495. </template>
  496. </el-table-column>
  497. <!-- 固定姓名列 -->
  498. <el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
  499. <!-- 固定精网号列 -->
  500. <el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
  501. <el-table-column prop="dept" label="地区" width="110px" />
  502. <el-table-column prop="type" label="类型" width="120px">
  503. <template #default="scope">
  504. {{
  505. Array.isArray(consumeTypes)
  506. ? consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型'
  507. : '未知类型'
  508. }}
  509. </template>
  510. </el-table-column>
  511. <el-table-column prop="beanNum" label="金豆总数" sortable="custom" width="120px" />
  512. <el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
  513. <el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
  514. <el-table-column prop="articleId" label="文章/视频ID" width="150px" />
  515. <el-table-column prop="articleName" label="文章/视频标题" width="150px" show-overflow-tooltip />
  516. <el-table-column prop="author" label="作者" width="120px" show-overflow-tooltip />
  517. <el-table-column prop="consumeTime" label="付费时间" sortable="custom" width="180px">
  518. <template #default="scope">
  519. {{ formatTime(scope.row.consumeTime) }}
  520. </template>
  521. </el-table-column>
  522. </el-table>
  523. </div>
  524. <!-- 分页 -->
  525. <div class="pagination">
  526. <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
  527. layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
  528. @current-change="handleCurrentChange"></el-pagination>
  529. </div>
  530. </el-card>
  531. <!-- 导出弹窗 -->
  532. <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
  533. <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
  534. <el-table-column prop="fileName" label="文件名" />
  535. <el-table-column prop="state" label="状态">
  536. <template #default="scope">
  537. <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
  538. {{ getTagText(scope.row.state) }}
  539. </el-tag>
  540. </template>
  541. </el-table-column>
  542. <el-table-column prop="createTime" label="创建时间">
  543. <template #default="scope">
  544. {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  545. </template>
  546. </el-table-column>
  547. <el-table-column label="操作">
  548. <template #default="scope">
  549. <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
  550. :disabled="scope.row.state !== 2">
  551. 下载
  552. </el-button>
  553. </template>
  554. </el-table-column>
  555. </el-table>
  556. <template #footer>
  557. <div class="dialog-footer">
  558. <el-button text @click="exportListVisible = false">关闭</el-button>
  559. </div>
  560. </template>
  561. </el-dialog>
  562. </template>
  563. <style scoped lang="scss">
  564. // 搜索的卡片样式
  565. .card1 {
  566. background: #F3FAFE;
  567. }
  568. // 表单的卡片样式
  569. .card2 {
  570. background: #E7F4FD;
  571. }
  572. // 新币总数等等
  573. .goldStatistics {
  574. margin-left: 1vw;
  575. margin-bottom: 1vh;
  576. color: #000000;
  577. font-family: "PingFang SC";
  578. font-size: 16px;
  579. font-style: normal;
  580. font-weight: 700;
  581. line-height: 20px;
  582. }
  583. // 表头背景等
  584. :deep(.el-table__header-wrapper),
  585. :deep(.el-table__body-wrapper),
  586. :deep(.el-table__cell),
  587. /* 表格 */
  588. :deep(.el-table__body td) {
  589. background-color: #F3FAFE !important;
  590. }
  591. /* 表头 */
  592. :deep(.el-table__header th) {
  593. background-color: #F3FAFE !important;
  594. }
  595. /* 鼠标悬停 */
  596. :deep(.el-table__row:hover > .el-table__cell) {
  597. background-color: #E5EBFE !important;
  598. }
  599. .pagination {
  600. display: flex;
  601. margin-top: 20px;
  602. }
  603. /** 搜索的样式 */
  604. .selectButton {
  605. margin-left: 1vw;
  606. margin-top: 1vh;
  607. }
  608. .select {
  609. display: flex;
  610. .selectRow {
  611. width: 16vw;
  612. display: flex;
  613. align-items: center;
  614. justify-content: center;
  615. padding: 0 0.5vw;
  616. .text {
  617. width: 5vw;
  618. font-size: 15px;
  619. }
  620. .textB {
  621. width: 7vw;
  622. font-size: 15px;
  623. }
  624. .selectContent {
  625. flex: 1;
  626. }
  627. }
  628. }
  629. </style>