diff --git a/code/VideoAccess-VCMP/api/app/lib/controllers/camera/index.js b/code/VideoAccess-VCMP/api/app/lib/controllers/camera/index.js new file mode 100644 index 0000000..3270e82 --- /dev/null +++ b/code/VideoAccess-VCMP/api/app/lib/controllers/camera/index.js @@ -0,0 +1,45 @@ +'use strict'; + +async function get (ctx, next) { + try { + const models = ctx.fs.dc.models; + const { limit, page, orderBy, orderDirection } = ctx.query + const { userId } = ctx.fs.api + + let findOption = { + attributes: { exclude: ['delete', 'recycleTime',] }, + where: { + createUserId: userId, + recycleTime: null, + delete: false + }, + order: [ + [orderBy || 'id', orderDirection || 'DESC'] + ], + include: [{ + model: models.CameraAbility + }, { + model: models.CameraKind + }] + } + if (limit) { + findOption.limit = limit + } + if (page && limit) { + findOption.offset = page * limit + } + + const cameraRes = await models.Camera.findAll(findOption) + + ctx.status = 200; + ctx.body = cameraRes + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = {} + } +} + +module.exports = { + get, +}; \ No newline at end of file diff --git a/code/VideoAccess-VCMP/api/app/lib/models/camera.js b/code/VideoAccess-VCMP/api/app/lib/models/camera.js index 233e2e4..cbdcedb 100644 --- a/code/VideoAccess-VCMP/api/app/lib/models/camera.js +++ b/code/VideoAccess-VCMP/api/app/lib/models/camera.js @@ -2,256 +2,265 @@ 'use strict'; module.exports = dc => { - const DataTypes = dc.ORM; - const sequelize = dc.orm; - const Camera = sequelize.define("camera", { - id: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: true, - field: "id", - autoIncrement: true, - unique: "camera_id_uindex" - }, - type: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: null, - comment: "设备类型:yingshi - 萤石;nvr - NVR摄像头;ipc - IPC 网络摄像头;cascade - 级联摄像头", - primaryKey: false, - field: "type", - autoIncrement: false - }, - name: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "设备名称/安装位置", - primaryKey: false, - field: "name", - autoIncrement: false - }, - channelName: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "通道名称", - primaryKey: false, - field: "channel_name", - autoIncrement: false - }, - externalDomain: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "外域名称", - primaryKey: false, - field: "external_domain", - autoIncrement: false - }, - rtmp: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "rtmp", - autoIncrement: false - }, - serialNo: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "设备编号", - primaryKey: false, - field: "serial_no", - autoIncrement: false - }, - cloudControl: { - type: DataTypes.BOOLEAN, - allowNull: true, - defaultValue: null, - comment: "云台控制", - primaryKey: false, - field: "cloud_control", - autoIncrement: false - }, - highDefinition: { - type: DataTypes.BOOLEAN, - allowNull: true, - defaultValue: null, - comment: "高清支持", - primaryKey: false, - field: "high_definition", - autoIncrement: false - }, - voice: { - type: DataTypes.BOOLEAN, - allowNull: true, - defaultValue: null, - comment: "语音对讲支持", - primaryKey: false, - field: "voice", - autoIncrement: false - }, - memoryCard: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "内存卡容量", - primaryKey: false, - field: "memory_card", - autoIncrement: false - }, - venderId: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: "设备厂商id", - primaryKey: false, - field: "vender_id", - autoIncrement: false, - references: { - key: "id", - model: "vender" + const DataTypes = dc.ORM; + const sequelize = dc.orm; + const Camera = sequelize.define("camera", { + id: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: null, + comment: null, + primaryKey: true, + field: "id", + autoIncrement: true, + unique: "camera_id_uindex" + }, + type: { + type: DataTypes.STRING, + allowNull: false, + defaultValue: null, + comment: "设备类型:yingshi - 萤石;nvr - NVR摄像头;ipc - IPC 网络摄像头;cascade - 级联摄像头", + primaryKey: false, + field: "type", + autoIncrement: false + }, + name: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "设备名称/安装位置", + primaryKey: false, + field: "name", + autoIncrement: false + }, + channelName: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "通道名称", + primaryKey: false, + field: "channel_name", + autoIncrement: false + }, + externalDomain: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "外域名称", + primaryKey: false, + field: "external_domain", + autoIncrement: false + }, + rtmp: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: null, + primaryKey: false, + field: "rtmp", + autoIncrement: false + }, + serialNo: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "设备编号", + primaryKey: false, + field: "serial_no", + autoIncrement: false + }, + cloudControl: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: null, + comment: "云台控制", + primaryKey: false, + field: "cloud_control", + autoIncrement: false + }, + highDefinition: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: null, + comment: "高清支持", + primaryKey: false, + field: "high_definition", + autoIncrement: false + }, + voice: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: null, + comment: "语音对讲支持", + primaryKey: false, + field: "voice", + autoIncrement: false + }, + memoryCard: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "内存卡容量", + primaryKey: false, + field: "memory_card", + autoIncrement: false + }, + venderId: { + type: DataTypes.INTEGER, + allowNull: true, + defaultValue: null, + comment: "设备厂商id", + primaryKey: false, + field: "vender_id", + autoIncrement: false, + references: { + key: "id", + model: "vender" + } + }, + cascadeType: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "级联方式:up - 上级联;down - 下级联", + primaryKey: false, + field: "cascade_type", + autoIncrement: false + }, + sip: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: null, + primaryKey: false, + field: "sip", + autoIncrement: false + }, + longitude: { + type: DataTypes.DOUBLE, + allowNull: true, + defaultValue: null, + comment: "经度", + primaryKey: false, + field: "longitude", + autoIncrement: false + }, + latitude: { + type: DataTypes.DOUBLE, + allowNull: true, + defaultValue: null, + comment: "维度", + primaryKey: false, + field: "latitude", + autoIncrement: false + }, + forbidden: { + type: DataTypes.BOOLEAN, + allowNull: false, + defaultValue: null, + comment: "是否禁用", + primaryKey: false, + field: "forbidden", + autoIncrement: false + }, + createTime: { + type: DataTypes.DATE, + allowNull: false, + defaultValue: null, + comment: null, + primaryKey: false, + field: "create_time", + autoIncrement: false + }, + recycleTime: { + type: DataTypes.DATE, + allowNull: true, + defaultValue: null, + comment: "放入回收站时间", + primaryKey: false, + field: "recycle_time", + autoIncrement: false + }, + delete: { + type: DataTypes.BOOLEAN, + allowNull: false, + defaultValue: null, + comment: "是否彻底删除", + primaryKey: false, + field: "delete", + autoIncrement: false + }, + createUserId: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: null, + comment: null, + primaryKey: false, + field: "create_user_id", + autoIncrement: false + }, + nvrId: { + type: DataTypes.INTEGER, + allowNull: true, + defaultValue: null, + comment: null, + primaryKey: false, + field: "nvr_id", + autoIncrement: false, + references: { + key: "id", + model: "nvr" + } + }, + model: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + comment: "型号", + primaryKey: false, + field: "model", + autoIncrement: false + }, + kindId: { + type: DataTypes.INTEGER, + allowNull: true, + defaultValue: null, + comment: null, + primaryKey: false, + field: "kind_id", + autoIncrement: false, + references: { + key: "id", + model: "cameraKind" + } + }, + abilityId: { + type: DataTypes.INTEGER, + allowNull: true, + defaultValue: null, + comment: null, + primaryKey: false, + field: "ability_id", + autoIncrement: false, + references: { + key: "id", + model: "cameraAbility" + } } - }, - cascadeType: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "级联方式:up - 上级联;down - 下级联", - primaryKey: false, - field: "cascade_type", - autoIncrement: false - }, - sip: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "sip", - autoIncrement: false - }, - longitude: { - type: DataTypes.DOUBLE, - allowNull: true, - defaultValue: null, - comment: "经度", - primaryKey: false, - field: "longitude", - autoIncrement: false - }, - latitude: { - type: DataTypes.DOUBLE, - allowNull: true, - defaultValue: null, - comment: "维度", - primaryKey: false, - field: "latitude", - autoIncrement: false - }, - forbidden: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: null, - comment: "是否禁用", - primaryKey: false, - field: "forbidden", - autoIncrement: false - }, - createTime: { - type: DataTypes.DATE, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "create_time", - autoIncrement: false - }, - recycleTime: { - type: DataTypes.DATE, - allowNull: true, - defaultValue: null, - comment: "放入回收站时间", - primaryKey: false, - field: "recycle_time", - autoIncrement: false - }, - delete: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: null, - comment: "是否彻底删除", - primaryKey: false, - field: "delete", - autoIncrement: false - }, - createUserId: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: null, - comment: null, - primaryKey: false, - field: "create_user_id", - autoIncrement: false - }, - nvrId: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "nvr_id", - autoIncrement: false, - references: { - key: "id", - model: "nvr" - } - }, - model: { - type: DataTypes.STRING, - allowNull: true, - defaultValue: null, - comment: "型号", - primaryKey: false, - field: "model", - autoIncrement: false - }, - kindId: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "kind_id", - autoIncrement: false, - references: { - key: "id", - model: "cameraKind" - } - }, - abilityId: { - type: DataTypes.INTEGER, - allowNull: true, - defaultValue: null, - comment: null, - primaryKey: false, - field: "ability_id", - autoIncrement: false, - references: { - key: "id", - model: "cameraAbility" - } - } - }, { - tableName: "camera", - comment: "", - indexes: [] - }); - dc.models.Camera = Camera; - return Camera; + }, { + tableName: "camera", + comment: "", + indexes: [] + }); + dc.models.Camera = Camera; + + const CameraKind = dc.models.CameraKind; + Camera.belongsTo(CameraKind, { foreignKey: 'kindId', targetKey: 'id' }); + CameraKind.hasMany(Camera, { foreignKey: 'kindId', sourceKey: 'id' }); + + const CameraAbility = dc.models.CameraAbility; + Camera.belongsTo(CameraAbility, { foreignKey: 'abilityId', targetKey: 'id' }); + CameraAbility.hasMany(Camera, { foreignKey: 'abilityId', sourceKey: 'id' }); + + return Camera; }; \ No newline at end of file diff --git a/code/VideoAccess-VCMP/api/app/lib/routes/camera/index.js b/code/VideoAccess-VCMP/api/app/lib/routes/camera/index.js new file mode 100644 index 0000000..fa97a76 --- /dev/null +++ b/code/VideoAccess-VCMP/api/app/lib/routes/camera/index.js @@ -0,0 +1,8 @@ +'use strict'; + +const camera = require('../../controllers/camera'); + +module.exports = function (app, router, opts) { + app.fs.api.logAttr['GET/camera'] = { content: '获取摄像头列表', visible: false }; + router.get('/camera', camera.get); +}; diff --git a/code/VideoAccess-VCMP/web/webpack.config.js b/code/VideoAccess-VCMP/web/webpack.config.js index 970509e..bb23307 100644 --- a/code/VideoAccess-VCMP/web/webpack.config.js +++ b/code/VideoAccess-VCMP/web/webpack.config.js @@ -3,65 +3,67 @@ const webpack = require('webpack'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const PATHS = { - app: path.join(__dirname, 'client/src'), - build: path.join(__dirname, 'client/build') + app: path.join(__dirname, 'client/src'), + build: path.join(__dirname, 'client/build') }; module.exports = { - mode: "development", - devtool: 'source-map', - devServer: { - historyApiFallback: true, - }, - entry: { - app: ["@babel/polyfill", PATHS.app] - }, - output: { - publicPath: '/client/build/', - path: PATHS.build, - filename: '[name].js' - }, - resolve: { - modules: [path.resolve(__dirname, 'client/src'), path.resolve(__dirname, 'node_modules')], - extensions: ['.js', '.jsx'], - alias: { - crypto: false, - $utils: path.resolve(__dirname, 'client/src/utils/'), - $components: path.resolve(__dirname, 'client/src/components/'), - } - }, - plugins: [ - new webpack.HotModuleReplacementPlugin(), - new BundleAnalyzerPlugin(), - ], - module: { - rules: [{ - test: /\.css$/, - use: ['style-loader', { - loader: 'css-loader', - options: { - modules: true - } - }] - }, - { - test: /\.less$/, - use: ['style-loader', 'css-loader', { - loader: 'less-loader', - options: { - lessOptions: { - javascriptEnabled: true - } - } - }] - }, - { - test: /\.(js|jsx)$/, - use: 'babel-loader', - include: [PATHS.app, path.resolve(__dirname, 'node_modules', '@peace')], - }, { - test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/, - loader: "file-loader" - }] - } + mode: "development", + devtool: 'source-map', + devServer: { + historyApiFallback: true, + }, + entry: { + app: ["@babel/polyfill", PATHS.app] + }, + output: { + publicPath: '/client/build/', + path: PATHS.build, + filename: '[name].js' + }, + resolve: { + modules: [path.resolve(__dirname, 'client/src'), path.resolve(__dirname, 'node_modules')], + extensions: ['.js', '.jsx'], + alias: { + crypto: false, + $utils: path.resolve(__dirname, 'client/src/utils/'), + $components: path.resolve(__dirname, 'client/src/components/'), + } + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new BundleAnalyzerPlugin(), + ], + module: { + rules: [{ + test: /\.css$/, + use: ['style-loader', { + loader: 'css-loader', + options: { + modules: true + } + }] + }, + { + test: /\.less$/, + use: ['style-loader', 'css-loader', { + loader: 'less-loader', + options: { + lessOptions: { + javascriptEnabled: true + } + } + }] + }, + { + test: /\.(js|jsx)$/, + use: 'babel-loader', + include: [PATHS.app, path.resolve(__dirname, 'node_modules', '@peace')], + }, + { + test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/, + loader: "file-loader" + } + ] + } }; \ No newline at end of file