酒店预订平台
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

633 líneas
29 KiB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <!-- import CSS -->
  6. <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  7. </head>
  8. <body>
  9. <div id="app" class="table">
  10. <div>
  11. <div class="header-search" style="width: 100%;margin-bottom: 10px">
  12. <span>付款单ID:</span>
  13. <el-input v-model="search.id" style="width: 120px;" placeholder="请输入内容" clearable></el-input>
  14. <span>名称:</span>
  15. <el-input v-model="search.name" style="width: 150px;" placeholder="请输入内容"></el-input>
  16. <span>状态</span>
  17. <el-select v-model="search.status" filterable placeholder="请选择" clearable>
  18. <el-option
  19. v-for="item in status"
  20. :key="item.id"
  21. :label="item.value"
  22. :value="item.id">
  23. </el-option>
  24. </el-select>
  25. <span>创建人</span>
  26. <el-select v-model="search.create_id" filterable placeholder="请选择" clearable>
  27. <el-option
  28. v-for="item in userList"
  29. :key="item.id"
  30. :label="item.name"
  31. :value="item.id">
  32. </el-option>
  33. </el-select>
  34. </div>
  35. <div class="header-search" style="width: 100%;margin-bottom: 10px">
  36. <span>金额</span>
  37. <el-input-number v-model="search.startMoney" style="width: 170px;" placeholder="请输入内容" clearable></el-input-number>
  38. ~
  39. <el-input-number v-model="search.endMoney" style="width: 170px;" placeholder="请输入内容" clearable></el-input-number>
  40. <el-button type="primary" icon="el-icon-search" @click="getData(1)">搜索</el-button>
  41. <el-button type="primary" icon="el-icon-plus" @click="edit(null)">新增收款单</el-button>
  42. </div>
  43. <el-table ref="multipleTable" :data="tableData" border tooltip-effect="dark"
  44. style="font-size:12px;width: 100%;margin-top: 12px">
  45. <el-table-column prop="create_id" label="创建人" min-width="70" :formatter="getUserName"></el-table-column>
  46. <el-table-column prop="id" label="收款单号" min-width="50"></el-table-column>
  47. <el-table-column prop="name" label="收款单名称" min-width="120"></el-table-column>
  48. <el-table-column prop="status" label="收款单状态" :formatter="getStatusName" min-width="140">
  49. <template slot-scope="scope">
  50. <el-radio-group v-model="scope.row.status" size="mini" @change="setStatus(scope.row)">
  51. <el-radio-button label="0">未收款</el-radio-button>
  52. <el-radio-button label="1">收款中</el-radio-button>
  53. <el-radio-button label="2">已收款</el-radio-button>
  54. </el-radio-group>
  55. </template>
  56. </el-table-column>
  57. <el-table-column prop="order_ids" label="关联订单" min-width="150"></el-table-column>
  58. <el-table-column prop="total_amount" label="金额" min-width="60"></el-table-column>
  59. <el-table-column prop="create_time" label="创建时间" min-width="80"></el-table-column>
  60. <el-table-column prop="update_time" label="更新时间" min-width="80"></el-table-column>
  61. <el-table-column label="操作" min-width="180">
  62. <template slot-scope="scope">
  63. <el-button-group>
  64. <el-button type="primary" size="mini" @click="edit(scope.row)" icon="el-icon-edit">编辑</el-button>
  65. <el-button type="success" size="mini" @click="editOrderDivShow(scope.row)" icon="el-icon-share">订单</el-button>
  66. <el-button type="danger" size="mini" icon="el-icon-delete" @click="delAll(scope.row.id)">删除</el-button>
  67. </el-button-group>
  68. </template>
  69. </el-table-column>
  70. </el-table>
  71. <el-pagination
  72. :page-size="search.pageSize"
  73. :pager-count="11"
  74. layout="total, sizes, prev, pager, next, jumper"
  75. :total="total"
  76. :current-page="search.pageNum"
  77. :page-sizes="[10, 20, 30, 40, 50]"
  78. @size-change="sizeChange"
  79. @current-change="getData"
  80. @prev-click="getData"
  81. @next-click="getData"
  82. ></el-pagination>
  83. </div>
  84. <transition name="bounce" v-if="editShow">
  85. <el-dialog title="收款单详情" :visible.sync="editShow" width="90%" top="15px">
  86. <el-form ref="form" label-width="100px" style="width: 100%;padding-bottom: 20px">
  87. <div style="display: flex;width: 100%">
  88. <el-form-item v-if="editType" label="收款单ID:" style="width: 80%">
  89. <div v-html="editData.id"></div>
  90. </el-form-item>
  91. </div>
  92. <div>
  93. <el-form-item label="收款单名称:" style="width: 80%">
  94. <el-input v-model="editData.name" style="width: 150px;" placeholder="请输入内容"></el-input>
  95. </el-form-item>
  96. </div>
  97. <div>
  98. <el-form-item v-if="editType" label="收款单状态:" style="width: 80%">
  99. <el-radio-group v-model="editData.status" size="mini" disabled>
  100. <el-radio-button label="0">未收款</el-radio-button>
  101. <el-radio-button label="1">收款中</el-radio-button>
  102. <el-radio-button label="2">已收款</el-radio-button>
  103. </el-radio-group>
  104. </el-form-item>
  105. </div>
  106. <div>
  107. <el-button type="primary" @click="editDoing()" >保存</el-button>
  108. </div>
  109. </el-form>
  110. </el-dialog>
  111. </transition>
  112. <transition name="bounce" v-if="editOrderShow">
  113. <el-dialog title="详情" :visible.sync="editOrderShow" width="90%" top="15px">
  114. <el-form ref="form" label-width="100px" style="width: 100%;padding-bottom: 10px">
  115. <div style="display: flex;width: 100%">
  116. <el-form-item label="收款单ID:" style="width: 80%">
  117. <div v-html="editOrder.id"></div>
  118. </el-form-item>
  119. <el-form-item label="收款单名称:" style="width: 80%">
  120. <div v-html="editOrder.name"></div>
  121. </el-form-item>
  122. <el-form-item label="收款单状态:" style="width: 80%">
  123. <el-radio-group v-model="editOrder.status" size="mini" disabled>
  124. <el-radio-button label="0">未收款</el-radio-button>
  125. <el-radio-button label="1">收款中</el-radio-button>
  126. <el-radio-button label="2">已收款</el-radio-button>
  127. </el-radio-group>
  128. </el-form-item>
  129. </div>
  130. </el-form>
  131. <div>
  132. <div class="header-search" style="width: 100%;margin-bottom: 10px">
  133. <span>订单ID:</span>
  134. <el-input v-model="orderMainListSearch.order_id" style="width: 150px;" placeholder="请输入内容"></el-input>
  135. <span>订单状态:</span>
  136. <el-select v-model="orderMainListSearch.order_status" filterable style="width: 150px;" placeholder="请选择" clearable>
  137. <el-option
  138. v-for="item in orderMainStatus"
  139. :key="item.id"
  140. :label="item.name"
  141. :value="item.id">
  142. </el-option>
  143. </el-select>
  144. <span>收款单状态</span>
  145. <el-select v-model="orderMainListSearch.inReceipt" style="width: 150px;" filterable placeholder="请选择" clearable>
  146. <el-option
  147. v-for="item in inReceipt"
  148. :key="item.id"
  149. :label="item.name"
  150. :value="item.id">
  151. </el-option>
  152. </el-select>
  153. </div>
  154. <div class="header-search" style="width: 100%;margin-bottom: 10px">
  155. <span>用户名</span>
  156. <el-input v-model="orderMainListSearch.user_name" style="width: 150px;" placeholder="请输入内容" clearable></el-input>
  157. <span>渠道:</span>
  158. <el-select v-model="orderMainListSearch.channel_id" style="width: 150px;" filterable placeholder="请选择" clearable>
  159. <el-option
  160. v-for="item in channelList"
  161. :key="item.id"
  162. :label="item.name"
  163. :value="item.id">
  164. </el-option>
  165. </el-select>
  166. <span>渠道订单号:</span>
  167. <el-input v-model="orderMainListSearch.channel_order_no" style="width: 150px;" placeholder="请输入内容"></el-input>
  168. <span>专员</span>
  169. <el-select v-model="orderMainListSearch.commissioner_id" style="width: 150px;" filterable placeholder="请选择" clearable>
  170. <el-option
  171. v-for="item in userList"
  172. :key="item.id"
  173. :label="item.name"
  174. :value="item.id">
  175. </el-option>
  176. </el-select>
  177. <span>下单人</span>
  178. <el-select v-model="orderMainListSearch.create_id" style="width: 150px;" filterable placeholder="请选择" clearable>
  179. <el-option
  180. v-for="item in userList"
  181. :key="item.id"
  182. :label="item.name"
  183. :value="item.id">
  184. </el-option>
  185. </el-select>
  186. </div>
  187. <div class="header-search" style="width: 100%;margin-bottom: 10px">
  188. <span>手机号</span>
  189. <el-input v-model="orderMainListSearch.user_phone" style="width: 150px;" placeholder="请输入内容" clearable></el-input>
  190. <span>金额</span>
  191. <el-input-number v-model="orderMainListSearch.startMoney" style="width: 170px;" placeholder="请输入内容" clearable></el-input-number>
  192. ~
  193. <el-input-number v-model="orderMainListSearch.endMoney" style="width: 170px;" placeholder="请输入内容" clearable></el-input-number>
  194. <span>时间</span>
  195. <el-date-picker
  196. style="width: 150px;"
  197. v-model="orderMainListSearch.startTime"
  198. type="date"
  199. value-format="yyyy-MM-dd"
  200. :picker-options="pickerOptions"
  201. placeholder="选择日期">
  202. </el-date-picker>
  203. ~
  204. <el-date-picker
  205. style="width: 150px;"
  206. v-model="orderMainListSearch.endTime"
  207. value-format="yyyy-MM-dd"
  208. type="date"
  209. :picker-options="pickerOptions"
  210. placeholder="选择日期">
  211. </el-date-picker>
  212. <el-button type="primary" icon="el-icon-search" @click="getOrderMainData(1)">搜索</el-button>
  213. </div>
  214. <div>
  215. <el-table ref="multipleTable" :data="orderMainList" border tooltip-effect="dark" style="font-size:12px;width: 100%;margin-top: 12px" @selection-change="handleSelectionChange">
  216. <el-table-column type="selection" width="30" :selectable="checkSelect"></el-table-column>
  217. <el-table-column prop="id" label="订单ID" min-width="40" ></el-table-column>
  218. <el-table-column prop="commissioner" label="专员" min-width="40" ></el-table-column>
  219. <el-table-column prop="channel_name" label="渠道" min-width="80" ></el-table-column>
  220. <el-table-column prop="channel_order_no" label="渠道订单号" min-width="90" ></el-table-column>
  221. <el-table-column prop="create_id" label="下单人" min-width="50" :formatter="getUserName"></el-table-column>
  222. <el-table-column prop="user_name" label="用户名称" min-width="50" ></el-table-column>
  223. <el-table-column prop="user_phone" label="手机号" min-width="60" ></el-table-column>
  224. <el-table-column prop="total_amount" label="总金额" min-width="40" ></el-table-column>
  225. <el-table-column prop="order_status" label="状态" min-width="40" :formatter="getOrderMainStatus"></el-table-column>
  226. <el-table-column prop="create_time" label="下单时间" min-width="80" ></el-table-column>
  227. <el-table-column prop="receipt_order_id" label="收款单ID" min-width="40" ></el-table-column>
  228. <el-table-column prop="receipt_order_name" label="收款单名称" min-width="80" ></el-table-column>
  229. <el-table-column label="操作" >
  230. <template slot-scope="scope">
  231. <el-button-group>
  232. <el-button type="primary" size="mini" v-if="scope.row.receipt_order_id==0 && editOrder.status==0" @click="addOrderMain(scope.row.id)" icon="el-icon-edit">添加</el-button>
  233. <el-button type="danger" size="mini" v-if="scope.row.receipt_order_id==editOrder.id && editOrder.status==0" @click="removeOrderMain(scope.row.id)" icon="el-icon-delete">移除</el-button>
  234. </el-button-group>
  235. </template>
  236. </el-table-column>
  237. </el-table>
  238. <div style="margin-top: 5px">
  239. <el-button type="primary" icon="el-icon-circle-plus" @click="addOrderAll()" :disabled="multipleSelection.length==0">添加到采购单</el-button>
  240. </div>
  241. <el-pagination
  242. :page-size="orderMainListSearch.pageSize"
  243. :pager-count="11"
  244. layout="total, sizes, prev, pager, next, jumper"
  245. :total="orderMainTotal"
  246. :current-page="orderMainListSearch.pageNum"
  247. :page-sizes="[10, 20, 30, 40, 50]"
  248. @size-change="sizeOrderMainChange"
  249. @current-change="getOrderMainData"
  250. @prev-click="getOrderMainData"
  251. @next-click="getOrderMainData"
  252. ></el-pagination>
  253. </div>
  254. </div>
  255. </el-dialog>
  256. </transition>
  257. </div>
  258. </body>
  259. <!-- import Vue before Element -->
  260. <script src="/assets/js/vue/vue.js"></script>
  261. <!-- import JavaScript -->
  262. <script src="/assets/js/vue/index.js"></script>
  263. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  264. <script>
  265. new Vue({
  266. el: '#app',
  267. data: function () {
  268. return {
  269. search: {
  270. id:"",
  271. create_id:"",
  272. name: "",
  273. status: "all",
  274. startMoney:0,
  275. endMoney:0,
  276. pageSize: 10,
  277. pageNum: 1
  278. },
  279. status: [
  280. {"id": "all", "value": "请选择"},
  281. {"id": 0, 'value': "未收款"},
  282. {"id": 1, 'value': "收款中"},
  283. {"id": 2, 'value': "已收款"}
  284. ],
  285. total: 0,
  286. tableData: [],
  287. userList: [],
  288. info: {
  289. id: null,
  290. name: "",
  291. status: 0,
  292. list: []
  293. },
  294. editShow: false,
  295. editType: false,
  296. editData: {},
  297. editOrderShow:false,
  298. editOrder:{},
  299. orderMainListSearch:{
  300. "receipt_order_id":"",
  301. "inReceipt":"",
  302. "order_id":"",
  303. "channel_order_no":"",
  304. "channel_id":"",
  305. "order_status":"",
  306. "commissioner_id":"",
  307. "user_name":"",
  308. "user_phone":"",
  309. "create_id":"",
  310. "startMoney":"",
  311. "endMoney":"",
  312. "startTime":"",
  313. "endTime":"",
  314. "pageNum":1,
  315. "pageSize":10
  316. },
  317. orderMainTotal:0,
  318. orderMainList:[],
  319. inReceipt:[
  320. {id:1,name:"在此收款单中"},
  321. {id:2,name:"不在此收款单中"},
  322. {id:3,name:"不在任何收款单中"}
  323. ],
  324. //0待处理 1已确认 2部分取消 10已完成 11已取消
  325. orderMainStatus:[
  326. {id:0,name:"待处理"},
  327. {id:1,name:"已确认"},
  328. {id:2,name:"部分取消"},
  329. {id:3,name:"处理中"},
  330. {id:10,name:"已完成"},
  331. {id:11,name:"已取消"}
  332. ],
  333. channelList:[],
  334. multipleSelection: [],
  335. pickerOptions: {
  336. shortcuts: [{
  337. text: '今天',
  338. onClick(picker) {
  339. picker.$emit('pick', new Date());
  340. }
  341. }, {
  342. text: '昨天',
  343. onClick(picker) {
  344. const date = new Date();
  345. date.setTime(date.getTime() - 3600 * 1000 * 24);
  346. picker.$emit('pick', date);
  347. }
  348. }, {
  349. text: '一周前',
  350. onClick(picker) {
  351. const date = new Date();
  352. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
  353. picker.$emit('pick', date);
  354. }
  355. }]
  356. },
  357. }
  358. },
  359. created() {
  360. this.getAdminUser();
  361. this.getChannelList();
  362. this.getData(1)
  363. },
  364. methods: {
  365. checkSelect(row,index){
  366. if (this.editOrder.status != 0) {
  367. return false;
  368. }
  369. if (row.receipt_order_id ==0) {
  370. return true;
  371. }
  372. return false;
  373. },
  374. handleSelectionChange(val) {
  375. this.multipleSelection = val;
  376. },
  377. getChannelList(){
  378. axios.post("/hotel.php/cf_channel_info/getList", this.search).then((response) => {
  379. console.log(response)
  380. let data = response.data;
  381. this.channelList = data.list;
  382. }).catch(function (error) {
  383. console.log(error);
  384. });
  385. },
  386. getStatusName(info) {
  387. for (let i = 0; i < this.status.length; i++) {
  388. if (this.status[i].id == info.status) {
  389. return this.status[i].value
  390. }
  391. }
  392. return "-"
  393. },
  394. getUserName(info) {
  395. for (let i = 0; i < this.userList.length; i++) {
  396. if (this.userList[i].id == info.create_id) {
  397. return this.userList[i].name
  398. }
  399. }
  400. return "-"
  401. },
  402. getOrderMainStatus(info){
  403. for (let i = 0; i < this.orderMainStatus.length; i++) {
  404. if (this.orderMainStatus[i].id == info.order_status) {
  405. return this.orderMainStatus[i].name
  406. }
  407. }
  408. return "-"
  409. },
  410. sizeChange(pageSize) {
  411. this.search.pageSize = pageSize;
  412. this.getData(this.search.pageNum)
  413. },
  414. sizeOrderMainChange(pageSize) {
  415. this.orderMainListSearch.pageSize = pageSize;
  416. this.getOrderMainData(this.orderMainListSearch.pageNum)
  417. },
  418. //獲取列表
  419. getData(page) {
  420. this.search.pageNum = page;
  421. axios.post("/hotel.php/receipt_order/getList", this.search).then((response) => {
  422. let data = response.data;
  423. console.log(this.tableData);
  424. if (data.flag) {
  425. this.tableData = data.data.list;
  426. this.total = data.data.total;
  427. console.log(this.tableData);
  428. } else {
  429. this.$message.error(response.msg);
  430. }
  431. }).catch(function (error) {
  432. console.log(error);
  433. });
  434. },
  435. getAdminUser() {
  436. axios.post("/hotel.php/auth/admin/getList", this.search).then((response) => {
  437. this.userList = response.data.list;
  438. }).catch(function (error) {
  439. console.log(error);
  440. });
  441. },
  442. edit(info) {
  443. if (info == null) {
  444. this.editType = false;
  445. this.editData = {
  446. name: ""
  447. }
  448. } else {
  449. this.editType = true;
  450. this.editData = {
  451. id:info.id,
  452. name: info.name,
  453. status:info.status
  454. }
  455. }
  456. this.editShow = true;
  457. },
  458. editDoing(){
  459. axios.post("/hotel.php/receipt_order/save", this.editData).then( (response)=> {
  460. let data = response.data;
  461. console.log(this.tableData);
  462. if (data.flag) {
  463. this.$message.success("保存成功");
  464. this.editShow = false;
  465. this.getData(1);
  466. } else {
  467. this.$message.error(data.msg);
  468. }
  469. }).catch(function (error) {
  470. this.$message.error("保存失败");
  471. console.log(error);
  472. });
  473. },
  474. setStatus(info){
  475. this.$confirm('确定修改状态?', '提示', {
  476. confirmButtonText: '确定',
  477. cancelButtonText: '取消',
  478. type: 'warning'
  479. }).then(() => {
  480. axios.post("/hotel.php/receipt_order/setStatus", info).then( (response)=> {
  481. let data = response.data;
  482. if (data.flag) {
  483. this.$message.success("保存成功");
  484. } else {
  485. this.$message.error(data.msg);
  486. this.getData(this.search.pageNum)
  487. }
  488. }).catch(function (error) {
  489. this.$message.error("保存失败");
  490. console.log(error);
  491. this.getData(this.search.pageNum)
  492. });
  493. }).catch(() => {
  494. this.$message.success("已取消");
  495. this.getData(this.search.pageNum)
  496. })
  497. },
  498. editOrderDivShow(info){
  499. console.log(info);
  500. this.editOrder = info;
  501. this.orderMainListSearch.receipt_order_id = info.id;
  502. this.orderMainList=[];
  503. this.getOrderMainData(1);
  504. this.editOrderShow = true;
  505. },
  506. getOrderMainData(page){
  507. this.orderMainListSearch.pageNum = page;
  508. axios.post("/hotel.php/receipt_order/getOrderMainList", this.orderMainListSearch).then((response) => {
  509. let data = response.data;
  510. console.log(this.tableData);
  511. if (data.flag) {
  512. this.orderMainList = data.data.list;
  513. this.orderMainTotal = data.data.total;
  514. console.log(this.orderMainList);
  515. } else {
  516. this.$message.error(data.msg);
  517. }
  518. }).catch(function (error) {
  519. console.log(error);
  520. });
  521. },
  522. addOrderMain(order_id){
  523. let param = {
  524. order_id:order_id,
  525. id:this.editOrder.id
  526. }
  527. axios.post("/hotel.php/receipt_order/addOrderMain", param).then((response) => {
  528. let data = response.data;
  529. if (data.flag) {
  530. this.$message.success("保存成功");
  531. this.getOrderMainData(this.orderMainListSearch.pageNum)
  532. this.getData(this.search.pageNum)
  533. } else {
  534. this.$message.error(data.msg);
  535. }
  536. }).catch(function (error) {
  537. console.log(error);
  538. });
  539. },
  540. addOrderAll(){
  541. let orderId = "";
  542. let length = this.multipleSelection.length;
  543. for (var k = 0; k < length; k++) {
  544. if (orderId == "") {
  545. orderId = this.multipleSelection[k].id;
  546. continue;
  547. }
  548. orderId =orderId+","+this.multipleSelection[k].id;
  549. }
  550. this.addOrderMain(orderId);
  551. },
  552. removeOrderMain(order_id){
  553. let param = {
  554. order_id:order_id,
  555. id:this.editOrder.id
  556. }
  557. axios.post("/hotel.php/receipt_order/removeOrderMain", param).then((response) => {
  558. let data = response.data;
  559. if (data.flag) {
  560. this.$message.success("移除成功");
  561. this.getOrderMainData(this.orderMainListSearch.pageNum)
  562. this.getData(this.search.pageNum)
  563. } else {
  564. this.$message.error(data.msg);
  565. }
  566. }).catch(function (error) {
  567. console.log(error);
  568. });
  569. },
  570. delAll(id){
  571. let param = {
  572. id:id
  573. }
  574. this.$confirm('确定删除采购单?', '提示', {
  575. confirmButtonText: '确定',
  576. cancelButtonText: '取消',
  577. type: 'warning'
  578. }).then(() => {
  579. axios.post("/hotel.php/receipt_order/delAll", param).then((response) => {
  580. let data = response.data;
  581. if (data.flag) {
  582. this.$message.success("移除成功");
  583. this.getData(this.search.pageNum)
  584. } else {
  585. this.$message.error(data.msg);
  586. }
  587. }).catch(function (error) {
  588. console.log(error);
  589. });
  590. }).catch(() => {
  591. this.$message.info("保存成功");
  592. });
  593. }
  594. }
  595. })
  596. </script>
  597. <style lang="scss" scoped>
  598. .el-table thead {
  599. background-color: #5a5e66 !important;
  600. }
  601. .header-search {
  602. font-size: 14px;
  603. font-weight: 900;
  604. }
  605. body {
  606. background-color: white;
  607. }
  608. .table {
  609. width: 100%;
  610. font-size: 12px;
  611. margin-top: 12px;
  612. background-color: white;
  613. }
  614. .el-form-item{
  615. margin-bottom: 5px !important;
  616. }
  617. </style>
  618. </html>