diff --git a/packages/plugins/@hera/plugin-rental/src/server/collections/transfer-orders.ts b/packages/plugins/@hera/plugin-rental/src/server/collections/transfer-orders.ts new file mode 100644 index 000000000..4d53ee51d --- /dev/null +++ b/packages/plugins/@hera/plugin-rental/src/server/collections/transfer-orders.ts @@ -0,0 +1,1007 @@ +import { defineCollection } from '@nocobase/database'; + +export default defineCollection({ + dumpRules: 'required', + name: 'transfer_orders', + title: '调拨单', + fields: [ + { + name: 'id', + type: 'bigInt', + interface: 'id', + parentKey: null, + reverseKey: null, + autoIncrement: true, + primaryKey: true, + allowNull: false, + uiSchema: { + type: 'number', + title: '{{t("ID")}}', + 'x-component': 'InputNumber', + 'x-read-pretty': true, + }, + }, + { + name: 'in_stock_id', + type: 'bigInt', + interface: 'integer', + description: null, + parentKey: null, + reverseKey: null, + isForeignKey: true, + uiSchema: { + type: 'number', + title: 'in_stock_id', + 'x-component': 'InputNumber', + 'x-read-pretty': true, + }, + }, + { + name: 'out_stock_id', + type: 'bigInt', + interface: 'integer', + description: null, + parentKey: null, + reverseKey: null, + isForeignKey: true, + uiSchema: { + type: 'number', + title: 'out_stock_id', + 'x-component': 'InputNumber', + 'x-read-pretty': true, + }, + }, + { + name: 'createdAt', + type: 'date', + interface: 'createdAt', + description: null, + parentKey: null, + reverseKey: null, + field: 'createdAt', + uiSchema: { + type: 'datetime', + title: '{{t("Created at")}}', + 'x-component': 'DatePicker', + 'x-component-props': {}, + 'x-read-pretty': true, + }, + }, + { + name: 'createdBy', + type: 'belongsTo', + interface: 'createdBy', + description: null, + parentKey: null, + reverseKey: null, + target: 'users', + foreignKey: 'createdById', + uiSchema: { + type: 'object', + title: '{{t("Created by")}}', + 'x-component': 'AssociationField', + 'x-component-props': { + fieldNames: { + value: 'id', + label: 'nickname', + }, + }, + 'x-read-pretty': true, + }, + targetKey: 'id', + }, + { + name: 'updatedAt', + type: 'date', + interface: 'updatedAt', + description: null, + parentKey: null, + reverseKey: null, + field: 'updatedAt', + uiSchema: { + type: 'string', + title: '{{t("Last updated at")}}', + 'x-component': 'DatePicker', + 'x-component-props': {}, + 'x-read-pretty': true, + }, + }, + { + name: 'updatedBy', + type: 'belongsTo', + interface: 'updatedBy', + description: null, + parentKey: null, + reverseKey: null, + target: 'users', + foreignKey: 'updatedById', + uiSchema: { + type: 'object', + title: '{{t("Last updated by")}}', + 'x-component': 'AssociationField', + 'x-component-props': { + fieldNames: { + value: 'id', + label: 'nickname', + }, + }, + 'x-read-pretty': true, + }, + targetKey: 'id', + }, + { + name: 'date', + type: 'date', + interface: 'datetime', + description: null, + parentKey: null, + reverseKey: null, + uiSchema: { + 'x-component-props': { + dateFormat: 'YYYY-MM-DD', + gmt: false, + showTime: false, + }, + type: 'string', + 'x-component': 'DatePicker', + title: '日期', + }, + defaultValue: null, + }, + // { + // key: 'ldm77b3632h', + // name: 'items', + // type: 'hasMany', + // interface: 'o2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'record_id', + // onDelete: 'CASCADE', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '明细', + // }, + // target: 'record_items', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: '2j1xf8umz9x', + // name: 'contract', + // type: 'belongsTo', + // interface: 'm2o', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'contract_id', + // onDelete: 'SET NULL', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '合同', + // }, + // target: 'contracts', + // targetKey: 'id', + // }, + // { + // key: 'cml8kqtzhii', + // name: 'number', + // type: 'sequence', + // interface: 'sequence', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // patterns: [ + // { + // type: 'integer', + // options: { + // digits: 6, + // start: 220161, + // key: 49879, + // }, + // }, + // ], + // uiSchema: { + // type: 'string', + // 'x-component': 'Input', + // 'x-component-props': {}, + // title: '单号', + // }, + // unique: true, + // inputable: true, + // match: false, + // }, + // { + // key: '0mkllhb86rc', + // name: 'out_stock', + // type: 'belongsTo', + // interface: 'm2o', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'out_stock_id', + // onDelete: 'RESTRICT', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '出库', + // }, + // target: 'project', + // targetKey: 'id', + // }, + // { + // key: 'q8dy3q5o7r3', + // name: 'in_stock', + // type: 'belongsTo', + // interface: 'm2o', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'in_stock_id', + // onDelete: 'RESTRICT', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '入库', + // }, + // target: 'project', + // targetKey: 'id', + // }, + // { + // key: 'ea03bu06jls', + // name: 'movement', + // type: 'string', + // interface: 'radioGroup', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // enum: [ + // { + // value: '1', + // label: '入库', + // }, + // { + // value: '-1', + // label: '出库', + // }, + // ], + // type: 'string', + // 'x-component': 'Radio.Group', + // title: '出入库', + // }, + // }, + // { + // key: 'mkc12sd41wg', + // name: 'original_number', + // type: 'string', + // interface: 'input', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'string', + // 'x-component': 'Input', + // title: '原始单号', + // }, + // }, + // { + // key: 'hy4ydt534ft', + // name: 'category', + // type: 'string', + // interface: 'select', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // enum: [ + // { + // value: '0', + // label: '租赁', + // color: 'default', + // }, + // { + // value: '1', + // label: '购销', + // color: 'orange', + // }, + // { + // value: '2', + // label: '暂存', + // color: 'lime', + // }, + // { + // value: '3', + // label: '盘点', + // color: 'blue', + // }, + // { + // value: '4', + // label: '采购直发', + // color: 'volcano', + // }, + // { + // value: '5', + // label: '租赁直发', + // color: 'geekblue', + // }, + // ], + // type: 'string', + // 'x-component': 'Select', + // title: '类型', + // }, + // }, + // { + // key: 'bvwwt3et43u', + // name: 'weight', + // type: 'double', + // interface: 'number', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // 'x-component-props': { + // step: '0.001', + // stringMode: true, + // }, + // type: 'number', + // 'x-component': 'InputNumber', + // title: '实际重量(吨)', + // }, + // }, + // { + // key: 'g437js8r7sz', + // name: 'comment', + // type: 'text', + // interface: 'textarea', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'string', + // 'x-component': 'Input.TextArea', + // title: '备注', + // }, + // }, + // { + // key: 'ji7s6ldo4vy', + // name: 'has_receipt', + // type: 'boolean', + // interface: 'checkbox', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'boolean', + // 'x-component': 'Checkbox', + // title: '回单联', + // 'x-component-props': { + // showUnchecked: true, + // }, + // }, + // }, + // { + // key: 'mnoekrocktk', + // name: 'has_stub', + // type: 'boolean', + // interface: 'checkbox', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'boolean', + // 'x-component': 'Checkbox', + // title: '存根联', + // 'x-component-props': { + // showUnchecked: true, + // }, + // }, + // }, + // { + // key: 'nv9g1q5l2c3', + // name: 'record_fee_items', + // type: 'hasMany', + // interface: 'o2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'record_id', + // onDelete: 'CASCADE', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '维修赔偿', + // }, + // target: 'record_fee_items', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: '70etku0lih0', + // name: 'price_items', + // type: 'hasMany', + // interface: 'o2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'record_id', + // onDelete: 'CASCADE', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '报价', + // }, + // target: 'lease_rules', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: 'tyiovb2lr9j', + // name: 'waybill', + // type: 'hasOne', + // interface: 'oho', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: 'xhtitznvoz8', + // foreignKey: 'record_id', + // onDelete: 'CASCADE', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '运输单', + // }, + // target: 'waybills', + // sourceKey: 'id', + // }, + // { + // key: '47l0fvsioht', + // name: 'vehicles', + // type: 'belongsToMany', + // interface: 'm2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: 'nfe3ol53h83', + // foreignKey: 'record_id', + // otherKey: 'vehicle_id', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '车辆', + // }, + // target: 'vehicles', + // through: 'record_vehicles', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: 'qxoncpeuum6', + // name: 'attrs', + // type: 'array', + // interface: 'multipleSelect', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // enum: [ + // { + // value: '0', + // label: '自提', + // }, + // { + // value: '1', + // label: '自送', + // }, + // { + // value: '2', + // label: '转单', + // }, + // { + // value: '3', + // label: '叉车', + // }, + // ], + // type: 'array', + // 'x-component': 'Select', + // 'x-component-props': { + // mode: 'multiple', + // }, + // title: '属性', + // }, + // defaultValue: [], + // }, + // { + // key: 'bm8di52tvx3', + // name: 'summarize', + // type: 'virtual', + // interface: 'calc2', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // dataType: 'jsCode', + // uiSchema: { + // 'x-component-props': { + // prefix: '', + // suffix: '', + // panel: + // "let total = 0;\n let allWeight = 0;\n const products = {};\n for (let i = 0; i < form.values.items.length; i++) {\n const item = form.values.items[i];\n // 计算 合计金额\n const count = item?.count || 0 ;\n const unitPrice = item?.unit_price || 0;\n // 换算数量\n let scale = 1;\n if (item && item.product && item.product?.ratio) {\n scale = item.product?.ratio;\n }\n total += count * scale * unitPrice;\n // 计算 理论重量\n let weight = 1;\n if (item && item.product && item.product?.weight) {\n weight = item.product.weight || 1;\n }\n\n allWeight += weight * count;\n // 计算 产品分类\n if (item && item.product) {\n if (products[item.product.name]) {\n products[item.product.name].count += count * scale;\n } else {\n products[item.product.name] = {\n count: count * scale,\n unit: item.product?.category?.conversion_unit || item.product?.category?.unit || '',\n };\n }\n }\n }\n // 生成产品分类的数据\n const weight = {\n key: '1',\n label: '理论重量',\n children: (allWeight / 1000).toFixed(3)+'吨',\n }\n // const totalPrice = {\n // key: '2',\n // label: '合计',\n // children: '¥' + total.toFixed(2),\n // }\n // ,, totalPrice\n items.push(weight)\n\n if (Object.keys(products).length > 0) {\n for (const key in products) {\n if (Object.prototype.hasOwnProperty.call(products, key)) {\n const value = products[key];\n items.push({\n key: key,\n label: key,\n children: value.count.toFixed(3) + value.unit,\n });\n }\n }\n }", + // }, + // type: 'string', + // 'x-component': 'CalcResult', + // 'x-read-pretty': true, + // title: '小结', + // }, + // }, + // { + // key: 'f8vn55ksnrr', + // name: 'generated_records', + // type: 'hasMany', + // interface: 'o2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: '57w0sab2skk', + // foreignKey: 'direct_record_id', + // onDelete: 'CASCADE', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '生成单', + // }, + // target: 'records', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: '57w0sab2skk', + // name: 'direct_record', + // type: 'belongsTo', + // interface: 'm2o', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: 'f8vn55ksnrr', + // uiSchema: { + // title: '直发单', + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // }, + // target: 'records', + // onDelete: 'CASCADE', + // targetKey: 'id', + // foreignKey: 'direct_record_id', + // sourceKey: 'id', + // }, + // { + // key: 'ogcx63b4zwr', + // name: 'all_price', + // type: 'double', + // interface: 'number', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // 'x-component-props': { + // step: '0.01', + // stringMode: true, + // }, + // type: 'number', + // 'x-component': 'InputNumber', + // title: '总金额', + // }, + // }, + // { + // key: 'v190ir8g24f', + // name: 'group_weight_items', + // type: 'hasMany', + // interface: 'o2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: 'caw2t3x4h8d', + // foreignKey: 'record_id', + // onDelete: 'CASCADE', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '分组重量明细(吨)', + // }, + // target: 'record_group_weight_items', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: 'br0n5rj8gu0', + // name: 'sign', + // type: 'json', + // interface: 'signatureSchema', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'signature', + // 'x-component': 'SignatureInput', + // title: '签名', + // }, + // }, + // { + // key: 'u12unasnh30', + // name: 'record_category', + // type: 'string', + // interface: 'radioGroup', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // enum: [ + // { + // value: '0', + // label: '采购直发', + // color: 'magenta', + // }, + // { + // value: '1', + // label: '租赁直发', + // color: 'purple', + // }, + // { + // value: '2', + // label: '采购入库', + // color: 'orange', + // }, + // { + // value: '3', + // label: '销售出库', + // color: 'orange', + // }, + // { + // value: '4', + // label: '租赁入库', + // color: 'geekblue', + // }, + // { + // value: '5', + // label: '租赁出库', + // color: 'geekblue', + // }, + // { + // value: '6', + // label: '暂存入库', + // color: 'default', + // }, + // { + // value: '7', + // label: '暂存出库', + // color: 'default', + // }, + // { + // value: '8', + // label: '盘点', + // color: 'default', + // }, + // ], + // type: 'string', + // 'x-component': 'Radio.Group', + // title: '记录单类型', + // }, + // }, + // { + // key: '23jztc2ebsj', + // name: 'contract_plan', + // type: 'belongsTo', + // interface: 'associated', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // targetKey: 'id', + // uiSchema: { + // 'x-component': 'AssociatedField', + // title: '合同方案', + // 'x-component-props': { + // collection: 'contract_plans', + // sourceCollection: 'contract_items', + // sourceField: 'contract_plan', + // fieldExp: '{{contract}}', + // dateFieldExp: '{{date}}', + // }, + // }, + // target: 'contract_plans', + // foreignKey: 'f_uwkwva2qof5', + // }, + // { + // key: 'fv1iqjo8k3q', + // name: 'product_scope', + // type: 'virtual', + // interface: 'customAssociated', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // targetKey: 'id', + // uiSchema: { + // 'x-component': 'CustomAssociatedField', + // title: '产品范围', + // 'x-component-props': { + // component: 'RecordProductScope', + // }, + // }, + // target: 'product_category', + // }, + // { + // key: 'vjwyenybw6n', + // name: 'content', + // type: 'virtual', + // interface: 'custom', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'string', + // 'x-component': 'CustomField', + // 'x-read-pretty': true, + // title: '内容', + // 'x-component-props': { + // component: 'RecordDetails', + // }, + // }, + // }, + // { + // key: 'usij5wfudqo', + // name: 'projects', + // type: 'belongsToMany', + // interface: 'm2m', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'record_id', + // otherKey: 'project_id', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: true, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '项目', + // }, + // through: 'record_projects', + // target: 'project', + // targetKey: 'id', + // sourceKey: 'id', + // }, + // { + // key: 'e8zqyibffdg', + // name: 'print_count', + // type: 'bigInt', + // interface: 'integer', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // uiSchema: { + // type: 'number', + // 'x-component': 'InputNumber', + // 'x-component-props': { + // stringMode: true, + // step: '1', + // }, + // 'x-validator': 'integer', + // title: '打印次数', + // }, + // defaultValue: 0, + // }, + // { + // key: 'aacw3d1txhr', + // name: 'in_contract', + // type: 'belongsTo', + // interface: 'm2o', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'in_contract_id', + // onDelete: 'SET NULL', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '入库合同', + // }, + // target: 'contracts', + // targetKey: 'id', + // }, + // { + // key: 'md9nj7w3fj9', + // name: 'out_contract', + // type: 'belongsTo', + // interface: 'm2o', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // foreignKey: 'out_contract_id', + // onDelete: 'SET NULL', + // uiSchema: { + // 'x-component': 'AssociationField', + // 'x-component-props': { + // multiple: false, + // fieldNames: { + // label: 'id', + // value: 'id', + // }, + // }, + // title: '出库合同', + // }, + // target: 'contracts', + // targetKey: 'id', + // }, + // { + // key: 's4a036s0uw5', + // name: 'in_contract_plan', + // type: 'belongsTo', + // interface: 'associated', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // targetKey: 'id', + // uiSchema: { + // 'x-component': 'AssociatedField', + // title: '入库合同方案', + // 'x-component-props': { + // collection: 'contract_plans', + // sourceCollection: 'contract_items', + // fieldExp: '{{in_contract}}', + // dateFieldExp: '{{date}}', + // sourceField: 'contract_plan', + // }, + // }, + // target: 'contract_plans', + // foreignKey: 'f_q33n38ivxtg', + // }, + // { + // key: 'bq98tj92zw4', + // name: 'out_contract_plan', + // type: 'belongsTo', + // interface: 'associated', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // targetKey: 'id', + // uiSchema: { + // 'x-component': 'AssociatedField', + // title: '出库合同方案', + // 'x-component-props': { + // collection: 'contract_plans', + // sourceCollection: 'contract_items', + // sourceField: 'contract_plan', + // fieldExp: '{{out_contract}}', + // dateFieldExp: '{{date}}', + // }, + // }, + // target: 'contract_plans', + // foreignKey: 'f_xfr7qspwhwf', + // }, + // { + // key: 'f7bt1rcjlfw', + // name: 'import', + // type: 'json', + // interface: 'json', + // description: null, + // collectionName: 'records', + // parentKey: null, + // reverseKey: null, + // defaultValue: null, + // uiSchema: { + // type: 'object', + // 'x-component': 'Input.JSON', + // 'x-component-props': { + // autoSize: { + // minRows: 5, + // }, + // }, + // default: null, + // title: '原始导入数据', + // }, + // }, + ], +}); diff --git a/packages/plugins/@hera/plugin-rental/src/server/collections/undetermined-projects.ts b/packages/plugins/@hera/plugin-rental/src/server/collections/undetermined-projects.ts new file mode 100644 index 000000000..bbbead25a --- /dev/null +++ b/packages/plugins/@hera/plugin-rental/src/server/collections/undetermined-projects.ts @@ -0,0 +1,180 @@ +import { defineCollection } from '@nocobase/database'; + +export default defineCollection({ + dumpRules: 'required', + name: 'undetermined_projects', + title: '测算项目', + inherit: false, + hidden: false, + description: null, + fields: [ + { + name: 'parentId', + type: 'bigInt', + interface: 'integer', + description: null, + parentKey: null, + reverseKey: null, + isForeignKey: true, + uiSchema: { + type: 'number', + title: '{{t("Parent ID")}}', + 'x-component': 'InputNumber', + 'x-read-pretty': true, + }, + target: 'undetermined_projects', + }, + { + name: 'parent', + type: 'belongsTo', + interface: 'm2o', + description: null, + parentKey: null, + reverseKey: null, + foreignKey: 'parentId', + treeParent: true, + onDelete: 'CASCADE', + uiSchema: { + title: '{{t("Parent")}}', + 'x-component': 'AssociationField', + 'x-component-props': { + multiple: false, + fieldNames: { + label: 'id', + value: 'id', + }, + }, + }, + target: 'undetermined_projects', + targetKey: 'id', + }, + { + name: 'children', + type: 'hasMany', + interface: 'o2m', + description: null, + parentKey: null, + reverseKey: null, + foreignKey: 'parentId', + treeChildren: true, + onDelete: 'CASCADE', + uiSchema: { + title: '{{t("Children")}}', + 'x-component': 'AssociationField', + 'x-component-props': { + multiple: true, + fieldNames: { + label: 'id', + value: 'id', + }, + }, + }, + target: 'undetermined_projects', + targetKey: 'id', + sourceKey: 'id', + }, + { + name: 'id', + type: 'bigInt', + interface: 'integer', + description: null, + parentKey: null, + reverseKey: null, + autoIncrement: true, + primaryKey: true, + allowNull: false, + uiSchema: { + type: 'number', + title: '{{t("ID")}}', + 'x-component': 'InputNumber', + 'x-read-pretty': true, + }, + target: 'undetermined_projects', + }, + { + name: 'createdAt', + type: 'date', + interface: 'createdAt', + description: null, + parentKey: null, + reverseKey: null, + field: 'createdAt', + uiSchema: { + type: 'datetime', + title: '{{t("Created at")}}', + 'x-component': 'DatePicker', + 'x-component-props': {}, + 'x-read-pretty': true, + }, + target: 'undetermined_projects', + }, + { + name: 'createdBy', + type: 'belongsTo', + interface: 'createdBy', + description: null, + parentKey: null, + reverseKey: null, + target: 'users', + foreignKey: 'createdById', + uiSchema: { + type: 'object', + title: '{{t("Created by")}}', + 'x-component': 'AssociationField', + 'x-component-props': { + fieldNames: { + value: 'id', + label: 'nickname', + }, + }, + 'x-read-pretty': true, + }, + targetKey: 'id', + }, + { + name: 'updatedAt', + type: 'date', + interface: 'updatedAt', + description: null, + parentKey: null, + reverseKey: null, + field: 'updatedAt', + uiSchema: { + type: 'string', + title: '{{t("Last updated at")}}', + 'x-component': 'DatePicker', + 'x-component-props': {}, + 'x-read-pretty': true, + }, + target: 'undetermined_projects', + }, + { + name: 'updatedBy', + type: 'belongsTo', + interface: 'updatedBy', + description: null, + parentKey: null, + reverseKey: null, + target: 'users', + foreignKey: 'updatedById', + uiSchema: { + type: 'object', + title: '{{t("Last updated by")}}', + 'x-component': 'AssociationField', + 'x-component-props': { + fieldNames: { + value: 'id', + label: 'nickname', + }, + }, + 'x-read-pretty': true, + }, + targetKey: 'id', + }, + ], + template: 'tree', + view: false, + tree: 'adjacencyList', + schema: 'public', + filterTargetKey: 'id', +}); diff --git a/packages/plugins/@hera/plugin-rental/src/server/plugin.ts b/packages/plugins/@hera/plugin-rental/src/server/plugin.ts index 7c09d3370..5473366c0 100644 --- a/packages/plugins/@hera/plugin-rental/src/server/plugin.ts +++ b/packages/plugins/@hera/plugin-rental/src/server/plugin.ts @@ -8,6 +8,8 @@ import { Container } from '@nocobase/utils'; import './actions'; import { SqlLoader } from '@hera/plugin-core'; import { DetailCheckService } from './services/detail-check-service'; +import { CollectionRepository } from '@nocobase/plugin-collection-manager'; +import { Repository } from '@nocobase/database'; export class PluginRentalServer extends Plugin { async afterAdd() {} @@ -23,6 +25,39 @@ export class PluginRentalServer extends Plugin { Container.get(ContractService).load(); } + async syncCollections(collectionName: string, categoryNames: string[]) { + const repo = this.db.getRepository('collections'); + await repo.db2cm(collectionName); + const categoriesRepo = this.db.getRepository('collectionCategories'); + const categories = await Promise.all( + categoryNames.map(async (name) => { + return await categoriesRepo.findOne({ + filter: { + name, + }, + }); + }), + ); + const collectionRepo = this.db.getRepository('collectionCategory'); + // 删除之前建立的所有分类 + await collectionRepo.destroy({ + filter: { + collectionName, + }, + }); + + await collectionRepo.createMany({ + records: categories + .filter((item) => typeof item.id !== 'undefined') + .map((item) => ({ collectionName, categoryId: item.id })), + }); + } + + async upgrade() { + await this.syncCollections('transfer_orders', ['测算相关']); + await this.syncCollections('undetermined_projects', ['测算相关']); + } + async install() {} async afterEnable() {}