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.

727 lines
24 KiB

  1. <template>
  2. <div class="schedule-page-container">
  3. <!-- 查询条件 -->
  4. <el-form :inline="true" label-position="top" class="search-form-inline">
  5. <div class="search-row">
  6. <el-form-item class="search-item">
  7. <span style="cursor: pointer" slot="label" @click="getBaseList(1100)"><a href="#">供应商编码</a></span>
  8. <el-input v-model="searchData.supplierNo" style="width: 120px" @keyup.enter.native="getMainData"/>
  9. </el-form-item>
  10. <el-form-item label="供应商名称" class="search-item">
  11. <el-input v-model="searchData.supplierName" style="width: 250px" @keyup.enter.native="getMainData"/>
  12. </el-form-item>
  13. <el-form-item label="申请日期" class="search-item">
  14. <div class="date-range">
  15. <el-date-picker v-model="searchData.requestDateStart" type="date" value-format="yyyy-MM-dd" placeholder="开始" style="width: 150px"/>
  16. <span class="split">-</span>
  17. <el-date-picker v-model="searchData.requestDateEnd" type="date" value-format="yyyy-MM-dd" placeholder="结束" style="width: 150px"/>
  18. </div>
  19. </el-form-item>
  20. <el-form-item label="状态" class="search-item">
  21. <el-select v-model="searchData.status" style="width: 60%">
  22. <el-option label="已下达" value="AUDITED" />
  23. <el-option label="已排程" value="SCHEDULED" />
  24. </el-select>
  25. </el-form-item>
  26. </div>
  27. <div class="search-row">
  28. <el-form-item class="search-item">
  29. <span style="cursor: pointer" slot="label" @click="getBaseList(2016, 'createBy')"><a href="#">申请人员</a></span>
  30. <el-input v-model="searchData.createBy" style="width: 120px" @keyup.enter.native="getMainData"/>
  31. </el-form-item>
  32. <el-form-item class="search-item">
  33. <span style="cursor: pointer" slot="label" @click="getBaseList(2016, 'qcOperator')"><a href="#">QC人员</a></span>
  34. <el-input v-model="searchData.qcOperator" style="width: 120px" @keyup.enter.native="getMainData"/>
  35. </el-form-item>
  36. <el-form-item class="search-item">
  37. <span style="cursor: pointer" slot="label" @click="openRequestNoChooser"><a href="#">申请单号</a></span>
  38. <el-input v-model="searchData.requestNo" style="width: 120px" @keyup.enter.native="getMainData"/>
  39. </el-form-item>
  40. <el-form-item label="建议验货日期" class="search-item">
  41. <div class="date-range">
  42. <el-date-picker v-model="searchData.needInspectDateStart" type="date" value-format="yyyy-MM-dd" placeholder="开始" style="width: 150px"/>
  43. <span class="split">-</span>
  44. <el-date-picker v-model="searchData.needInspectDateEnd" type="date" value-format="yyyy-MM-dd" placeholder="结束" style="width: 150px"/>
  45. </div>
  46. </el-form-item>
  47. <el-form-item label="计划验货日期" class="search-item">
  48. <div class="date-range">
  49. <el-date-picker v-model="searchData.planStartDate" type="date" value-format="yyyy-MM-dd" placeholder="开始" style="width: 150px"/>
  50. <span class="split">-</span>
  51. <el-date-picker v-model="searchData.planEndDate" type="date" value-format="yyyy-MM-dd" placeholder="结束" style="width: 150px"/>
  52. </div>
  53. </el-form-item>
  54. <el-form-item label=" " class="search-item search-btn-item">
  55. <el-button type="primary" @click="getMainData" style="">查询</el-button>
  56. </el-form-item>
  57. </div>
  58. </el-form>
  59. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  60. <!-- 申请单号选择弹窗 -->
  61. <el-dialog title="选择申请单号" :visible.sync="requestNoDialogVisible" width="800px" append-to-body :close-on-click-modal="false" @close="closeRequestNoChooser">
  62. <el-form :inline="true" size="mini" label-position="top">
  63. <el-form-item label="申请单号">
  64. <el-input v-model="requestNoSearchParam" style="width: 150px" @keyup.enter.native="loadRequestNoList"/>
  65. </el-form-item>
  66. <el-form-item label=" ">
  67. <el-button type="primary" @click="loadRequestNoList">查询</el-button>
  68. </el-form-item>
  69. </el-form>
  70. <el-table :data="requestNoList" border height="300" @row-dblclick="selectRequestNo" v-loading="requestNoListLoading" highlight-current-row style="width: 100%">
  71. <el-table-column prop="requestNo" label="申请单号" header-align="center" align="left" min-width="150"/>
  72. <el-table-column prop="requestDate" label="申请日期" header-align="center" align="center" width="120"/>
  73. <el-table-column prop="supplierNo" label="供应商编码" header-align="center" align="left" width="120"/>
  74. <el-table-column prop="supplierName" label="供应商名称" header-align="center" align="left" min-width="150" show-overflow-tooltip/>
  75. <el-table-column prop="status" label="状态" header-align="center" align="center" width="100"/>
  76. </el-table>
  77. <span slot="footer" class="dialog-footer">
  78. <el-button @click="requestNoDialogVisible = false">关闭</el-button>
  79. </span>
  80. </el-dialog>
  81. <el-table
  82. :height="height"
  83. :data="mainDataList"
  84. border
  85. ref="mainTable"
  86. highlight-current-row
  87. @row-click="changeData"
  88. v-loading="dataListLoading"
  89. style="margin-top: 0px; width: 100%;">
  90. <el-table-column
  91. v-for="(item,index) in columnArray1" :key="index"
  92. :sortable="item.columnSortable"
  93. :prop="item.columnProp"
  94. :header-align="item.headerAlign"
  95. :show-overflow-tooltip="item.showOverflowTooltip"
  96. :align="item.align"
  97. :fixed="item.fixed==''?false:item.fixed"
  98. :min-width="item.columnWidth"
  99. :label="item.columnLabel">
  100. <template slot-scope="scope">
  101. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  102. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  103. style="width: 100px; height: 100px"/></span>
  104. </template>
  105. </el-table-column>
  106. <el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
  107. <template slot-scope="scope">
  108. <!-- 移除单个排程按钮统一在页签中操作 -->
  109. </template>
  110. </el-table-column>
  111. </el-table>
  112. <!-- 分页插件 -->
  113. <el-pagination style="margin-top: 5px"
  114. @size-change="sizeChangeHandle"
  115. @current-change="currentChangeHandle"
  116. :current-page="pageIndex"
  117. :page-sizes="[20, 50, 100, 200, 500]"
  118. :page-size="pageSize"
  119. :total="totalPage"
  120. layout="total, sizes, prev, pager, next, jumper"
  121. small>
  122. </el-pagination>
  123. <!-- 详情页签 -->
  124. <el-tabs v-model="activeTab" @tab-click="handleTabClick" class="customer-tab" type="border-card">
  125. <!-- 排程视图 -->
  126. <el-tab-pane label="排程" name="schedule">
  127. <inspection-schedule-view
  128. ref="scheduleView"
  129. :request-nos="selectedRequestNos"
  130. :current-row="currentRow"
  131. :current-status-db="currentRow.statusDb"
  132. @schedule-success="handleScheduleSuccess" />
  133. </el-tab-pane>
  134. <!-- 基本信息 -->
  135. <el-tab-pane label="基本信息" name="base">
  136. <inspection-request-detail :detail-data="currentRow" />
  137. </el-tab-pane>
  138. <!-- 验货明细 -->
  139. <el-tab-pane label="验货明细" name="detail">
  140. <inspection-request-detail-tab ref="inspectionDetailTab" :detail-data="currentRow" :table-height="detailHeight" />
  141. </el-tab-pane>
  142. <!-- 验货关联PO明细 -->
  143. <el-tab-pane label="验货关联PO明细" name="poDetail">
  144. <inspection-request-po-detail-tab ref="poDetailTab" :detail-data="currentRow" :table-height="detailHeight" />
  145. </el-tab-pane>
  146. <!-- 附件管理 -->
  147. <el-tab-pane label="附件管理" name="attachment">
  148. <inspection-request-attachment-tab ref="attachmentTab" :detail-data="currentRow" :table-height="detailHeight" />
  149. </el-tab-pane>
  150. </el-tabs>
  151. </div>
  152. </template>
  153. <script>
  154. import { searchInspectionRequestHeaderList } from '@/api/inspection/inspectionRequestHeader.js'
  155. import Chooselist from '@/views/modules/common/Chooselist_eam'
  156. import ComInspectionRequestDetail from './com_inspectionRequestDetail.vue'
  157. import ComInspectionRequestDetailTab from './com_inspectionRequestDetailTab.vue'
  158. import ComInspectionRequestPoDetailTab from './com_inspectionRequestPoDetailTab.vue'
  159. import ComInspectionRequestAttachmentTab from './com_inspectionRequestAttachmentTab.vue'
  160. import ComInspectionScheduleView from './com_inspectionScheduleView.vue'
  161. export default {
  162. components: {
  163. Chooselist,
  164. InspectionRequestDetail: ComInspectionRequestDetail,
  165. InspectionRequestDetailTab: ComInspectionRequestDetailTab,
  166. InspectionRequestPoDetailTab: ComInspectionRequestPoDetailTab,
  167. InspectionRequestAttachmentTab: ComInspectionRequestAttachmentTab,
  168. InspectionScheduleView: ComInspectionScheduleView
  169. },
  170. data () {
  171. return {
  172. functionId: this.$route.meta.menuId,
  173. height: 400,
  174. detailHeight: 400,
  175. currentRow: {},
  176. tagNo: '',
  177. searchType: '',
  178. requestNoDialogVisible: false,
  179. requestNoList: [],
  180. requestNoListLoading: false,
  181. requestNoSearchParam: '',
  182. activeTab: 'schedule',
  183. selectedRequestNos: [],
  184. searchData: {
  185. requestNo: '',
  186. supplierNo: '',
  187. supplierName: '',
  188. status: 'AUDITED', // 默认状态为已审核
  189. qcOperator: '',
  190. createBy: '',
  191. requestDateStart: '',
  192. requestDateEnd: '',
  193. needInspectDateStart: '',
  194. needInspectDateEnd: '',
  195. planStartDate: '',
  196. planEndDate: '',
  197. page: 1,
  198. limit: 50
  199. },
  200. pageIndex: 1,
  201. pageSize: 50,
  202. totalPage: 0,
  203. mainDataList: [],
  204. dataListLoading: false,
  205. columnArray1: [
  206. {
  207. userId: this.$store.state.user.name,
  208. functionId: this.functionId,
  209. serialNumber: 'ScheduleTable1RequestNo',
  210. tableId: 'ScheduleTable1',
  211. tableName: '验货排程',
  212. columnProp: 'requestNo',
  213. headerAlign: 'center',
  214. align: 'left',
  215. columnLabel: '申请单号',
  216. columnWidth: '120',
  217. columnHidden: false,
  218. columnImage: false,
  219. columnSortable: false,
  220. sortLv: 0,
  221. status: true,
  222. fixed: false
  223. },
  224. {
  225. userId: this.$store.state.user.name,
  226. functionId: this.functionId,
  227. serialNumber: 'ScheduleTable1RequestDate',
  228. tableId: 'ScheduleTable1',
  229. tableName: '验货排程',
  230. columnProp: 'requestDate',
  231. headerAlign: 'center',
  232. align: 'center',
  233. columnLabel: '申请日期',
  234. columnWidth: '120',
  235. columnHidden: false,
  236. columnImage: false,
  237. columnSortable: false,
  238. sortLv: 0,
  239. status: true,
  240. fixed: false
  241. },
  242. {
  243. userId: this.$store.state.user.name,
  244. functionId: this.functionId,
  245. serialNumber: 'ScheduleTable1SupplierNo',
  246. tableId: 'ScheduleTable1',
  247. tableName: '验货排程',
  248. columnProp: 'supplierNo',
  249. headerAlign: 'center',
  250. align: 'left',
  251. columnLabel: '供应商编码',
  252. columnWidth: '120',
  253. columnHidden: false,
  254. columnImage: false,
  255. columnSortable: false,
  256. sortLv: 0,
  257. status: true,
  258. fixed: false
  259. },
  260. {
  261. userId: this.$store.state.user.name,
  262. functionId: this.functionId,
  263. serialNumber: 'ScheduleTable1SupplierName',
  264. tableId: 'ScheduleTable1',
  265. tableName: '验货排程',
  266. columnProp: 'supplierName',
  267. headerAlign: 'center',
  268. align: 'left',
  269. columnLabel: '供应商名称',
  270. columnWidth: '150',
  271. columnHidden: false,
  272. columnImage: false,
  273. columnSortable: false,
  274. sortLv: 0,
  275. status: true,
  276. fixed: false
  277. },
  278. {
  279. userId: this.$store.state.user.name,
  280. functionId: this.functionId,
  281. serialNumber: 'ScheduleTable1CreateBy',
  282. tableId: 'ScheduleTable1',
  283. tableName: '验货排程',
  284. columnProp: 'createBy',
  285. headerAlign: 'center',
  286. align: 'left',
  287. columnLabel: '申请人员',
  288. columnWidth: '100',
  289. columnHidden: false,
  290. columnImage: false,
  291. columnSortable: false,
  292. sortLv: 0,
  293. status: true,
  294. fixed: false
  295. },
  296. {
  297. userId: this.$store.state.user.name,
  298. functionId: this.functionId,
  299. serialNumber: 'ScheduleTable1NeedInspectDate',
  300. tableId: 'ScheduleTable1',
  301. tableName: '验货排程',
  302. columnProp: 'needInspectDate',
  303. headerAlign: 'center',
  304. align: 'center',
  305. columnLabel: '建议验货日期',
  306. columnWidth: '120',
  307. columnHidden: false,
  308. columnImage: false,
  309. columnSortable: false,
  310. sortLv: 0,
  311. status: true,
  312. fixed: false
  313. },
  314. {
  315. userId: this.$store.state.user.name,
  316. functionId: this.functionId,
  317. serialNumber: 'ScheduleTable1InspectAddress',
  318. tableId: 'ScheduleTable1',
  319. tableName: '验货排程',
  320. columnProp: 'inspectAddress',
  321. headerAlign: 'center',
  322. align: 'left',
  323. columnLabel: '验货地址',
  324. columnWidth: '200',
  325. columnHidden: false,
  326. columnImage: false,
  327. columnSortable: false,
  328. sortLv: 0,
  329. status: true,
  330. fixed: false
  331. },
  332. {
  333. userId: this.$store.state.user.name,
  334. functionId: this.functionId,
  335. serialNumber: 'ScheduleTable1Contact',
  336. tableId: 'ScheduleTable1',
  337. tableName: '验货排程',
  338. columnProp: 'inspectContract',
  339. headerAlign: 'center',
  340. align: 'left',
  341. columnLabel: '联系人',
  342. columnWidth: '150',
  343. columnHidden: false,
  344. columnImage: false,
  345. columnSortable: false,
  346. sortLv: 0,
  347. status: true,
  348. fixed: false
  349. },
  350. {
  351. userId: this.$store.state.user.name,
  352. functionId: this.functionId,
  353. serialNumber: 'ScheduleTable1Remark',
  354. tableId: 'ScheduleTable1',
  355. tableName: '验货排程',
  356. columnProp: 'remark',
  357. headerAlign: 'center',
  358. align: 'left',
  359. columnLabel: '备注',
  360. columnWidth: '150',
  361. columnHidden: false,
  362. columnImage: false,
  363. columnSortable: false,
  364. sortLv: 0,
  365. status: true,
  366. fixed: false
  367. },
  368. {
  369. userId: this.$store.state.user.name,
  370. functionId: this.functionId,
  371. serialNumber: 'ScheduleTable1Status',
  372. tableId: 'ScheduleTable1',
  373. tableName: '验货排程',
  374. columnProp: 'status',
  375. headerAlign: 'center',
  376. align: 'center',
  377. columnLabel: '状态',
  378. columnWidth: '100',
  379. columnHidden: false,
  380. columnImage: false,
  381. columnSortable: false,
  382. sortLv: 0,
  383. status: true,
  384. fixed: false
  385. },
  386. {
  387. userId: this.$store.state.user.name,
  388. functionId: this.functionId,
  389. serialNumber: 'ScheduleTable1PlanStartDate',
  390. tableId: 'ScheduleTable1',
  391. tableName: '验货排程',
  392. columnProp: 'planStartDate',
  393. headerAlign: 'center',
  394. align: 'center',
  395. columnLabel: '计划验货日期',
  396. columnWidth: '120',
  397. columnHidden: false,
  398. columnImage: false,
  399. columnSortable: false,
  400. sortLv: 0,
  401. status: true,
  402. fixed: false
  403. },
  404. {
  405. userId: this.$store.state.user.name,
  406. functionId: this.functionId,
  407. serialNumber: 'ScheduleTable1QcOperator',
  408. tableId: 'ScheduleTable1',
  409. tableName: '验货排程',
  410. columnProp: 'qcOperator',
  411. headerAlign: 'center',
  412. align: 'left',
  413. columnLabel: 'QC人员',
  414. columnWidth: '100',
  415. columnHidden: false,
  416. columnImage: false,
  417. columnSortable: false,
  418. sortLv: 0,
  419. status: true,
  420. fixed: false
  421. }
  422. ]
  423. }
  424. },
  425. mounted () {
  426. this.$nextTick(() => {
  427. // 计算表格高度,留出查询表单、分页和页签的空间
  428. this.height = 250
  429. this.detailHeight = 300
  430. this.getMainData()
  431. })
  432. },
  433. methods: {
  434. // 获取基础数据列表
  435. getBaseList (val, type) {
  436. this.tagNo = val
  437. this.searchType = type || ''
  438. this.$nextTick(() => {
  439. let strVal = ''
  440. let conSql = ''
  441. if (val === 1100) {
  442. strVal = this.searchData.supplierNo || ''
  443. conSql = " and site = '" + this.$store.state.user.site + "'"
  444. }
  445. if (val === 2016) {
  446. if (type === 'createBy') {
  447. strVal = this.searchData.createBy || ''
  448. } else if (type === 'qcOperator') {
  449. strVal = this.searchData.qcOperator || ''
  450. }
  451. // 防止 Druid 拦截 where 1=1
  452. conSql = " and username <> '' "
  453. }
  454. this.$refs.baseList.init(val, strVal, conSql)
  455. })
  456. },
  457. /* 列表方法的回调 */
  458. getBaseData (val) {
  459. if (this.tagNo === 1100) {
  460. this.searchData.supplierNo = val.supplier_no || ''
  461. this.searchData.supplierName = val.supplier_name || ''
  462. }
  463. if (this.tagNo === 2016) {
  464. if (this.searchType === 'createBy') {
  465. this.searchData.createBy = val.username || val.user_display || val.name
  466. } else if (this.searchType === 'qcOperator') {
  467. this.searchData.qcOperator = val.username || val.user_display || val.name
  468. }
  469. }
  470. },
  471. // 查询数据
  472. getMainData () {
  473. this.searchData.limit = this.pageSize
  474. this.searchData.page = this.pageIndex
  475. this.dataListLoading = true
  476. searchInspectionRequestHeaderList(this.searchData).then(({ data }) => {
  477. if (data.code === 0) {
  478. this.mainDataList = data.page.list
  479. this.pageIndex = data.page.currPage
  480. this.pageSize = data.page.pageSize
  481. this.totalPage = data.page.totalCount
  482. this.$nextTick(() => {
  483. if (this.$refs.mainTable) {
  484. this.$refs.mainTable.clearSelection()
  485. }
  486. })
  487. // 判断是否有数据
  488. if (this.mainDataList.length > 0) {
  489. this.$refs.mainTable.setCurrentRow(this.mainDataList[0])
  490. this.changeData(this.mainDataList[0])
  491. } else {
  492. this.changeData(null)
  493. }
  494. }
  495. this.dataListLoading = false
  496. }).catch(() => {
  497. this.dataListLoading = false
  498. })
  499. },
  500. // 每页数
  501. sizeChangeHandle (val) {
  502. this.pageSize = val
  503. this.pageIndex = 1
  504. this.getMainData()
  505. },
  506. // 当前页
  507. currentChangeHandle (val) {
  508. this.pageIndex = val
  509. this.getMainData()
  510. },
  511. // 处理排程成功事件 - 刷新整个页面数据
  512. handleScheduleSuccess() {
  513. // 重新查询主表数据(会触发 changeData,进而刷新页签)
  514. this.getMainData()
  515. },
  516. // 页签点击事件
  517. handleTabClick (tab) {
  518. if (tab.name === 'schedule') {
  519. // 排程页签
  520. this.$nextTick(() => {
  521. if (this.$refs.scheduleView) {
  522. this.$refs.scheduleView.loadQcList()
  523. }
  524. })
  525. } else if (tab.name === 'detail') {
  526. this.$nextTick(() => {
  527. if (this.$refs.inspectionDetailTab) {
  528. this.$refs.inspectionDetailTab.loadDetailList()
  529. }
  530. })
  531. } else if (tab.name === 'poDetail') {
  532. this.$nextTick(() => {
  533. if (this.$refs.poDetailTab) {
  534. this.$refs.poDetailTab.loadDetailList()
  535. }
  536. })
  537. } else if (tab.name === 'attachment') {
  538. this.$nextTick(() => {
  539. if (this.$refs.attachmentTab) {
  540. this.$refs.attachmentTab.loadAttachmentTypeList()
  541. }
  542. })
  543. }
  544. },
  545. // 行点击事件
  546. changeData (row) {
  547. console.log('======changeData======')
  548. console.log('row=', row)
  549. this.currentRow = row ? JSON.parse(JSON.stringify(row)) : {}
  550. if (row && row.requestNo) {
  551. this.selectedRequestNos = [row.requestNo]
  552. } else {
  553. this.selectedRequestNos = []
  554. }
  555. // 如果当前在排程页签,刷新排程视图(重新加载QC列表+排程数据)
  556. if (this.activeTab === 'schedule' && this.$refs.scheduleView) {
  557. console.log('[排程] 刷新排程视图')
  558. this.$refs.scheduleView.loadQcList()
  559. }
  560. },
  561. // 主表格行样式
  562. mainTableRowClassName ({ row }) {
  563. return ''
  564. },
  565. // 打开申请单号选择弹窗
  566. openRequestNoChooser () {
  567. this.requestNoDialogVisible = true
  568. this.requestNoSearchParam = this.searchData.requestNo || ''
  569. this.$nextTick(() => {
  570. this.loadRequestNoList()
  571. })
  572. },
  573. // 加载申请单号列表
  574. loadRequestNoList () {
  575. this.requestNoListLoading = true
  576. const params = {
  577. requestNo: this.requestNoSearchParam,
  578. page: 1,
  579. limit: 200
  580. }
  581. searchInspectionRequestHeaderList(params).then(({ data }) => {
  582. if (data.code === 0 && data.page) {
  583. this.requestNoList = data.page.list || []
  584. } else {
  585. this.requestNoList = []
  586. }
  587. this.requestNoListLoading = false
  588. }).catch(() => {
  589. this.requestNoList = []
  590. this.requestNoListLoading = false
  591. })
  592. },
  593. // 选中申请单号
  594. selectRequestNo (row) {
  595. this.searchData.requestNo = row.requestNo || ''
  596. this.requestNoDialogVisible = false
  597. },
  598. // 关闭申请单号选择弹窗
  599. closeRequestNoChooser () {
  600. this.requestNoList = []
  601. this.requestNoSearchParam = ''
  602. },
  603. },
  604. }
  605. </script>
  606. <style scoped lang="scss">
  607. // 主容器 - 固定高度,滚动条
  608. .schedule-page-container {
  609. height: calc(100vh - 120px);
  610. overflow: hidden;
  611. display: flex;
  612. flex-direction: column;
  613. padding: 0;
  614. background: #fff;
  615. }
  616. .search-form-inline {
  617. background: #fff;
  618. padding: 0;
  619. margin-bottom: 0;
  620. }
  621. .search-row {
  622. display: flex;
  623. align-items: flex-end;
  624. flex-wrap: wrap;
  625. gap: 0;
  626. margin-bottom: 0;
  627. }
  628. .search-item {
  629. flex: none;
  630. margin-bottom: 0;
  631. margin-right: 12px;
  632. }
  633. /* 使用 Element UI 默认标签字体大小(14px),移除自定义的13px和颜色 */
  634. .search-item /deep/ .el-form-item__label {
  635. padding-bottom: 5px;
  636. line-height: 1;
  637. height: auto;
  638. }
  639. .search-btn-item {
  640. flex: none;
  641. margin-bottom: 0;
  642. margin-right: 0;
  643. }
  644. .search-item /deep/ .el-form-item__content {
  645. line-height: normal;
  646. }
  647. .date-range {
  648. display: flex;
  649. align-items: center;
  650. }
  651. .split {
  652. padding: 0 6px;
  653. color: #606266;
  654. font-size: 13px;
  655. }
  656. // 表格区域 - 自动高度
  657. /deep/ .el-table {
  658. margin-bottom: 5px;
  659. flex-shrink: 0;
  660. }
  661. // 分页 - 自动高度
  662. /deep/ .el-pagination {
  663. margin-bottom: 8px;
  664. flex-shrink: 0;
  665. }
  666. // 页签区域 - 占据剩余空间,内部滚动
  667. /deep/ .customer-tab {
  668. flex: 1;
  669. overflow: hidden;
  670. display: flex;
  671. flex-direction: column;
  672. .el-tabs__header {
  673. margin-bottom: 0;
  674. flex-shrink: 0;
  675. }
  676. .el-tabs__content {
  677. flex: 1;
  678. overflow-y: auto;
  679. overflow-x: hidden;
  680. padding: 10px !important;
  681. }
  682. }
  683. </style>