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

871 lines
24 KiB

3 months ago
3 months ago
3 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. getObj.value.pageNum = 1
  176. get()
  177. }
  178. // 重置
  179. const reset = function () {
  180. detail.value.area = ''
  181. detail.value.jwcode = ''
  182. detail.value.refundType = ''
  183. detail.value.refundGoods = ''
  184. detail.value.startDate = ''
  185. detail.value.endDate = ''
  186. sortField.value = ''
  187. sortOrder.value = ''
  188. getTime.value = {}
  189. }
  190. // 今天
  191. const getToday = function () {
  192. const today = new Date()
  193. const startDate = new Date(
  194. today.getFullYear(),
  195. today.getMonth(),
  196. today.getDate()
  197. )
  198. const endDate = new Date(
  199. today.getFullYear(),
  200. today.getMonth(),
  201. today.getDate() + 1
  202. )
  203. getTime.value = [startDate, endDate]
  204. console.log('getTime', getTime.value)
  205. get()
  206. }
  207. // 昨天
  208. const getYesterday = function () {
  209. const yesterday = new Date()
  210. yesterday.setDate(yesterday.getDate() - 1)
  211. const startDate = new Date(
  212. yesterday.getFullYear(),
  213. yesterday.getMonth(),
  214. yesterday.getDate()
  215. )
  216. const endDate = new Date(
  217. yesterday.getFullYear(),
  218. yesterday.getMonth(),
  219. yesterday.getDate() + 1
  220. )
  221. getTime.value = [startDate, endDate]
  222. console.log('getTime', getTime.value)
  223. get()
  224. }
  225. // 近7天
  226. const get7Days = function () {
  227. const today = new Date()
  228. const startDate = new Date(
  229. today.getFullYear(),
  230. today.getMonth(),
  231. today.getDate() - 6
  232. )
  233. const endDate = new Date(
  234. today.getFullYear(),
  235. today.getMonth(),
  236. today.getDate() + 1
  237. )
  238. getTime.value = [startDate, endDate]
  239. console.log('getTime', getTime.value)
  240. get()
  241. }
  242. //全部充值明细
  243. const adminAll = function () {
  244. console.log('adminAll')
  245. detail.value.status = ''
  246. getObj.value.pageNum = 1
  247. get()
  248. }
  249. //待审核充值明细
  250. const adminWait = async function () {
  251. detail.value.status = 0
  252. getObj.value.pageNum = 1
  253. await get()
  254. console.log('adminWait')
  255. trueGold.value = pendingGold.value
  256. trueCount.value = pendingCount.value
  257. }
  258. //已通过充值明细
  259. const adminPass = async function () {
  260. detail.value.status = 1
  261. getObj.value.pageNum = 1
  262. await get()
  263. console.log('adminPass')
  264. trueGold.value = approvedGold.value
  265. trueCount.value = approvedCount.value
  266. }
  267. //已驳回充值明细
  268. const adminReject = async function () {
  269. detail.value.status = 2
  270. getObj.value.pageNum = 1
  271. await get()
  272. console.log('adminReject')
  273. trueGold.value = rejectedGold.value
  274. trueCount.value = rejectedCount.value
  275. }
  276. //点击标签页
  277. const handleClick = function (tab, event) {
  278. if (tab.props.name === 'all') {
  279. adminAll()
  280. } else if (tab.props.name === 'wait') {
  281. adminWait()
  282. } else if (tab.props.name === 'pass') {
  283. adminPass()
  284. } else if (tab.props.name === 'reject') {
  285. adminReject()
  286. }
  287. }
  288. // 获取活动名称
  289. const getProduct = async function () {
  290. try {
  291. // 发送POST请求
  292. const result = await request({
  293. url: '/product',
  294. data: {}
  295. })
  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 request({
  311. url: '/recharge/user/search',
  312. data: {}
  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('总共有多少页' + Math.ceil(total.value / getObj.value.pageSize))
  328. if (
  329. getObj.value.pageNum > 0 &&
  330. getObj.value.pageNum <= Math.ceil(total.value / getObj.value.pageSize)
  331. ) {
  332. getObj.value.pageNum = parseInt(getObj.value.pageNum)
  333. console.log('输入的数字合法')
  334. get()
  335. } else {
  336. //提示
  337. ElMessage({
  338. type: 'error',
  339. message: '请检查输入内容'
  340. })
  341. }
  342. } else {
  343. //提示
  344. ElMessage({
  345. type: 'error',
  346. message: '请检查输入内容'
  347. })
  348. }
  349. }
  350. // 编辑====================================
  351. // 通过按钮
  352. const pass = function (row) {
  353. // 通过初始化
  354. passObj.value.adminId = adminData.value.adminId
  355. passObj.value.auditId = row.auditId
  356. passObj.value.status = 1
  357. passObj.value.refundId = row.refundId
  358. passObj.value.adminName = row.adminName
  359. passObj.value.username = row.username
  360. passObj.value.area = row.area
  361. console.log('通过对象', passObj.value)
  362. }
  363. // 通过确认
  364. const passConfirm = async function () {
  365. try {
  366. console.log('通过对象', passObj.value)
  367. // 发送POST请求
  368. const result = await request({
  369. url: '/audit/audit/edit',
  370. data: passObj.value
  371. })
  372. // 将响应结果存储到响应式数据中
  373. console.log('请求成功', result)
  374. // 刷新表格数据
  375. get()
  376. //提示
  377. ElMessage({
  378. type: 'success',
  379. message: '通过成功!'
  380. })
  381. } catch (error) {
  382. console.log('请求失败', error)
  383. // 在这里可以处理错误逻辑,比如显示错误提示等
  384. }
  385. }
  386. // 打开驳回弹出框
  387. const openRejectVisible = function () {
  388. rejectVisible.value = true
  389. }
  390. // 关闭驳回弹出框
  391. const closeRejectVisible = function () {
  392. rejectVisible.value = false
  393. }
  394. // 驳回按钮
  395. const reject = function (row) {
  396. // 驳回初始化
  397. rejectObj.value.adminId = adminData.value.adminId
  398. rejectObj.value.auditId = row.auditId
  399. rejectObj.value.status = 2
  400. rejectObj.value.reson = ''
  401. rejectObj.value.refundId = row.refundId
  402. console.log('驳回对象', rejectObj.value)
  403. openRejectVisible()
  404. }
  405. // 驳回确认
  406. const rejectConfirm = async function () {
  407. Ref.value.validate(async (valid) => {
  408. if (valid) {
  409. try {
  410. console.log('驳回对象', rejectObj.value)
  411. // 发送POST请求
  412. const result = await request({
  413. url: '/audit/audit/edit',
  414. data: rejectObj.value
  415. })
  416. // 将响应结果存储到响应式数据中
  417. console.log('请求成功', result)
  418. // 刷新表格数据
  419. get()
  420. // 关闭弹出框
  421. closeRejectVisible()
  422. //提示
  423. ElMessage({
  424. type: 'success',
  425. message: '驳回成功!'
  426. })
  427. } catch (error) {
  428. console.log('请求失败', error)
  429. // 在这里可以处理错误逻辑,比如显示错误提示等
  430. }
  431. } else {
  432. //提示
  433. ElMessage({
  434. type: 'error',
  435. message: '请检查输入内容'
  436. })
  437. }
  438. })
  439. }
  440. const handlePageSizeChange = function (val) {
  441. getObj.value.pageSize = val
  442. get()
  443. }
  444. const handleCurrentChange = function (val) {
  445. getObj.value.pageNum = val
  446. get()
  447. }
  448. // 表单验证
  449. const rules = reactive({
  450. reson: [{ required: true, message: '请输入驳回理由', trigger: 'blur' }]
  451. })
  452. // 挂载
  453. onMounted(async function () {
  454. await getAdminData()
  455. await get()
  456. getProduct()
  457. await getArea()
  458. await getArea()
  459. })
  460. // 新增排序字段和排序方式
  461. const sortField = ref('')
  462. const sortOrder = ref('')
  463. // 处理排序事件
  464. const handleSortChange = (column) => {
  465. console.log('排序字段:', column.prop)
  466. console.log('排序方式:', column.order)
  467. if (column.prop === 'rechargeCoin') {
  468. sortField.value = 'recharge_coin'
  469. } else if (column.prop === 'taskCoin') {
  470. sortField.value = 'task_coin'
  471. } else if (column.prop === 'freeCoin') {
  472. sortField.value = 'free_coin'
  473. } else if (column.prop === 'createTime') {
  474. sortField.value = 'create_time'
  475. }
  476. sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
  477. get()
  478. }
  479. </script>
  480. <template>
  481. <el-row>
  482. <el-col>
  483. <el-card style="margin-bottom: 20px">
  484. <el-row style="margin-bottom: 10px">
  485. <el-col :span="6">
  486. <div class="head-card-element">
  487. <el-text class="mx-1" size="large">精网号</el-text>
  488. <el-input
  489. v-model="detail.jwcode"
  490. placeholder="请输入精网号"
  491. size="large"
  492. style="width: 240px"
  493. clearable
  494. />
  495. </div>
  496. </el-col>
  497. <el-col :span="6">
  498. <div class="head-card-element">
  499. <el-text class="mx-1" size="large">退款类型</el-text>
  500. <el-select
  501. v-model="detail.refundType"
  502. placeholder="请选择退款类型"
  503. size="large"
  504. style="width: 240px"
  505. clearable
  506. >
  507. <el-option
  508. v-for="item in refundType"
  509. :key="item.value"
  510. :label="item.label"
  511. :value="item.value"
  512. />
  513. </el-select>
  514. </div>
  515. </el-col>
  516. <el-col :span="6">
  517. <div class="head-card-element">
  518. <el-text class="mx-1" size="large">退款商品</el-text>
  519. <el-select
  520. v-model="detail.refundGoods"
  521. placeholder="请选择退款商品"
  522. size="large"
  523. style="width: 240px"
  524. clearable
  525. >
  526. <el-option
  527. v-for="item in product"
  528. :key="item.name"
  529. :label="item.name"
  530. :value="item.name"
  531. />
  532. </el-select>
  533. </div>
  534. </el-col>
  535. <el-col :span="6">
  536. <div class="head-card-element" v-if="adminData.area == '总部'">
  537. <el-text class="mx-1" size="large">所属地区</el-text>
  538. <el-select
  539. v-model="detail.area"
  540. placeholder="请选择所属地区"
  541. size="large"
  542. style="width: 240px"
  543. clearable
  544. >
  545. <el-option
  546. v-for="item in area"
  547. :key="item"
  548. :label="item"
  549. :value="item"
  550. />
  551. </el-select>
  552. </div>
  553. </el-col>
  554. </el-row>
  555. <el-row>
  556. <el-col :span="21">
  557. <div class="head-card-element">
  558. <el-text class="mx-1" size="large">充值时间</el-text>
  559. <el-date-picker
  560. v-model="getTime"
  561. type="datetimerange"
  562. range-separator="至"
  563. start-placeholder="起始时间"
  564. end-placeholder="结束时间"
  565. />
  566. <el-button style="margin-left: 10px" @click="getToday()"
  567. ></el-button
  568. >
  569. <el-button @click="getYesterday()"></el-button>
  570. <el-button @click="get7Days()">近7天</el-button>
  571. </div>
  572. </el-col>
  573. <el-col :span="3">
  574. <div class="head-card-btn">
  575. <el-button @click="reset()">重置</el-button>
  576. <el-button type="primary" @click="search()">查询</el-button>
  577. </div>
  578. </el-col>
  579. </el-row>
  580. </el-card>
  581. </el-col>
  582. </el-row>
  583. <el-row>
  584. <el-col>
  585. <el-card>
  586. <el-tabs
  587. v-model="activeName"
  588. type="card"
  589. class="demo-tabs"
  590. @tab-click="handleClick"
  591. >
  592. <el-tab-pane label="全部" name="all"></el-tab-pane>
  593. <el-tab-pane label="待审核" name="wait"></el-tab-pane>
  594. <el-tab-pane label="已通过" name="pass"></el-tab-pane>
  595. <el-tab-pane label="已驳回" name="reject"></el-tab-pane>
  596. <div>
  597. 退款记录条数{{ Math.abs(trueCount) }},退款金币总数{{
  598. Math.abs(trueGold)
  599. }}
  600. </div>
  601. </el-tabs>
  602. <!-- 设置表格容器的高度和滚动样式 -->
  603. <div style="height: 540px; overflow-y: auto">
  604. <el-table
  605. :data="tableData"
  606. style="width: 100%"
  607. height="540px"
  608. @sort-change="handleSortChange"
  609. >
  610. <el-table-column
  611. type="index"
  612. label="序号"
  613. width="100px"
  614. fixed="left"
  615. >
  616. <template #default="scope">
  617. <span>{{
  618. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  619. }}</span>
  620. </template>
  621. </el-table-column>
  622. <el-table-column
  623. fixed="left"
  624. prop="username"
  625. label="姓名"
  626. width="150px"
  627. />
  628. <el-table-column
  629. fixed="left"
  630. prop="jwcode"
  631. label="精网号"
  632. width="110px"
  633. />
  634. <el-table-column prop="area" label="所属地区" width="100px" />
  635. <el-table-column prop="refundType" label="退款类型" width="100px" />
  636. <el-table-column
  637. prop="refundGoods"
  638. label="退款商品"
  639. width="200px"
  640. />
  641. <el-table-column prop="refundCoin" label="退款金币数" width="100px">
  642. <template #default="scope">
  643. <span>{{
  644. scope.row.rechargeCoin +
  645. scope.row.freeCoin +
  646. scope.row.taskCoin
  647. }}</span>
  648. </template>
  649. </el-table-column>
  650. <el-table-column
  651. prop="rechargeCoin"
  652. label="永久金币"
  653. width="110px"
  654. sortable="“custom”"
  655. >
  656. <template #default="scope">
  657. {{ scope.row.rechargeCoin }}
  658. </template>
  659. </el-table-column>
  660. <el-table-column
  661. prop="freeCoin"
  662. label="免费金币"
  663. sortable="“custom”"
  664. width="110px"
  665. >
  666. <template #default="scope">
  667. {{ scope.row.freeCoin }}
  668. </template>
  669. </el-table-column>
  670. <el-table-column
  671. prop="taskCoin"
  672. label="任务金币"
  673. sortable="“custom”"
  674. width="110px"
  675. >
  676. <template #default="scope">
  677. {{ scope.row.taskCoin }}
  678. </template>
  679. </el-table-column>
  680. <el-table-column
  681. prop="remark"
  682. label="备注"
  683. width="200px"
  684. show-overflow-tooltip
  685. />
  686. <el-table-column prop="adminName" label="提交人" width="100px" />
  687. <el-table-column prop="status" label="审核状态" width="100px">
  688. <!-- 模板内容 -->
  689. <template #default="scope">
  690. <span v-if="scope.row.status == 1">
  691. <div class="status">
  692. <span class="green-dot"></span>
  693. <span>已通过</span>
  694. </div>
  695. </span>
  696. <span v-if="scope.row.status == 0">
  697. <div class="status">
  698. <span class="grey-dot"></span>
  699. <span>待审核</span>
  700. </div>
  701. </span>
  702. <span v-if="scope.row.status == 2">
  703. <div class="status">
  704. <span class="red-dot"></span>
  705. <span>已驳回</span>
  706. </div>
  707. </span>
  708. </template>
  709. </el-table-column>
  710. <el-table-column
  711. prop="reson"
  712. label="驳回理由"
  713. width="200px"
  714. show-overflow-tooltip
  715. />
  716. <el-table-column
  717. prop="createTime"
  718. sortable="“custom”"
  719. label="提交时间"
  720. width="200px"
  721. >
  722. <template #default="scope">
  723. {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  724. </template>
  725. </el-table-column>
  726. <el-table-column
  727. fixed="right"
  728. prop="operation"
  729. label="操作"
  730. width="150px"
  731. >
  732. <template #default="scope">
  733. <div class="operation">
  734. <el-popconfirm
  735. title="确定要通过此条记录吗?"
  736. @confirm="passConfirm"
  737. >
  738. <template #reference>
  739. <el-button
  740. :disabled="
  741. scope.row.status === 1 || scope.row.status === 2
  742. ? true
  743. : false
  744. "
  745. type="primary"
  746. text
  747. @click="pass(scope.row)"
  748. >
  749. 通过
  750. </el-button>
  751. </template>
  752. <template #actions="{ confirm, cancel }">
  753. <el-button size="small" @click="cancel">取消</el-button>
  754. <el-button type="primary" size="small" @click="confirm">
  755. 确定
  756. </el-button>
  757. </template>
  758. </el-popconfirm>
  759. <el-button
  760. :disabled="
  761. scope.row.status === 1 || scope.row.status === 2
  762. ? true
  763. : false
  764. "
  765. type="primary"
  766. text
  767. @click="reject(scope.row)"
  768. >
  769. 驳回
  770. </el-button>
  771. </div>
  772. </template>
  773. </el-table-column>
  774. </el-table>
  775. </div>
  776. <!-- 分页 -->
  777. <div class="pagination">
  778. <el-pagination
  779. background
  780. :page-size="getObj.pageSize"
  781. :page-sizes="[5, 10, 20, 50, 100]"
  782. layout="total, sizes, prev, pager, next, jumper"
  783. :total="total"
  784. @size-change="handlePageSizeChange"
  785. @current-change="handleCurrentChange"
  786. ></el-pagination>
  787. </div>
  788. </el-card>
  789. </el-col>
  790. </el-row>
  791. <!-- 驳回弹出框 -->
  792. <el-dialog
  793. v-model="rejectVisible"
  794. title="驳回理由"
  795. width="500"
  796. :before-close="closeRejectVisible"
  797. >
  798. <template #footer>
  799. <el-form
  800. :model="rejectObj"
  801. ref="Ref"
  802. :rules="rules"
  803. label-width="auto"
  804. style="max-width: 600px"
  805. >
  806. <el-form-item prop="reson" label="驳回理由:">
  807. <el-input
  808. v-model="rejectObj.reson"
  809. maxlength="150"
  810. show-word-limit
  811. style="width: 350px"
  812. type="textarea"
  813. placeholder="请输入内容"
  814. />
  815. </el-form-item>
  816. </el-form>
  817. <div class="dialog-footer">
  818. <el-button @click="closeRejectVisible()">取消</el-button>
  819. <el-button type="primary" @click="rejectConfirm()"> 确定 </el-button>
  820. </div>
  821. </template>
  822. </el-dialog>
  823. </template>
  824. <style scoped>
  825. .pagination {
  826. display: flex;
  827. }
  828. .status {
  829. display: flex;
  830. }
  831. .operation {
  832. display: flex;
  833. }
  834. .head-card {
  835. display: flex;
  836. }
  837. .head-card-element {
  838. margin-right: 20px;
  839. }
  840. .head-card-btn {
  841. margin-left: auto;
  842. }
  843. </style>