transport.js 4.3 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 out_bill = new Schema({
  20. item: { type: String, maxlength: 200 }, // 支出项
  21. money: { type: Number, maxLength: 200 }, // 金额
  22. opera: { type: String, maxLength: 200 }, // 操作人
  23. remark: { type: String, maxlength: 200 }, // 备注
  24. });
  25. // 运输方信息
  26. const supplier = new Schema({
  27. car_no: { type: String, maxlength: 200 }, // 车牌号,0/2使用
  28. client: { type: String, maxlength: 200 }, // 供应商
  29. treaty: { type: String, maxlength: 200 }, // 合同
  30. item: { type: String, maxlength: 200 }, // 项目
  31. route: { type: String, maxlength: 200 }, // 线路
  32. mode: { type: String, maxlength: 200 }, // 计费方式
  33. taxes: { type: String, maxLength: 200 }, // 税率
  34. });
  35. // 运输信息
  36. const transport = {
  37. no: {
  38. type: String,
  39. required: true,
  40. field: { label: '运输单号' },
  41. },
  42. owner: {
  43. type: String,
  44. required: true,
  45. maxLength: 200,
  46. field: { label: '运输单负责人', remark: '谁装的车就是谁' },
  47. },
  48. supply_type: {
  49. type: String,
  50. required: true,
  51. field: {
  52. label: '运输单位类型',
  53. list: [
  54. { label: '自运', value: '0' },
  55. { label: '供应商', value: '1' },
  56. { label: '第三方单位', value: '2' },
  57. ],
  58. },
  59. },
  60. supplier: {
  61. type: supplier,
  62. required: true,
  63. maxLength: 200,
  64. field: {
  65. label: '运输单位信息',
  66. remark: `0=>这里就是车牌号
  67. 1=>这里就是供应商至计费方式的信息
  68. 2=>这里就是 个体(车号) 等一次性单位
  69. `,
  70. },
  71. },
  72. goods: {
  73. type: [ goodsList ],
  74. field: { label: '货物列表' },
  75. },
  76. send_time: {
  77. type: String,
  78. field: { label: '发出时间' },
  79. },
  80. sign_time: {
  81. type: String,
  82. field: { label: '签收时间' },
  83. },
  84. route: {
  85. type: String,
  86. required: true,
  87. field: { label: '线路' },
  88. },
  89. out_bill: {
  90. type: Array,
  91. maxLength: 200,
  92. default: () => [],
  93. field: { label: '运输支出单据' },
  94. },
  95. remark: {
  96. type: String,
  97. required: false,
  98. maxLength: 200,
  99. field: {
  100. label: '备注',
  101. type: 'textarea',
  102. options: { autosize: { minRows: 3, maxRows: 5 } },
  103. },
  104. },
  105. status: {
  106. type: String,
  107. maxLength: 200,
  108. default: '0',
  109. field: {
  110. label: '状态',
  111. filter: 'select',
  112. type: 'radio',
  113. format: (i => (i === '0' ? '运输中' : '已签到')).toString(),
  114. list: [
  115. { label: '运输中', value: '0' },
  116. { label: '已签到', value: '1' },
  117. ],
  118. },
  119. },
  120. is_js: {
  121. type: Boolean,
  122. maxLength: 200,
  123. default: false,
  124. field: {
  125. label: '结算状态',
  126. filter: 'select',
  127. type: 'radio',
  128. format: (i => (i ? '已结算' : '未结算')).toString(),
  129. list: [
  130. { label: '未结算', value: false },
  131. { label: '已结算', value: true },
  132. ],
  133. },
  134. },
  135. create_time: { type: String, default: moment().format('YYYY-MM-DD HH:mm:ss') },
  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. };