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

879 lines
24 KiB

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