index.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. const _Http = getApp().globalData.http,
  2. currency = require("../../utils/currency"),
  3. CNY = (value, symbol = "", precision = 2) => currency(value, {
  4. symbol,
  5. precision
  6. }).format();
  7. Page({
  8. data: {
  9. dropdownItem: 0,
  10. filtratelist: [],
  11. showFiltrate: false,
  12. active: {
  13. name: wx.getStorageSync('userMsg').name,
  14. userid: wx.getStorageSync('userMsg').userid,
  15. isleave: 1
  16. }
  17. },
  18. onLoad(options) {
  19. this.refreshData();
  20. getApp().globalData.Language.getLanguagePackage(this, '作业看板');
  21. this.setData({
  22. dropdown: [{
  23. text: getApp().globalData.Language.getMapText('作业看板'),
  24. value: 0
  25. },
  26. {
  27. text: getApp().globalData.Language.getMapText('线索'),
  28. value: 1
  29. },
  30. {
  31. text: getApp().globalData.Language.getMapText('客户'),
  32. value: 2
  33. },
  34. {
  35. text: getApp().globalData.Language.getMapText('项目商机'),
  36. value: 3
  37. },
  38. {
  39. text: getApp().globalData.Language.getMapText('作业单据'),
  40. value: 4
  41. }
  42. ]
  43. })
  44. },
  45. openFiltrate() {
  46. this.setData({
  47. showFiltrate: true
  48. })
  49. },
  50. handleFilter({
  51. detail
  52. }) {
  53. if (detail.name == 'reset') {
  54. this.selectComponent("#organization").setData({
  55. isleave: 1
  56. })
  57. this.selectComponent("#organization").initDepAndUser().then(active => {
  58. console.log("active", active)
  59. active.isleave = 1;
  60. this.setData({
  61. active
  62. })
  63. this.refreshData();
  64. this.refreshModel();
  65. });
  66. } else {
  67. this.setData({
  68. active: this.selectComponent("#organization").data.result
  69. })
  70. this.refreshData();
  71. this.refreshModel();
  72. }
  73. },
  74. refreshData() {
  75. const conversion = (n) => {
  76. const integer = (n + '').split(".")[0] + '',
  77. length = integer.length,
  78. regexp = /(?:\.0*|(\.\d+?)0+)$/
  79. if (length <= 4) {
  80. const index = 4 - length;
  81. return { //元
  82. show: CNY(n, "", index).replace(regexp, '$1'),
  83. value: CNY(n, '¥')
  84. }
  85. } else if (length <= 8) {
  86. return { //万-千万
  87. show: CNY(currency(n).divide(wx.getStorageSync('languagecode') == 'ZH' ? 10000 : 1000)).replace(regexp, '$1') + getApp().globalData.Language.getMapText('万'),
  88. value: CNY(n)
  89. }
  90. } else {
  91. return { //亿
  92. show: CNY(currency(n).divide(100000000)).replace(regexp, '$1') + getApp().globalData.Language.getMapText('亿'),
  93. value: CNY(n)
  94. }
  95. }
  96. };
  97. const sortOut = (obj, data, isConversion = false) => {
  98. for (const key in obj) {
  99. if (key == 'tab') continue;
  100. for (const k in obj[key]) {
  101. obj[key][k] = isConversion ? conversion(data[key + k]) : data[key + k]
  102. }
  103. }
  104. return obj
  105. };
  106. const getData = (dataType) => {
  107. let active = this.data.active;
  108. let type = active.userid ? 0 : 1,
  109. dataid = type == 0 ? active.userid : active.departmentid,
  110. where = {
  111. isleave: active.isleave
  112. };
  113. return _Http.basic({
  114. "id": 20230616131404,
  115. "content": {
  116. nocache: true,
  117. dataType, // 1 作业数据 2 销售数据 3业绩数据
  118. type,
  119. dataid,
  120. where
  121. }
  122. }).then(res => {
  123. let data = {};
  124. switch (dataType) {
  125. case 1:
  126. data = {
  127. tab: {
  128. active: "by",
  129. list: [{
  130. name: getApp().globalData.Language.getMapText('本周'),
  131. id: "bz"
  132. }, {
  133. name: getApp().globalData.Language.getMapText('本月'),
  134. id: "by"
  135. }, {
  136. name: getApp().globalData.Language.getMapText('本年'),
  137. id: "bn"
  138. }]
  139. },
  140. bz: {
  141. khgj: 0,
  142. khxz: 0,
  143. xmgj: 0,
  144. xmxz: 0,
  145. xsxz: 0,
  146. xsgj: 0,
  147. },
  148. by: {
  149. khgj: 0,
  150. khxz: 0,
  151. xmgj: 0,
  152. xmxz: 0,
  153. xsxz: 0,
  154. xsgj: 0,
  155. },
  156. bn: {
  157. khgj: 0,
  158. khxz: 0,
  159. xmgj: 0,
  160. xmxz: 0,
  161. xsxz: 0,
  162. xsgj: 0,
  163. }
  164. }
  165. break;
  166. case 2:
  167. data = {
  168. tab: {
  169. active: "by",
  170. list: [{
  171. name: getApp().globalData.Language.getMapText('本周'),
  172. id: "bz"
  173. }, {
  174. name: getApp().globalData.Language.getMapText('本月'),
  175. id: "by"
  176. }, {
  177. name: getApp().globalData.Language.getMapText('本年'),
  178. id: "bn"
  179. }]
  180. },
  181. bz: {
  182. chje: 0,
  183. kpje: 0,
  184. skje: 0,
  185. xsje: 0
  186. },
  187. by: {
  188. chje: 0,
  189. kpje: 0,
  190. skje: 0,
  191. xsje: 0
  192. },
  193. bn: {
  194. chje: 0,
  195. kpje: 0,
  196. skje: 0,
  197. xsje: 0
  198. }
  199. }
  200. break;
  201. default:
  202. data = res.data
  203. data.tab = {
  204. active: "by",
  205. list: [{
  206. name: getApp().globalData.Language.getMapText('本月'),
  207. id: "by"
  208. }, {
  209. name: getApp().globalData.Language.getMapText('本季'),
  210. id: "bj"
  211. }, {
  212. name: getApp().globalData.Language.getMapText('本年'),
  213. id: "bn"
  214. }]
  215. }
  216. break;
  217. }
  218. return dataType == 3 ? data : sortOut(data, res.data, dataType == 2)
  219. })
  220. };
  221. wx.showLoading({
  222. title: getApp().globalData.Language.getMapText('加载中...'),
  223. mask: true
  224. })
  225. let languagecode = wx.getStorageSync('languagecode');
  226. Promise.all([getData(1), getData(2), getData(3)]).then(res => {
  227. wx.hideLoading()
  228. for (const key in res[2]) {
  229. if (key == 'tab') continue;
  230. res[2][key].target_l = conversion(res[2][key].target_l);
  231. //实际
  232. res[2][key].amount = conversion(res[2][key].amount);
  233. res[2][key].outamount = conversion(res[2][key].outamount);
  234. res[2][key].invoiceamount = conversion(res[2][key].invoiceamount);
  235. //差额
  236. res[2][key].unamount = CNY(res[2][key].unamount / (languagecode == 'ZH' ? 10000 : 1000), '');
  237. res[2][key].unamountcolor = res[2][key].unamount >= 0 ? '#5AB73F' : '#EB4B5C';
  238. res[2][key].unoutamount = CNY(res[2][key].unoutamount / (languagecode == 'ZH' ? 10000 : 1000), '');
  239. res[2][key].unoutamountcolor = res[2][key].unoutamount >= 0 ? '#5AB73F' : '#EB4B5C';
  240. res[2][key].uninvoiceamount = CNY(res[2][key].uninvoiceamount / (languagecode == 'ZH' ? 10000 : 1000), '');
  241. res[2][key].uninvoiceamountcolor = res[2][key].uninvoiceamount >= 0 ? '#5AB73F' : '#EB4B5C';
  242. //达成率
  243. res[2][key].wcamount = (res[2][key].wcamount * 100).toFixed(2) + '%';
  244. res[2][key].wcoutamount = (res[2][key].wcoutamount * 100).toFixed(2) + '%';
  245. res[2][key].wcinvoiceamount = (res[2][key].wcinvoiceamount * 100).toFixed(2) + '%';
  246. console.log("res[2][key].wcamount", res[2][key].wcamount)
  247. }
  248. this.setData({
  249. zysj: res[0],
  250. xssj: res[1],
  251. yjsj: res[2],
  252. })
  253. })
  254. },
  255. dropdownItemChange({
  256. detail
  257. }) {
  258. this.setData({
  259. dropdownItem: detail
  260. })
  261. this.refreshModel();
  262. },
  263. changeId(e) {
  264. const {
  265. id,
  266. name
  267. } = e.currentTarget.dataset;
  268. if (this.data[name].tab.active == id) return;
  269. this.setData({
  270. [`${name}.tab.active`]: id
  271. })
  272. },
  273. refreshModel() {
  274. const dropdownItem = this.data.dropdownItem;
  275. if (dropdownItem == 0) return;
  276. const model = this.selectComponent("#model" + dropdownItem);
  277. if (!model) return;
  278. const active = this.data.active;
  279. model.init(active.departmentid ? '1' : '0', active.departmentid || active.userid);
  280. },
  281. onReady() {
  282. this.selectComponent("#ListBox").setHeight(".head", this);
  283. this.selectComponent("#organization").setData({
  284. isleave: 1
  285. })
  286. this.selectComponent("#organization").initDepAndUser().then(active => {
  287. this.setData({
  288. active
  289. })
  290. this.refreshModel();
  291. });
  292. }
  293. })