shippingUninvoiceAnalysis.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <div class="div-box-new-margin">
  3. <div class="div-border-box" id="shippingUninvoiceFull">
  4. <div class="out">
  5. <div>
  6. <div class="div-line div-line-right"></div>
  7. <div class="title" style="min-width: 220px;">{{$t(`出货未开票分析`)}}</div>
  8. </div>
  9. <div class="in">
  10. <div class="inline-16 mt-10">
  11. <departmentSalesperson ref="departmentSalesperson" placement="left-start" @depSelect="depSelect" @personSelect="personSelect" :isFull="isFull" :is-new-dep="true"></departmentSalesperson>
  12. </div>
  13. <div class="mt-10 inline-16">
  14. <p class="search__label">{{$t('状态')}}:</p>
  15. <el-select v-model="param.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="queryModel(param.content.dataid,param.content.where.isleave,'状态')" >
  16. <el-option :label="$t('在职')" value="1"></el-option>
  17. <el-option :label="$t('离职')" value="2"></el-option>
  18. </el-select>
  19. </div>
  20. <div class="inline-15 mt-10">
  21. <exportFileInfo :param="exportParam" :oldParam="param" :columns="tool.tabelCol(this.$route.name).shipmentUninvoicedDetailTable.tablecols" fileName="出货未开票分析明细" btnTitle="导出明细"></exportFileInfo>
  22. </div>
  23. <div class="inline-15 mt-10">
  24. <exportFile :param="param" :columns="tablecols" fileName="出货未开票分析" :dataid="param.content.dataid"></exportFile>
  25. </div>
  26. <fullScreen domId="shippingUninvoiceFull" @onFull="onFull" @backFull="backFull" :scrollHeight="scrollHeight" ></fullScreen>
  27. </div>
  28. </div>
  29. <div class="chart">
  30. <div id="shippingUninvoiceAnalysisChart" :style="{height: heightChart}"></div>
  31. </div>
  32. <div :style="{height: heightTable,marginTop:'10px'}">
  33. <tableTemplate ref="table" :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="height" fixedName="operation">
  34. <template v-slot:customcol="scope">
  35. <p v-if="scope.column.columnname === 'total'">
  36. <span v-if="scope.column.data[scope.column.columnname]">
  37. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  38. </span>
  39. <span v-else>--</span>
  40. </p>
  41. <p v-else-if="scope.column.columnname === 'zerotothree'">
  42. <span v-if="scope.column.data[scope.column.columnname]">
  43. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  44. </span>
  45. <span v-else>--</span>
  46. </p>
  47. <p v-else-if="scope.column.columnname === 'threetosix'">
  48. <span v-if="scope.column.data[scope.column.columnname]">
  49. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  50. </span>
  51. <span v-else>--</span>
  52. </p>
  53. <p v-else-if="scope.column.columnname === 'sixtotwelve'">
  54. <span v-if="scope.column.data[scope.column.columnname]">
  55. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  56. </span>
  57. <span v-else>--</span>
  58. </p>
  59. <p v-else-if="scope.column.columnname === 'twelveup'">
  60. <span v-if="scope.column.data[scope.column.columnname]">
  61. ¥{{tool.formatAmount(scope.column.data[scope.column.columnname],2)}}
  62. </span>
  63. <span v-else>--</span>
  64. </p>
  65. <p v-else-if="scope.column.columnname === 'operation'"></p>
  66. <p v-else>{{scope.column.data[scope.column.columnname]?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
  67. </template>
  68. <template v-slot:opreation="scope">
  69. <shippingUninvoiceDetail ref="shippingUninvoiceDetail" :dataid="param.content.dataid" :type="param.content.type" :sys_enterpriseid="scope.data.sys_enterpriseid" :data="scope.data" :isFull="isFull"></shippingUninvoiceDetail>
  70. </template>
  71. </tableTemplate>
  72. <div class="container normal-panel" style="text-align:right;float: right;">
  73. <el-pagination
  74. background
  75. @size-change="handleSizeChange"
  76. @current-change="handleCurrentChange"
  77. :current-page="currentPage"
  78. :pager-count="7"
  79. :page-sizes="[20, 50,100, 200]"
  80. :page-size="20"
  81. layout="total,sizes, prev, pager, next, jumper"
  82. :total="total">
  83. </el-pagination>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </template>
  89. <script>
  90. import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
  91. import tableTemplate from '@/views/salesData/components/table';
  92. import shippingUninvoiceDetail from "@/views/salesData/components/shippingUninvoiceDetail";
  93. import fullScreen from "@/views/salesData/components/fullScreen";
  94. import exportFile from '@/components/export_file/index'
  95. import exportFileInfo from '@/components/export_file/index7'
  96. import {Bar} from "@antv/g2plot";
  97. export default {
  98. name: "shippingUninvoiceAnalysis",
  99. props:['scrollHeight','windowWidth'],
  100. components:{tableTemplate,departmentSalesperson,shippingUninvoiceDetail,fullScreen,exportFile,exportFileInfo},
  101. data(){
  102. return {
  103. chartBar:null,
  104. param:{
  105. "id": 20231016163904,
  106. "content": {
  107. "type": 0,
  108. "dataid": 54,
  109. "pageNumber": 1,
  110. "pageSize": 20,
  111. "where": {
  112. "uninvicetype":"",
  113. "isleave":"1"
  114. }
  115. }
  116. },
  117. tablecols:[],
  118. list:[],
  119. currentPage:0,
  120. total:0,
  121. chartData:[],
  122. hoverData:[],
  123. heightChart:'98%',
  124. heightTable:'403px',
  125. height:'356px',
  126. isFull:false,
  127. exportParam:{
  128. "id": 2025033114030502,
  129. "content": {
  130. "type": 1,
  131. "dataid": 58,
  132. "pageNumber": 1,
  133. "pageSize": 20,
  134. "where": {
  135. "uninvicetype": "",
  136. "isleave": "1"
  137. }
  138. },
  139. }
  140. }
  141. },
  142. methods:{
  143. async listData(val){
  144. this.renderPie(val)
  145. },
  146. async queryModel(val,isleave,state){
  147. if (state == '状态'){
  148. this.$refs.departmentSalesperson.person = ''
  149. this.param.content.type = 1
  150. this.param.content.dataid = this.$refs.departmentSalesperson.depmentid ? this.$refs.departmentSalesperson.depmentid : -1
  151. }else {
  152. this.param.content.dataid = val?val : this.dataid
  153. }
  154. this.param.content.where.isleave = isleave
  155. const res = await this.$api.requested(this.param)
  156. if (res.data.length === 1){
  157. if (res.data[0].isEmpty == '1'){
  158. this.list = []
  159. this.total = 0
  160. this.currentPage = 0
  161. }else {
  162. this.list = res.data
  163. this.total = res.total
  164. this.currentPage = res.pageNumber
  165. }
  166. }else {
  167. this.list = res.data
  168. this.total = res.total
  169. this.currentPage = res.pageNumber
  170. }
  171. this.chartData = res.data[0].Trend
  172. this.chartData = this.chartData.map(item=>{
  173. let value = this.tool.unitConversion(item.value,10000)
  174. return {
  175. "value": value,
  176. "key": this.$t(item.key) + '(' + this.$t('万元') + ')',
  177. "type":this.$t("出货未开票金额(万元)")
  178. }
  179. })
  180. this.chartBar.changeData(this.chartData)
  181. state == '状态' ? this.personData(this.$refs.departmentSalesperson.depmentid) :''
  182. },
  183. renderPie(val){
  184. this.chartBar = new Bar('shippingUninvoiceAnalysisChart',{
  185. data:this.chartData,
  186. xField: 'value',
  187. yField: 'key',
  188. seriesField: 'type',
  189. label:{
  190. formatter: (datum) =>{
  191. return '¥'+this.tool.formatAmount(datum.value,2)
  192. }
  193. },
  194. legend: {
  195. position: 'top-left',
  196. },
  197. tooltip: {
  198. formatter: (datum) => {
  199. return {
  200. name:datum.key,
  201. value:'¥'+this.tool.formatAmount(datum.value,2)
  202. }
  203. }
  204. }
  205. })
  206. /*this.chartBar.on('plot:click',ev=>{
  207. const states = this.chartBar.getStates()
  208. this.param.content.where.uninvicetype = states.length === 0 ? '': ev.data.data.key
  209. this.param.content.pageNumber = 1
  210. this.queryTable(this.param.content.dataid)
  211. })*/
  212. this.chartBar.render()
  213. this.queryModel(val,this.param.content.where.isleave)
  214. },
  215. async queryTable(val){
  216. this.param.content.dataid = val || this.dataid
  217. const res = await this.$api.requested(this.param)
  218. this.list = res.data
  219. this.total = res.total
  220. this.currentPage = res.pageNumber
  221. },
  222. /*选择部门*/
  223. depSelect(val){
  224. this.param.content.type = 1
  225. this.param.content.dataid = val?val:-1
  226. this.personData(this.param.content.dataid)
  227. this.queryModel(this.param.content.dataid,this.param.content.where.isleave)
  228. },
  229. /*选择业务员*/
  230. personSelect(val){
  231. if (val || this.$refs.departmentSalesperson.depmentid){
  232. this.param.content.type = val?0:1
  233. this.param.content.dataid = val?val:this.$refs.departmentSalesperson.depmentid
  234. }else {
  235. this.param.content.type = 1
  236. this.param.content.dataid = -1
  237. }
  238. this.queryModel(val,this.param.content.where.isleave)
  239. },
  240. /*获取新的业务员列表*/
  241. async personData(depid){
  242. let param = {
  243. id: 20230620102004,
  244. content: {
  245. isleave:this.param.content.where.isleave,
  246. depid:depid
  247. },
  248. }
  249. const res = await this.$api.requested(param)
  250. this.$refs.departmentSalesperson.personnelList = res.data.hr
  251. },
  252. handleSizeChange(val) {
  253. // console.log(`每页 ${val} 条`);
  254. this.param.content.pageSize = val
  255. this.queryTable(this.param.content.dataid)
  256. },
  257. handleCurrentChange(val) {
  258. // console.log(`当前页: ${val}`);
  259. this.param.content.pageNumber = val
  260. this.queryTable(this.param.content.dataid)
  261. },
  262. /*全屏*/
  263. onFull(){
  264. this.heightChart = '98%'
  265. /* this.heightTable = '883px'
  266. this.height = '886px'*/
  267. this.heightTable = 'calc(100vh - 800px)'
  268. this.height = 'calc(100vh - 531px)'
  269. this.isFull = true
  270. },
  271. /*退出全屏*/
  272. backFull(val){
  273. this.heightChart = '98%'
  274. this.heightTable = '403px'
  275. this.height = '356px'
  276. this.isFull = false
  277. this.$emit('backFull',val)
  278. }
  279. },
  280. created() {
  281. this.tablecols = this.tool.tabelCol(this.$route.name).shipmentUninvoicedTable.tablecols
  282. }
  283. }
  284. </script>
  285. <style scoped>
  286. </style>