足力健前端,vue版本

index.vue 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <template>
  2. <div class="app-container">
  3. <div class="filter-container">
  4. <el-date-picker
  5. v-model="searchData.searchTime"
  6. :picker-options="pickerOptions"
  7. class="filter-item"
  8. type="daterange"
  9. format="yyyy年MM月dd日"
  10. value-format="yyyy-MM-dd"
  11. align="left"
  12. unlink-panels
  13. range-separator="至"
  14. start-placeholder="开始日期"
  15. end-placeholder="结束日期"
  16. />
  17. <el-input v-model="searchData.adFrom" placeholder="请输入消息/广告媒体来源" class="filter-item" />
  18. <el-select v-model="searchData.type" class="filter-item" filterable clearable placeholder="请选择订单类型">
  19. <el-option v-for="item in orderType" :key="item.F_Value" :label="item.F_Value" :value="item.F_Value"/>
  20. </el-select>
  21. <el-input v-model="searchData.id" placeholder="请输入订单号" class="filter-item" />
  22. <el-input v-model="searchData.customer" placeholder="请输入客户姓名" class="filter-item" />
  23. <el-input v-model="searchData.customerPhone" placeholder="请输入客户手机号" class="filter-item" />
  24. <el-input v-model="searchData.trackingNo" placeholder="请输入运单号" class="filter-item" />
  25. <el-button type="primary" class="filter-item" icon="el-icon-search" @click="btn_search">搜索</el-button>
  26. <el-button v-permission="'HY_export'" type="primary" class="filter-item" icon="el-icon-upload2" @click="btn_export">导出</el-button>
  27. <el-button v-permission="'HY_import'" type="primary" class="filter-item" icon="el-icon-download" @click="btn_import">导入</el-button>
  28. <el-button v-permission="'HY_merge'" type="primary" class="filter-item" @click="btn_merge">合并</el-button>
  29. <el-button v-permission="'HY_split'" type="primary" class="filter-item" @click="btn_split">拆分</el-button>
  30. </div>
  31. <el-tabs v-model="activeName" type="card" @tab-click="handleTabClick" >
  32. <el-tab-pane label="全部" name="-2"></el-tab-pane>
  33. <el-tab-pane label="无效" name="-1"></el-tab-pane>
  34. <el-tab-pane label="暂存" name="0"></el-tab-pane>
  35. <el-tab-pane label="提交" name="1"></el-tab-pane>
  36. <el-tab-pane label="退回" name="2"></el-tab-pane>
  37. <el-tab-pane label="通过" name="3"></el-tab-pane>
  38. <el-tab-pane label="无货" name="4"></el-tab-pane>
  39. <el-tab-pane label="已分拣" name="5"></el-tab-pane>
  40. <el-tab-pane label="已发货" name="6"></el-tab-pane>
  41. </el-tabs>
  42. <el-table v-loading="loading" :data="dataLists" border stripe @selection-change="handleSelectionChange" row-key="F_Id">
  43. <el-table-column type="selection" :reserve-selection="true"></el-table-column>
  44. <el-table-column type="index" label="编号" align="center" fixed width="80" />
  45. <el-table-column prop="F_Id" label="订单编号" align="center" min-width="150" />
  46. <el-table-column prop="F_Customer" label="客户姓名" align="center" min-width />
  47. <el-table-column prop="F_CustomerPhone" label="手机号码" align="center" min-width="140" />
  48. <el-table-column label="订购商品" align="center" min-width>
  49. <template slot-scope="scope">
  50. {{ scope.row.OrderDetailList | judgmentOrderGoods}}
  51. </template>
  52. </el-table-column>
  53. <el-table-column prop="F_AddTime" label="下单日期" align="center" />
  54. <el-table-column label="订单状态" align="center" >
  55. <template slot-scope="scope">
  56. {{ scope.row.F_State | judgmentStateName }}
  57. </template>
  58. </el-table-column>
  59. <el-table-column prop="F_AddUserName" label="下单员工" align="center" />
  60. <el-table-column prop="F_BelongName" label="归属员工" align="center" />
  61. <el-table-column prop="F_Type" label="订单类型" align="center" />
  62. <el-table-column prop="F_Express" label="快递公司" align="center" />
  63. <el-table-column label="操作" width="240" align="center" class-name="oparate_btn" fixed="right">
  64. <template slot-scope="scope">
  65. <el-button v-permission="'HY_detail'" type="text" @click="btn_detail(scope.row.F_Id)">详情</el-button>
  66. <el-button v-permission="'HY_apply'" type="text" @click="btn_apply(scope.row.F_Id)">申请</el-button>
  67. <el-button v-permission="'HY_edit'" type="text" @click="btn_edit(scope.row.F_Id)">编辑</el-button>
  68. <el-button v-permission="'HY_cancel'" type="text" @click="btn_cancel(scope.row.F_Id)">撤销</el-button>
  69. <el-button v-permission="'HY_afterSale'" type="text" @click="btn_afterSale(scope.row.F_Id)">售后</el-button>
  70. </template>
  71. </el-table-column>
  72. </el-table>
  73. <pagination
  74. v-show="pageParams.total > 0"
  75. :total="pageParams.total"
  76. :pageindex.sync="pageParams.pageindex"
  77. :pagesize.sync="pageParams.pagesize"
  78. class="pagination"
  79. @pagination="getList"
  80. />
  81. </div>
  82. </template>
  83. <script>
  84. import { getDictionaryValueList } from '@/api/commonAPI'
  85. import { getAfterSaleOrderList } from "@/api/afterSaleManagement/afterSaleList";
  86. import { pickerOptions, formatterContent } from "@/utils";
  87. // import edit from "./edit";
  88. // import cancel from './cancel';
  89. // import detail from './detail';
  90. // import merge from './merge';
  91. // import apply from './apply';
  92. // import importAuth from './importAuth';
  93. import afterSale from './afterSale';
  94. import Pagination from "@/components/Pagination"; // 对el-pagination 二次封装
  95. export default {
  96. name: "orderList",
  97. components: {
  98. Pagination
  99. },
  100. filters: {
  101. judgmentStateName(status) {
  102. const statusMap = {
  103. '-1': '无效',
  104. '0': '暂存',
  105. '1': '提交',
  106. '2': '退回',
  107. '3': '通过',
  108. '4': '无货',
  109. '5': '已分拣',
  110. '6': '已发货'
  111. }
  112. return statusMap[status]
  113. },
  114. judgmentOrderGoods(status) {
  115. let orderGoodsNameQuantity = ''
  116. for (let i = 0; i < status.length; i++) {
  117. orderGoodsNameQuantity = `${orderGoodsNameQuantity}${status[i].F_ProductName}*${status[i].F_Count},`
  118. }
  119. orderGoodsNameQuantity = orderGoodsNameQuantity.substring(0, orderGoodsNameQuantity.length - 1)
  120. return orderGoodsNameQuantity
  121. },
  122. },
  123. data() {
  124. return {
  125. loading: false,
  126. searchData: {
  127. adFrom: '', //消息/广告媒体来源
  128. type: '', //订单类型
  129. id: '', //订单号
  130. customer: '', //客户姓名
  131. customerPhone: '', //客户手机号
  132. trackingNo: '', //运单号
  133. searchTime: '', //订单时间
  134. },
  135. activeName: "-2", //标签切换首页
  136. pickerOptions, // 日期数据
  137. pageParams: {
  138. pageindex: 1, // 当前第几页
  139. pagesize: Number(this.$store.getters.serverConfig.PAGESIZE), // 每页几条数据
  140. total: 0 // 总共多少数据
  141. },
  142. dataLists: [], // 列表数据
  143. multipleSelection: [], // 选中的数据
  144. selectedId: [], // 选中的数据的id
  145. orderType: [],//订单类型
  146. mergeOrderId: [], //合并订单id
  147. };
  148. },
  149. created() {
  150. this.getOrderType()
  151. this.getList()
  152. document.onkeyup = e => {
  153. if (e.keyCode === 13) {
  154. this.getList();
  155. }
  156. };
  157. },
  158. methods: {
  159. getList() {
  160. this.loading = true;
  161. return new Promise(resolve => {
  162. const params = {
  163. F_State: this.activeName, //订单状态
  164. pageindex: this.pageParams.pageindex, // int 第几页
  165. pagesize: this.pageParams.pagesize, // int 每页几条信息
  166. F_ADFrom: this.searchData.adFrom, //消息/广告来源
  167. F_Type: this.searchData.type, //订单类型
  168. F_Id: this.searchData.id, //订单号
  169. F_Customer: this.searchData.customer, //客户姓名
  170. F_CustomerPhone: this.searchData.customerPhone, //客户手机号
  171. F_TrackingNo: this.searchData.trackingNo, //运单号
  172. SearchStartTime: this.searchData.searchTime[0], //添加开始时间
  173. SearchEndTime: this.searchData.searchTime[1], //添加结束时间
  174. };
  175. getAfterSaleOrderList(params).then(response => {
  176. this.loading = false;
  177. if (response.state.toLowerCase() === "success") {
  178. this.pageParams.total = response.data.Totals;
  179. this.dataLists = response.data.Rows;
  180. }
  181. });
  182. resolve();
  183. });
  184. },
  185. // 获取订单类型
  186. getOrderType() {
  187. return new Promise(resolve=>{
  188. const params={
  189. isleaf:true,
  190. code:'ORDERTYPE'
  191. }
  192. getDictionaryValueList(params).then(response=>{
  193. if(response.state.toLowerCase() === 'success'){
  194. this.orderType = response.data.Rows
  195. }
  196. })
  197. })
  198. },
  199. handleTabClick(tab, event) {
  200. this.getList()
  201. },
  202. handle(ordercode){
  203. this.$layer.iframe({
  204. content: {
  205. content: detail, // 传递的组件对象
  206. parent: this, // 当前的vue对象
  207. data: { 'rowid': ordercode }// props
  208. },
  209. area: ['80%', '90%'],
  210. title: '订单详情'
  211. })
  212. },
  213. btn_detail(ordercode){
  214. this.$layer.iframe({
  215. content: {
  216. content: detail, // 传递的组件对象
  217. parent: this, // 当前的vue对象
  218. data: { 'rowid': ordercode }// props
  219. },
  220. area: ['80%', '90%'],
  221. title: '订单详情'
  222. })
  223. },
  224. btn_search() {
  225. this.pageParams.pageindex = 1;
  226. this.getList();
  227. },
  228. btn_edit(editId) {
  229. this.$layer.iframe({
  230. content: {
  231. content: edit, // 传递的组件对象
  232. parent: this, // 当前的vue对象
  233. data: { rowid: editId } // props
  234. },
  235. area: ["80%", "90%"],
  236. title: "编辑订单"
  237. });
  238. },
  239. //导出
  240. btn_export() {},
  241. //导入
  242. btn_import(){
  243. this.$layer.iframe({
  244. content: {
  245. content: importAuth, // 传递的组件对象
  246. parent: this, // 当前的vue对象
  247. data: { 'rowid': '' }// props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
  248. },
  249. area: ['40%', '380px'],
  250. shadeClose: false,
  251. title: '导入订单信息'
  252. })
  253. },
  254. //申请
  255. btn_apply(applyId) {
  256. this.$layer.iframe({
  257. content: {
  258. content: apply, // 传递的组件对象
  259. parent: this, // 当前的vue对象
  260. data: { rowid: applyId } // props
  261. },
  262. area: ["30%", "40%"],
  263. title: "申请内容"
  264. });
  265. },
  266. //撤销
  267. btn_cancel(orderId) {
  268. this.$confirm('您确定要将此工单撤销吗?', '提示', {
  269. confirmButtonText: '确定',
  270. cancelButtonText: '取消',
  271. type: 'warning'
  272. }).then(() => {
  273. const data = {
  274. orderid: orderId,
  275. state: 0, //撤销 0
  276. }
  277. cancelOrder(data).then(response => {
  278. if (response.state.toLowerCase() === 'success') {
  279. this.getList()
  280. this.$message.success('撤销成功!')
  281. }
  282. })
  283. }).catch(() => {
  284. this.$message({
  285. type: 'info',
  286. message: '已取消撤销'
  287. });
  288. });
  289. },
  290. //售后
  291. btn_afterSale(afterSalesId) {
  292. this.$layer.iframe({
  293. content: {
  294. content: afterSale, // 传递的组件对象
  295. parent: this, // 当前的vue对象
  296. data: { rowid: afterSalesId } // props
  297. },
  298. area: ["80%", "80%"],
  299. title: "售后内容"
  300. });
  301. },
  302. //合并
  303. btn_merge() {
  304. if (this.mergeOrderId.length < 2) {
  305. this.$message({
  306. message: '最少选择两条订单!',
  307. type: 'warning'
  308. });
  309. return
  310. }
  311. this.$layer.iframe({
  312. content: {
  313. content: merge, // 传递的组件对象
  314. parent: this, // 当前的vue对象
  315. data: { rowid: this.mergeOrderId } // props
  316. },
  317. area: ["80%", "90%"],
  318. title: "合并订单"
  319. });
  320. },
  321. //拆分
  322. btn_split() {},
  323. //选择多个
  324. handleSelectionChange(val) {
  325. const ids = []
  326. this.multipleSelection = val
  327. for (let i=0; i<this.multipleSelection.length; i++) {
  328. ids.push(this.multipleSelection[i].F_Id)
  329. }
  330. this.mergeOrderId = ids
  331. },
  332. }
  333. };
  334. </script>
  335. <style rel="stylesheet/scss" lang="scss" scoped>
  336. .el{
  337. cursor: pointer;
  338. }
  339. </style>