index.vue 13 KB

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