transport.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. send_time: {
  79. type: String,
  80. field: { label: '发出时间' },
  81. },
  82. sign_time: {
  83. type: String,
  84. field: { label: '签收时间' },
  85. },
  86. route: {
  87. type: String,
  88. required: true,
  89. field: { label: '线路' },
  90. },
  91. out_bill: {
  92. type: [ bill ],
  93. maxLength: 200,
  94. field: { label: '运输支出单据' },
  95. },
  96. remark: {
  97. type: String,
  98. required: false,
  99. maxLength: 200,
  100. field: {
  101. label: '备注',
  102. type: 'textarea',
  103. options: { autosize: { minRows: 3, maxRows: 5 } },
  104. },
  105. },
  106. status: {
  107. type: String,
  108. maxLength: 200,
  109. default: '0',
  110. field: {
  111. label: '状态',
  112. filter: 'select',
  113. type: 'radio',
  114. format: (i => (i === '0' ? '运输中' : '已签到')).toString(),
  115. list: [
  116. { label: '运输中', value: '0' },
  117. { label: '已签到', value: '1' },
  118. ],
  119. },
  120. },
  121. is_js: {
  122. type: Boolean,
  123. maxLength: 200,
  124. default: false,
  125. field: {
  126. label: '结算状态',
  127. filter: 'select',
  128. type: 'radio',
  129. format: (i => (i ? '已结算' : '未结算')).toString(),
  130. list: [
  131. { label: '未结算', value: false },
  132. { label: '已结算', value: true },
  133. ],
  134. },
  135. },
  136. };
  137. const schema = new Schema(transport, { toJSON: { virtuals: true } });
  138. schema.index({ id: 1 });
  139. schema.index({ no: 1 });
  140. schema.index({ supply_type: 1 });
  141. schema.index({ supplier: 1 });
  142. schema.index({ goods: 1 });
  143. schema.index({ sign_time: 1 });
  144. schema.index({ out_bill: 1 });
  145. schema.index({ remark: 1 });
  146. schema.index({ status: 1 });
  147. schema.plugin(metaPlugin);
  148. module.exports = app => {
  149. const { mongoose } = app;
  150. return mongoose.model('Transport', schema, 'transport');
  151. };