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.

705 lines
22 KiB

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