index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. <template>
  2. <div class="app-container">
  3. <!-- 搜索 -->
  4. <el-form inline size="mini">
  5. <el-form-item label="订单编号:">
  6. <el-input v-model="form.orderCode" placeholder="请输入订单编号" clearable />
  7. </el-form-item>
  8. <el-form-item label="用户账号:">
  9. <el-input v-model="form.userName" placeholder="请输入用户账户" clearable />
  10. </el-form-item>
  11. <el-form-item label="用户手机号:">
  12. <el-input type="number" v-model.number="form.phone" placeholder="请输入用户手机号" clearable />
  13. </el-form-item>
  14. <!-- 流量订单 -->
  15. <span v-if="form.searchType === '2'">
  16. <el-form-item label="SIM卡号:">
  17. <el-input v-model="form.simCode" placeholder="请输入SIM卡号" clearable />
  18. </el-form-item>
  19. <el-form-item label="生效状态">
  20. <el-select v-model="form.flowStatus" placeholder="请选择生效状态">
  21. <el-option v-for="item in flowOptions" :key="item.value" :value="item.value" :label="item.label" />
  22. </el-select>
  23. </el-form-item>
  24. </span>
  25. <!-- 除充值订单 -->
  26. <span v-if="form.searchType !== '3'">
  27. <el-form-item label="商品ID:">
  28. <el-input v-model="form.goodsid" placeholder="请输入商品ID" />
  29. </el-form-item>
  30. <el-form-item label="商品名称:">
  31. <el-input v-model="form.goodsName" placeholder="请输入商品名称" />
  32. </el-form-item>
  33. </span>
  34. <el-form-item label="操作系统" v-else>
  35. <el-select v-model="form.platform" placeholder="请选择操作系统">
  36. <el-option v-for="item in systemOptions" :key="item.value" :value="item.value" :label="item.label" />
  37. </el-select>
  38. </el-form-item>
  39. <!-- 会员订单 -->
  40. <el-form-item v-if="form.searchType === '4'" label="资源平台:">
  41. <el-select v-model="form.platformId" placeholder="请选择资源平台">
  42. <el-option v-for="item in platformIdOptions" :key="item.value" :value="item.value" :label="item.label" />
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="支付状态:">
  46. <el-select v-model="form.status" placeholder="请选择订单状态">
  47. <el-option v-for="item in statusOptions" :key="item.value" :value="item.value" :label="item.label" />
  48. </el-select>
  49. </el-form-item>
  50. <el-form-item label="支付方式:">
  51. <el-select v-model="form.payType" placeholder="请选择支付方式">
  52. <el-option v-for="item in payOptions" :key="item.value" :value="item.value" :label="item.label" />
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item label="下单时间:">
  56. <el-date-picker v-model="form.listDate" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
  57. format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions" />
  58. </el-form-item>
  59. <el-form-item>
  60. <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
  61. <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
  62. <el-button type="primary" icon="el-icon-download" @click="handleExport"
  63. v-hasPermi="['order:list:export']">导出</el-button>
  64. <el-button type="primary" @click="getDialog" v-hasPermi="['order:list:export']">查看</el-button>
  65. </el-form-item>
  66. </el-form>
  67. <!-- 列表 -->
  68. <el-table :data="tableData" v-loading="loading">
  69. <el-table-column label="订单编号" prop="orderCode" key="orderCode" align="center" />
  70. <el-table-column v-if="form.searchType === '2'" label="第三方订单编号" key="thirdOrderId" align="center">
  71. <template slot-scope="scope">
  72. <span>{{ scope.row.thirdOrderId | empty(scope.row.thirdOrderId) }}</span>
  73. </template>
  74. </el-table-column>
  75. <el-table-column label="商品ID" prop="goodsid" key="goodsid" align="center" />
  76. <el-table-column label="商品名称" prop="goodsName" key="goodsName" align="center" show-overflow-tooltip />
  77. <el-table-column label="订单金额 / 元" prop="amount" key="amount" align="center" :formatter="amountFormatter" />
  78. <el-table-column v-if="form.searchType === '2'" label="SIM卡号" prop="simCode" key="simCode" align="center">
  79. <template slot-scope="scope">
  80. <span>{{ scope.row.simCode | empty(scope.row.simCode) }}</span>
  81. </template>
  82. </el-table-column>
  83. <el-table-column v-if="form.searchType === '1'" label="购买类型" prop="charging" key="charging" align="center"
  84. :formatter="chargingFormatter" />
  85. <el-table-column v-if="form.searchType === '3'" label="订单来源" prop="platform" key="platform" align="center"
  86. :formatter="platformFormatter" />
  87. <el-table-column v-if="form.searchType === '4'" label="栏目" prop="groupId" key="groupId" align="center"
  88. :formatter="groupFormatter" />
  89. <el-table-column v-if="form.searchType === '4'" label="服务时长" prop="expirationTime" key="expirationTime"
  90. align="center" :formatter="timeFormatter" />
  91. <el-table-column v-if="form.searchType === '4'" label="资源平台" prop="platformId" key="platformId" align="center"
  92. :formatter="platformIdFormatter" />
  93. <el-table-column label="下单时间" prop="createTime" key="createTime" align="center" />
  94. <el-table-column label="支付方式" prop="payType" key="payType" align="center" :formatter="payTypeFormatter" />
  95. <el-table-column label="支付状态" prop="status" key="status" align="center" :formatter="statusFormatter" />
  96. <el-table-column label="支付时间" prop="goodsUpdateTime" key="goodsUpdateTime" align="center" />
  97. <el-table-column label="用户账号" prop="userName" key="userName" align="center" />
  98. <el-table-column label="支付流水号" key="payId" align="center">
  99. <template slot-scope="scope">
  100. <span>{{ scope.row.payId | empty(scope.row.payId) }}</span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column v-if="form.searchType === '2'" label="生效状态" prop="flowStatus" key="flowStatus" align="center"
  104. :formatter="flowFormatter" />
  105. <el-table-column v-if="form.searchType === '2'" label="生效时间" key="effectTime" align="center">
  106. <template slot-scope="scope">
  107. <span>{{ scope.row.effectTime | empty(scope.row.effectTime) }}</span>
  108. </template>
  109. </el-table-column>
  110. </el-table>
  111. <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
  112. @pagination="getList" />
  113. <!-- 弹窗 -->
  114. <el-dialog :visible.sync="dialogVisible" title="导出历史" width="1000px">
  115. <el-table :data="dialogTable" v-loading="dialogLoading">
  116. <el-table-column type="index" label="序号" align="center" />
  117. <el-table-column label="任务ID" prop="msgId" align="center" />
  118. <el-table-column label="任务名称" prop="jobName" align="center" />
  119. <el-table-column label="任务类型" prop="jobType" align="center" />
  120. <el-table-column label="导出时间" prop="updateTime" align="center" />
  121. <el-table-column label="操作人" prop="useName" align="center" />
  122. <el-table-column label="操作" align="center">
  123. <template slot-scope="scope">
  124. <el-button type="text" @click="getDownLoad(scope.row)" :disabled="scope.row.status === 1">下载</el-button>
  125. </template>
  126. </el-table-column>
  127. </el-table>
  128. <pagination v-show="dialogTotal > 0" :total="dialogTotal" :page.sync="dialogForm.pageNum"
  129. :limit.sync="dialogForm.pageSize" @pagination="getDialogList" />
  130. </el-dialog>
  131. </div>
  132. </template>
  133. <script>
  134. import { list, dialogList, download, downLoadHistory } from '@/api/order/list'
  135. import { list as sceneList } from '@/api/operation/scene'
  136. import { payTypeMixin, systemMixin, serviceTimeMixin } from '@/mixin/index'
  137. export default {
  138. mixins: [payTypeMixin, systemMixin, serviceTimeMixin],
  139. data() {
  140. return {
  141. // 遮罩层
  142. loading: false,
  143. dialogLoading: false,
  144. // 表单
  145. form: {
  146. pageNum: 1,
  147. pageSize: 10,
  148. searchType: this.$route.query.searchType
  149. },
  150. // 列表
  151. tableData: [],
  152. // 总数据
  153. total: 0,
  154. // 弹窗
  155. dialogVisible: false,
  156. // 弹窗表单
  157. dialogForm: {
  158. pageNum: 1,
  159. pageSize: 10,
  160. searchType: this.$route.query.searchType
  161. },
  162. // 弹窗列表
  163. dialogTable: [],
  164. // 历史数据
  165. dialogTotal: 0,
  166. // 支付方式
  167. payOptions: [{
  168. value: 1,
  169. label: '微信'
  170. }, {
  171. value: 2,
  172. label: '支付宝'
  173. }],
  174. // 支付状态
  175. statusOptions: [{
  176. value: 2,
  177. label: '支付成功'
  178. }, {
  179. value: 3,
  180. label: '支付失败'
  181. }],
  182. // 栏目
  183. sceneOptions: [],
  184. // 生效状态
  185. flowOptions: [{
  186. value: 0,
  187. label: '已生效'
  188. }, {
  189. value: 1,
  190. label: '待生效'
  191. }, {
  192. value: 2,
  193. label: '已失效'
  194. }],
  195. platformIdOptions: [{
  196. value: 6,
  197. label: 'QQ音乐'
  198. }, {
  199. value: 9,
  200. label: '酷狗音乐'
  201. }, {
  202. value: 10,
  203. label: '爱听音乐'
  204. }],
  205. // 时间搜索不超过1个月
  206. selectDate: '',
  207. pickerOptions: {
  208. onPick: ({ maxDate, minDate }) => {
  209. this.selectDate = minDate.getTime()
  210. if (maxDate) {
  211. this.selectDate = ''
  212. }
  213. },
  214. disabledDate: (time) => {
  215. if (this.selectDate !== '') {
  216. const one = 30 * 24 * 3600 * 1000
  217. const minTime = this.selectDate - one
  218. const maxTime = this.selectDate + one
  219. return time.getTime() < minTime || time.getTime() > maxTime
  220. }
  221. }
  222. }
  223. }
  224. },
  225. mounted() {
  226. this.getScene()
  227. this.getList()
  228. this.payOptions.push(this.form.searchType === '3' ? {
  229. value: 3,
  230. label: '苹果支付'
  231. } : {
  232. value: 4,
  233. label: '猫币支付'
  234. })
  235. },
  236. methods: {
  237. // 列表
  238. getList() {
  239. this.loading = true
  240. list(this.form).then(res => {
  241. if (res.code === 0) {
  242. this.tableData = res.data.records
  243. this.total = res.data.total
  244. this.loading = false
  245. }
  246. })
  247. },
  248. // 搜索
  249. getSearch() {
  250. this.form.pageNum = 1
  251. this.getList()
  252. },
  253. // 重置
  254. getRefresh() {
  255. this.form = {
  256. pageNum: 1,
  257. pageSize: 10,
  258. searchType: this.$route.query.searchType
  259. }
  260. this.getList()
  261. },
  262. // 导出
  263. handleExport() {
  264. download(this.form).then(res => {
  265. if (res.code === 0) {
  266. this.$message.success(`${res.data}`)
  267. }
  268. })
  269. },
  270. // 弹窗
  271. getDialog() {
  272. this.dialogVisible = true
  273. this.getDialogList()
  274. },
  275. // 历史列表
  276. getDialogList() {
  277. this.dialogLoading = true
  278. dialogList(this.dialogForm).then(res => {
  279. if (res.code === 0) {
  280. this.dialogTable = res.data.records
  281. this.dialogTotal = res.data.total
  282. this.dialogLoading = false
  283. }
  284. })
  285. },
  286. // 历史下载
  287. getDownLoad(row) {
  288. this.$confirm(`是否下载${row.jobName}?`, '提示', {
  289. type: 'warning'
  290. }).then(() => {
  291. downLoadHistory(row.msgId).then(res => {
  292. if (res.code === 0) {
  293. this.$message.success('下载成功!')
  294. window.location.href = res.data
  295. this.getDialogList()
  296. }
  297. })
  298. }).catch(() => { })
  299. },
  300. // 栏目
  301. getScene() {
  302. sceneList().then(res => {
  303. if (res.code === 0) {
  304. res.data.map(i => {
  305. this.sceneOptions.push({
  306. value: i.id,
  307. label: i.name
  308. })
  309. })
  310. }
  311. })
  312. },
  313. // 字典翻译
  314. payTypeFormatter(row) {
  315. return this.selectDictLabel(this.payOptions, row.payType)
  316. },
  317. statusFormatter(row) {
  318. return this.selectDictLabel(this.statusOptions, row.status)
  319. },
  320. groupFormatter(row) {
  321. return row.groupId === null ? '-' : this.selectDictLabel(this.sceneOptions, row.groupId)
  322. },
  323. chargingFormatter(row) {
  324. return this.selectDictLabel(this.payTypeOptions, row.charging)
  325. },
  326. platformFormatter(row) {
  327. return this.selectDictLabel(this.systemOptions, row.platform)
  328. },
  329. platformIdFormatter(row) {
  330. return row.platformId === null ? '-' : this.selectDictLabel(this.platformIdOptions, row.platformId)
  331. },
  332. flowFormatter(row) {
  333. return row.flowStatus === null ? '-' : this.selectDictLabel(this.flowOptions, row.flowStatus)
  334. },
  335. amountFormatter(row) {
  336. return row.amount.toFixed(2)
  337. },
  338. timeFormatter(row) {
  339. return this.selectDictLabel(this.serviceTimeOptions, row.expirationTime)
  340. }
  341. },
  342. // 过滤器
  343. filters: {
  344. empty(row) {
  345. return !row ? '-' : row
  346. }
  347. }
  348. }
  349. </script>