index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <template>
  2. <div>
  3. <normal-layout style="height: calc(100vh - 125px)">
  4. <div slot="titleRight">
  5. <exportFile :param="param" :columns="tablecols" fileName="应收账款" :dataid="param.content.dataid" :custom="true" :point="param.content.point" :dateData="dateData"></exportFile>
  6. </div>
  7. <div slot="content">
  8. <div class="container">
  9. <template>
  10. <div class="mt-10 inline-16">
  11. <label class="search__label">{{$t('查询方式')}}:</label>
  12. <el-select v-model="param.content.point" :placeholder="$t('请选择')" size="small" @change="listData">
  13. <el-option :label="$t(`出货`)" value="出货" ></el-option>
  14. <el-option :label="$t(`开票`)" value="开票" ></el-option>
  15. </el-select>
  16. </div>
  17. <div class="mt-10 inline-16" style="margin-left: 20px">
  18. <departmentSalesperson ref="departmentSalesperson" class="inline-16" @depSelect="depSelect" @personSelect="personSelect" ></departmentSalesperson>
  19. </div>
  20. <el-input style="width:200px;" :placeholder="$t('搜索')" :suffix-icon="param.content.where.condition?param.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="param.content.where.condition" @keyup.native.enter="listData(param.content.pageNumber = 1)" @clear="clearSearchValue" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
  21. </el-input>
  22. <div>
  23. <el-row :gutter="20">
  24. <el-col :span="6" class="mt-10">
  25. <div class="acccounet__panel" style="border:1px solid #d8dde8">
  26. <p class="normal-margin">{{$t('总应收')}}</p>
  27. <p class="normal-title" style="font-size:29px;color:#151515" >
  28. <small>{{allList.sumtotalamount || allList.sumtotalamount == '0'?'¥':''}}</small>
  29. {{allList.sumtotalamount || allList.sumtotalamount == 0?tool.formatAmount(allList.sumtotalamount,2):'--'}}
  30. </p>
  31. </div>
  32. </el-col>
  33. </el-row>
  34. </div>
  35. <div style="flex:0 1 auto;width: 100%;">
  36. <tableMainLayout :layout="tablecols" height="calc(100vh - 410px)" :data="list" fixedName="operation" :width="true" :custom="true"
  37. :headerOptions="['receivableamount','totalamount','openingbalance']">
  38. <template v-slot:header="scope">
  39. <div v-if="scope.column.columnname === 'openingbalance'">
  40. {{dateData?'期初余额'+'('+dateData+')':'期初余额(2021-12-31)'}}
  41. </div>
  42. <div v-if="scope.column.columnname == 'receivableamount'">
  43. <div v-if="param.content.point == '出货'">{{$t(`出货总金额(2022-01-01至今)`)}}</div>
  44. <div v-else>{{$t(`开票总金额(2022-01-01至今)`)}}</div>
  45. </div>
  46. <div v-if="scope.column.columnname == 'totalamount'">
  47. <div v-if="param.content.point == '出货'">{{$t(`出货总应收`)}}</div>
  48. <div v-else>{{$t(`开票总应收`)}}</div>
  49. </div>
  50. </template>
  51. <template v-slot:customcol="scope">
  52. <div v-if="scope.column.columnname === 'openingbalance'">
  53. <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
  54. </div>
  55. <div v-else-if="scope.column.columnname === 'receivableamount'">
  56. <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
  57. </div>
  58. <div v-else-if="scope.column.columnname === 'revenueamount'">
  59. <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
  60. </div>
  61. <div v-else-if="scope.column.columnname === 'totalamount'">
  62. <span><small>¥ </small>{{scope.column.data[scope.column.columnname]?tool.formatAmount(scope.column.data[scope.column.columnname],2):'0.00'}}</span>
  63. </div>
  64. <p v-else>{{scope.column.data[scope.column.columnname] || scope.column.columnname === 'operation'?$t(scope.column.data[scope.column.columnname]):'--'}}</p>
  65. </template>
  66. <template v-slot:opreation="scope">
  67. <detailInfo :data="scope.data" :items="param.content" :point="param.content.point"></detailInfo>
  68. </template>
  69. </tableMainLayout>
  70. </div>
  71. <div class="container normal-panel" style="text-align:right">
  72. <el-pagination
  73. background
  74. @size-change="handleSizeChange"
  75. @current-change="handleCurrentChange"
  76. :current-page="currentPage"
  77. :page-sizes="[100, 50, 100, 200]"
  78. :page-size="100"
  79. layout="total,sizes, prev, pager, next, jumper"
  80. :total="total">
  81. </el-pagination>
  82. </div>
  83. </template>
  84. </div>
  85. </div>
  86. </normal-layout>
  87. </div>
  88. </template>
  89. <script>
  90. import departmentSalesperson from "@/views/salesData/components/departmentSalesperson";
  91. import detailInfo from './modules/detailInfo'
  92. import exportFile from '@/components/export_file/index'
  93. export default {
  94. name: "index",
  95. components:{departmentSalesperson,detailInfo,exportFile},
  96. data(){
  97. return {
  98. value:'全部',
  99. options:[],
  100. tablecols:[],
  101. list:[],
  102. currentPage:0,
  103. total:0,
  104. allList:{},
  105. depmentParam:{
  106. "id": 20230620102004,
  107. "content": {
  108. }
  109. },
  110. param:{
  111. "id": 20241217135803,
  112. "content": {
  113. "pageNumber": 1,
  114. "pageSize": 100,
  115. "type":"0",//1按部门 0按人员
  116. "dataid":JSON.parse(sessionStorage.getItem('active_account')).userid,//部门人员id
  117. "querytype":1,//0按业务员 1按客户
  118. "point":"开票",// 入账节点
  119. "where": {
  120. "condition": ""
  121. }
  122. }
  123. },
  124. dateData:null
  125. }
  126. },
  127. methods:{
  128. async listData(){
  129. const res = await this.$api.requested(this.param)
  130. console.log(res.data,'数据')
  131. this.list = res.data
  132. this.allList = res.data.length > 0 ? res.data[0]:{}
  133. this.total = res.total
  134. this.currentPage = res.pageNumber
  135. },
  136. async departmentrtment() {
  137. const res = await this.$api.requested(this.depmentParam)
  138. this.$refs.departmentSalesperson.deplist = this.createMenu(res.data.dep)
  139. this.$refs.departmentSalesperson.personnelList = res.data.hr
  140. const name = JSON.parse(sessionStorage.getItem('active_account')).name
  141. this.$refs.departmentSalesperson.person = name
  142. this.queryDate()
  143. },
  144. /*获取期初日期*/
  145. async queryDate(){
  146. const res = await this.$api.requested({
  147. "id": 20241218101003,
  148. "content": {
  149. "where":{
  150. "condition":"",
  151. "begindate":"",
  152. "enddate":""
  153. }
  154. }
  155. })
  156. if (res.code == 0){
  157. this.tool.showMessage(res,()=>{})
  158. }else {
  159. if (res.data.length > 0){
  160. const newDate = new Date(res.data[0].openingdate)
  161. this.dateData = this.tool.getDataChange(newDate)
  162. }else {
  163. this.dateData = null
  164. }
  165. this.listData()
  166. }
  167. },
  168. createMenu (array) {
  169. var that = this
  170. let arr = []
  171. function convertToElementTree(node) {
  172. // 新节点
  173. if (node.subdep.length === 0){
  174. var elNode = {
  175. label: node["depname"],
  176. parentid:node['parentid'],
  177. parentname:node['parentname'],
  178. departmentid:node["departmentid"],
  179. value:node["departmentid"],
  180. remarks:node["remarks"],
  181. isused:node["isused"],
  182. changedate:node['changedate'],
  183. changeby:node['changeby'],
  184. createdate:node['createdate'],
  185. createby:node['createby'],
  186. depno:node['depno'],
  187. disabled:that.pageOnlyRead,
  188. }
  189. }else {
  190. var elNode = {
  191. label: node["depname"],
  192. parentid:node['parentid'],
  193. parentname:node['parentname'],
  194. departmentid:node["departmentid"],
  195. value:node["departmentid"],
  196. remarks:node["remarks"],
  197. isused:node["isused"],
  198. changedate:node['changedate'],
  199. changeby:node['changeby'],
  200. createdate:node['createdate'],
  201. createby:node['createby'],
  202. depno:node['depno'],
  203. disabled:that.pageOnlyRead,
  204. children: []
  205. }
  206. }
  207. if (node.subdep && node.subdep.length > 0) {
  208. // 如果存在子节点
  209. for (var index = 0; index < node.subdep.length; index++) {
  210. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  211. elNode.children.push(convertToElementTree(node.subdep[index]));
  212. }
  213. }
  214. return elNode;
  215. }
  216. array.forEach((element) => {
  217. arr.push(convertToElementTree(element))
  218. });
  219. return arr
  220. },
  221. /*选择部门*/
  222. depSelect(val){
  223. console.log(val,'val3333')
  224. this.param.content.type = 1
  225. this.param.content.dataid = val
  226. this.dataid = val
  227. this.listData()
  228. },
  229. /*选择业务员*/
  230. personSelect(val){
  231. this.param.content.type = 0
  232. this.param.content.dataid = val
  233. this.dataid = val
  234. this.listData()
  235. },
  236. handleSizeChange(val) {
  237. // console.log(`每页 ${val} 条`);
  238. this.param.content.pageSize = val
  239. this.listData()
  240. },
  241. handleCurrentChange(val) {
  242. // console.log(`当前页: ${val}`);
  243. this.param.content.pageNumber = val
  244. this.listData()
  245. },
  246. clearSearchValue () {
  247. this.$store.dispatch('clearSearchValue')
  248. this.listData(this.param.content.pageNumber = 1)
  249. }
  250. },
  251. mounted() {
  252. this.departmentrtment()
  253. },
  254. created() {
  255. this.tablecols = this.tool.tabelCol(this.$route.name).actsRecTable.tablecols
  256. }
  257. }
  258. </script>
  259. <style scoped>
  260. .acccounet__panel{
  261. padding: 10px;
  262. line-height: 30px;
  263. border:1px solid #f1f2f3;
  264. color:#666;
  265. border-radius: 5px;
  266. cursor: pointer;
  267. }
  268. </style>