appOrderCountStats.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div class="app-container">
  3. <div class="app-content">
  4. <div class="title">App商城订单统计</div>
  5. <el-form class="search-form" :inline="true">
  6. <el-form-item label="公司名称" prop="companyId">
  7. <el-select
  8. style="width: 220px"
  9. filterable
  10. v-model="queryParams.companyId"
  11. placeholder="请选择公司名"
  12. clearable
  13. size="small"
  14. >
  15. <el-option
  16. v-for="item in companys"
  17. :key="item.companyId"
  18. :label="item.companyName"
  19. :value="item.companyId"
  20. />
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="员工" prop="companyUserId">
  24. <el-select
  25. filterable
  26. v-model="queryParams.companyUserId"
  27. placeholder="请选择员工"
  28. clearable
  29. size="small"
  30. :disabled="!queryParams.companyId"
  31. >
  32. <el-option
  33. v-for="item in users"
  34. :key="item.userId"
  35. :label="item.nickName"
  36. :value="item.userId"
  37. />
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item label="下单日期">
  41. <el-date-picker
  42. clearable
  43. size="small"
  44. style="width: 205.4px"
  45. v-model="dateRange"
  46. type="daterange"
  47. value-format="yyyy-MM-dd"
  48. start-placeholder="开始日期"
  49. end-placeholder="结束日期"
  50. />
  51. </el-form-item>
  52. <el-form-item>
  53. <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
  54. </el-form-item>
  55. </el-form>
  56. <div class="data-box">
  57. <div class="table-box">
  58. <el-table
  59. :data="tableData"
  60. border
  61. max-height="500"
  62. style="width: 100%"
  63. >
  64. <el-table-column prop="totalOrderCount" label="订单总数" />
  65. <el-table-column prop="fullPayOrderCount" label="全款支付订单数" />
  66. <el-table-column prop="codOrderCount" label="物流代收支付订单数" />
  67. <el-table-column prop="depositCodOrderCount" label="付定金的物流代收订单数" />
  68. <el-table-column prop="noDepositCodOrderCount" label="0定金的物流代收订单数" />
  69. <el-table-column prop="totalOrderAmount" label="订单总金额" />
  70. <el-table-column prop="depositAmount" label="定金总金额" />
  71. <el-table-column prop="codAmount" label="物流代收总金额" />
  72. </el-table>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </template>
  78. <script>
  79. import { getAppOrderCount } from "@/api/company/statistics";
  80. import { getUserList } from "@/api/company/companyUser"; // 使用 getUserList(companyId)
  81. import { getCompanyList } from "@/api/company/company";
  82. export default {
  83. name: "AppOrderCountStats",
  84. data() {
  85. return {
  86. // 仅保留必要查询参数
  87. queryParams: {
  88. companyId: null,
  89. companyUserId: null
  90. },
  91. companys: [], // 公司列表
  92. users: [], // 员工列表
  93. dateRange: [], // 日期范围
  94. tableData: [] // 表格数据
  95. };
  96. },
  97. watch: {
  98. // 公司变化时,重新加载员工
  99. 'queryParams.companyId'(newVal) {
  100. if (newVal) {
  101. this.queryParams.companyUserId = null;
  102. this.loadUsers();
  103. } else {
  104. this.users = [];
  105. this.queryParams.companyUserId = null;
  106. }
  107. }
  108. },
  109. created() {
  110. // 初始化公司下拉列表
  111. getCompanyList().then(response => {
  112. this.companys = response.data || [];
  113. });
  114. },
  115. methods: {
  116. // 根据 companyId 加载员工
  117. loadUsers() {
  118. const companyId = this.queryParams.companyId;
  119. if (!companyId) return;
  120. getUserList(companyId).then(res => {
  121. if (res.code === 200) {
  122. this.users = Array.isArray(res.data) ? res.data : [];
  123. } else {
  124. this.users = [];
  125. }
  126. }).catch(() => {
  127. this.users = [];
  128. });
  129. },
  130. // 搜索统计
  131. search() {
  132. const params = {
  133. companyId: this.queryParams.companyId,
  134. companyUserId: this.queryParams.companyUserId,
  135. startTime: this.dateRange?.[0] || undefined,
  136. endTime: this.dateRange?.[1] ? this.dateRange[1] + " 23:59:59" : undefined
  137. };
  138. getAppOrderCount(params).then(response => {
  139. const vo = response.data;
  140. this.tableData = vo ? [vo] : [];
  141. }).catch(() => {
  142. this.tableData = [];
  143. });
  144. }
  145. }
  146. };
  147. </script>
  148. <style lang="scss" scoped>
  149. .app-container {
  150. border: 1px solid #e6e6e6;
  151. padding: 12px;
  152. .app-content {
  153. background-color: white;
  154. .title {
  155. padding: 20px 30px 0px 30px;
  156. font-size: 18px;
  157. font-weight: bold;
  158. color: black;
  159. }
  160. .search-form {
  161. margin: 20px 30px 0px 30px;
  162. }
  163. .data-box {
  164. padding: 30px;
  165. background-color: rgb(255, 255, 255);
  166. height: 100%;
  167. .table-box {
  168. margin-top: 15px;
  169. }
  170. }
  171. }
  172. }
  173. </style>