index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. <style lang="scss">
  2. .del{
  3. display: inline-block;
  4. vertical-align: top;
  5. font-size: 28px;
  6. font-weight: 500;
  7. margin-left: 10px;
  8. color: #000;
  9. cursor: pointer;
  10. }
  11. </style>
  12. <template>
  13. <section class="content data">
  14. <h4>订单管理</h4>
  15. <el-divider></el-divider>
  16. <el-form label-width="80px" class="filter-form">
  17. <el-row>
  18. <el-col :span="4">
  19. <el-form-item label="比赛名称" prop="match_id">
  20. <el-select v-model="queryParams.match_id" placeholder="请选择比赛" size="mini" @change="getData()">
  21. <el-option v-for="item in matchList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="3">
  26. <el-form-item label="选手名字">
  27. <el-input clearable @clear="getData()" v-model="queryParams.username" placeholder="选手名字/手机号" size="mini"></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="3">
  31. <el-form-item label="报名类型">
  32. <el-select clearable @clear="getData()" v-model="queryParams.signup_type" placeholder="请选择" size="mini" @change="getData()">
  33. <el-option v-for="item in signupTypeList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="3">
  38. <el-form-item label="订单状态">
  39. <el-select clearable @clear="getData()" v-model="queryParams.order_status" placeholder="请选择" size="mini" @change="getData()">
  40. <el-option v-for="item in orderStatusList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  41. </el-select>
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="3">
  45. <el-form-item label="支付状态">
  46. <el-select clearable @clear="getData()" v-model="queryParams.pay_status" placeholder="请选择" size="mini" @change="getData()">
  47. <el-option v-for="item in payStatusList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  48. </el-select>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="4">
  52. <el-form-item style="margin-left:10px;" label-width="10">
  53. <el-button type="primary" @click="getData" size="mini">筛选</el-button>
  54. <el-button type="normal" @click="queryParams={},getData()" size="mini">重置</el-button>
  55. </el-form-item>
  56. </el-col>
  57. </el-row>
  58. <el-row :gutter="10">
  59. <el-col :span="6"></el-col>
  60. </el-row>
  61. </el-form>
  62. <el-table :data="list" height='55vh' style="width: 100%;margin-top:10px;" v-loading='loading'>
  63. <el-table-column prop="user_name" label="选手名称"/>
  64. <el-table-column prop="phone" label="手机号"/>
  65. <el-table-column prop="usercode" label="用户代码"/>
  66. <el-table-column prop="openid" label="微信ID"/>
  67. <el-table-column prop="match_name" label="报名赛事"/>
  68. <el-table-column prop="match_group_name" label="赛事分组"/>
  69. <el-table-column prop="signup_type" label="报名类型">
  70. <template slot-scope="scope">
  71. <span v-if="scope.row.signup_type==2" style="color:red;">选手</span>
  72. <span v-else>游客</span>
  73. </template>
  74. </el-table-column>
  75. <el-table-column prop="total_fee" label="报名费用"/>
  76. <el-table-column prop="order_status" label="订单状态" width="150">
  77. <template slot-scope="scope">
  78. <!-- <span v-if="scope.row.order_status==1" style="color:#67c23a;">已支付</span> -->
  79. <el-button v-if="scope.row.order_status==1" type="success" size="mini">已支付</el-button>
  80. <span v-else>未支付</span>
  81. <el-button v-if="scope.row.order_status==0" @click="editOld(scope.row)" size="mini" type="primary">我是老用户</el-button>
  82. </template>
  83. </el-table-column>
  84. <el-table-column prop="out_trade_no" label="订单号" width="180"/>
  85. <el-table-column prop="transaction_id" label="微信支付单号" width="180"/>
  86. <el-table-column prop="pay_status" label="支付状态" width="150">
  87. <template slot-scope="scope">
  88. <!-- <span v-if="scope.row.pay_status==1" class="color:green;">已支付</span> -->
  89. <el-button v-if="scope.row.pay_status==1" type="success" size="mini">已支付</el-button>
  90. <span v-else>未支付</span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column prop="pay_time" label="支付时间" width="160" show-overflow-tooltip />
  94. <el-table-column prop="ctime" label="下单时间" width="160"/>
  95. <el-table-column prop="remark" label="备注" width="160"/>
  96. <el-table-column prop="date" label="操作" fixed="right" width="150">
  97. <template slot-scope="scope">
  98. <el-button @click="edit(scope.row.id)" size="mini" type="warning">编辑</el-button>
  99. <el-button @click="del(scope.row.id)" size="mini" type="danger" :disabled="scope.row.pay_status==1">删除</el-button>
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. <Page
  104. ref="pageButton"
  105. :current="form.page"
  106. :page_size="form.page_size"
  107. :total="total"
  108. @pageChange="gopage"
  109. />
  110. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  111. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  112. <el-form-item label="赛事名称" prop="match_id">
  113. <el-select v-model="form.match_id" placeholder="请选择比赛" disabled>
  114. <el-option v-for="item in matchList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  115. </el-select>
  116. </el-form-item>
  117. <el-form-item label="选手名称" prop="player_id">
  118. <el-input v-model="form.user_name" disabled placeholder=""></el-input>
  119. </el-form-item>
  120. <el-form-item label="报名类型" prop="match_id">
  121. <el-select v-model="form.signup_type" placeholder="请选择比赛" disabled>
  122. <el-option v-for="item in signupTypeList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  123. </el-select>
  124. </el-form-item>
  125. <el-form-item label="报名费用" prop="total_fee">
  126. <el-input v-model="form.total_fee" disabled placeholder=""></el-input>
  127. </el-form-item>
  128. <el-form-item label="支付状态" prop="match_id">
  129. <el-select v-model="form.pay_status" placeholder="请选择" disabled>
  130. <el-option v-for="item in orderStatusList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  131. </el-select>
  132. </el-form-item>
  133. <el-form-item label="订单状态" prop="match_id">
  134. <el-select v-model="form.order_status" placeholder="请选择">
  135. <el-option v-for="item in orderStatusList" :key='item.id' :label="item.name" :value="item.id"></el-option>
  136. </el-select>
  137. </el-form-item>
  138. <el-form-item label="备注" prop="match_id">
  139. <el-input v-model="form.remark" placeholder="" type="textarea"></el-input>
  140. </el-form-item>
  141. </el-form>
  142. <div slot="footer" class="dialog-footer">
  143. <el-button type="primary" @click="submitForm">确 定</el-button>
  144. <el-button @click="open=false">取 消</el-button>
  145. </div>
  146. </el-dialog>
  147. <!-- 点评 -->
  148. <el-dialog title="老用户处理" :visible.sync="open1" width="500px" append-to-body>
  149. <el-form ref="form1" :model="form1" label-width="80px">
  150. <el-form-item label="报名类型">
  151. <el-select v-model="form1.signup_type" placeholder="请选择报名类型">
  152. <el-option
  153. v-for="item in signupTypeList"
  154. :key="item.id"
  155. :label="item.name"
  156. :value="item.id">
  157. </el-option>
  158. </el-select>
  159. </el-form-item>
  160. <el-form-item label="赛事分组">
  161. <el-select v-model="form1.match_group" placeholder="请选择赛事分组">
  162. <el-option
  163. v-for="item in groupList"
  164. :key="item.id"
  165. :label="item.name"
  166. :value="item.id">
  167. </el-option>
  168. </el-select>
  169. </el-form-item>
  170. <el-form-item label="开户类型">
  171. <el-select v-model="form1.player_type" placeholder="请选择开户类型">
  172. <el-option
  173. v-for="item in playerType"
  174. :key="item.value"
  175. :label="item.label"
  176. :value="item.value">
  177. </el-option>
  178. </el-select>
  179. </el-form-item>
  180. <el-form-item label="参赛角色">
  181. <el-select v-model="form1.role_type" placeholder="请选择参赛角色">
  182. <el-option
  183. v-for="item in playerRole"
  184. :key="item.value"
  185. :label="item.label"
  186. :value="item.value">
  187. </el-option>
  188. </el-select>
  189. </el-form-item>
  190. </el-form>
  191. <div slot="footer" class="dialog-footer">
  192. <el-button type="primary" @click="saveOldUser" size="mini">确 定</el-button>
  193. <el-button @click="open1=false" size="mini">取 消</el-button>
  194. </div>
  195. </el-dialog>
  196. </section>
  197. </template>
  198. <script>
  199. import Page from "../../components/Page";
  200. export default {
  201. components: {
  202. Page,
  203. },
  204. data(){
  205. return{
  206. loading:false,
  207. queryParams:{
  208. match_id:0,
  209. page:1,
  210. stock_date:this.getNowDate()
  211. },
  212. form:{
  213. stock_date:this.getNowDate()
  214. },
  215. form1:{},
  216. list:[{},{}],
  217. total:0,
  218. title:'新增用户',
  219. open:false,
  220. open1:false,
  221. rules:{
  222. match_id: [
  223. { required: true, message: '请选择比赛', trigger: 'change' }
  224. ],
  225. player_id: [
  226. { required: true, message: '请输入用户代码', trigger: 'blur' }
  227. ],
  228. stock_date: [
  229. { required: true, message: '请选择持仓日期', trigger: 'blur' }
  230. ],
  231. today_fund: [
  232. { required: true, message: '请输入今日资产', trigger: 'blur' }
  233. ],
  234. is_markt: [
  235. { required: false, message: '请选择', trigger: 'change' }
  236. ]
  237. },
  238. matchList:[],
  239. playerList:[],
  240. groupList:[],
  241. stockList:[],
  242. missDayList:[
  243. {id:0,name:"否"},
  244. {id:1,name:"是"}
  245. ],
  246. orderStatusList:[
  247. {id:0,name:"未支付"},
  248. {id:1,name:"已支付"},
  249. {id:-1,name:"已退款"}
  250. ],
  251. payStatusList:[
  252. {id:0,name:"未支付"},
  253. {id:1,name:"已支付"}
  254. ],
  255. signupTypeList:[
  256. {id:1,name:"游客"},
  257. {id:2,name:"选手"},
  258. ],
  259. playerType:[
  260. {label:"游客",value:0},
  261. {label:"普通选手",value:1},
  262. {label:"种子选手",value:2},
  263. {label:"开户选手",value:3}
  264. ],
  265. playerRole:[
  266. {label:"游客",value:1},
  267. {label:"选手",value:2}
  268. ]
  269. }
  270. },
  271. methods:{
  272. updateRank(){
  273. this.loading = true
  274. this.$api.updateRank(this.queryParams).then((res)=>{
  275. this.loading = false
  276. this.$message({
  277. message: "更新成功!",
  278. type: "success",
  279. });
  280. })
  281. },
  282. getNowDate(){
  283. var y=new Date().getFullYear()
  284. var m=Number(new Date().getMonth() + 1)
  285. var d = new Date().getDate()
  286. m=m>9?m:'0'+m;
  287. d=d>9?d:'0'+d
  288. return y+'-'+m+'-'+d;
  289. },
  290. autoCompleteData(){
  291. this.loading = true
  292. this.$api.autoCompleteData(this.queryParams).then((res)=>{
  293. this.getData();
  294. this.loading = false;
  295. })
  296. },
  297. downloadExcel(){
  298. this.$api.downloadRecords(this.queryParams).then((res)=>{
  299. var elink = document.createElement('a');
  300. let blob=new Blob([res.data], {type: 'application/vnd.ms-excel,charset=UTF-8'});
  301. let objUrl=URL.createObjectURL(blob);
  302. let file_name=decodeURIComponent(res.headers['content-disposition'].split('=')[1]);
  303. console.log(file_name)
  304. elink.download = "参赛数据";
  305. elink.style.display = 'none';
  306. elink.href = objUrl;
  307. document.body.appendChild(elink);
  308. elink.click();
  309. document.body.removeChild(elink);
  310. this.download_loading = false;
  311. })
  312. },
  313. del(id) {
  314. this.$confirm("确定删除吗?", "提示", {
  315. type: "warning",
  316. }).then(() => {
  317. this.$api.delSignupOrder({ id: id }).then((res) => {
  318. this.$message({
  319. message: "删除成功",
  320. type: "success",
  321. });
  322. this.getData();
  323. });
  324. });
  325. },
  326. gopage(size) {
  327. if (size) {
  328. this.queryParams.page_size = size;
  329. }
  330. this.queryParams.page = this.$refs.pageButton.page;
  331. this.getData();
  332. },
  333. getData(){
  334. this.loading = true;
  335. this.$api.getSignupList(this.queryParams).then(res=>{
  336. this.list=res.data.data.list
  337. this.total = res.data.data.total;
  338. this.loading = false;
  339. })
  340. },
  341. edit(id){
  342. this.title = "订单详情"
  343. this.$api.getSignupOrderDetail({id:id}).then(res=>{
  344. this.form = res.data.data
  345. this.open = true
  346. })
  347. },
  348. editOld(row){
  349. this.open1 = true;
  350. this.form1 = row;
  351. },
  352. saveOldUser(){
  353. this.$api.saveOldUser(this.form1).then(res=>{
  354. if(res.data.code==0){
  355. this.$message.success("处理成功!")
  356. this.open1 = false
  357. }else{
  358. this.$message.error(res.data.message)
  359. }
  360. })
  361. },
  362. editComment(id){
  363. this.title = "顽主点评"
  364. this.$api.getRecordInfo({id:id}).then(res=>{
  365. this.form1 = res.data.data
  366. this.open1 = true
  367. })
  368. },
  369. saveComment(){
  370. this.$api.updateComment({id:this.form1.id,wanzhu_comment:this.form1.wanzhu_comment}).then(response => {
  371. if(response.data.code != 0){
  372. this.msgError(response.data.message);
  373. return
  374. }
  375. this.msgSuccess("修改成功");
  376. this.open1 = false;
  377. this.getData();
  378. });
  379. },
  380. handleAdd(){
  381. this.open=true;
  382. this.title='新增数据';
  383. this.form={
  384. match_id:this.matchList[0].id,
  385. today_stock:[{code: "", name:"",fund:''}],
  386. today_stock_img:[],
  387. stock_date:this.getNowDate()
  388. }
  389. },
  390. addCode(){
  391. this.form.today_stock.push({code: "", name:"",fund:''})
  392. },
  393. handleSuccess(res, file) {
  394. console.log(res)
  395. this.form.today_stock_img.push(res.data.url);
  396. },
  397. /** 提交按钮 */
  398. submitForm() {
  399. console.log(this.form)
  400. this.$refs["form"].validate(valid => {
  401. if (valid) {
  402. if (this.form.id != null) {
  403. this.$api.editSignupOrder(this.form).then(response => {
  404. if(response.data.code != 0){
  405. this.msgError(response.data.message);
  406. return
  407. }
  408. this.msgSuccess("修改成功");
  409. this.open = false;
  410. this.getData();
  411. });
  412. }
  413. }
  414. });
  415. },
  416. },
  417. created(){
  418. this.$api.getMatchList().then(res=>{
  419. this.matchList=res.data.data
  420. this.queryParams.match_id = this.matchList[0].id
  421. this.$api.getGroups(this.queryParams).then(res=>{
  422. this.groupList = res.data.data.list;
  423. })
  424. this.getData()
  425. })
  426. }
  427. }
  428. </script>