金币系统前端
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.

895 lines
25 KiB

  1. <script setup>
  2. import { ref, onMounted, reactive, computed } from "vue";
  3. import ElementPlus from "element-plus";
  4. import { ElMessage, ElMessageBox } from "element-plus";
  5. import { AiFillRead } from "vue-icons-plus/ai";
  6. import axios from "axios";
  7. import moment from "moment";
  8. import API from "../../api/index.js";
  9. // 变量
  10. // 用户对象假的
  11. const admin = ref({
  12. adminId: 1,
  13. name: "赵刚",
  14. area: "中国",
  15. });
  16. //这是获取用户信息的接口
  17. const adminData = ref({});
  18. const getAdminData = async function () {
  19. try {
  20. const result = await API.post(
  21. "http://54.251.137.151:10702/admin/userinfo",
  22. {}
  23. );
  24. adminData.value = result;
  25. console.log("请求成功", result);
  26. console.log("用户信息", adminData.value);
  27. } catch (error) {
  28. console.log("请求失败", error);
  29. }
  30. };
  31. // 充值明细表格
  32. const tableData = ref([]);
  33. // 搜索======================================
  34. // 搜索detail
  35. const detail = ref({});
  36. // 搜索对象
  37. const getObj = ref({
  38. pageNum: 1,
  39. pageSize: 50,
  40. });
  41. //分页总条目
  42. const total = ref(100);
  43. // 搜索对象时间
  44. const getTime = ref([]);
  45. // 搜索活动列表
  46. const product = ref([]);
  47. // 所有信息
  48. const allData = ref([]);
  49. // 搜索地区列表
  50. const area = ref([]);
  51. // 编辑======================================
  52. // 驳回弹出框
  53. const rejectVisible = ref(false);
  54. // 驳回对象
  55. const rejectObj = ref({});
  56. // 通过对象
  57. const passObj = ref({});
  58. //标签页默认高亮选项
  59. const activeName = ref("all");
  60. // 退款类型选项
  61. const refundType = [
  62. {
  63. value: "退款金币",
  64. label: "退款金币",
  65. },
  66. {
  67. value: "退款商品",
  68. label: "退款商品",
  69. },
  70. ];
  71. // //表格高度
  72. // const tableHeight = computed(function () {
  73. // return (getObj.value.pageSize + 1) * 50 + "px";
  74. // });
  75. // 表单验证ref
  76. const Ref = ref(null);
  77. // 方法
  78. // 统计合计数
  79. // 统计合计数
  80. const trueGold = ref(0);
  81. const trueCount = ref(0);
  82. // 待审核条数
  83. const pendingCount = ref(0);
  84. // 待审核金币数
  85. const pendingGold = ref(0);
  86. // 已通过条数
  87. const approvedCount = ref(0);
  88. // 已通过金币数
  89. const approvedGold = ref(0);
  90. // 已驳回条数
  91. const rejectedCount = ref(0);
  92. // 已驳回金币数
  93. const rejectedGold = ref(0);
  94. // 搜索==================================================================
  95. // 搜索方法
  96. const get = async function (val) {
  97. try {
  98. // 地区赋值
  99. if (adminData.value.area === "泰国") {
  100. rechargeVo.value.areas = ["泰国", "越南"];
  101. } else if (adminData.value.area !== "总部") {
  102. rechargeVo.value.area = adminData.value.area;
  103. }
  104. // 搜索参数页码赋值
  105. if (typeof val === "number") {
  106. getObj.value.pageNum = val;
  107. }
  108. // 搜索参数时间赋值
  109. if (getTime.value != null) {
  110. if (getTime.value.startDate != "" && getTime.value.endDate != "") {
  111. detail.value.startDate = getTime.value[0];
  112. detail.value.endDate = getTime.value[1];
  113. }
  114. } else {
  115. detail.value.startDate = "";
  116. detail.value.endDate = "";
  117. }
  118. detail.value.sortField = sortField.value;
  119. detail.value.sortOrder = sortOrder.value;
  120. console.log("搜索参数", getObj.value);
  121. // 发送POST请求
  122. const result = await API.post(
  123. "http://54.251.137.151:10702/audit/audit/refund",
  124. {
  125. ...getObj.value,
  126. detail: { ...detail.value },
  127. }
  128. );
  129. const detailWithoutSort = { ...detail.value };
  130. delete detailWithoutSort.sortField;
  131. delete detailWithoutSort.sortOrder;
  132. const result2 = await API.post(
  133. "http://54.251.137.151:10702/refund/RefundA",
  134. {
  135. ...detailWithoutSort,
  136. }
  137. );
  138. // 统计合计数
  139. if (result2.data) {
  140. result2.data.forEach((item) => {
  141. switch (item.status) {
  142. case "待审核":
  143. // 若 item.raudit 为空则赋值为 0
  144. pendingCount.value = item.raudit || 0;
  145. // 若 item.sumRaudit 为空则赋值为 0
  146. pendingGold.value = item.sumRaudit || 0;
  147. break;
  148. case "已通过":
  149. approvedCount.value = item.raudit || 0;
  150. approvedGold.value = item.sumRaudit || 0;
  151. break;
  152. case "已驳回":
  153. rejectedCount.value = item.raudit || 0;
  154. rejectedGold.value = item.sumRaudit || 0;
  155. break;
  156. }
  157. });
  158. }
  159. trueGold.value =
  160. pendingGold.value + approvedGold.value + rejectedGold.value;
  161. trueCount.value =
  162. pendingCount.value + approvedCount.value + rejectedCount.value;
  163. // 将响应结果存储到响应式数据中
  164. console.log("请求成功", result);
  165. // 存储表格数据
  166. tableData.value = result.data.list;
  167. console.log("tableData", tableData.value);
  168. // 存储分页总数
  169. total.value = result.data.total;
  170. console.log("total", total.value);
  171. } catch (error) {
  172. console.log("请求失败", error);
  173. // 在这里可以处理错误逻辑,比如显示错误提示等
  174. }
  175. };
  176. // 搜索
  177. const search = function () {
  178. getObj.value.pageNum = 1;
  179. get();
  180. };
  181. // 重置
  182. const reset = function () {
  183. detail.value.area = "";
  184. detail.value.jwcode = "";
  185. detail.value.refundType = "";
  186. detail.value.refundGoods = "";
  187. detail.value.startDate = "";
  188. detail.value.endDate = "";
  189. sortField.value = "";
  190. sortOrder.value = "";
  191. getTime.value = {};
  192. };
  193. // 今天
  194. const getToday = function () {
  195. const today = new Date();
  196. const startDate = new Date(
  197. today.getFullYear(),
  198. today.getMonth(),
  199. today.getDate()
  200. );
  201. const endDate = new Date(
  202. today.getFullYear(),
  203. today.getMonth(),
  204. today.getDate() + 1
  205. );
  206. getTime.value = [startDate, endDate];
  207. console.log("getTime", getTime.value);
  208. get();
  209. };
  210. // 昨天
  211. const getYesterday = function () {
  212. const yesterday = new Date();
  213. yesterday.setDate(yesterday.getDate() - 1);
  214. const startDate = new Date(
  215. yesterday.getFullYear(),
  216. yesterday.getMonth(),
  217. yesterday.getDate()
  218. );
  219. const endDate = new Date(
  220. yesterday.getFullYear(),
  221. yesterday.getMonth(),
  222. yesterday.getDate() + 1
  223. );
  224. getTime.value = [startDate, endDate];
  225. console.log("getTime", getTime.value);
  226. get();
  227. };
  228. // 近7天
  229. const get7Days = function () {
  230. const today = new Date();
  231. const startDate = new Date(
  232. today.getFullYear(),
  233. today.getMonth(),
  234. today.getDate() - 6
  235. );
  236. const endDate = new Date(
  237. today.getFullYear(),
  238. today.getMonth(),
  239. today.getDate() + 1
  240. );
  241. getTime.value = [startDate, endDate];
  242. console.log("getTime", getTime.value);
  243. get();
  244. };
  245. //全部充值明细
  246. const adminAll = function () {
  247. console.log("adminAll");
  248. detail.value.status = "";
  249. getObj.value.pageNum = 1;
  250. get();
  251. };
  252. //待审核充值明细
  253. const adminWait = async function () {
  254. detail.value.status = 0;
  255. getObj.value.pageNum = 1;
  256. await get();
  257. console.log("adminWait");
  258. trueGold.value = pendingGold.value;
  259. trueCount.value = pendingCount.value;
  260. };
  261. //已通过充值明细
  262. const adminPass = async function () {
  263. detail.value.status = 1;
  264. getObj.value.pageNum = 1;
  265. await get();
  266. console.log("adminPass");
  267. trueGold.value = approvedGold.value;
  268. trueCount.value = approvedCount.value;
  269. };
  270. //已驳回充值明细
  271. const adminReject = async function () {
  272. detail.value.status = 2;
  273. getObj.value.pageNum = 1;
  274. await get();
  275. console.log("adminReject");
  276. trueGold.value = rejectedGold.value;
  277. trueCount.value = rejectedCount.value;
  278. };
  279. //点击标签页
  280. const handleClick = function (tab, event) {
  281. if (tab.props.name === "all") {
  282. adminAll();
  283. } else if (tab.props.name === "wait") {
  284. adminWait();
  285. } else if (tab.props.name === "pass") {
  286. adminPass();
  287. } else if (tab.props.name === "reject") {
  288. adminReject();
  289. }
  290. };
  291. // 获取活动名称
  292. const getProduct = async function () {
  293. try {
  294. // 发送POST请求
  295. const result = await API.post("http://54.251.137.151:10702/product", {});
  296. // 将响应结果存储到响应式数据中
  297. console.log("请求成功", result);
  298. // 存储表格数据
  299. product.value = result.data;
  300. console.log("产品", product.value);
  301. } catch (error) {
  302. console.log("请求失败", error);
  303. // 在这里可以处理错误逻辑,比如显示错误提示等
  304. }
  305. };
  306. // 获取地区
  307. const getArea = async function () {
  308. try {
  309. // 发送POST请求
  310. const result = await API.post(
  311. "http://54.251.137.151:10702/recharge/user/search",
  312. {}
  313. );
  314. // 将响应结果存储到响应式数据中
  315. console.log("请求成功", result);
  316. // 存储地区信息
  317. area.value = result.data;
  318. console.log("地区", area.value);
  319. } catch (error) {
  320. console.log("请求失败", error);
  321. // 在这里可以处理错误逻辑,比如显示错误提示等
  322. }
  323. };
  324. // 验证跳转输入框的数字是否合法
  325. const checkNumber = function () {
  326. if (typeof parseInt(getObj.value.pageNum) === "number") {
  327. console.log(
  328. "总共有多少页" + Math.ceil(total.value / getObj.value.pageSize)
  329. );
  330. if (
  331. getObj.value.pageNum > 0 &&
  332. getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
  333. ) {
  334. getObj.value.pageNum = parseInt(getObj.value.pageNum);
  335. console.log("输入的数字合法");
  336. get();
  337. } else {
  338. //提示
  339. ElMessage({
  340. type: "error",
  341. message: "请检查输入内容",
  342. });
  343. }
  344. } else {
  345. //提示
  346. ElMessage({
  347. type: "error",
  348. message: "请检查输入内容",
  349. });
  350. }
  351. };
  352. // 编辑====================================
  353. // 通过按钮
  354. const pass = function (row) {
  355. // 通过初始化
  356. passObj.value.adminId = adminData.value.adminId;
  357. passObj.value.auditId = row.auditId;
  358. passObj.value.status = 1;
  359. passObj.value.refundId = row.refundId;
  360. passObj.value.adminName = row.adminName;
  361. passObj.value.username = row.username;
  362. passObj.value.area = row.area;
  363. console.log("通过对象", passObj.value);
  364. };
  365. // 通过确认
  366. const passConfirm = async function () {
  367. try {
  368. console.log("通过对象", passObj.value);
  369. // 发送POST请求
  370. const result = await API.post(
  371. "http://54.251.137.151:10702/audit/audit/edit",
  372. passObj.value
  373. );
  374. // 将响应结果存储到响应式数据中
  375. console.log("请求成功", result);
  376. // 刷新表格数据
  377. get();
  378. //提示
  379. ElMessage({
  380. type: "success",
  381. message: "通过成功!",
  382. });
  383. } catch (error) {
  384. console.log("请求失败", error);
  385. // 在这里可以处理错误逻辑,比如显示错误提示等
  386. }
  387. };
  388. // 打开驳回弹出框
  389. const openRejectVisible = function () {
  390. rejectVisible.value = true;
  391. };
  392. // 关闭驳回弹出框
  393. const closeRejectVisible = function () {
  394. rejectVisible.value = false;
  395. };
  396. // 驳回按钮
  397. const reject = function (row) {
  398. // 驳回初始化
  399. rejectObj.value.adminId = adminData.value.adminId;
  400. rejectObj.value.auditId = row.auditId;
  401. rejectObj.value.status = 2;
  402. rejectObj.value.reson = "";
  403. rejectObj.value.refundId = row.refundId;
  404. console.log("驳回对象", rejectObj.value);
  405. openRejectVisible();
  406. };
  407. // 驳回确认
  408. const rejectConfirm = async function () {
  409. Ref.value.validate(async (valid) => {
  410. if (valid) {
  411. try {
  412. console.log("驳回对象", rejectObj.value);
  413. // 发送POST请求
  414. const result = await API.post(
  415. "http://54.251.137.151:10702/audit/audit/edit",
  416. rejectObj.value
  417. );
  418. // 将响应结果存储到响应式数据中
  419. console.log("请求成功", result);
  420. // 刷新表格数据
  421. get();
  422. // 关闭弹出框
  423. closeRejectVisible();
  424. //提示
  425. ElMessage({
  426. type: "success",
  427. message: "驳回成功!",
  428. });
  429. } catch (error) {
  430. console.log("请求失败", error);
  431. // 在这里可以处理错误逻辑,比如显示错误提示等
  432. }
  433. } else {
  434. //提示
  435. ElMessage({
  436. type: "error",
  437. message: "请检查输入内容",
  438. });
  439. }
  440. });
  441. };
  442. // 表单验证
  443. const rules = reactive({
  444. reson: [{ required: true, message: "请输入驳回理由", trigger: "blur" }],
  445. });
  446. // 挂载
  447. onMounted(async function () {
  448. await getAdminData();
  449. await get();
  450. getProduct();
  451. await getArea();
  452. await getArea();
  453. });
  454. // 新增排序字段和排序方式
  455. const sortField = ref("");
  456. const sortOrder = ref("");
  457. // 处理排序事件
  458. const handleSortChange = (column) => {
  459. console.log("排序字段:", column.prop);
  460. console.log("排序方式:", column.order);
  461. if (column.prop === "rechargeCoin") {
  462. sortField.value = "recharge_coin";
  463. } else if (column.prop === "taskCoin") {
  464. sortField.value = "task_coin";
  465. } else if (column.prop === "freeCoin") {
  466. sortField.value = "free_coin";
  467. } else if (column.prop === "createTime") {
  468. sortField.value = "create_time";
  469. }
  470. sortOrder.value = column.order === "ascending" ? "ASC" : "DESC";
  471. get();
  472. };
  473. </script>
  474. <template>
  475. <el-row>
  476. <el-col>
  477. <el-card style="margin-bottom: 20px">
  478. <el-row style="margin-bottom: 10px">
  479. <el-col :span="6">
  480. <div class="head-card-element">
  481. <el-text class="mx-1" size="large">精网号</el-text>
  482. <el-input
  483. v-model="detail.jwcode"
  484. placeholder="请输入精网号"
  485. size="large"
  486. style="width: 240px"
  487. clearable
  488. />
  489. </div>
  490. </el-col>
  491. <el-col :span="6">
  492. <div class="head-card-element">
  493. <el-text class="mx-1" size="large">退款类型</el-text>
  494. <el-select
  495. v-model="detail.refundType"
  496. placeholder="请选择退款类型"
  497. size="large"
  498. style="width: 240px"
  499. clearable
  500. >
  501. <el-option
  502. v-for="item in refundType"
  503. :key="item.value"
  504. :label="item.label"
  505. :value="item.value"
  506. />
  507. </el-select>
  508. </div>
  509. </el-col>
  510. <el-col :span="6">
  511. <div class="head-card-element">
  512. <el-text class="mx-1" size="large">退款商品</el-text>
  513. <el-select
  514. v-model="detail.refundGoods"
  515. placeholder="请选择退款商品"
  516. size="large"
  517. style="width: 240px"
  518. clearable
  519. >
  520. <el-option
  521. v-for="item in product"
  522. :key="item.name"
  523. :label="item.name"
  524. :value="item.name"
  525. />
  526. </el-select>
  527. </div>
  528. </el-col>
  529. <el-col :span="6">
  530. <div class="head-card-element" v-if="adminData.area == '总部'">
  531. <el-text class="mx-1" size="large">所属地区</el-text>
  532. <el-select
  533. v-model="detail.area"
  534. placeholder="请选择所属地区"
  535. size="large"
  536. style="width: 240px"
  537. clearable
  538. >
  539. <el-option
  540. v-for="item in area"
  541. :key="item"
  542. :label="item"
  543. :value="item"
  544. />
  545. </el-select>
  546. </div>
  547. </el-col>
  548. </el-row>
  549. <el-row>
  550. <el-col :span="21">
  551. <div class="head-card-element">
  552. <el-text class="mx-1" size="large">充值时间</el-text>
  553. <el-date-picker
  554. v-model="getTime"
  555. type="datetimerange"
  556. range-separator="至"
  557. start-placeholder="起始时间"
  558. end-placeholder="结束时间"
  559. />
  560. <el-button style="margin-left: 10px" @click="getToday()"
  561. ></el-button
  562. >
  563. <el-button @click="getYesterday()"></el-button>
  564. <el-button @click="get7Days()">近7天</el-button>
  565. </div>
  566. </el-col>
  567. <el-col :span="3">
  568. <div class="head-card-btn">
  569. <el-button @click="reset()">重置</el-button>
  570. <el-button type="primary" @click="search()">查询</el-button>
  571. </div>
  572. </el-col>
  573. </el-row>
  574. </el-card>
  575. </el-col>
  576. </el-row>
  577. <el-row>
  578. <el-col>
  579. <el-card>
  580. <el-tabs
  581. v-model="activeName"
  582. type="card"
  583. class="demo-tabs"
  584. @tab-click="handleClick"
  585. >
  586. <el-tab-pane label="全部" name="all"></el-tab-pane>
  587. <el-tab-pane label="待审核" name="wait"></el-tab-pane>
  588. <el-tab-pane label="已通过" name="pass"></el-tab-pane>
  589. <el-tab-pane label="已驳回" name="reject"></el-tab-pane>
  590. <div>
  591. 退款记录条数{{ Math.abs(trueCount) }},退款金币总数{{
  592. Math.abs(trueGold)
  593. }}
  594. </div>
  595. </el-tabs>
  596. <!-- 设置表格容器的高度和滚动样式 -->
  597. <div style="height: 540px; overflow-y: auto">
  598. <el-table
  599. :data="tableData"
  600. style="width: 100%"
  601. height="540px"
  602. @sort-change="handleSortChange"
  603. >
  604. <el-table-column
  605. type="index"
  606. label="序号"
  607. width="100px"
  608. fixed="left"
  609. >
  610. <template #default="scope">
  611. <span>{{
  612. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  613. }}</span>
  614. </template>
  615. </el-table-column>
  616. <el-table-column
  617. fixed="left"
  618. prop="username"
  619. label="姓名"
  620. width="150px"
  621. />
  622. <el-table-column
  623. fixed="left"
  624. prop="jwcode"
  625. label="精网号"
  626. width="110px"
  627. />
  628. <el-table-column prop="area" label="所属地区" width="100px" />
  629. <el-table-column prop="refundType" label="退款类型" width="100px" />
  630. <el-table-column
  631. prop="productName"
  632. label="退款商品"
  633. width="200px"
  634. />
  635. <el-table-column prop="refundCoin" label="退款金币数" width="100px">
  636. <template #default="scope">
  637. <span>{{
  638. scope.row.rechargeCoin +
  639. scope.row.freeCoin +
  640. scope.row.taskCoin
  641. }}</span>
  642. </template>
  643. </el-table-column>
  644. <el-table-column
  645. prop="rechargeCoin"
  646. label="永久金币"
  647. width="110px"
  648. sortable="“custom”"
  649. >
  650. <template #default="scope">
  651. {{ scope.row.rechargeCoin }}
  652. </template>
  653. </el-table-column>
  654. <el-table-column
  655. prop="freeCoin"
  656. label="免费金币"
  657. sortable="“custom”"
  658. width="110px"
  659. >
  660. <template #default="scope">
  661. {{ scope.row.freeCoin }}
  662. </template>
  663. </el-table-column>
  664. <el-table-column
  665. prop="taskCoin"
  666. label="任务金币"
  667. sortable="“custom”"
  668. width="110px"
  669. >
  670. <template #default="scope">
  671. {{ scope.row.taskCoin }}
  672. </template>
  673. </el-table-column>
  674. <el-table-column
  675. prop="remark"
  676. label="备注"
  677. width="200px"
  678. show-overflow-tooltip
  679. />
  680. <el-table-column prop="adminName" label="提交人" width="100px" />
  681. <el-table-column prop="status" label="审核状态" width="100px">
  682. <!-- 模板内容 -->
  683. <template #default="scope">
  684. <span v-if="scope.row.status == 1">
  685. <div class="status">
  686. <span class="green-dot"></span>
  687. <span>已通过</span>
  688. </div>
  689. </span>
  690. <span v-if="scope.row.status == 0">
  691. <div class="status">
  692. <span class="grey-dot"></span>
  693. <span>待审核</span>
  694. </div>
  695. </span>
  696. <span v-if="scope.row.status == 2">
  697. <div class="status">
  698. <span class="red-dot"></span>
  699. <span>已驳回</span>
  700. </div>
  701. </span>
  702. </template>
  703. </el-table-column>
  704. <el-table-column
  705. prop="reson"
  706. label="驳回理由"
  707. width="200px"
  708. show-overflow-tooltip
  709. />
  710. <el-table-column
  711. prop="createTime"
  712. sortable="“custom”"
  713. label="提交时间"
  714. width="200px"
  715. >
  716. <template #default="scope">
  717. {{ moment(scope.row.createTime).format("YYYY-MM-DD HH:mm:ss") }}
  718. </template>
  719. </el-table-column>
  720. <el-table-column
  721. fixed="right"
  722. prop="operation"
  723. label="操作"
  724. width="150px"
  725. >
  726. <template #default="scope">
  727. <div class="operation">
  728. <el-popconfirm
  729. title="确定要通过此条记录吗?"
  730. @confirm="passConfirm"
  731. >
  732. <template #reference>
  733. <el-button
  734. :disabled="
  735. scope.row.status === 1 || scope.row.status === 2
  736. ? true
  737. : false
  738. "
  739. type="primary"
  740. text
  741. @click="pass(scope.row)"
  742. >
  743. 通过
  744. </el-button>
  745. </template>
  746. <template #actions="{ confirm, cancel }">
  747. <el-button size="small" @click="cancel">取消</el-button>
  748. <el-button type="primary" size="small" @click="confirm">
  749. 确定
  750. </el-button>
  751. </template>
  752. </el-popconfirm>
  753. <el-button
  754. :disabled="
  755. scope.row.status === 1 || scope.row.status === 2
  756. ? true
  757. : false
  758. "
  759. type="primary"
  760. text
  761. @click="reject(scope.row)"
  762. >
  763. 驳回
  764. </el-button>
  765. </div>
  766. </template>
  767. </el-table-column>
  768. </el-table>
  769. </div>
  770. <!-- 分页 -->
  771. <div class="pagination">
  772. <el-pagination
  773. background
  774. :page-size="getObj.pageSize"
  775. layout="slot"
  776. :total="total"
  777. >
  778. <div>{{ total }},每页</div>
  779. <el-select
  780. v-model="getObj.pageSize"
  781. class="page-size"
  782. @change="get()"
  783. style="width: 80px"
  784. >
  785. <el-option
  786. v-for="item in [5, 10, 20, 50, 100]"
  787. :key="item"
  788. :label="item"
  789. :value="item"
  790. ></el-option>
  791. </el-select>
  792. <div></div>
  793. </el-pagination>
  794. <el-pagination
  795. background
  796. layout="prev, pager, next,slot"
  797. :page-size="getObj.pageSize"
  798. :total="total"
  799. :current-page="getObj.pageNum"
  800. @current-change="get"
  801. >
  802. <div>跳至</div>
  803. <el-input
  804. v-model="getObj.pageNum"
  805. style="width: 40px"
  806. @change="checkNumber"
  807. />
  808. <div></div>
  809. </el-pagination>
  810. </div>
  811. </el-card>
  812. </el-col>
  813. </el-row>
  814. <!-- 驳回弹出框 -->
  815. <el-dialog
  816. v-model="rejectVisible"
  817. title="驳回理由"
  818. width="500"
  819. :before-close="closeRejectVisible"
  820. >
  821. <template #footer>
  822. <el-form
  823. :model="rejectObj"
  824. ref="Ref"
  825. :rules="rules"
  826. label-width="auto"
  827. style="max-width: 600px"
  828. >
  829. <el-form-item prop="reson" label="驳回理由:">
  830. <el-input
  831. v-model="rejectObj.reson"
  832. maxlength="150"
  833. show-word-limit
  834. style="width: 350px"
  835. type="textarea"
  836. placeholder="请输入内容"
  837. />
  838. </el-form-item>
  839. </el-form>
  840. <div class="dialog-footer">
  841. <el-button @click="closeRejectVisible()">取消</el-button>
  842. <el-button type="primary" @click="rejectConfirm()"> 确定 </el-button>
  843. </div>
  844. </template>
  845. </el-dialog>
  846. </template>
  847. <style scoped>
  848. .pagination {
  849. display: flex;
  850. }
  851. .status {
  852. display: flex;
  853. }
  854. .operation {
  855. display: flex;
  856. }
  857. .head-card {
  858. display: flex;
  859. }
  860. .head-card-element {
  861. margin-right: 20px;
  862. }
  863. .head-card-btn {
  864. margin-left: auto;
  865. }
  866. </style>