data.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. import { FormProps, BasicColumn } from '/@/components/Table';
  2. import { FormSchema } from '/@/components/Form/index';
  3. import { adapt } from '/@/utils/adapt';
  4. import { h } from 'vue';
  5. import { Tag } from 'ant-design-vue';
  6. import CustomInput from './customCom/CustomInput.vue';
  7. import YearPicker from './customCom/YearPicker.vue';
  8. import moment from 'moment';
  9. import { getYearFee } from '/@/api/sys/money';
  10. import { useMessage } from '/@/hooks/web/useMessage';
  11. import UploadFile from '/@/views/general/config/customComponents/UploadFile.vue';
  12. const { createMessage } = useMessage();
  13. const { error } = createMessage;
  14. const adaptWidth = adapt();
  15. export const columns: BasicColumn[] = [
  16. {
  17. title: 'ID',
  18. dataIndex: 'id',
  19. editComponentProps: {
  20. prefix: '$',
  21. },
  22. width: 100,
  23. sorter: true,
  24. },
  25. {
  26. title: '交易类型',
  27. dataIndex: 'type',
  28. width: 130,
  29. // customRender({ record }) {
  30. // const options = ['会费', '收入', '支出', '内部转账'];
  31. // return options[record['type.in_out']];
  32. // },
  33. customRender({ record }) {
  34. const inOut = record.type;
  35. let color = 'red';
  36. let text = '会费';
  37. switch (inOut) {
  38. case 0:
  39. text = '会费';
  40. color = 'red';
  41. break;
  42. case 1:
  43. text = '收入';
  44. color = 'green';
  45. break;
  46. case 2:
  47. text = '支出';
  48. color = 'red';
  49. break;
  50. case 3:
  51. text = '内部转账';
  52. color = 'blue';
  53. break;
  54. }
  55. return h(Tag, { color: color }, () => text);
  56. },
  57. sorter: true,
  58. },
  59. {
  60. title: '交易名称',
  61. dataIndex: 'typename',
  62. width: 160,
  63. sorter: true,
  64. },
  65. {
  66. title: '交易账户',
  67. dataIndex: 'account',
  68. width: 160,
  69. sorter: true,
  70. },
  71. {
  72. title: '金额',
  73. dataIndex: 'money',
  74. width: 160,
  75. sorter: true,
  76. },
  77. {
  78. title: '相关会员',
  79. dataIndex: 'member',
  80. width: 160,
  81. sorter: true,
  82. },
  83. {
  84. title: '是否开票',
  85. dataIndex: 'isCode',
  86. width: 130,
  87. customRender({ record }) {
  88. const options = ['否', '是'];
  89. return options[record.isCode];
  90. },
  91. sorter: true,
  92. },
  93. {
  94. title: '备注',
  95. dataIndex: 'remark',
  96. width: 160,
  97. sorter: true,
  98. },
  99. {
  100. title: '交易日期',
  101. dataIndex: 'tradetime',
  102. width: 200,
  103. customRender({ record }) {
  104. return moment(record.tradetime).format('YYYY-MM-DD');
  105. },
  106. sorter: true,
  107. },
  108. ];
  109. export function getFormConfig(): Partial<FormProps> {
  110. return {
  111. labelWidth: 100,
  112. schemas: [
  113. {
  114. field: `id`,
  115. label: `ID`,
  116. component: 'Input',
  117. componentProps: {
  118. placeholder: 'ID',
  119. },
  120. colProps: {
  121. xl: 12,
  122. xxl: 8,
  123. },
  124. },
  125. {
  126. field: `type`,
  127. label: `交易类型`,
  128. component: 'Select',
  129. componentProps: {
  130. options: [
  131. {
  132. label: '收入',
  133. value: 1,
  134. },
  135. {
  136. label: '支出',
  137. value: 2,
  138. },
  139. {
  140. label: '内部转账',
  141. value: 3,
  142. },
  143. ],
  144. },
  145. colProps: {
  146. xl: 12,
  147. xxl: 8,
  148. },
  149. },
  150. {
  151. field: `typename`,
  152. label: `交易名称`,
  153. component: 'Input',
  154. componentProps: {
  155. placeholder: '交易名称',
  156. },
  157. colProps: {
  158. xl: 12,
  159. xxl: 8,
  160. },
  161. },
  162. {
  163. field: `account`,
  164. label: `交易账户`,
  165. component: 'Input',
  166. componentProps: {
  167. placeholder: '交易账户',
  168. },
  169. colProps: {
  170. xl: 12,
  171. xxl: 8,
  172. },
  173. },
  174. {
  175. field: `money`,
  176. label: `金额`,
  177. component: 'Input',
  178. componentProps: {
  179. placeholder: '金额',
  180. },
  181. colProps: {
  182. xl: 12,
  183. xxl: 8,
  184. },
  185. },
  186. {
  187. field: `member`,
  188. label: `相关会员`,
  189. component: 'Input',
  190. componentProps: {
  191. placeholder: '相关会员',
  192. },
  193. colProps: {
  194. xl: 12,
  195. xxl: 8,
  196. },
  197. },
  198. {
  199. field: `isCode`,
  200. label: `是否开票`,
  201. component: 'Select',
  202. componentProps: {
  203. options: [
  204. {
  205. label: '否',
  206. value: 0,
  207. },
  208. {
  209. label: '是',
  210. value: 1,
  211. },
  212. ],
  213. },
  214. colProps: {
  215. xl: 12,
  216. xxl: 8,
  217. },
  218. },
  219. {
  220. field: `remark`,
  221. label: `备注`,
  222. component: 'Input',
  223. componentProps: {
  224. placeholder: '备注',
  225. },
  226. colProps: {
  227. xl: 12,
  228. xxl: 8,
  229. },
  230. },
  231. {
  232. field: `tradetime`,
  233. label: `交易日期`,
  234. component: 'DatePicker',
  235. componentProps: {
  236. placeholder: '交易日期',
  237. },
  238. colProps: {
  239. xl: 12,
  240. xxl: 8,
  241. },
  242. },
  243. ],
  244. };
  245. }
  246. // =================popup================================
  247. export const schemas: FormSchema[] = [
  248. {
  249. field: 'type',
  250. label: '交易类型',
  251. component: 'RadioButtonGroup',
  252. labelWidth: adaptWidth.labelWidth,
  253. colProps: {
  254. span: adaptWidth.elContainer,
  255. },
  256. componentProps: {
  257. options: [
  258. { label: '收入', value: 1 },
  259. { label: '支出', value: 2 },
  260. { label: '内部转账', value: 3 },
  261. ],
  262. },
  263. defaultValue: 1,
  264. required: true,
  265. },
  266. {
  267. field: 'typename',
  268. component: 'Select',
  269. label: '交易名称',
  270. labelWidth: adaptWidth.labelWidth,
  271. colProps: {
  272. span: adaptWidth.elContainer,
  273. },
  274. render: ({ model, field }) => {
  275. return h(CustomInput, {
  276. value: model.typename,
  277. year: model.year,
  278. type: model.type,
  279. placeholder: '交易名称',
  280. onChange(value) {
  281. model[field] = value;
  282. },
  283. });
  284. },
  285. },
  286. {
  287. field: 'account',
  288. component: 'Select',
  289. label: '交易账户',
  290. labelWidth: adaptWidth.labelWidth,
  291. colProps: {
  292. span: adaptWidth.elContainer,
  293. },
  294. render: ({ model, field }) => {
  295. return h(CustomInput, {
  296. value: model.account,
  297. placeholder: '添加账户',
  298. onChange(value) {
  299. if (model.type === 3 && model.inaccount && value.id === model.inaccount.id) {
  300. error('交易账户不能是流入账户!');
  301. return;
  302. }
  303. model[field] = value;
  304. },
  305. });
  306. },
  307. required: true,
  308. },
  309. {
  310. field: 'inaccount',
  311. component: 'Select',
  312. label: '流入账户',
  313. labelWidth: adaptWidth.labelWidth,
  314. colProps: {
  315. span: adaptWidth.elContainer,
  316. },
  317. render: ({ model, field }) => {
  318. return h(CustomInput, {
  319. value: model.inaccount,
  320. placeholder: '添加账户',
  321. onChange(value) {
  322. if (model.type === 3 && model.account && value.id === model.account.id) {
  323. error('交易账户不能是流入账户!');
  324. return;
  325. }
  326. model[field] = value;
  327. },
  328. });
  329. },
  330. show: ({ values }) => {
  331. if (values.type == 3) {
  332. return true;
  333. }
  334. return false;
  335. },
  336. required: ({ values }) => {
  337. if (values.type == 3) {
  338. return true;
  339. }
  340. return false;
  341. },
  342. },
  343. {
  344. field: 'year',
  345. component: 'Input',
  346. label: '会员年份',
  347. labelWidth: adaptWidth.labelWidth,
  348. colProps: {
  349. span: adaptWidth.elContainer,
  350. },
  351. render: ({ model, field }) => {
  352. return h(YearPicker, {
  353. value: model.year,
  354. onChange(value) {
  355. model[field] = value;
  356. if (model.member && model.member.id && model.year) {
  357. let year = 0;
  358. if (model.year.year) {
  359. year = model.year.year;
  360. } else {
  361. year = model.year;
  362. }
  363. getYearFee({ member_id: model.member.id, year }).then((res) => {
  364. if (res.money) {
  365. model.money = res.money;
  366. }
  367. });
  368. }
  369. },
  370. });
  371. },
  372. show: ({ values }) => {
  373. if (values.typename === '会费' || (values.typename && values.typename.name === '会费')) {
  374. return true;
  375. }
  376. return false;
  377. },
  378. required: ({ values }) => {
  379. if (values.typename === '会费' || (values.typename && values.typename.name === '会费')) {
  380. return true;
  381. }
  382. return false;
  383. },
  384. },
  385. {
  386. field: 'member',
  387. component: 'Select',
  388. label: '相关会员',
  389. labelWidth: adaptWidth.labelWidth,
  390. colProps: {
  391. span: adaptWidth.elContainer,
  392. },
  393. render: ({ model, field }) => {
  394. return h(CustomInput, {
  395. value: model.member,
  396. placeholder: '添加会员',
  397. onChange(value) {
  398. model[field] = value;
  399. if (model.member.id && model.year) {
  400. let year = 0;
  401. if (model.year.year) {
  402. year = model.year.year;
  403. } else {
  404. year = model.year;
  405. }
  406. getYearFee({ member_id: model.member.id, year }).then((res) => {
  407. if (res.money) {
  408. model.money = res.money;
  409. }
  410. });
  411. }
  412. },
  413. });
  414. },
  415. required: true,
  416. },
  417. {
  418. field: 'money',
  419. component: 'Input',
  420. label: '金额',
  421. labelWidth: adaptWidth.labelWidth,
  422. colProps: {
  423. span: adaptWidth.elContainer,
  424. },
  425. componentProps: {
  426. type: 'number',
  427. placeholder: '金额',
  428. },
  429. required: true,
  430. },
  431. {
  432. field: 'isCode',
  433. label: '是否开票',
  434. component: 'RadioButtonGroup',
  435. labelWidth: adaptWidth.labelWidth,
  436. colProps: {
  437. span: adaptWidth.elContainer,
  438. },
  439. componentProps: {
  440. options: [
  441. { label: '否', value: 0 },
  442. { label: '是', value: 1 },
  443. ],
  444. },
  445. defaultValue: 0,
  446. required: true,
  447. },
  448. {
  449. field: 'code',
  450. component: 'Input',
  451. label: '发票号',
  452. labelWidth: adaptWidth.labelWidth,
  453. colProps: {
  454. span: adaptWidth.elContainer,
  455. },
  456. show: ({ values }) => {
  457. if (values.isCode) {
  458. return true;
  459. }
  460. return false;
  461. },
  462. componentProps: {
  463. placeholder: '发票号',
  464. },
  465. },
  466. {
  467. field: 'attachment',
  468. component: 'Select',
  469. label: '附件',
  470. labelWidth: adaptWidth.labelWidth,
  471. colProps: {
  472. span: adaptWidth.elContainer,
  473. },
  474. render: ({ model, field }) => {
  475. return h(UploadFile, {
  476. value: model.attachment,
  477. type: 'files',
  478. style: { width: '100%' },
  479. onChange(value) {
  480. model[field] = value;
  481. },
  482. });
  483. },
  484. },
  485. {
  486. field: 'remark',
  487. component: 'InputTextArea',
  488. label: '备注',
  489. labelWidth: adaptWidth.labelWidth,
  490. colProps: {
  491. span: adaptWidth.elContainer,
  492. },
  493. defaultValue: '',
  494. componentProps: {
  495. placeholder: '备注',
  496. },
  497. },
  498. ];