index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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="saleQty" />
  138. <el-table-column align="center" label="售价" prop="price" />
  139. <el-table-column align="center" label="售价金额" prop="saleValue" />
  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. data() {
  154. return {
  155. listLoading: false,
  156. dataList: [], // 列表
  157. detailList: [], // 明细列表
  158. shopList: [], // 网点列表
  159. screenForm: {
  160. // 筛选表单数据
  161. websitId: '', // 门店编号
  162. workerMobile: '', // 工程师手机号
  163. workerName: '', // 工程师名称
  164. workerBelong: '', // 工程师归属
  165. month: '', // 支付时间
  166. dateType: 0,
  167. dateTime: ''
  168. },
  169. dateTypes: [
  170. { value: 0, label: '月份' },
  171. { value: 1, label: '日期' }
  172. ],
  173. isOpen: false, // 是否展开条件筛选
  174. dialogVisible: false
  175. }
  176. },
  177. computed: {
  178. generateMonth() {
  179. const curDate = new Date()
  180. const fullYear = curDate.getFullYear()
  181. const month = curDate.getMonth() + 1 < 10 ? '0' + (curDate.getMonth() + 1) : '' + (curDate.getMonth() + 1)
  182. return fullYear + '-' + month
  183. }
  184. },
  185. created() {
  186. this.screenForm.month = this.generateMonth
  187. getWebsit({ status: true }).then(res => {
  188. this.shopList = res.data
  189. if (this.shopList && this.shopList.length === 1) {
  190. this.screenForm.websitId = this.shopList[0].websitId
  191. }
  192. })
  193. },
  194. methods: {
  195. // 查询列表
  196. getList() {
  197. this.listLoading = true
  198. if (!this.screenForm.month) {
  199. this.$errorMsg('请选择月份!')
  200. return
  201. }
  202. const params = {
  203. websitId: this.screenForm.websitId, // 门店编号
  204. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  205. workerName: this.screenForm.workerName, // 工程师名称
  206. workerBelong: this.screenForm.workerBelong, // 工程师归属
  207. month: this.screenForm.dateType ? '' : this.screenForm.month,
  208. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  209. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  210. }
  211. getSaleSum(params).then(res => {
  212. this.dataList = res.data
  213. this.listLoading = false
  214. })
  215. },
  216. // 重置筛选表单
  217. resetScreenForm() {
  218. this.$refs.screenForm.resetFields()
  219. this.screenForm.month = this.generateMonth
  220. this.currentPage = 1
  221. this.getList()
  222. },
  223. // 提交筛选表单
  224. submitScreenForm() {
  225. this.currentPage = 1
  226. this.getList()
  227. },
  228. // 获取明细
  229. getDetail(row) {
  230. this.dialogVisible = true
  231. const params = {
  232. websitId: row.websitId,
  233. workerMobile: row.mobile,
  234. month: this.screenForm.dateType ? '' : this.screenForm.month,
  235. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  236. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  237. }
  238. getSaleSumDetail(params).then(res => {
  239. this.detailList = res.data
  240. })
  241. },
  242. // 导出汇总工程师销售额
  243. handleWorkerSaleSumExport() {
  244. const screenData = {
  245. websitId: this.screenForm.websitId, // 门店编号
  246. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  247. workerName: this.screenForm.workerName, // 工程师名称
  248. workerBelong: this.screenForm.workerBelong, // 工程师归属
  249. month: this.screenForm.dateType ? '' : this.screenForm.month,
  250. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  251. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  252. }
  253. downloadFiles('websit/report/export/worker/buy/sum', screenData)
  254. },
  255. // 导出汇总工程师销售明细
  256. handleWorkerSaleSumDetailExport() {
  257. const screenData = {
  258. websitId: this.screenForm.websitId, // 门店编号
  259. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  260. workerName: this.screenForm.workerName, // 工程师名称
  261. workerBelong: this.screenForm.workerBelong, // 工程师归属
  262. month: this.screenForm.dateType ? '' : this.screenForm.month,
  263. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  264. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  265. }
  266. downloadFiles('websit/report/export/worker/buy/sum/Detail', screenData)
  267. },
  268. // 导出汇总销售明细
  269. handleSumSaleDetailExport() {
  270. const screenData = {
  271. websitId: this.screenForm.websitId, // 门店编号
  272. workerMobile: this.screenForm.workerMobile, // 工程师手机号
  273. workerName: this.screenForm.workerName, // 工程师名称
  274. workerBelong: this.screenForm.workerBelong, // 工程师归属
  275. month: this.screenForm.dateType ? '' : this.screenForm.month,
  276. startTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[0] : null,
  277. endTime: this.screenForm.dateType && this.screenForm.dateTime ? this.screenForm.dateTime[1] : null
  278. }
  279. downloadFiles('websit/report/export/sum/buy/detail', screenData)
  280. }
  281. }
  282. }
  283. </script>
  284. <style scoped lang="scss">
  285. ::v-deep .row-last .el-col:last-child .el-form-item__content {
  286. margin-left: 90px !important;
  287. }
  288. </style>