index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919
  1. <template>
  2. <view class="content-box">
  3. <uni-nav-bar
  4. fixed="true"
  5. statusBar="true"
  6. left-icon="back"
  7. title="受托列表"
  8. background-color="#157A2C"
  9. color="#fff"
  10. @clickLeft="back"
  11. ></uni-nav-bar>
  12. <view class="top-wrapper">
  13. <uni-section>
  14. <uni-easyinput
  15. prefixIcon="search"
  16. v-model="searchForm.name"
  17. placeholder="请输入名称"
  18. ></uni-easyinput>
  19. </uni-section>
  20. <image
  21. class="menu_icon"
  22. src="~@/static/pda/menu.svg"
  23. @click="showFilter = true"
  24. ></image>
  25. <button class="search_btn" @click="handleSearch">搜索</button>
  26. </view>
  27. <view class="tab-bar">
  28. <view
  29. class="tab-item"
  30. :class="{ active: tabValue === '1' }"
  31. @click="handleTabClick('1')"
  32. >
  33. 受托任务
  34. </view>
  35. <view
  36. class="tab-item"
  37. :class="{ active: tabValue === '2' }"
  38. @click="handleTabClick('2')"
  39. >
  40. 预处理任务
  41. </view>
  42. </view>
  43. <view class="list_box">
  44. <u-list @scrolltolower="loadMore">
  45. <u-list-item v-for="item in list" :key="item.id">
  46. <view class="list-item" @click="goDetail(item)">
  47. <view class="item-header">
  48. <view class="item-code">{{ item.code }}</view>
  49. <view class="item-status">
  50. <text class="status-tag" :class="getStatusClass(item.status)">{{
  51. getStatusText(item.status)
  52. }}</text>
  53. </view>
  54. </view>
  55. <view class="item-row">
  56. <text class="label">类型:</text>
  57. <text class="value">{{ getTypeText(item.type) }}</text>
  58. </view>
  59. <view class="item-row">
  60. <text class="label">名称:</text>
  61. <text class="value">{{ item.name }}</text>
  62. </view>
  63. <view class="item-row">
  64. <text class="label">紧急程度:</text>
  65. <text class="value">{{
  66. item.priority == 1 ? "一般" : "紧急"
  67. }}</text>
  68. </view>
  69. <view class="item-row">
  70. <text class="label">请托数量:</text>
  71. <text class="value"
  72. >{{ item.totalCount }}{{ item.measuringUnit }}</text
  73. >
  74. </view>
  75. <view class="item-row">
  76. <text class="label">接收数量:</text>
  77. <text class="value"
  78. >{{ item.receiveQuantity || 0 }}{{ item.measuringUnit }}</text
  79. >
  80. </view>
  81. <view class="item-row">
  82. <text class="label">请托工厂:</text>
  83. <text class="value">{{ item.applyFactoriesName }}</text>
  84. </view>
  85. <view class="item-row">
  86. <text class="label">收货状态:</text>
  87. <text class="value">
  88. <text
  89. class="status-tag"
  90. :class="getSendStatusClass(item.sendStatus)"
  91. >{{ getSendStatusText(item.sendStatus) }}</text
  92. >
  93. </text>
  94. </view>
  95. <view class="item-row">
  96. <text class="label">审批状态:</text>
  97. <text class="value">
  98. <text
  99. class="status-tag"
  100. :class="getApprovalStatusClass(item.approvalStatus)"
  101. >{{ getApprovalStatusText(item.approvalStatus) }}</text
  102. >
  103. </text>
  104. </view>
  105. <view class="item-row">
  106. <text class="label">转换状态:</text>
  107. <text class="value">
  108. <text
  109. class="status-tag"
  110. :class="getChangeTypeClass(item.changeType)"
  111. >{{ getChangeTypeText(item.changeType) }}</text
  112. >
  113. </text>
  114. </view>
  115. <view class="item-footer">
  116. <text class="time">{{ item.createTime }}</text>
  117. </view>
  118. <view
  119. class="item-actions"
  120. v-if="
  121. canReceive(item) ||
  122. canViewReceiveDetail(item) ||
  123. canViewSendDetail(item) ||
  124. canViewReceiveOrder(item)
  125. "
  126. >
  127. <button
  128. v-if="canReceive(item)"
  129. class="action-btn btn-success"
  130. @click.stop="handleReceive(item)"
  131. >
  132. 收货
  133. </button>
  134. <button
  135. v-if="canViewSendDetail(item)"
  136. class="action-btn btn-order"
  137. @click.stop="handleSendDetail(item)"
  138. >
  139. 发货详情
  140. </button>
  141. <button
  142. v-if="canViewReceiveDetail(item)"
  143. class="action-btn btn-info"
  144. @click.stop="handleReceiveDetail(item)"
  145. >
  146. 收货详情
  147. </button>
  148. <button
  149. v-if="canViewReceiveOrder(item)"
  150. class="action-btn btn-primary"
  151. @click.stop="handleConvertOrder(item)"
  152. >
  153. 转生产订单
  154. </button>
  155. </view>
  156. </view>
  157. </u-list-item>
  158. <u-list-item v-if="list.length === 0">
  159. <view class="empty-wrapper">
  160. <u-empty iconSize="150" textSize="32" text="暂无数据"></u-empty>
  161. </view>
  162. </u-list-item>
  163. </u-list>
  164. </view>
  165. <SearchPopup mode="top" v-if="showFilter">
  166. <template v-slot:list>
  167. <view class="search_list">
  168. <u-form
  169. labelPosition="left"
  170. :model="searchForm"
  171. labelWidth="180"
  172. labelAlign="left"
  173. >
  174. <u-form-item label="类型:" borderBottom>
  175. <zxz-uni-data-select
  176. :localdata="typeList"
  177. v-model="searchForm.type"
  178. dataValue="value"
  179. dataKey="label"
  180. format="{label}"
  181. ></zxz-uni-data-select>
  182. </u-form-item>
  183. <u-form-item label="请托工厂:" borderBottom>
  184. <zxz-uni-data-select
  185. :localdata="factoryList"
  186. v-model="searchForm.applyFactoriesId"
  187. dataValue="value"
  188. dataKey="label"
  189. format="{label}"
  190. filterable
  191. ></zxz-uni-data-select>
  192. </u-form-item>
  193. <u-form-item label="请托时间:" borderBottom>
  194. <view class="date-range-wrapper">
  195. <view
  196. class="date-picker-box"
  197. @click="showStartPicker = true"
  198. >
  199. <text :class="{ placeholder: !startTimeDisplay }">
  200. {{ startTimeDisplay || "开始日期" }}
  201. </text>
  202. </view>
  203. <text class="date-separator">至</text>
  204. <view
  205. class="date-picker-box"
  206. @click="showEndPicker = true"
  207. >
  208. <text :class="{ placeholder: !endTimeDisplay }">
  209. {{ endTimeDisplay || "结束日期" }}
  210. </text>
  211. </view>
  212. </view>
  213. </u-form-item>
  214. </u-form>
  215. </view>
  216. </template>
  217. <template v-slot:operate>
  218. <view class="operate_box">
  219. <u-button
  220. size="small"
  221. class="u-reset-button reset-btn"
  222. @click="filterCancel"
  223. >重置</u-button
  224. >
  225. <u-button
  226. type="success"
  227. size="small"
  228. class="u-reset-button confirm-btn"
  229. @click="filterConfirm"
  230. >确定</u-button
  231. >
  232. </view>
  233. </template>
  234. </SearchPopup>
  235. <!-- 开始日期选择器 -->
  236. <u-datetime-picker
  237. v-model="startTime"
  238. :show="showStartPicker"
  239. mode="date"
  240. @confirm="confirmStartTime"
  241. @cancel="showStartPicker = false"
  242. ></u-datetime-picker>
  243. <!-- 结束日期选择器 -->
  244. <u-datetime-picker
  245. v-model="endTime"
  246. :show="showEndPicker"
  247. mode="date"
  248. @confirm="confirmEndTime"
  249. @cancel="showEndPicker = false"
  250. ></u-datetime-picker>
  251. </view>
  252. </template>
  253. <script>
  254. import { getList } from "@/api/beEntrust/index.js";
  255. import SearchPopup from "../../components/searchPopup.vue";
  256. import { getFactoryarea } from "@/api/inspectionWork/index";
  257. let isEnd = false;
  258. export default {
  259. components: {
  260. SearchPopup,
  261. },
  262. data() {
  263. return {
  264. searchForm: {
  265. type: "",
  266. name: "",
  267. applyFactoriesId: "",
  268. startTime: "",
  269. endTime: "",
  270. },
  271. typeList: [],
  272. factoryList: [],
  273. list: [],
  274. pageNum: 1,
  275. pageSize: 20,
  276. total: 0,
  277. loading: false,
  278. hasMore: true,
  279. showFilter: false,
  280. showStartPicker: false,
  281. showEndPicker: false,
  282. startTime: "",
  283. endTime: "",
  284. startTimeDisplay: "",
  285. endTimeDisplay: "",
  286. tabValue: "1",
  287. };
  288. },
  289. onLoad() {
  290. this.getTypeList();
  291. this.getFactoryList();
  292. },
  293. onShow() {
  294. this.loadData(true);
  295. },
  296. methods: {
  297. back() {
  298. uni.navigateBack();
  299. },
  300. async getTypeList() {
  301. this.typeList = [
  302. { label: "加工", value: "1" },
  303. { label: "装配", value: "2" },
  304. ];
  305. },
  306. async getFactoryList() {
  307. try {
  308. const res = await getFactoryarea({
  309. pageNum: 1,
  310. size: 999,
  311. type: 1,
  312. });
  313. if (res && res.list) {
  314. this.factoryList = [
  315. ...res.list.map((item) => ({
  316. label: item.name,
  317. value: item.id,
  318. })),
  319. ];
  320. }
  321. } catch (error) {
  322. console.error("获取工厂列表失败", error);
  323. this.factoryList = [];
  324. }
  325. },
  326. confirmStartTime(e) {
  327. const timestamp = e.value;
  328. const date = new Date(timestamp);
  329. this.startTime = timestamp;
  330. this.startTimeDisplay = this.formatDate(date);
  331. this.searchForm.startTime = this.formatDateTime(date, "00:00:00");
  332. this.showStartPicker = false;
  333. },
  334. confirmEndTime(e) {
  335. const timestamp = e.value;
  336. const date = new Date(timestamp);
  337. this.endTime = timestamp;
  338. this.endTimeDisplay = this.formatDate(date);
  339. this.searchForm.endTime = this.formatDateTime(date, "23:59:59");
  340. this.showEndPicker = false;
  341. },
  342. formatDate(date) {
  343. const year = date.getFullYear();
  344. const month = String(date.getMonth() + 1).padStart(2, "0");
  345. const day = String(date.getDate()).padStart(2, "0");
  346. return `${year}-${month}-${day}`;
  347. },
  348. formatDateTime(date, time) {
  349. return `${this.formatDate(date)} ${time}`;
  350. },
  351. async loadData(isRefresh = false) {
  352. if (this.loading) return;
  353. if (isRefresh) {
  354. this.pageNum = 1;
  355. this.list = [];
  356. this.hasMore = true;
  357. }
  358. if (!this.hasMore) return;
  359. this.loading = true;
  360. isEnd = false;
  361. try {
  362. const params = {
  363. pageNum: this.pageNum,
  364. size: this.pageSize,
  365. ...this.searchForm,
  366. };
  367. if (this.tabValue === "2") {
  368. params.preStatus = 1;
  369. }
  370. const res = await getList(params);
  371. if (this.pageNum === 1) {
  372. this.list = [];
  373. }
  374. if (res.list && res.list.length > 0) {
  375. this.list.push(...res.list);
  376. this.total = res.total;
  377. isEnd = this.list.length >= this.total;
  378. this.hasMore = !isEnd;
  379. } else {
  380. isEnd = true;
  381. this.hasMore = false;
  382. }
  383. } catch (error) {
  384. uni.showToast({
  385. title: "加载失败",
  386. icon: "none",
  387. });
  388. } finally {
  389. this.loading = false;
  390. }
  391. },
  392. handleTabClick(tab) {
  393. this.tabValue = tab;
  394. this.loadData(true);
  395. },
  396. handleConvertOrder(item) {
  397. if (item.sendStatus != 2) {
  398. uni.showToast({
  399. title: "请先收货再转生产订单",
  400. icon: "none",
  401. });
  402. return;
  403. }
  404. if (item.changeType == 1 || item.changeType == 2) {
  405. uni.showToast({
  406. title: "该工单已转换,不能重复转换",
  407. icon: "none",
  408. });
  409. return;
  410. }
  411. uni.navigateTo({
  412. url: `/pages/pda/beEntrust/createOrder/createOrder?id=${item.id}`,
  413. });
  414. },
  415. loadMore() {
  416. if (isEnd) return;
  417. this.pageNum++;
  418. this.loadData();
  419. },
  420. handleSearch() {
  421. this.loadData(true);
  422. },
  423. filterConfirm() {
  424. this.showFilter = false;
  425. this.loadData(true);
  426. },
  427. filterCancel() {
  428. this.searchForm.type = "";
  429. this.searchForm.name = "";
  430. this.searchForm.applyFactoriesId = "";
  431. this.searchForm.startTime = "";
  432. this.searchForm.endTime = "";
  433. this.startTime = "";
  434. this.endTime = "";
  435. this.startTimeDisplay = "";
  436. this.endTimeDisplay = "";
  437. this.showFilter = false;
  438. this.loadData(true);
  439. },
  440. goDetail(item) {
  441. uni.navigateTo({
  442. url: `/pages/pda/beEntrust/detail/detail?id=${item.id}`,
  443. });
  444. },
  445. handleReceive(item) {
  446. uni.navigateTo({
  447. url: `/pages/pda/beEntrust/goods/goods?id=${item.id}&type=add`,
  448. });
  449. },
  450. handleReceiveDetail(item) {
  451. uni.navigateTo({
  452. url: `/pages/pda/beEntrust/goods/goods?id=${item.id}&type=detail`,
  453. });
  454. },
  455. handleSendDetail(item) {
  456. uni.navigateTo({
  457. url: `/pages/pda/beEntrust/goods/goods?id=${item.id}&type=send`,
  458. });
  459. },
  460. canReceive(item) {
  461. return item.approvalStatus == 2 && item.sendStatus == 1;
  462. },
  463. canViewReceiveDetail(item) {
  464. return (
  465. item.approvalStatus == 2 && item.sendStatus != 1 && item.sendStatus != 5
  466. );
  467. },
  468. canViewReceiveOrder(item) {
  469. console.log("canViewReceiveOrder", item.changeType);
  470. return (
  471. item.approvalStatus == 2 &&
  472. item.sendStatus == 2 &&
  473. item.sendStatus != 5 &&
  474. item.changeType != 1 &&
  475. item.changeType != 2
  476. );
  477. },
  478. canViewSendDetail(item) {
  479. return (
  480. item.approvalStatus == 2 &&
  481. (item.sendStatus == 3 || item.sendStatus == 4)
  482. );
  483. },
  484. getTypeText(type) {
  485. const typeMap = {
  486. 1: "加工",
  487. 2: "装配",
  488. };
  489. return typeMap[type] || "";
  490. },
  491. getStatusText(status) {
  492. const statusMap = {
  493. 0: "未提交",
  494. 1: "已提交",
  495. 2: "已发布",
  496. 4: "待生产",
  497. 5: "生产中",
  498. 6: "已完成",
  499. 7: "已延期",
  500. 8: "待下达",
  501. };
  502. return statusMap[status] || "";
  503. },
  504. getStatusClass(status) {
  505. if (!status || status == 0) return "status-default";
  506. return "status-success";
  507. },
  508. getSendStatusText(sendStatus) {
  509. const statusMap = {
  510. 0: "未收货",
  511. 1: "已发货",
  512. 2: "已收货",
  513. 3: "受托已发",
  514. 4: "请托已收",
  515. 5: "受托拒收",
  516. 6: "请托拒收",
  517. };
  518. return statusMap[sendStatus] || "未收货";
  519. },
  520. getSendStatusClass(sendStatus) {
  521. if (!sendStatus || sendStatus == 0) return "status-default";
  522. if (sendStatus == 5 || sendStatus == 6) return "status-danger";
  523. return "status-success";
  524. },
  525. getApprovalStatusText(approvalStatus) {
  526. const statusMap = {
  527. 0: "未提交",
  528. 1: "审核中",
  529. 2: "审核通过",
  530. 3: "审核不通过",
  531. };
  532. return statusMap[approvalStatus] || "未提交";
  533. },
  534. getApprovalStatusClass(approvalStatus) {
  535. const classMap = {
  536. 0: "status-default",
  537. 1: "status-warning",
  538. 2: "status-success",
  539. 3: "status-danger",
  540. };
  541. return classMap[approvalStatus] || "status-default";
  542. },
  543. getChangeTypeText(changeType) {
  544. const typeMap = {
  545. 0: "未转换",
  546. 1: "已转生产订单",
  547. 2: "已转生产订单",
  548. };
  549. return typeMap[changeType] || "未转换";
  550. },
  551. getChangeTypeClass(changeType) {
  552. if (changeType == 1 || changeType == 2) return "status-success";
  553. return "status-default";
  554. },
  555. },
  556. };
  557. </script>
  558. <style lang="scss">
  559. page {
  560. height: 100vh;
  561. overflow: hidden;
  562. }
  563. </style>
  564. <style lang="scss" scoped>
  565. .content-box {
  566. height: 100vh;
  567. overflow: hidden;
  568. display: flex;
  569. flex-direction: column;
  570. background-color: $page-bg;
  571. }
  572. .top-wrapper {
  573. background-color: #fff;
  574. display: flex;
  575. width: 100%;
  576. padding: 20rpx 26rpx;
  577. align-items: center;
  578. gap: 16rpx;
  579. flex-shrink: 0;
  580. box-sizing: border-box;
  581. /deep/.uni-section {
  582. margin-top: 0px;
  583. flex: 1;
  584. min-width: 0;
  585. }
  586. /deep/.uni-section-header {
  587. padding: 0px;
  588. }
  589. .search_btn {
  590. flex-shrink: 0;
  591. padding: 0 26rpx;
  592. height: 64rpx;
  593. line-height: 64rpx;
  594. background: $theme-color;
  595. font-size: 26rpx;
  596. border-radius: 8rpx;
  597. color: #fff;
  598. white-space: nowrap;
  599. margin: 0;
  600. }
  601. .menu_icon {
  602. flex-shrink: 0;
  603. width: 44rpx;
  604. height: 44rpx;
  605. }
  606. }
  607. .action-bar {
  608. background-color: #fff;
  609. padding: 16rpx 32rpx;
  610. border-bottom: 1rpx solid #f0f0f0;
  611. .action-btn {
  612. width: 200rpx;
  613. height: 64rpx;
  614. line-height: 64rpx;
  615. padding: 0;
  616. background: $theme-color;
  617. font-size: 28rpx;
  618. color: #fff;
  619. border-radius: 8rpx;
  620. margin: 0;
  621. }
  622. }
  623. .tab-bar {
  624. display: flex;
  625. background-color: #fff;
  626. border-bottom: 1rpx solid #f0f0f0;
  627. .tab-item {
  628. flex: 1;
  629. text-align: center;
  630. padding: 24rpx 0;
  631. font-size: 28rpx;
  632. color: #666;
  633. position: relative;
  634. &.active {
  635. color: $theme-color;
  636. font-weight: bold;
  637. &::after {
  638. content: "";
  639. position: absolute;
  640. bottom: 0;
  641. left: 50%;
  642. transform: translateX(-50%);
  643. width: 60rpx;
  644. height: 4rpx;
  645. background-color: $theme-color;
  646. border-radius: 2rpx;
  647. }
  648. }
  649. }
  650. }
  651. .list_box {
  652. // flex: 1;
  653. overflow: hidden;
  654. padding: 16rpx 0;
  655. .u-list {
  656. height: 100% !important;
  657. }
  658. }
  659. .list-item {
  660. background-color: #fff;
  661. border-radius: 12rpx;
  662. padding: 24rpx;
  663. margin: 0 24rpx 20rpx;
  664. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
  665. .item-header {
  666. display: flex;
  667. justify-content: space-between;
  668. align-items: center;
  669. margin-bottom: 20rpx;
  670. padding-bottom: 20rpx;
  671. border-bottom: 1rpx solid #f0f0f0;
  672. gap: 16rpx;
  673. .item-code {
  674. flex: 1;
  675. font-size: 32rpx;
  676. font-weight: bold;
  677. color: $theme-color;
  678. }
  679. }
  680. .item-row {
  681. display: flex;
  682. margin-bottom: 16rpx;
  683. font-size: 28rpx;
  684. .label {
  685. color: #999;
  686. min-width: 160rpx;
  687. }
  688. .value {
  689. flex: 1;
  690. color: #333;
  691. word-break: break-all;
  692. }
  693. }
  694. .item-footer {
  695. margin-top: 20rpx;
  696. padding-top: 20rpx;
  697. border-top: 1rpx solid #f0f0f0;
  698. .time {
  699. font-size: 24rpx;
  700. color: #999;
  701. }
  702. }
  703. .item-actions {
  704. display: flex !important;
  705. justify-content: flex-end !important;
  706. gap: 12rpx;
  707. margin-top: 20rpx;
  708. overflow-x: auto;
  709. .action-btn {
  710. flex: 0 0 auto !important;
  711. width: auto !important;
  712. border-radius: 32rpx !important;
  713. height: 56rpx !important;
  714. line-height: 56rpx !important;
  715. font-size: 26rpx !important;
  716. padding: 0 24rpx !important;
  717. margin: 0 !important;
  718. border: none !important;
  719. color: #fff !important;
  720. &.btn-success {
  721. background-color: $theme-color !important;
  722. }
  723. &.btn-info {
  724. background-color: #ff8c00 !important;
  725. }
  726. &.btn-order {
  727. background-color: #b23aee !important;
  728. }
  729. &.btn-primary {
  730. background-color: #1a52c3 !important;
  731. }
  732. }
  733. }
  734. }
  735. .status-tag {
  736. display: inline-block;
  737. padding: 4rpx 16rpx;
  738. border-radius: 4rpx;
  739. font-size: 24rpx;
  740. &.status-default {
  741. background-color: #f0f0f0;
  742. color: #666;
  743. }
  744. &.status-warning {
  745. background-color: #fff7e6;
  746. color: #faad14;
  747. }
  748. &.status-success {
  749. background-color: rgba(21, 122, 44, 0.1);
  750. color: $theme-color;
  751. }
  752. &.status-danger {
  753. background-color: #fff1f0;
  754. color: #ff4d4f;
  755. }
  756. }
  757. .empty-wrapper {
  758. display: flex;
  759. align-items: center;
  760. justify-content: center;
  761. padding-top: 25vh;
  762. }
  763. .search_list {
  764. min-height: 100rpx;
  765. padding: 24rpx 32rpx;
  766. .date-range-wrapper {
  767. display: flex;
  768. align-items: center;
  769. gap: 12rpx;
  770. .date-picker-box {
  771. flex: 1;
  772. padding: 12rpx 16rpx;
  773. border: 1rpx solid #e0e0e0;
  774. border-radius: 6rpx;
  775. font-size: 28rpx;
  776. color: #333;
  777. min-height: 56rpx;
  778. line-height: 32rpx;
  779. .placeholder {
  780. color: #c0c4cc;
  781. }
  782. }
  783. .date-separator {
  784. font-size: 28rpx;
  785. color: #666;
  786. }
  787. }
  788. }
  789. .operate_box {
  790. display: flex;
  791. flex-direction: row;
  792. align-items: center;
  793. justify-content: space-between;
  794. padding: 24rpx 32rpx 32rpx;
  795. gap: 24rpx;
  796. .reset-btn {
  797. flex: 1;
  798. height: 72rpx;
  799. border-radius: 36rpx;
  800. font-size: $uni-font-size-sm;
  801. }
  802. .confirm-btn {
  803. flex: 1;
  804. height: 72rpx;
  805. border-radius: 36rpx;
  806. font-size: $uni-font-size-sm;
  807. }
  808. }
  809. </style>