index.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. import { value, switchs, date } from "./config";
  2. import Dialog from "../../miniprogram_npm/@vant/weapp/dialog/dialog";
  3. import { chineseNumber } from "./ChinaNumToEnglishNum";
  4. var _value = value;
  5. const app = getApp();
  6. Component({
  7. options: {
  8. addGlobalClass: true,//解决继承全局样式问题
  9. },
  10. lifetimes: {
  11. attached: function () { this.init(); }
  12. },
  13. properties: {
  14. type: { type: String, value: "add" },
  15. key: String
  16. },
  17. observers: {
  18. 'value': function (value) {
  19. let A = value[0][1]["value"] * 1 || 0;
  20. let B = (value[0][3]["value"] * 1 || 0) + (value[0][4]["value"] * 1 || 0) + (value[0][5]["value"] * 1 || 0) +
  21. (value[0][6]["value"] * 1 || 0) + (value[0][7]["value"] * 1 || 0);
  22. let C = value[0][8]["value"] * 1 || 0;
  23. if (A == 0 || C == 0) return false;
  24. value[0][9]["value"] = ((parseFloat(A - C + B) / parseFloat(A + B)) * 100).toFixed(2) + "%";
  25. if (this.result && this.result == value[0][9]["value"]) return false;
  26. this.result = value[0][9]["value"];
  27. this.setData({
  28. value
  29. })
  30. }
  31. },
  32. data: {
  33. Ios: app.globalData.Ios,
  34. value,
  35. active: '',
  36. activeObject: {},
  37. activeIndex: [],
  38. switchB: false,
  39. endDate: date(),
  40. switchs,
  41. submitLock: false,
  42. saveLock: false,
  43. btn: true,
  44. radioInputShow: false,
  45. },
  46. methods: {
  47. //组件石林进入页面接节点树执行
  48. async init () {
  49. try {
  50. // 商品请求
  51. var laompany = [];
  52. let res = await wx.$request({ method: "get", url: "/order/productDict/" });
  53. laompany = res.data.map(item => ({ key: item.id, value: item.name, month: item.month }));
  54. let { type, value, switchs } = this.data;
  55. switchs['laompany'] = laompany;
  56. switch (type) {
  57. // 已填报查看
  58. case 'watch':
  59. var resA = await wx.$request({ url: `/order/${this.data.key}/`, method: "get" });
  60. var data = resA.data.data;
  61. value = this.watchFunc(value, data, switchs);
  62. break;
  63. case 'draftsupdate':
  64. // 修改草稿
  65. var resB = await wx.$request({ url: `/order/${this.data.key}/`, method: "get" });
  66. var data = resB.data;
  67. console.log(data)
  68. value = this.draftUpdataFunc(value, data, switchs);
  69. break;
  70. case 'providedupdate':
  71. // 修改已填报
  72. var resA = await wx.$request({ url: `/order/${this.data.key}/`, method: "get" });
  73. var { data, edit_values, edit_file, edit_file2 } = resA.data;
  74. this.edit_file = edit_file;
  75. this.edit_file2 = edit_file2;
  76. value = this.updataFunc(value, data, edit_values, switchs);
  77. default:
  78. // 新增
  79. this.data.key && laompany.forEach((item, index) => {
  80. if (item.key == this.data.key) {
  81. value[0][10]["value"] = item.key;
  82. value[0][10]["index"] = index;
  83. value[0][11]['value'] = item['month'] + '个月';
  84. }
  85. })
  86. break;
  87. }
  88. this.setData({ value, switchs })
  89. } catch (err) { wx.$err(err) }
  90. },
  91. // 查看模式
  92. watchFunc (value, data, switchs) {
  93. return value.map(itemA => itemA.map(itemB => {
  94. if (!itemB.hasOwnProperty('value')) return itemB;
  95. if (itemB.name != "maturity") { itemB['value'] = data[itemB.name] === 0 ? 0 : data[itemB.name] || ''; }
  96. itemB['disabled'] = true;
  97. switchs.hasOwnProperty(itemB.name) && switchs[itemB.name].forEach((itemC, indexC) => {
  98. if (itemC.key === itemB.value) itemB["index"] = indexC;
  99. // 申请贷款产品 申请贷款期限关联
  100. if (itemB.name == 'laompany') {
  101. value[0][11]['value'] = itemC['month'] + '个月';
  102. }
  103. // 第一借款人与申请人关系特殊处理
  104. if (itemB.name == 'mstatus' && itemB.value == 1) {
  105. value[2][2] = { ...value[2][2], disabled: true, value: 0, index: 0 }
  106. }
  107. })
  108. return itemB
  109. })
  110. )
  111. },
  112. // 修改草稿
  113. draftUpdataFunc (value, data, switchs) {
  114. return value.map(itemA => itemA.map(itemB => {
  115. if (!itemB.hasOwnProperty('value')) return itemB;
  116. if (itemB.name != "maturity") {
  117. itemB['value'] = data[itemB.name] === 0 ? 0 : data[itemB.name] || '';
  118. }
  119. switchs.hasOwnProperty(itemB.name) && switchs[itemB.name].forEach((itemC, indexC) => {
  120. if (itemC.key === itemB.value) {
  121. itemB["index"] = indexC;
  122. };
  123. // 申请贷款产品 申请贷款期限关联
  124. if (itemB.name == 'laompany') {
  125. value[0][11]['value'] = itemC['month'] + '个月';
  126. }
  127. // 第一借款人与申请人关系特殊处理
  128. if (itemB.name == 'mstatus' && itemB.value == 1) {
  129. value[2][2] = { ...value[2][2], disabled: true, value: 0, index: 0 }
  130. }
  131. })
  132. return itemB
  133. }));
  134. },
  135. // 已填报修改模式
  136. updataFunc (value, data, edit_values, switchs) {
  137. // 后台更改贷款商品key
  138. return value.map(itemA => itemA.map(itemB => {
  139. if (!itemB.hasOwnProperty('value')) return itemB;
  140. if (itemB.name != "maturity") { itemB['value'] = data[itemB.name] === 0 ? 0 : data[itemB.name] || ''; }
  141. switchs.hasOwnProperty(itemB.name) && switchs[itemB.name].forEach((itemC, indexC) => {
  142. if (itemC.key === itemB.value) itemB["index"] = indexC;
  143. // 申请贷款产品 申请贷款期限关联
  144. if (itemB.name == 'laompany') {
  145. value[0][11]['value'] = itemC['month'] + '个月';
  146. }
  147. // 第一借款人与申请人关系特殊处理
  148. if (itemB.name == 'mstatus' && itemB.value == 1) {
  149. value[2][2] = { ...value[2][2], disabled: true, value: 0, index: 0 }
  150. }
  151. })
  152. edit_values.some(itemC => {
  153. if (itemC.name == itemB.name) {
  154. itemB['err'] = itemC['reason'];
  155. }
  156. return itemC.name == itemB.name;
  157. }) ? '' : itemB['disabled'] = true;
  158. return itemB
  159. }));
  160. },
  161. // 提交
  162. async submitFunc () {
  163. try {
  164. let { value, submitLock } = this.data, megs = [], data = {}, cvalue = [], tels = [], i = 0;
  165. if (submitLock) return false;
  166. this.setData({ submitLock: true });
  167. if (value[2][6]['value'] == 0) {
  168. value = [...value[0], ...value[1], ...value[2]];
  169. cvalue = [..._value[0], ..._value[1], ..._value[2]];
  170. } else {
  171. value = [...value[0], ...value[1], ...value[2], ...value[3]];
  172. cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
  173. }
  174. value.forEach((item, index) => {
  175. // 特殊格式 非必须
  176. if (!item.hasOwnProperty('value') || (!item.value && item.norequire)) {
  177. if (item.hasOwnProperty('value')) data[item.name] = item.value;
  178. return false
  179. };
  180. // 正常流程
  181. // 判断是否为空
  182. if (item.value !== 0 && !item.value) { megs.push(`${item.title}不能为空!`); return false; };
  183. // 数字类型
  184. if (item.type == 'number' && !/^\d+.?\d*$/.test(item.value)) { megs.push(`${item.title}格式不正确!`); return false; }
  185. // 正则判断
  186. if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
  187. if (item.hasOwnProperty('reg_msg')) {
  188. megs.push(`${item.title},${item.reg_msg}`);
  189. } else {
  190. megs.push(`${item.title}格式不正确!`);
  191. }
  192. return false;
  193. };
  194. // 号码不能相同 tel tstel ctel cttel
  195. if (item.name == 'tel' || item.name == 'tstel' || item.name == 'ctel' || item.name == 'cttel') {
  196. (!tels.some(itemT => itemT == item.value) || item.vlaue == '') && tels.push(item.value); ++i;
  197. }
  198. ;
  199. // 身份证验证
  200. if (item.name == 'inumber' && data['bdate']) {
  201. item.value.substr(6, 4) + "-" + item.value.substr(10, 2) + "-" + item.value.substr(12, 2) != data['bdate'] && megs.push(`身份证同出生日期不一致!`);
  202. }
  203. if (item.name == 'tsinumber' && data['tsbdate']) {
  204. item.value.substr(6, 4) + "-" + item.value.substr(10, 2) + "-" + item.value.substr(12, 2) != data['tsbdate'] && megs.push(`共同借款人身份证同出生日期不一致!`)
  205. }
  206. if (item.name == "dpratio") {
  207. /-/g.test(item.value) && megs.push("请重新填写申请贷款产品!")
  208. }
  209. data[item.name] = item.value;
  210. });
  211. tels.length !== i && megs.push(`手机号码不能重复`);
  212. if (megs.length != 0) {
  213. this.setData({ errorShow: true, megs, submitLock: false });
  214. return false;
  215. };
  216. data['category'] = 1;
  217. // 申请贷款期限 不用传
  218. delete data['maturity'];
  219. let resA = await wx.$request({ method: "post", url: "/order/", data });
  220. this.setData({ submitLock: false });
  221. Dialog.alert({ message: "已提交!" }).then(res => wx.redirectTo({ url: '/pages/accessory/index?data=' + resA.data }))
  222. } catch (err) { wx.$err(err); this.setData({ submitLock: false }); }
  223. },
  224. // 新增保存
  225. async saveFunc () {
  226. try {
  227. let { value, saveLock } = this.data, data = {};
  228. if (saveLock) return false;
  229. this.setData({ saveLock: true });
  230. // 拦截
  231. var requeire = ['name', 'tel'], megs = [];
  232. value = [...value[0], ...value[1], ...value[2], ...value[3]];
  233. var cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
  234. console.log(value)
  235. value.forEach((item, index) => {
  236. if (!item.hasOwnProperty('value')) return false;
  237. if (requeire.some(itemB => itemB == item.name)) {
  238. if (item.value !== 0 && !item.value) {
  239. megs.push(`${item.title}不能为空!`)
  240. return false
  241. };
  242. if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
  243. megs.push(`${item.title}格式不正确!`); return false;
  244. };
  245. }
  246. data[item.name] = item.value;
  247. });
  248. data['category'] = 0;
  249. // 申请贷款期限 不用传
  250. delete data['maturity'];
  251. if (megs.length != 0) {
  252. this.setData({ errorShow: true, megs, saveLock: false });
  253. return false;
  254. };
  255. let resA = await wx.$request({ method: "post", url: "/order/", data });
  256. this.setData({ saveLock: false })
  257. Dialog.alert({ message: "已提交!" }).then(res => wx.redirectTo({ url: '/pages/accessory/index?data=' + resA.data }))
  258. } catch (err) {
  259. wx.$err(err)
  260. }
  261. },
  262. //草稿箱保存草稿
  263. async draftsUpdateSaveFunc () {
  264. try {
  265. let { value, saveLock, key } = this.data, data = {};
  266. if (saveLock) return false;
  267. this.setData({ saveLock: true });
  268. // 拦截
  269. var requeire = ['name', 'tel'], megs = [];
  270. value = [...value[0], ...value[1], ...value[2], ...value[3]];
  271. var cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
  272. value.forEach((item, index) => {
  273. if (!item.hasOwnProperty('value')) return false;
  274. if (requeire.some(itemB => itemB == item.name)) {
  275. if (item.value !== 0 && !item.value) {
  276. megs.push(`${item.title}不能为空!`)
  277. return false
  278. };
  279. if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
  280. megs.push(`${item.title}格式不正确!`); return false;
  281. };
  282. }
  283. data[item.name] = item.value;
  284. });
  285. data['category'] = 0;
  286. // 申请贷款期限 不用传
  287. delete data['maturity'];
  288. if (megs.length != 0) {
  289. this.setData({ errorShow: true, megs, saveLock: false });
  290. return false;
  291. };
  292. let resA = await wx.$request({ method: "put", url: `/order/${key}/`, data });
  293. this.setData({ saveLock: false })
  294. Dialog.alert({ message: "已保存!" }).then(res => wx.redirectTo({ url: '/pages/accessory/index?data=' + resA.data }))
  295. } catch (err) {
  296. wx.$err(err)
  297. }
  298. },
  299. // 已填报修改上报
  300. async UpdateSaveFunc () {
  301. try {
  302. let { value, submitLock, key } = this.data, megs = [], data = {}, cvalue = [], tels = [], i = 0;
  303. if (submitLock) return false;
  304. this.setData({ submitLock: true });
  305. if (value[2][6]['value'] == 0) {
  306. value = [...value[0], ...value[1], ...value[2]];
  307. cvalue = [..._value[0], ..._value[1], ..._value[2]];
  308. } else {
  309. value = [...value[0], ...value[1], ...value[2], ...value[3]];
  310. cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
  311. }
  312. value.forEach((item, index) => {
  313. // 特殊格式 非必须
  314. if (!item.hasOwnProperty('value') || (!item.value && item.norequire)) {
  315. if (item.hasOwnProperty('value')) data[item.name] = item.value;
  316. return false
  317. };
  318. // 正常流程
  319. // 判断是否为空
  320. if (item.value !== 0 && !item.value) { megs.push(`${item.title}不能为空!`); return false; };
  321. // 数字类型
  322. if (item.type == 'number' && !/^\d+.?\d*$/.test(item.value)) { megs.push(`${item.title}格式不正确!`); return false; }
  323. // 正则判断
  324. if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
  325. if (item.hasOwnProperty('reg_msg')) {
  326. megs.push(`${item.title},${item.reg_msg}`);
  327. } else {
  328. megs.push(`${item.title}格式不正确!`);
  329. }
  330. };
  331. // 号码不能相同 tel tstel ctel cttel
  332. if (item.name == 'tel' || item.name == 'tstel' || item.name == 'ctel' || item.name == 'cttel') {
  333. (!tels.some(itemT => itemT == item.value) || item.vlaue == '') && tels.push(item.value); ++i;
  334. }
  335. ;
  336. // 身份证验证
  337. if (item.name == 'inumber' && data['bdate']) {
  338. item.value.substr(6, 4) + "-" + item.value.substr(10, 2) + "-" + item.value.substr(12, 2) != data['bdate'] && megs.push(`身份证同出生日期不一致!`)
  339. }
  340. if (item.name == 'tsinumber' && data['tsbdate']) {
  341. item.value.substr(6, 4) + "-" + item.value.substr(10, 2) + "-" + item.value.substr(12, 2) != data['tsbdate'] && megs.push(`共同借款人身份证同出生日期不一致!`)
  342. }
  343. if (item.name == "dpratio") {
  344. /-/g.test(item.value) && megs.push("请重新填写申请贷款产品!")
  345. }
  346. data[item.name] = item.value;
  347. });
  348. tels.length !== i && megs.push(`手机号码不能重复`);
  349. if (megs.length != 0) {
  350. this.setData({ errorShow: true, megs, submitLock: false });
  351. return false;
  352. };
  353. data['category'] = 1;
  354. // 申请贷款期限 不用传
  355. delete data['maturity'];
  356. let resA = await wx.$request({ method: "put", url: `/order/${key}/`, data });
  357. this.setData({ submitLock: false });
  358. Dialog.alert({ message: "已提交!" }).then(res => wx.redirectTo({ url: `/pages/accessory/index?data=${resA.data}&imgs=${JSON.stringify(this.edit_file)}&images=${JSON.stringify(this.edit_file2)}` }))
  359. } catch (err) { wx.$err(err); this.setData({ submitLock: false }); }
  360. },
  361. // 输入
  362. inputFunc (e) {
  363. let { value } = this.data, { index } = e.currentTarget.dataset;
  364. value[index[0]][index[1]]['value'] = e.detail.value;
  365. if (value[index[0]][index[1]].hasOwnProperty("add")) value[index[0]][index[1]]['add'] = chineseNumber(e.detail.value);
  366. this.setData({ value })
  367. },
  368. // switch
  369. switchFunc (e) {
  370. let { value, switchs } = this.data, { index } = e.currentTarget.dataset;
  371. let { name } = value[index[0]][index[1]];
  372. if (switchs.hasOwnProperty(name)) {
  373. this.setData({ switchB: true, active: name, activeIndex: index })
  374. }
  375. },
  376. // 隐藏单选框
  377. hideModal () { this.setData({ switchB: false }) },
  378. // 单选框赋值
  379. changeFunc (e) {
  380. let { activeIndex, value, switchs } = this.data;
  381. let _value = e.detail.value.split(",");
  382. value[activeIndex[0]][activeIndex[1]]['value'] = _value[0] * 1;
  383. value[activeIndex[0]][activeIndex[1]]['index'] = _value[1] * 1;
  384. // 申请贷款产品 申请贷款期限关联
  385. if (value[activeIndex[0]][activeIndex[1]]['name'] == 'laompany') {
  386. value[0][11]['value'] = switchs['laompany'][_value[1] * 1]['month'] + '个月';
  387. }
  388. // 第一借款人与申请人关系特殊处理
  389. if (value[activeIndex[0]][activeIndex[1]]['name'] == 'mstatus') {
  390. value[2][2] = {
  391. ...value[2][2], disabled: _value[0] == 1 ? true : false, value: _value[0] == 1 ? 0 : '', index: _value[0] == 1 ? 0 : ''
  392. }
  393. }
  394. if (value[activeIndex[0]][activeIndex[1]].hasOwnProperty('forlen')) {
  395. for (let i = 1; i < (value[activeIndex[0]][activeIndex[1]]['forlen'] + 1); i++) {
  396. value[activeIndex[0]][(activeIndex[1] + i)]['norequire'] = _value[0] == 1 ? false : true;
  397. }
  398. }
  399. this.setData({ value, switchB: false })
  400. },
  401. // 日期
  402. DateChange (e) {
  403. let { value } = this.data, { index } = e.currentTarget.dataset;
  404. value[index[0]][index[1]]['value'] = e.detail.value;
  405. this.setData({ value })
  406. },
  407. }
  408. })