index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <div class="app-container">
  3. <div class="screen-container">
  4. <div class="top clearfix">
  5. <div class="title fl">条件筛选</div>
  6. <div class="fr">
  7. <el-button type="primary" size="mini" @click="isOpen = !isOpen"
  8. >{{ isOpen ? '收起' : '展开'
  9. }}<i class="el-icon--right" :class="isOpen ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
  10. /></el-button>
  11. </div>
  12. </div>
  13. <el-form ref="screenForm" :model="screenForm" label-width="90px" size="mini" label-position="left">
  14. <el-row :gutter="20">
  15. <el-col :xs="24" :sm="7" :lg="7">
  16. <el-form-item label="网点" prop="websitId">
  17. <el-select v-model="screenForm.websitId" filterable placeholder="网点" size="small">
  18. <el-option label="全部" value="" />
  19. <el-option
  20. v-for="(item, index) in shopList"
  21. :key="index"
  22. :label="`(${item.websitId})${item.name}`"
  23. :value="item.websitId"
  24. />
  25. </el-select>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :xs="12" :sm="5" :lg="5">
  29. <el-form-item label="日期类型" prop="dateType">
  30. <el-select v-model="screenForm.dateType" filterable placeholder="日期类型" size="small">
  31. <el-option v-for="(item, index) in dateTypes" :key="index" :label="item.label" :value="item.value" />
  32. </el-select>
  33. </el-form-item>
  34. </el-col>
  35. <el-col v-if="!screenForm.dateType" :xs="12" :sm="5" :lg="5">
  36. <el-form-item prop="month" label-width="60">
  37. <el-date-picker
  38. v-model="screenForm.month"
  39. type="month"
  40. placeholder="请选择月份"
  41. value-format="yyyy-MM"
  42. size="small"
  43. style="width: 150px"
  44. />
  45. </el-form-item>
  46. </el-col>
  47. <el-col v-else :xs="24" :sm="8" :lg="8">
  48. <el-form-item prop="dateTime">
  49. <el-date-picker
  50. v-model="screenForm.dateTime"
  51. type="datetimerange"
  52. value-format="yyyy-MM-dd HH:mm:ss"
  53. range-separator="至"
  54. start-placeholder="开始日期"
  55. end-placeholder="结束日期"
  56. :default-time="['00:00:00', '23:59:59']"
  57. size="small"
  58. />
  59. </el-form-item>
  60. </el-col>
  61. </el-row>
  62. <el-row v-if="isOpen" :gutter="20" class="row-last">
  63. <el-col :xs="24" :sm="12" :lg="6">
  64. <el-form-item label="工程师手机" prop="workerMobile">
  65. <el-input v-model="screenForm.workerMobile" placeholder="工程师手机" size="small" />
  66. </el-form-item>
  67. </el-col>
  68. <el-col :xs="24" :sm="12" :lg="6">
  69. <el-form-item label="工程师名称" prop="workerName">
  70. <el-input v-model="screenForm.workerName" placeholder="名称(模糊)" size="small" />
  71. </el-form-item>
  72. </el-col>
  73. </el-row>
  74. <el-row :gutter="20">
  75. <el-col :xs="12" :sm="12" :lg="12" class="tl">
  76. <el-button size="mini" type="primary" @click="handleWorkerSaleSumExport">导出汇总工程师销售额</el-button>
  77. <el-button size="mini" type="primary" @click="handleWorkerSaleSumDetailExport"
  78. >导出汇总工程师销售明细</el-button
  79. >
  80. <el-button size="mini" type="primary" @click="handleSumSaleDetailExport">导出汇总销售明细</el-button>
  81. </el-col>
  82. <el-col :xs="12" :sm="12" :lg="12" class="tr">
  83. <el-button size="mini" @click="resetScreenForm">清空</el-button>
  84. <el-button size="mini" type="primary" @click="submitScreenForm">查询</el-button>
  85. </el-col>
  86. </el-row>
  87. </el-form>
  88. </div>
  89. <div class="mymain-container">
  90. <div class="table">
  91. <el-table
  92. v-loading="listLoading"
  93. :data="dataList"
  94. element-loading-text="Loading"
  95. size="mini"
  96. border
  97. header-cell-class-name="headerRowColor"
  98. highlight-current-row
  99. >
  100. <el-table-column align="center" label="网点信息">
  101. <el-table-column align="center" label="编号" prop="websitId" min-width="80" />
  102. <el-table-column align="center" label="名称" prop="websitName" min-width="160" />
  103. </el-table-column>
  104. <el-table-column align="center" label="工程师信息">
  105. <el-table-column align="center" label="手机" prop="workerMobile" min-width="120" />
  106. <el-table-column align="center" label="名称" prop="workerName" min-width="140" />
  107. <el-table-column align="center" label="归属" prop="websitName" min-width="160" />
  108. </el-table-column>
  109. <el-table-column align="center" label="销售金额">
  110. <el-table-column align="center" label="合计" prop="totalSaleValue" />
  111. <!-- <el-table-column align="center" label="微信" prop="wxSaleValue" /> -->
  112. <!-- <el-table-column align="center" label="支付宝" prop="aliSaleValue" />-->
  113. <el-table-column align="center" label="通联" prop="allinpaySaleValue" />
  114. <el-table-column align="center" label="现金" prop="cashSaleValue" />
  115. </el-table-column>
  116. <el-table-column align="center" label="支付次数">
  117. <!-- <el-table-column align="center" label="微信" prop="wx" /> -->
  118. <!-- <el-table-column align="center" label="支付宝" prop="ali" />-->
  119. <el-table-column align="center" label="通联" prop="allinpay" />
  120. <el-table-column align="center" label="现金" prop="cash" />
  121. </el-table-column>
  122. <!-- <el-table-column align="center" label="赊账单数" prop="account" /> -->
  123. <!-- <el-table-column align="center" label="赊账金额" prop="accountSaleValue" /> -->
  124. <el-table-column align="center" label="退货金额" prop="retValue" />
  125. <el-table-column fixed="right" align="center" label="">
  126. <template slot-scope="scope">
  127. <el-button type="text" @click="getDetail(scope.row)">查看</el-button>
  128. </template>
  129. </el-table-column>
  130. </el-table>
  131. </div>
  132. </div>
  133. <el-dialog :title="'销售明细'" :visible.sync="dialogVisible" width="80%">
  134. <el-table :data="detailList" border highlight-current-row>
  135. <el-table-column align="center" label="单号" prop="salesId" min-width="190" />
  136. <el-table-column align="center" label="商品名称" prop="goodsName" min-width="160" />
  137. <el-table-column align="center" label="支付方式">
  138. <template slot-scope="scope">
  139. <div>{{ scope.row.payType | payTypeFilter }}</div>
  140. </template>
  141. </el-table-column>
  142. <el-table-column align="center" label="销售数量" prop="salesQty" />
  143. <el-table-column align="center" label="售价" prop="price" />
  144. <el-table-column align="center" label="售价金额" prop="saleAmount" />
  145. <el-table-column align="center" label="进价" prop="cost" />
  146. <el-table-column align="center" label="进价金额" prop="costValue" />
  147. <el-table-column align="center" label="支付时间" prop="payTime" min-width="160" />
  148. </el-table>
  149. </el-dialog>
  150. </div>
  151. </template>
  152. <script>
  153. import { getSaleSum, getSaleSumDetail } from '@/api/material-system/report'
  154. import { downloadFiles } from '@/utils/util'
  155. import { getWebsit } from '@/api/customerManagement.js'
  156. export default {
  157. name: 'ShopSaleSum',
  158. filters: {
  159. payTypeFilter(val) {
  160. const MAP = {
  161. WECHAT: '微信支付',
  162. CASH: '现金支付',
  163. TRANSFER: '转账支付',
  164. ALLINPAY: '通联支付'
  165. }
  166. return MAP[val]
  167. }
  168. },
  169. data() {
  170. return {
  171. listLoading: false,
  172. dataList: [], // 列表
  173. detailList: [], // 明细列表
  174. shopList: [], // 网点列表
  175. screenForm: {
  176. // 筛选表单数据
  177. websitId: '', // 门店编号
  178. workerMobile: '', // 工程师手机号
  179. workerName: '', // 工程师名称
  180. workerBelong: '', // 工程师归属
  181. month: '', // 支付时间
  182. dateType: 0,
  183. dateTime: ''
  184. },
  185. dateTypes: [
  186. { value: 0, label: '月份' },
  187. { value: 1, label: '日期' }
  188. ],
  189. isOpen: false, // 是否展开条件筛选
  190. dialogVisible: false
  191. }
  192. },
  193. computed: {
  194. generateMonth() {
  195. const curDate = new Date()
  196. const fullYear = curDate.getFullYear()
  197. const month = curDate.getMonth() + 1 < 10 ? '0' + (curDate.getMonth() + 1) : '' + (curDate.getMonth() + 1)
  198. return fullYear + '-' + month
  199. }
  200. },
  201. created() {
  202. this.screenForm.month = this.generateMonth
  203. getWebsit({ status: true }).then(res => {
  204. this.shopList = res.data
  205. if (this.shopList && this.shopList.length === 1) {
  206. this.screenForm.websitId = this.shopList[0].websitId
  207. }
  208. })
  209. },
  210. methods: {
  211. // 查询列表
  212. getList() {
  213. this.listLoading = true
  214. if (!this.screenForm.month) {
  215. this.$errorMsg('请选择月份!')
  216. return
  217. }
  218. const params = {
  219. websitId: this.screenForm.websitId, // 门店编号
  220. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  221. workerName: this.screenForm.workerName, // 工程师名称
  222. workerBelong: this.screenForm.workerBelong, // 工程师归属
  223. month: this.screenForm.dateType ? '' : this.screenForm.month,
  224. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  225. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  226. }
  227. getSaleSum(params).then(res => {
  228. this.dataList = res.data
  229. this.listLoading = false
  230. })
  231. },
  232. // 重置筛选表单
  233. resetScreenForm() {
  234. this.$refs.screenForm.resetFields()
  235. this.screenForm.month = this.generateMonth
  236. this.currentPage = 1
  237. this.getList()
  238. },
  239. // 提交筛选表单
  240. submitScreenForm() {
  241. this.currentPage = 1
  242. this.getList()
  243. },
  244. // 获取明细
  245. getDetail(row) {
  246. this.dialogVisible = true
  247. const params = {
  248. websitId: row.websitId,
  249. workerMobile: row.workerMobile,
  250. month: this.screenForm.dateType ? '' : this.screenForm.month,
  251. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  252. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  253. }
  254. getSaleSumDetail(params).then(res => {
  255. this.detailList = res.data
  256. })
  257. },
  258. // 导出汇总工程师销售额
  259. handleWorkerSaleSumExport() {
  260. const screenData = {
  261. websitId: this.screenForm.websitId, // 门店编号
  262. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  263. workerName: this.screenForm.workerName, // 工程师名称
  264. workerBelong: this.screenForm.workerBelong, // 工程师归属
  265. month: this.screenForm.dateType ? '' : this.screenForm.month,
  266. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  267. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  268. }
  269. downloadFiles('websit/report/export/worker/buy/sum', screenData)
  270. },
  271. // 导出汇总工程师销售明细
  272. handleWorkerSaleSumDetailExport() {
  273. const screenData = {
  274. websitId: this.screenForm.websitId, // 门店编号
  275. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  276. workerName: this.screenForm.workerName, // 工程师名称
  277. workerBelong: this.screenForm.workerBelong, // 工程师归属
  278. month: this.screenForm.dateType ? '' : this.screenForm.month,
  279. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  280. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  281. }
  282. downloadFiles('websit/report/export/worker/buy/sum/Detail', screenData)
  283. },
  284. // 导出汇总销售明细
  285. handleSumSaleDetailExport() {
  286. const screenData = {
  287. websitId: this.screenForm.websitId, // 门店编号
  288. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  289. workerName: this.screenForm.workerName, // 工程师名称
  290. workerBelong: this.screenForm.workerBelong, // 工程师归属
  291. month: this.screenForm.dateType ? '' : this.screenForm.month,
  292. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  293. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  294. }
  295. downloadFiles('websit/report/export/sum/buy/detail', screenData)
  296. }
  297. }
  298. }
  299. </script>
  300. <style scoped lang="scss">
  301. ::v-deep .row-last .el-col:last-child .el-form-item__content {
  302. margin-left: 90px !important;
  303. }
  304. </style>