transport.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. 'use strict';
  2. const moment = require('moment');
  3. const Schema = require('mongoose').Schema;
  4. const metaPlugin = require('naf-framework-mongoose/lib/model/meta-plugin');
  5. // 货物列表
  6. const goodsList = new Schema({
  7. name: { type: String, maxlength: 200 }, // 货物名称
  8. number: { type: Number, maxLength: 200 }, // 数量
  9. weight: { type: Number, maxLength: 200 }, // 重量
  10. volume: { type: Number, maxLength: 200 }, // 体积
  11. taxes: { type: String, maxLength: 200 }, // 税率
  12. sq_ys: { type: Number, maxLength: 200 }, // 税前应收
  13. sq_ss: { type: Number, maxLength: 200 }, // 税前实收
  14. sh_ys: { type: Number, maxLength: 200 }, // 税后应收
  15. sh_ss: { type: Number, maxLength: 200 }, // 税后实收
  16. split_id: { type: String, maxLength: 200, required: true }, // 拆分的货物id
  17. });
  18. // 运输支出(单车,单趟)
  19. const bill = new Schema({
  20. item: { type: String, maxlength: 200 }, // 支出项
  21. taxes: { type: String, maxLength: 200 }, // 税率
  22. sq_ys: { type: Number, maxLength: 200 }, // 税前应收
  23. sq_ss: { type: Number, maxLength: 200 }, // 税前实收
  24. sh_ys: { type: Number, maxLength: 200 }, // 税后应收
  25. sh_ss: { type: Number, maxLength: 200 }, // 税后实收
  26. });
  27. // 运输方信息
  28. const supplier = new Schema({
  29. car_no: { type: String, maxlength: 200 }, // 车牌号,0/2使用
  30. client: { type: String, maxlength: 200 }, // 客户
  31. treaty: { type: String, maxlength: 200 }, // 合同
  32. item: { type: String, maxlength: 200 }, // 项目
  33. route: { type: String, maxlength: 200 }, // 线路
  34. mode: { type: String, maxlength: 200 }, // 计费方式
  35. taxes: { type: String, maxLength: 200 }, // 税率
  36. });
  37. // 运输信息
  38. const transport = {
  39. no: {
  40. type: String,
  41. required: true,
  42. field: { label: '运输单号' },
  43. },
  44. owner: {
  45. type: String,
  46. required: true,
  47. maxLength: 200,
  48. field: { label: '运输单负责人', remark: '谁装的车就是谁' },
  49. },
  50. supply_type: {
  51. type: String,
  52. required: true,
  53. field: {
  54. label: '运输单位类型',
  55. list: [
  56. { label: '自运', value: '0' },
  57. { label: '供应商', value: '1' },
  58. { label: '第三方单位', value: '2' },
  59. ],
  60. },
  61. },
  62. supplier: {
  63. type: supplier,
  64. required: true,
  65. maxLength: 200,
  66. field: {
  67. label: '运输单位信息',
  68. remark: `0=>这里就是车牌号
  69. 1=>这里就是供应商至计费方式的信息
  70. 2=>这里就是 个体(车号) 等一次性单位
  71. `,
  72. },
  73. },
  74. goods: {
  75. type: [ goodsList ],
  76. field: { label: '货物列表' },
  77. },
  78. sign_time: {
  79. type: String,
  80. field: { label: '签收时间' },
  81. },
  82. route: {
  83. type: String,
  84. required: true,
  85. field: { label: '线路' },
  86. },
  87. out_bill: {
  88. type: [ bill ],
  89. maxLength: 200,
  90. field: { label: '运输支出单据' },
  91. },
  92. remark: {
  93. type: String,
  94. required: false,
  95. maxLength: 200,
  96. field: {
  97. label: '备注',
  98. type: 'textarea',
  99. options: { autosize: { minRows: 3, maxRows: 5 } },
  100. },
  101. },
  102. status: {
  103. type: String,
  104. maxLength: 200,
  105. default: '0',
  106. field: {
  107. label: '状态',
  108. filter: 'select',
  109. type: 'radio',
  110. format: (i => (i === '0' ? '运输中' : '已签到')).toString(),
  111. list: [
  112. { label: '运输中', value: '0' },
  113. { label: '已签到', value: '1' },
  114. ],
  115. },
  116. },
  117. is_js: {
  118. type: Boolean,
  119. maxLength: 200,
  120. default: false,
  121. field: {
  122. label: '结算状态',
  123. filter: 'select',
  124. type: 'radio',
  125. format: (i => (i ? '已结算' : '未结算')).toString(),
  126. list: [
  127. { label: '未结算', value: false },
  128. { label: '已结算', value: true },
  129. ],
  130. },
  131. },
  132. };
  133. const schema = new Schema(transport, { toJSON: { virtuals: true } });
  134. schema.index({ id: 1 });
  135. schema.index({ no: 1 });
  136. schema.index({ supply_type: 1 });
  137. schema.index({ supplier: 1 });
  138. schema.index({ goods: 1 });
  139. schema.index({ sign_time: 1 });
  140. schema.index({ out_bill: 1 });
  141. schema.index({ remark: 1 });
  142. schema.index({ status: 1 });
  143. schema.plugin(metaPlugin);
  144. module.exports = app => {
  145. const { mongoose } = app;
  146. return mongoose.model('Transport', schema, 'transport');
  147. };