'use strict'; const moment = require('moment'); const Schema = require('mongoose').Schema; const metaPlugin = require('naf-framework-mongoose/lib/model/meta-plugin'); // 货物列表 const goodsList = new Schema({ name: { type: String, maxlength: 200 }, // 货物名称 number: { type: Number, maxLength: 200 }, // 数量 weight: { type: Number, maxLength: 200 }, // 重量 volume: { type: Number, maxLength: 200 }, // 体积 taxes: { type: String, maxLength: 200 }, // 税率 sq_ys: { type: Number, maxLength: 200 }, // 税前应收 sq_ss: { type: Number, maxLength: 200 }, // 税前实收 sh_ys: { type: Number, maxLength: 200 }, // 税后应收 sh_ss: { type: Number, maxLength: 200 }, // 税后实收 split_id: { type: String, maxLength: 200, required: true }, // 拆分的货物id }); // 运输支出(单车,单趟) const bill = new Schema({ item: { type: String, maxlength: 200 }, // 支出项 taxes: { type: String, maxLength: 200 }, // 税率 sq_ys: { type: Number, maxLength: 200 }, // 税前应收 sq_ss: { type: Number, maxLength: 200 }, // 税前实收 sh_ys: { type: Number, maxLength: 200 }, // 税后应收 sh_ss: { type: Number, maxLength: 200 }, // 税后实收 }); // 运输方信息 const supplier = new Schema({ car_no: { type: String, maxlength: 200 }, // 车牌号,0/2使用 client: { type: String, maxlength: 200 }, // 客户 treaty: { type: String, maxlength: 200 }, // 合同 item: { type: String, maxlength: 200 }, // 项目 route: { type: String, maxlength: 200 }, // 线路 mode: { type: String, maxlength: 200 }, // 计费方式 taxes: { type: String, maxLength: 200 }, // 税率 }); // 运输信息 const transport = { no: { type: String, required: true, field: { label: '运输单号' }, }, owner: { type: String, required: true, maxLength: 200, field: { label: '运输单负责人', remark: '谁装的车就是谁' }, }, supply_type: { type: String, required: true, field: { label: '运输单位类型', list: [ { label: '自运', value: '0' }, { label: '供应商', value: '1' }, { label: '第三方单位', value: '2' }, ], }, }, supplier: { type: supplier, required: true, maxLength: 200, field: { label: '运输单位信息', remark: `0=>这里就是车牌号 1=>这里就是供应商至计费方式的信息 2=>这里就是 个体(车号) 等一次性单位 `, }, }, goods: { type: [ goodsList ], field: { label: '货物列表' }, }, sign_time: { type: String, field: { label: '签收时间' }, }, route: { type: String, required: true, field: { label: '线路' }, }, out_bill: { type: [ bill ], maxLength: 200, field: { label: '运输支出单据' }, }, remark: { type: String, required: false, maxLength: 200, field: { label: '备注', type: 'textarea', options: { autosize: { minRows: 3, maxRows: 5 } }, }, }, status: { type: String, maxLength: 200, default: '0', field: { label: '状态', filter: 'select', type: 'radio', format: (i => (i === '0' ? '运输中' : '已签到')).toString(), list: [ { label: '运输中', value: '0' }, { label: '已签到', value: '1' }, ], }, }, is_js: { type: Boolean, maxLength: 200, default: false, field: { label: '结算状态', filter: 'select', type: 'radio', format: (i => (i ? '已结算' : '未结算')).toString(), list: [ { label: '未结算', value: false }, { label: '已结算', value: true }, ], }, }, }; const schema = new Schema(transport, { toJSON: { virtuals: true } }); schema.index({ id: 1 }); schema.index({ no: 1 }); schema.index({ supply_type: 1 }); schema.index({ supplier: 1 }); schema.index({ goods: 1 }); schema.index({ sign_time: 1 }); schema.index({ out_bill: 1 }); schema.index({ remark: 1 }); schema.index({ status: 1 }); schema.plugin(metaPlugin); module.exports = app => { const { mongoose } = app; return mongoose.model('Transport', schema, 'transport'); };